私たちのストーリー

ポーカープレイのプログラミングについて

CleanClipping-Recovered-10

つい最近、筆者はワールドシリーズオブポーカーの人工知能(AI)開発に携わる機会がありました。はじめ、これは単純なプロセスになると考えていたのですが、始めてみると思っていたよりずっと複雑なものであることがわかったのです。

AIによって制御されるすべてのゲームには、2つの目的があります。最大の目的は、ゲーマーを惹きつけ、楽しい体験を提供することです。その次に重要な目的は、ターゲットオーディエンスにいる大半のプレイヤーにとって、ある程度チャレンジとなるようプレイさせることです。

「ハンドバリュー」というワードを聞いたことはありますか?ハンドバリューとは、手持ちのハンド(手札)の強さ、相対的な価値を表す32ビット整数のことです。ポーカーにおいては、2組のハンドを比較することによって、どちらが強いのか決めることができます。ハンドバリューは、単純に4ビットのニブルを6つ並べて表すことができ、その中でもっとも重要なニブルがハンドタイプを表します。その他5つのニブルは、そのハンドバリューに対する重要度順にカードのランク(ハンドランク)を表します。

こうなると、手札を承諾(accept)し、ハンドバリューを計算して、戻す(return)ファンクション(function)が必要です。ハンドタイプの認識後、ハンドランクを表すニブルが挿入(insert)されます。ハンドは13ビットの単語4つ(クラブ、ダイヤ、ハート、スペード)から成り立ちます。なお、(13bitの)単語にセットされるビット数や手札として、持っているストレート役の最上位カードなどの8Kテーブルを事前に計算することで、ハンドの査定を迅速化することが可能です。

ハンド査定のもっともシンプルかつ柔軟な方法は、ゲーム進行の模擬を膨大な回数行って、その中で何回勝つかを数えることです。ゲームのシミュレーションを1,000回行って、そのうち423回勝利した場合、それなりの自信を持ってHS(Hand Strength、手札の強さ)は423/1000、または0.423に近いものである、と言うことができます。

0.jpg9155DB1C-85C3-4242-AAC9-48A0A73E84DFLarge