カテゴリー
雑談

最適解と計算可能性

ちょうど一週間前に、「りゅうおうのおしごと」という小説の最新刊が出ました。これは萌えアニメにもなったっぽい感じのものですが、熱い将棋ラノベです。

将棋といえば、奨励会というのが有名で、この「りゅうおうのおしごと」の最新刊もこの奨励会が主な舞台ですが、それは今回はおいときましょう。

この話の中で、コンピュータの指し手が最適だとしても、人間にはできないという話がありました。聞けば、まぁそうだよね、となりますよね、たぶん。

コンピュータはすごい空中戦もできるから、コンピュータ的にはそっちが正解とあっても人間には指しきれない手があるというのはそうだろうな、とは思います。
そういえば、だいぶ昔に読んだぼくが好きなタイラー・コーエンという経済学者の本が、アルティメットチェスをテーマにしていました。これは何を使ってもいいというチェスだったと思います。
(もしかすると人に聞くのとかPCの性能だか予算は制限されてたかも)要はコンピュータに解を計算させて、それを人が選んでもいいということです。

さて、何回かほのかにほのめかしたもので、スリークッションのシミュレーターというのを作ったことがあります。高速に結果を計算できるシミュレーターを作っておけば、あとはランダムに(とはいえ、およそ二つの的玉方向を中心に)球を様々な力勧化と様々な撞点で、手球を数万回打って、およその力加減と撞点と方向を選択しておけば「最適解」に近いものが得られます。

この「最適解」に近いものに対しては、実際にはプレイヤーごとの厚みの精度(例えば60%の確率で横へのずれは0.05度とか)と、力加減と撞点の精度(60%の確率で+-30%以内の誤差)とかを与えて、また100回ランダムにつけば、それぞれの「およその最適解」ごとのショットの難易度が分かりますよね?

これを使えば当てるという点では配置ごとの難易度が分かります。もちろん、上記の話はあと球を考慮していあいので、あと球を考えるならもう少し複雑なアルゴリズムが必要です。

で、このプログラムでいろんな配置の「最適解」を計算させて、上級者に見せると(自分でも感じるけど)ところどころで「それはない」という球になることがあります。スリークッションをやったことがある方はわかると思いますが、どれかの球が半分ずれると全然違う球になることがあります。これがダブルレールやテケのような球ならばわかりやすいのですが、普通の箱球や裏回しのような球でも実は存在すると思ってます。
(シミュレーションの精度が悪いせいというのはあるかもしれないけど、でも。本当にわずかな違いでそこの配置だけ違う「最適解」になるのがある)

これって、コンピュータだから計算できるだけで、人間にとっては0-8までは全部箱球がベストであとは、厚みやひねりや力加減や撞き方で調整となっているのが、コンピュータでは0-3.2、3.4-6.8、7.1-8までは箱球で、3.2-3.4はは空クッション、6.8-7.1は
二重回しがいい、ということです。ただ、そのわずかな差の最適解は人間にはたどりつけないし、そもそも厚みの探し方が微妙だったり。

ただ、実際の局面を考慮すると、人間が球を撞く場合はテーブルコンディションが分からない前提ですが、上記のようなシミュレーションでは結果的にはテーブルコンディションが完全に把握できているという前提になるので、そのあたりにも違いが出てきそうです(一応テーブルコンディションについても少し考えてシミュレーションの仕組みには入れてますが、それは別のお話)

カテゴリー
雑談

シュート率と得失セット数

というわけで、昨日の記事の続きで、5先と7先のシミュレーションをしてみました。

9ボールで、ブレイクのイン率と、ショットのシュート率をそれぞれ変えた時に、先攻(バンキングに勝った側)・後攻(バンキングに負けた側)のプレイヤーがどのような得失セット・勝利数になるかってやつですね。

簡単にするためにシュート率は常に一定として、抜けセーや、周り番のショットは難しいなど考慮してません。また、途中で球を入れることがなく、9番目にボールを落とした方がそのゲームを取れるとしています。

昨日は11先のシミュレーションでしたが、今日は5先、7先です。

ちなみに昨日少し書いていたのですが、例えば双方ブレイクイン率70%、シュート率が60%と55%のプレイヤー同士の場合は、得ゲーム率がどのくらい60:55に近いのかってのが気になっていたところです。

これは、先攻・後攻のプレイヤーが同じ割合で9番を撞く時に、1ショット目でそれぞれが9番を入れる確率の比ですよね。

実際にはシュート率が60%のプレイヤーのほうが9番を撞く可能性が高いですし、相手が外した後にまた入れる可能性もこの比になっていくので、60:55よりも、もう少し開いて70:50といった割合になりそうな直感があります。

5先のデーテからシミュレーション結果を見てみると得セットが4152:3346となります。これは、65:50よりも少し低い比率でしょう。

一方で、シュート率が上がってくるとこの比はもっと大きくなりそうです。ブレイクイン率が70%同士で、シュート率が90%と80%のプレイヤーの場合の得セットは4743:2211となります。シュート率が10%の差ですが得セット数はかなり開きます。ミス率としてみれば1:2です。

また、シュート率が95%と90%では4546と2453です。およそミス率に近いような比率かもしれませんね。

 

カテゴリー
雑談

シュート率

シュート率がセット数やゲーム取得との関係が気になっていたので、簡単なプログラムを作ってシミュレーションしてみました。

難しい条件はおいといて、ルールとしては、こんな感じです。

・9ボールの11セット先取、勝者ブレイク

・ファールやセーフティは考慮しない、シュート率は常に一定。ミスをしたら、相手の番。成功したら、ボールを1つ減らして自分が再びシュートを行う。

・途中のコンビやキャノンでの9番インはない。そのセットの9つめのボールを落とした方がセットを取得して、次のブレイクを行う。

・ブレイクの際のシュート率は通常のシュート率とは異なる値としている。また、ブレイクでインした場合も、ボールを1つ減らして自分の番。

シュート率やブレイクのシュート率のそれぞれの条件で、1000回づつ行います。

気になっていたのは、例えば、ブレイクイン率が双方70%で、シュート率が60%と55%のプレイヤーが戦った場合の取得セット数はどのくらいの比率になるだろう?ということです。この場合、11先の勝利数は690-310で、取得セット数は10010-7969、ブレイクイン率が双方70%で、シュート率が70%と55%では11先の勝利数は932-68で、取得セット数は10826-5573でした。

 

一応、データを載せておきます。また、5先と7先くらいでシミュレーションしてみます:->