[PR]看護師の好条件な求人情報満載:転職活動なら看護師専門サイトにお任せ!

inside 福将棋

思考ルーチンの構造

一般的なプログラムでは、再帰をベースとした 枝刈り有りの深化アルゴリズムを使って実装されているが、 福将棋では(変形)最良優先アルゴリズムを使っている。

単純な駒得が強い静的評価では、簡単に展開すべき 最良局面を見誤るため、特に静的評価の実装に注意を払っている。 静的評価の中では、単純な両取り程度を認識でき、 得点を加算する能力を持っている。 このため、かなり重たい評価関数となってしまった。

cpu cpu スペック 最高速度
Pen4 1.5GHz L1 32kB,L2 256kB25000局面/sec
PA8600 550MHz L1 1.5MB 24000局面/sec
K6-III 450MHz L1 64kB,L2 256kB9000局面/sec

思考ルーチンは、以下の手順で思考をすすめる。

1.定跡マッチングを行なう
2.1手全件の木を作る
3.詰め専用ルーチンを呼び出す
4.2手全件の木を作る
5.各1手目の先の静的評価の高い2手をもう1手展開する
6.探索木中のある条件に合致した優位な末端を拡張する
7.一定条件を満たすまで 6. へループする

序盤は定跡マッチングによって手を指している。 現在の局面数は 15749 局面となっている。 残念ながら完全マッチングでしか指し手をえらべない。 また、定跡から外れる相手の悪手に対して、いきなり厳しい攻め手順を 指す為の定跡も持っていない。

詰めは専用ルーチンを持っている。 詰めルーチンの構造は共謀数を用いた縦型検索となっている。 条件によっては 11手を超える詰めを発見する事ができる。

なお、通常思考ルーチンでも、条件によっては 7手詰みを見つける事ができる。 専用ルーチンはきわめて短時間に終わらせなければならず 共謀数による上限制限を行なっているため、 沢山のあい駒があるケースでは浅い場所でも詰めを検出できない事がある。 通常思考ルーチンでは共謀数のような明確な打ち切りが無いので このような広くて浅い詰めを検出するのに、効果的に補完しあって働いている。 通常思考ルーチンの最大展開深さは、大会版では 11 手目までとしていた。

定跡から落ちた後、駒組を進める為に、駒の位置関係から 静的評価を調整する事で駒組をさせようとしている。 現在入っている陣系は、矢倉、美濃、穴熊、金無双のみである (ただし穴熊は、大会後にバグが発見され、組めない事が発覚)。 大会直前に実装しただけの事があり、第3戦のハイパー将棋7との 対戦で見せた以下の形(先手側)まで組ませるのがやっとであった。
ご参考:内部での盤面表現

通信処理

実は思考ルーチンは TCP/IP によって将棋サーバーから 次の一手問題を次々と受けとり、答を返すだけのクライアントとして実装されている。 普段は、TCP/IP でクライアント同士を対戦させたり 人間用の GUI クライアントを使って対人の対戦をしている。 大会のときには、このサーバーのもう一方の口を RS232C に向け CSA プロトコルを吐く構造になっている。

全体

現在以下の OS 上でリコンパイルによる実行を実際に確認している (RS232C による通信部分は linux 上でのみ動作する)。 現実的には UNIX であれば問題無く動作すると思われる。

Linux(2.0, 2.2, 2.4)
FreeBSD(4.0)
HP-UX
HI-UX(/WE2,/MPP)

思考ルーチン、サーバー共に C 言語で書かれ、 思考ルーチンが 8.7kstep、サーバーが 3.3kstep となっている。

なお、今回参加したプログラムの正式名称は fuku1.0(cc8.9 ベース)である。 去年、初参加したプログラムは fuku0.6 であり、 これも(変形)最良優先アルゴリズムを使っていた。 今年、私達のチームでは大会直前に各自が作ったクライアントを持ち寄り 直接対戦させて、どのクライアントを出場させるかを決めた。 チーム内には深さ優先の思考ルーチンを持っている人もいるので、 来年は突然、深さ優先アルゴリズムで参加するかもしれない。


[PR]車当る!高収入アルバイトより:お得!?更に無料で50万もプレゼント♪