連珠ソフトの作り方
last updated: 1997/12/18
工事中です。今のところ判定プログラムの説明のみ。
[序]
これから連珠ソフトを作ろうとしている人の参考に、伊達五目で行っている判定方法と思考ルーチンについて解説しています。
連珠ソフトを作るにあたってまず最初に五の判定と禁手の判定をする必要があります。禁手の判定をするには三と四を正しく判定できなければなりません。
→判定プログラムの作り方
[1997/11/24]
判定ルーチンができてルール通りの対局ができるようになったら思考ルーチンを作ることになります。伊達五目では単純なαβ法を用いています。
→思考プログラムの作り方
[1997/12/18]
定石データを使ったり強くするためにはさまざまなテクニックがあります。
→強くする工夫工事中
[判定プログラム]
[1997/11/24]
1. 石の並びの判定方法
石の並びの判定には石の並びのパターンを用意しておいてそれとマッチングするかどうかを調べる方法や、条件文で細かく場合分けして判定する方法などさまざまな方法が考えられます。
伊達五目では後者に近い方法で判定を行っています。
まず禁手の判定も考慮して石の並びを次のように分類します。
これを上から順に判定していきます。この順番に判定することによって判定量が若干減ります。
着手に対して上下左右斜めの4方向に対して石の並びを調べていきます。 調べる方向を-方向と+方向とすると範囲は-5〜+5の最大10個所、ただし敵石が途中にあればそこで終了です。
実際の判定方法を順に説明していきます。 ここでは自分の石を自石、相手の石を敵石と記述しています。
長連および五の判定
+方向および-方向へ敵石または空きがある位置まで調べることによって判定できます。
自石が連続して並んでいた個数によって五と長連の判定が可能です。
四の判定
「5個の間に4つの自石と1つの空き」があるかどうかで判定します。
三の判定
「6個の間に3つの自石と2つの空き、 但し両端は必ず空いている」という条件を判定します。
四および三の判定はforループを入れ子にするとすっきり書けます。
2. 禁手の判定
禁手のある黒石の判定は上記の方法を基本として更に次のようにする必要があります。
長連になっていないか
白石の判定と共通の判定ルーチンで判定できます。 ただし五が同時にできた場合は禁手ではないので必ず4方向の判定が必要です。
四、三が同時に2つ以上できていないか
4方向の判定をしたあとで四および三の数を合計して2以上なら禁手です。
五が同時にできた場合は禁手ではないので先に長連禁の判定をしてそこで五の判定をしておきます。
また一列にできる四々禁の判定も必要です。
3手先まで読んで禁手になるかどうか
連珠ルールのその他でも説明しているように「3手先まで読むと禁手にならない場合」があります。
そのために四と三の判定を次のように変えます。
-
四の判定
「5個の間に4つの自石と1つの空き。但し7個の間の両端は自石ではない」を判定することによって五を作ったときに長連にならないかどうかを判定します。
-
三の判定
三(および飛び三)は白石の場合と同様の方法で並びを判定しますが、さらに達四となる位置に黒石を置いて判定ルーチンを再帰的に呼び出します。
その結果達四となる位置(複数ある場合はその全て)が禁点だった場合にはこれは三ではありません。
この処理は石の並びを把握しておく必要があるので白石の場合のように石の数と空いている位置の数を数えるだけではすまないので細かい場合分けが必要となります。
黒石用の四、三の判定ルーチンを使うことによって特殊な禁手を判定できます。
このページの最初に戻る
[思考プログラム]
[1997/12/18]
ゲーム木探索
αβ法により最適手の探索を行っています。 単純なMin-Max法よりは効率的ですが、αβ法を使っても全局面を読むことは不可能なので前向き枝刈りをしています。
この枝の数は思考時間との兼ね合いで決まります。 伊達五目では初手は10、全体で数千局面を評価しています。
先読みの深さも勝負がつくまで深く読むことはできないので最大5手までで打ち切っています。
オセロ、将棋などの強いプログラムでは反復深化法が良く使われているようです。
これらのゲーム木の最適探索法は連珠特有のものではないので、詳しくは参考文献を参照してください。
評価関数
局面の有利、不利の度合いを数値化するために評価関数というものを使います。
連珠では自分に五が必ずできる局面が最大値をとり、四や三が多くできればそれだけ有利なためその局面の評価値も高くなります。
逆に相手にそれらができる場合は自分にとって不利になるので評価値は低くなります。
伊達五目では単純にこの考え方を使って
五:1000, 四:20, 三:10
というような点数を付けてそれらの合計をその局面の評価値としています。
枝狩りをする際にもこの評価値の低い局面を切ってしまい、評価値の高い局面から先読みをしていきます。
このページの最初に戻る
[強くする工夫]
内容予告
定石データベース、差分判定、局面の参照テーブル
定石データベース
このページの最初に戻る
このページの内容は伊達五目のアルゴリズムについてToMoがまとめたものです。
(C)1997 ToMo
[1997/12/18] 草稿第3版 連珠プログラムの作り方の追加
[1997/11/24] 草稿第2.1版 連珠用語の訂正(活四→達四)
[1997/11/16] 草稿第2版 判定方法追加
[1997/10/18] 草稿初版
コンピュータ連珠のページへ戻る