将棋AIについて考えてみる

 オセロコンテストが終わってひと段落してちょっと離れたので次は将棋について考えてます。2時間ほどネットをうろうろしただけなのでまだ考察が足りないとは思いますけど
 ここでは本将棋前提で考えます。
 将棋はオセロと違って終点を定義するのが難しいです。オセロがターン数で勝手にゲームが終了してしまうので、そこを終点にすることができました。将棋は詰み、王が取られることでゲームが終了します。これは手数が決まってないので、条件を洗いなおして定義する必要があると思います。また千日手が発生する可能性があり、無限ループが発生します。さらに駒数が多い、持ち駒、駒の移動、ルール(二歩)もありますか。ここら辺は簡単な問題ですから解決できるでしょう。
 オセロと似た面は二人対戦、手番がお互いに入れ替わるですか。これはゲーム木で表現できそうですね。問題点はオセロと違って兄弟が大量発生して計算に膨大な時間がかかることですね。計算速度を気にしなければ簡単ですね。
 オセロで使える方法がどこまで使えるのでしょうか。
 まずαβ法が使えることは間違いなさそうですね。評価関数はどうすればいいかはまた後で考えます。オセロと将棋だと評価の基準が違いますから。
 定石も使えそうですね。序盤の評価基準はやはり定石が主になりそうです。
 MobilityTableは使えそうな気がしますけど、実装するとなると飛車と角の例外が多いし、他の駒の関係でいろいろ項目が増えそうな感じがします。
 ハッシュはオセロよりも同配置になる可能性が高いので有効そうだし、千日手を防ぐ意味では必須かもしれません。パターンはもちろん使えますが、具体的にどのように使えるかはまだわからないです。
 チェスでqsearchというものがあるそうですが、将棋で応用できるそうですがこれも調査中。
 とりあえず作ってみて実感を確かめてみたいのですが、CUIだと
さすがに不便なところも多いのでGUIで作りたいと思うのでまだ先になりそうですね。今だにスケルトンウィンドウも作れないので。

 今の問題:評価関数、ウィンドウ作成、システム表現。つまり全部