前回に引き続き、うきでんポーカー(テキサスホールデム・リミットルール)の評価関数について解説していきたいと思います。
最終回は、ターンとリバーの評価関数についてです。
評価関数とは
評価関数(ひょうかかんすう、英: evaluation function)とは、コンピュータにゲームをプレーさせるソフトウェアを開発する際に使われるプログラミング技術のひとつで、ゲームの局面の状態を静的に評価し数値に変換する関数のこと。
Wikipedia より引用
Wikipedia には上記のように記されており、うきでんポーカーでは、コンピューターに適切なベット額やコール額を伝えるために使用しています。
ターンとリバーの評価関数
基本的には、フロップと似たような評価関数なのですが、前ラウンドの賭け金アップが2ベットからだったのが1ベットからに変わっているため、若干内容が異なります。
まずハンド別に場合分け
まず、ボードの種類(ペアボード、2ギャップボードなど)によって場合分けし、更にその中でできたハンドによって場合分けします。
そこからそれぞれに合った評価関数を呼び出し、ベットラウンドで使用します。
フロップ < ターン < リバー
という感じにラウンドが進むほど増えます。
ボードのカード枚数が増えてくるためです。
フロップ > ターン > リバー
という感じにラウンドが進むほど減ります。
ドローハンドを考慮せずともよくなってくるためです。
フロップ > ターン > リバー
という感じにラウンドが進むほど減ります。
追加カードが減ってベットが単純化するためです。
評価関数の構成
“4主チ” :[800,800,0],
“4主” :[800,800,0],
“4ア2Bチチ” :[800,800,0],
“4ア2Bチ” :[800,800,0],
“4ア2B” :[800,800,0],
“4ア3Bチチ” :[800,800,0],
“4ア3Bチ” :[800,800,0],
“4ア3B” :[800,800,0],
“4ア4Bチチ” :[800,800,0],
“4ア4Bチ” :[800,800,0],
“4ア4B” :[800,800,0],
“4レ無チ” :[800,800,0],
“4レ無” :[800,800,0],
“4レ無PB” :[800,800,0],
“4主無1Bチチ” :[800,800,0],
“4主無1Bチ” :[800,800,0],
“4主無1B” :[800,800,0],
“4主無1BCB” :[800,800,0],
“4主無2Bチチ” :[800,800,0],
“4主無2Bチ” :[800,800,0],
“4主無2B” :[800,800,0],
“4主無3Bチチ” :[800,800,0],
“4主無3Bチ” :[800,800,0],
“4主無3B” :[800,800,0],
“4主無4Bチ3” :[800,800,0],
“4主無4Bチチ” :[800,800,0],
“4主無4Bチ” :[800,800,0],
“4主無4B” :[800,800,0],
“3主チ” :[800,800,0],
“3主” :[800,800,0],
“3ア2Bチ” :[800,800,0],
“3ア2B” :[800,800,0],
“3ア3Bチチ” :[800,800,0],
“3ア3Bチ” :[800,800,0],
“3ア3B” :[800,800,0],
“3ア4Bチチ” :[800,800,0],
“3ア4Bチ” :[800,800,0],
“3ア4B” :[800,800,0],
“3レ無チ” :[800,800,0],
“3レ無” :[800,800,0],
“3レ無PB” :[800,800,0],
“3主無1Bチ” :[800,800,0],
“3主無1B” :[800,800,0],
“3主無1BCB” :[800,800,0],
“3主無2Bチチ” :[800,800,0],
“3主無2Bチ” :[800,800,0],
“3主無2B” :[800,800,0],
“3主無3Bチチ” :[800,800,0],
“3主無3Bチ” :[800,800,0],
“3主無3B” :[800,800,0],
“3主無4Bチチ” :[800,800,0],
“3主無4Bチ2B”:[800,800,0],
“3主無4Bチ3B”:[800,800,0],
“3主無4B” :[800,800,0],
“2主” :[800,800,0],
“2ア2Bチ” :[800,800,0],
“2ア2B” :[800,800,0],
“2ア3Bチ” :[800,800,0],
“2ア3B” :[800,800,0],
“2ア4Bチ” :[800,800,0],
“2ア4B” :[800,800,0],
“2レ無” :[800,800,0],
“2主無1Bチ” :[800,800,0],
“2主無1B” :[800,800,0],
“2主無1BCB” :[800,800,0],
“2主無2Bチ” :[800,800,0],
“2主無2B” :[800,800,0],
“2主無3Bチ” :[800,800,0],
“2主無3B” :[800,800,0],
“2主無4Bチ” :[800,800,0],
“2主無4B” :[800,800,0]
};
各ハンドを上のような連想配列で評価すると分かりやすくなります。
各添字と数字の意味に関してはこのあと説明します。
また、上の数字はモンスター評価の場合ですので、ハンドによって変える必要があります。
左の添字
“4主チ”などの添字は、前回および今回のベットラウンド状況を説明して場合分けしています。
場合分けの要素は以下の通り。
今ラウンド開始時点の残り人数
左端の数字は、今ラウンド開始時点での残り人数を意味します。
- 4 = 4人以上
- 3 = 3人
- 2 = 2人
主導権の状況
前ラウンドで主導権を握ったかどうかは、非常に重要な要素ですので細かく分けます。
- 主 = 1ベット主導権有り
- ア2B = 2ベットアグレッサー主導権有り
- ア3B = 3ベットアグレッサー主導権有り
- ア4B = 4ベットアグレッサー主導権有り
- レ無 = ベットやレイズが無かった
- 主無1B = 1ベットされて主導権無し
- 主無2B = 2ベットされて主導権無し
- 主無3B = 3ベットされて主導権無し
- 主無4B = 4ベットされて主導権無し
今ラウンドのチェック状況
今ラウンドにおいてどこまでチェックで回ったか、また、前ラウンドのレイザーはチェック済みかなどを考慮します。
「チ」が付いてるものは、チェック済みの意味です。
1巡目に無ベットで回ってくるのが最低条件で、その他条件はそれぞれにより異なります。
ポジションベット
一部のポジションベットについては考慮します。
- PB = ベット順が最後の人からベット
- CB = ベット順が最後の人からコンティニュエーションベット
配列左の数字
この金額までベットまたはレイズします。
配列真ん中の数字
追加する金額がこの額までならコールします。
配列右の数字
- 0 の場合
考慮しません。 - 1 ~ 99 の場合
ポットオッズが数字以上あれば、真ん中の数字の1ベット上までコールします。 - 100以上の場合
数字の額までコールします。
個性を付けるかどうか
キャラクター別に評価関数を用意すれば、個性を付けることもできますが、膨大な行数になってしまうため、やめておいた方がいいでしょう。
付けるとしても、味付け程度にとどめておきましょう。
まとめ
前回と内容が少ししか変わらなかったので、一つにまとめた方がよかったかもしれません。
ただ、一例として出した評価関数をフロップとターン以降の二つも出すと、スマホからは見づらいのではないかと思い、分けさせてもらいました。
一連の3記事を合わせて読んで参考にしていただければ幸いに思います。
コメント