nounai.output(spaghetiThinking);

趣味と実益を兼ねて将棋プログラム(研究ツールなど)を作ってみたいと思う私の試行錯誤とか勉強したことを綴ってゆく予定です。 主目的はプログラミングの経験値稼ぎですが、コンピュータ将棋の製作も目指してみたいとも考えています。

【棋譜解析ねた】Interpreter pattern

少なくともcsaの読み込みで需要かありそう、とうことでWikipediaInterpreterパターンのコード例をためしに実装してみた。

なんか、感想としては(逆ポーランドのおかげなのかもしれんけど、)こんなにあっさりインタプリタ実装できちゃっていいの?と言う感じ。自宅戻ってからデザパタの聖書読み直して復習しようっと。

まぁ、というか、さっさとボナンザのコードあたれよ、ということなんですけどね。保木さんもReadmeでボナンザのコードが将棋プログラミングの良いとっかかりになることと信じてます、って趣旨のコメント書いてる訳だし。いつまで経ってもメインストリートなことができないよ\(^o^)/

棋譜アーカイブの月別分類

floodgateで入手できる棋譜はアーカイブされてて非常に利用しやすいです。日付ごと、対局者ごとにまとめられているのがありますが、リンクを1個1個クリックしていくのがあまりにめんどいので、ひとまず2012年、2011年分の1年区切りのアーカイブを落としてみたら、1年の対局数が10万くらいあってlsコマンドがもの凄い遅い。だいたいは標準出力に吐いてるせいだろうし棋譜の学習にはそこまで差し障らないかと思うけど、1ディレクトリに10万もファイルがあるのは個人的に気持ち悪いなと思い、スクリプト使って月別に一括分類したいなーって考えた時の話。


続きを読む

棋譜の収集とかフォーマットについて

棋譜を学習するにもまずは棋譜データ、あとそれを読み込むためのプログラムがないと始まらない。

棋譜の対象としては

  • 棋譜でーたべーす
  • floodgate
  • 手元のボナンザに指させて地道に収集
  • 自分が対戦して保管してる棋譜(およそ180局)

手元のボナンザを使って棋譜を作るのは自動化できるならアリかもしれないけど、あいにくそういう方法は知らないし、自分の対局はサンプルが少ないし棋力的にもちょっと・・・なので、上2つが(当然ながら)本線。

棋譜でーたべーすのアーカイブとかあればいいけど、なさげ。また利用規約的な話もちゃんとチェックしてないので使用できるかどうかはまだ怪しい。可能だったとしても自分でダウンロードスクリプトかなんかを書かなきゃならないのが(そう難しくないとはいえ)めんどくさい。書くとしたらお手軽そうなのはPython + urllib2 + BeautifulSoupでしょうか。電王戦にインスパイアされた!コンピュータ将棋作りたい!でも棋譜収集めんどくさい!って人は結構いるだろうだし、コード書けば一定の需要はありそう。また向こうのサーバに負荷かけないように適当にインターバル掛けたり、とかはしとくべき。まぁ、floodgateの棋譜が使えればそれで十分でしょうけどね。

棋譜フォーマットまわりについてはGPSのソースをあたればいいかな?と思ってましたが、C++の書き方(templeteとか)イマイチ知らない+ファイル多すぎて迷子+ソース見ること自体不慣れ、ってことで萎えそうです。Bonanzaにその辺のコードがあるのならそっちをあたりたい。(機械学習を諦めれば済むけど、)思考に関係ない部分はできれば手出ししたくないなぁ。

文献リンク[UI] No.1

リンク。

1つ目はOO的思考がまだ身についてない私的には大いに参考になります。2つ目はAndroidって所に惹かれます。私のアンテナのドストライクでした。