使用法
GeneralReversi.exeを実行するとウィンドウが現れます。
ウィンドウの左側が設定項目で右側が表示項目になっています。
-
設定項目
- Start (スタート)
ゲームをスタートします。
また、ゲームがスタートしている状態ではストップします。
ただし、コンピューターが思考中(プログレスバーが進行中)のときは、
思考が完了するまではストップしません。
しかし、コンピューターが思考中のときであっても、以下のリセットは可能です。
- Reset (リセット)
ゲームをリセットします。
- Board Size (ボードサイズ)
ボードサイズを設定します。
用意している選択肢は4から20までですが、2以上の任意の数を設定できます(奇数も可能)。
作者の環境であるFullHDディスプレイではウィンドウを最大化すると
ボードサイズ180まではプレイ可能でした。
大きなディスプレイさえあればこれを超えるボードサイズに対してもプレイ可能です。
注意点として、ボードサイズ1は例外処理で既定のボードサイズである8に変更するようにしているので、
1から始まる数の場合、例えば100の場合は、クリップボードにコピーしてペーストするか、
選択肢から10を選択した状態にしておき、0を加える、などしてください。
- Initial Pattern (初期配置)
交差型(Cross)と平行型(Parallel)の2種類から選択してください。
対称性を考えるとこの2種類で必要十分であることがわかります。
- Black Player (黒プレイヤー)
黒プレイヤー(先手プレイヤー)として以下の選択肢から選択してください。
- Human (人間)
人間のプレイヤーです。
手番になったらボードをクリックすることにより着手できます。
- Random (ランダム)
ランダムに着手するプレイヤーです。
このプレイヤーが依存する設定項目は以下です。
- Random Seed (ランダムシード)
- Random Seed (ランダムシード)
- Monte-Carlo (モンテカルロ)
モンテカルロ木探索を行うプレイヤーです。
モンテカルロ木探索は囲碁業界で革命を起こしたアルゴリズムで、
プレイアウトと呼ばれるランダムプレイヤー同士の対戦を繰り返すことによって
着手を決定するアルゴリズムです[1]。
このプレイヤーが依存する設定項目は以下です。
- Random Seed (ランダムシード)
- Monte-Carlo Iteration (モンテカルロイテレーション)
- Random Seed (ランダムシード)
- Alpha-Beta Transposition (アルファベータ置換)
置換を利用したアルファベータ法を行うプレイヤーです。
アルファベータ法は完全情報ゲームでは基本的なアルゴリズムで、
ゲーム木を設定した深さまで探索し、葉ノードで評価関数を利用して評価を行います。
相手が相手にとって最善の着手を行うという仮定のもとで、
自分が自分にとって最善の着手を行うようにして、
葉ノードの評価値を根ノードに向かって伝搬させていきます。
このアルファベータ法に対して置換を利用するようにするとより効率が良くなります。
つまり、以前に訪問した局面が現れた場合にはその情報を利用します。
このプレイヤーが依存する設定項目は以下です。
- Random Seed (ランダムシード) ※ランダム性をオンにしている場合のみ
- Evaluation Function (評価関数)
- Alpha-Beta Depth (アルファベータ深さ)
- Alpha-Beta Order Threshold (アルファベータ順序閾値)
- Alpha-Beta Transposition Threshold (アルファベータ置換閾値)
- Random Seed (ランダムシード) ※ランダム性をオンにしている場合のみ
- Alpha-Beta MTDf
MTD(f)を行うプレイヤーです。
MTD(f)とは「Memory-enhanced Test Driver with first guess f」の略で、
「Alpha-Beta Transposition」を利用したアルゴリズムです[2]。
評価値の存在範囲を徐々に絞っていくことにより、
最終的に評価値と着手を決定します。
このプレイヤーが依存する設定項目は同上です。
- Iterative-Deepening Transposition (反復深化置換)
深さを1から順に設定した深さまで反復深化させます。
特定の深さでの探索には「Alpha-Beta Transposition」を利用します。
特定の深さでの探索時に、それ以前の深さでの探索の置換を利用することができます。
このプレイヤーが依存する設定項目は以下です。
- Random Seed (ランダムシード) ※ランダム性をオンにしている場合のみ
- Evaluation Function (評価関数)
- Iterative-Deepening Depth (反復深化深さ)
- Iterative-Deepening Order Threshold (反復深化順序閾値)
- Iterative-Deepening Transposition Threshold (反復深化置換閾値)
- Random Seed (ランダムシード) ※ランダム性をオンにしている場合のみ
- Iterative-Deepening MTDf
深さを1から順に設定した深さまで反復深化させます。
特定の深さでの探索には「Alpha-Beta MTDf」を利用します。
特定の深さでの探索時に、それ以前の深さでの探索の置換を利用することができ、
直前の深さでの評価値を初期値として探索することができます。
このプレイヤーが依存する設定項目は同上です。
- Solver Transposition
「Alpha-Beta Transposition」を利用したソルバープレイヤーです。
空マスの数が設定した深さになると完全読みを行います。
それ以前は設定したベースプレイヤーにより着手を行います。
このプレイヤーが依存する設定項目は以下です。
- Random Seed (ランダムシード) ※ランダム性をオンにしている場合のみ
- Solver Base Player (ソルバーベースプレイヤー)
- Solver Depth (ソルバー深さ)
- Solver Order Threshold (ソルバー順序閾値)
- Solver Transposition Threshold (ソルバー置換閾値)
- Random Seed (ランダムシード) ※ランダム性をオンにしている場合のみ
- Solver MTDf
「Alpha-Beta MTDf」を利用したソルバープレイヤーです。
空マスの数が設定した深さになると完全読みを行います。
それ以前は設定したベースプレイヤーにより着手を行います。
このプレイヤーが依存する設定項目は同上です。
- Human (人間)
- White Player (白プレイヤー)
白プレイヤー(後手プレイヤー)として選択肢(同上)から選択してください。
- Last Position (直近の着手位置)
直近の着手位置をピンク色のマスにして表示します。
- Movable Positions (着手可能位置)
着手可能位置を水色のマスにして表示します。
- Pass Message Box (パスメッセージボックス)
パスの際にメッセージボックスを表示します。
- Delay Time [ms] (遅延時間)
手番交替の際に遅延させる時間を設定します。
コンピューター同士の対戦をゆっくり観戦する場合などに利用します。
- History (履歴)
任意のフェーズの局面を表示させることができます。
また、スタートを押すことによりその局面からスタートすることができます。
なお、履歴を一つ戻したり進めたりという操作はマウスで行うよりも、
矢印キーを利用すると便利です(上下キーまたは左右キー)。
- Random Seed (ランダムシード)
乱数の種を変更します。
一番上の選択肢はコンピューターを起動してからの経過時間[ms]であり、
ランダムシードとして利用できます。
以降は1から9までの数が選択肢として用意してあります。
ランダム性を持つプレイヤーは、ランダムシードによって着手が変わります。
逆に言えば、同じランダムシードを設定すれば、着手が再現できます。
- Monte-Carlo Iteration (モンテカルロプレイヤーのイテレーション)
モンテカルロプレイヤーのイテレーション(プレイアウトの回数)です。
大きい値を設定すれば強くなりますが、時間もかかるようになります。
- Evaluation Function (評価関数)
葉ノードの局面を評価する関数です。
- Score (スコア)
石差を評価値として返します。
- Movable (ムーバブル)
着手可能位置数の差を評価値として返します。
- Corner (コーナー)
隅の数の差とムーバブルを考慮した評価値を返します。
- Stable (ステイブル)
重み付きの確定石の数の差とムーバブルを考慮した評価値を返します。
- Score (スコア)
- Alpha-Beta Depth (アルファベータプレイヤーの深さ)
アルファベータ法で探索する深さです。
- Alpha-Beta Order Threshold (アルファベータプレイヤーの順序閾値)
アルファベータ法で着手可能位置の探索の順番を良さそうな手からにする閾値です。
この設定項目を変更してもプレイヤーの強さは変わりませんが、速さが変わります。
まず、この設定項目を深さと同じ値にすると並べ替えを行いません。
次に、この設定項目を深さ-1にすると最初の1手のみ並べ替えを行います。
同様に、この設定項目を深さ-2にすると最初の2手のみ並べ替えを行います。
このように、この設定項目を段々小さくしていくことにより速くなっていきます。
しかし、あるところからは逆に遅くなっていきます。
なので、最も速くなる値は1と深さの間にあります。
調査して最適値がわかったら、その値を設定します。
調査方法としては、ランダムプレイヤーを対戦相手としてプレイ時間を計測するのが良いでしょう。
- Alpha-Beta Transposition Threshold (アルファベータプレイヤーの置換閾値)
アルファベータ法で置換を利用する閾値です。
この設定項目を変更してもプレイヤーの強さは変わりませんが、速さが変わります。
まず、この設定項目を深さと同じ値にすると置換を利用しません。
次に、この設定項目を深さ-1にすると最初の1手のみ置換を利用します。
同様に、この設定項目を深さ-2にすると最初の2手のみ置換を利用します。
このように、この設定項目を段々小さくしていくことにより速くなっていきます。
しかし、あるところからは逆に遅くなっていきます。
なので、最も速くなる値は1と深さの間にあります。
調査して最適値がわかったら、その値を設定します。
調査方法としては、ランダムプレイヤーを対戦相手としてプレイ時間を計測するのが良いでしょう。
- Alpha-Beta Random (アルファベータプレイヤーのランダム性)
アルファベータプレイヤーにランダム性を持たせます。
- Iterative-Deepening Depth (反復深化プレイヤーの深さ)
反復深化法で探索する深さです。
- Iterative-Deepening Order Threshold (反復深化プレイヤーの順序閾値)
反復深化法で着手可能位置の探索の順番を良さそうな手からにする閾値です。
「Alpha-Beta Order Threshold」と同様なのでそちらを参照してください。
- Iterative-Deepening Transposition Threshold (反復深化プレイヤーの置換閾値)
反復深化法で置換を利用する閾値です。
「Alpha-Beta Transposition Threshold」と同様なのでそちらを参照してください。
- Iterative-Deepening Random (反復深化プレイヤーのランダム性)
反復深化プレイヤーにランダム性を持たせます。
- Solver Base Player (ソルバープレイヤーのベースプレイヤー)
ソルバープレイヤーのベースプレイヤーを選択します。
選択した後は、そのプレイヤーの設定項目も設定してください。
- Solver Depth (ソルバープレイヤーの深さ)
ソルバーで探索する深さです。
- Solver Order Threshold (ソルバープレイヤーの順序閾値)
ソルバーで着手可能位置の探索の順番を良さそうな手からにする閾値です。
「Alpha-Beta Order Threshold」と同様なのでそちらを参照してください。
- Solver Transposition Threshold (ソルバープレイヤーの置換閾値)
ソルバーで置換を利用する閾値です。
「Alpha-Beta Transposition Threshold」と同様なのでそちらを参照してください。
- Solver Random (ソルバープレイヤーのランダム性)
ソルバープレイヤーにランダム性を持たせます。
- Clear Memory (メモリークリア)
現在設定されている、黒プレイヤー、白プレイヤー、ソルバープレイヤーのベースプレイヤー、において、
メモリーに登録されている置換をクリアします。
- Input Moves (棋譜入力)
棋譜の入力を行います。
- Output Moves (棋譜出力)
棋譜の出力を行います。
- Start (スタート)
-
表示項目
- Boardタブ
ボード関連の情報を表示します。
- ボード表示
現在のボードを表示します。
- スコア・手番表示
現在のスコアと手番を表示します。
- フェーズ表示
現在のフェーズを表示します。
- 状況表示
現在の状況(着手や勝敗)を表示します。
- 進捗表示
現在の進捗(割合やループ)を表示します。
- ボード表示
- Logタブ
ゲーム進行のログを表示します。
「右クリック→すべて選択→コピー」により
ログをコピーしてテキストファイルに保存することができます。
- Boardタブ