接待として打つ AI をどうするか。なるべく持碁に近くなるようにしてはどうかと考えました。
最初は石の呼吸点の数を比較して同じになるようにしては、と考えたのですが、これだと石をツケないで、やんわり囲まれたときに応手できなくなってしまいます。
次に考えたのは、呼吸点よりもっと広い範囲を見る方法として、眼の候補地を数えて同じになるようにしようと考えました。眼の候補地は白石の場合、次の2つの条件を同時に満たしていることで判定します。
条件1:その空点にツケられている黒石がない。| J1ei – w | = 0
条件2:その空点のコスミに黒石が1つ以下。| D2ei – w | ≦ 1
ここで、J1とD2はツケとコスミの関係を表す行列です。このアイディアで AI を作ってみたのが、GraphGo013 です。
【図76 GraphGo v0.13】
作ってみて白と黒の眼の候補地を同じにしようとすると AI としては弱すぎることが分かり、AI 側(白石)が眼の候補地を最大にするように変更しました。
でも、弱いです。どう弱いのか検討するために、6路盤にし、手順番号を表示するようにしました。眼の候補地の数はSystem.out.println() を使ってコンソールに表示しています。
なんとなく分かってきたのは、上記の条件式の黒石 –w は、活き石であることが前提です。これを正確に表すと、-(w – x) となります。x は死に石です。要するに死活が分かっていないと眼の候補地は正しく判定できないということです。
ということで、やはり死活をなんとかしなければならなくなりました。
(つづく)