今、ポーカーをする時、コンピュータがどんな行動を取れば一番強くなるか考えていますが、うまく計算出来ません・・。
数学的に確率を計算するのが一番なのでしょうけど、この場合、相手のカードや他ものすごい様々な場合わけを計算する必要があり、手計算出来ないので、
実際にシミュレートしてみて、確率を出そうと思いました。
しかしシミュレート結果に不思議な値が出たのでちょっとお聞きしたいと思い、投稿しました。
シミュレートの対象は以下のような状況です。
ポーカーを現在しているとします。
今配られた5枚のカード、何の役もありません。 このとき、
・1枚交換した方がいいのか?
・2枚交換した方がいいのか?
・3枚交換した方がいいのか?
・4枚交換した方がいいのか?
・5枚交換した方がいいのか?
一体どのような行動をしたら一番役になりやすいのか、調べる為シミュレートを行います。
とりあえず、フラッシュになりかけているときは、行動を変える・・などやっていると条件分岐がきりないので、
「ワンペアじゃないとき、ワンペアになる確率」と限定してシミュレートを行います。
添付に書いたプログラムは手札にワンペアがあったら即「役あり」と判定しているので、ワンペア以外にもツーペアやフルハウスなどになっているかもしれませんが、それはよしとします。
すると面白い結果になりました。
100万回シミュレートを行って確率を出しました。
・手札を山に返した時の結果 1枚の交換 [24.7632%] 2枚の交換 [38.2780%] 3枚の交換 [45.4380%] 4枚の交換 [48.8022%] 5枚の交換 [49.2094%] ・手札を山に返さなかったときの結果 1枚の交換 [25.5863%] 2枚の交換 [39.9794%] 3枚の交換 [47.5972%] 4枚の交換 [50.2623%] 5枚の交換 [48.8712%]
このようになりました。
手札を山に返した時、つまり、山に返したカードを引いてしまうかもしれないときと、そうではないときで
何枚交換すればよいのか変わってしまいます。
公式ルールは後者なので、4枚の交換がベストということになるのですが、何故4枚になるのか腑に落ちません・・。
シミュレートのしかたが間違っているんでしょうか?
みなさんご意見お聞かせいただければ光栄ですm(_ _)m
p.s.
ちなみに、「手札を山に返す」時はそのまま。
「手札を山に返さない」時はmain関数内の、「hand_ini関数」を呼んでいる行をコメントアウトすれば出来ます。