こちらを見てください。
PSAメソッド(改)FPSにおけるセンシ調整法としてもっとも知られている PSAメソッドですが、一つの動画が起源となって広まったものと認識しています。
そして、もし私がここで 「その動画で言ってることは間違っている」 と言ったらみんな驚くでしょうか?
この記事では、正しいPSAメソッドのやり方を考えます。
オリジナルのPSAメソッド
オリジナルのPSAメソッドの基本的な考え方は、
- 良さそうなセンシaを適当に一つ決める
- その1.5倍と0.5倍を計算しb,cとする。今、センシが大きい順にb,a,cが手に入った。
- bとcを比べて、より心地よい(feel comfortable)センシを選び、もう片方を消す。例えば、cを選びbを消すとするとa,cが残る。
- これらの平均(a+c)/2を求めてdとして、今、大きい順に3つのセンシa,d,cが手に入った。
- 繰り返す
というものである。
オリジナルのPSAメソッドの誤っている点
オリジナルのPSAメソッドでは、「両端の2値のうちどちらが心地よいか」 という指標によって二分探索を行っているが、ここが誤っている。
まず、心地よいというのは曖昧である。
多くの人が、この心地よいという指標が曖昧で PSAメソッドをうまく実行することが出来なかったはずだ。
例えば、速すぎるように感じる場合と遅すぎるように感じる場合だと どっちを心地よいと判断すべきかがわからない。 あるいは、同じくらい心地よいと思える場合はどうすればよいだろうか? これが私が曖昧だと呼んでいる理由である。
そしてそもそもだが、両端を比較するという考え方自体が 二分探索としては誤っているのだ。
GAA式PSAメソッドのやり方
正しいPSAメソッドのやり方を紹介する。
これをGAA式PSAメソッドと呼ぶことにする。 この方法は正しい二分探索法に基づく。
ここではまず、探索区間という言葉を定義する。 探索区間というのは、自分の求めるセンシはこの値とこの値の間にあると いえる範囲のことである。慣習にならって下限をlb(lower boundの略)、 上限をub(upper bound)と呼ぶことにする。
まず、初期値としてどう考えてもこの範囲には求める センシがあるだろというセンシの範囲を決める。 この幅は、めちゃくちゃ大きくとってもよい。 そのようにしても、最終的に理想的なセンシが求まる(収束するという) ための試行回数には あまり影響がないことが知られているからだ。 オリジナルのように、1.5倍と0.5倍とかいう根拠の怪しい値を使う必要はどこにもない。
そして、一回の探索ごとに、今のlbとubの中間値つまり(lb+ub)/2をmidとして、 そのmidを使ってPSAを行う。
もしそのセンシが速い場合はubをmidにする。 逆に、センシが遅いと感じる場合はlbをmidにする。 これならば、「どちらがより心地よいか」という主観性を排除出来る。 すなわち、そのmidというセンシが速いか遅いか、オーバーシュートするかアンダーシュートするか という客観的な基準によって判断することが出来る。
こうしていくとlbとubがどんどん近づいていくわけだが、 lbとubの差がなくなった時点で、理想的なセンシが求まったことになる。
理解のため、例を示す。
- lb=1, ub=1000という極端な初期値を採用する。
- mid=500でPSAをする。速いな。lb=1, ub=500
- mid=250でPSAをする。遅いな。lb=250, ub=500
- mid=375でPSAをする。遅いな。lb=375, ub=500
- 繰り返す
lbとubが縮まっていくのがわかると思う。 また、例えばステップ3を見ると、250でPSAをして遅いのだから、 250から500の間に良いセンシがあるのは当たり前だろう。
このように、探索区間を「二分」していく点が 二分探索と呼ばれる所以である。
どこで終わるかだが、lbとubが十分に近づいたらやめるでもいいし、 どこかキリのよいmidが得られて、不満がないならばそれを採用してもよい。