チャッピーに詰碁アプリを作らせてみる

詰碁アプリ開発のモチベーション

今後、ベーシックインカムなどが来て余裕が出来たら囲碁を真剣にやってみようと思っているが、 アマチュア囲碁においてもっとも有効なのが詰碁だと思っている。

読みが弱いと、理屈上戦うところで戦えなかったり、 棋理に反した手を打つことになるし、 有利なところで戦ったのに負けたという経験が誤学習になって、 結果棋力が伸びないということになると思う。 おれに関しても詰碁をさらに強化することが棋力向上の鍵だろうと思っている。

ではどうすれば読みを強くすることが出来るかというと、 これは、読みをチャンク化することだと思っている。これは英語と同じだ。 だから、詰碁をするときにもこれを意識して行う必要があるのだが、 そこで問題となるのが、苦手なチャンクをどう学習するかである。 当然、詰碁をやっている自分は自分の読みやすい手を中心に読むことになるから、 読みにくい手は読み飛ばすことになる。

そこで、「もしこう打ったらどういう図になるのか」について 気軽に応えてくれるアプリがあると便利だと思う。 アプリの補助によって、自分が読みにくいチャンクについても 増やしていけるのではなかろうか。

最近、チャッピーを利用した開発はどの程度出来るのかを調べるために 自分で課題を作り、チャッピーに開発を任せる形 (おれは「一切」コードを読み書きしない。出力を確かめて、命令するだけ) でやってみることを試しているが、その一環としてやってみた。 この課題に対して一般の囲碁ソフトを使うことも可能だとは思うのだが、 なんせ自分の用途としては100%詰碁なので、 探索では特化した実装があってもいいのではないかと思っていて、 やる価値もあるのではと判断した。 また、囲碁の探索アルゴリズムや画像認識のように研究要素が強い領域がある場合に、 AIを利用した開発はうまく行くのだろうかという問いもあるので、これについても 実験したかった。

開発

まず問題集を作った。ネットに転がっていた詰碁集のPDFを読んで、その中にある詰碁を抽出させ、独自の入力用データ(tmgフォーマット)として認識させた。ここらへんは画像認識はPythonで書いて、それをRustでラップすることにしたようである。

tsumego-cuiは、このtmgフォーマットのデータを入力として起動し、以下のような画面を出力する。あとは、着手を打ったり、最善手を探索させたりすることが出来る。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
           11
  12345678901
  -----------
a|           |
b|  WWB      |
c|  WB B     |
d|W WB       |
e| WBB       |
f|BBB        |
g|           |
h|           |
i|           |
j|           |
k|           |
  -----------
turn: B
mode: m0 (black kill white / ko / seki)
>

アルゴリズムがあまりにもブラックボックスでは困るので、コードは読まないものの、アルゴリズムに関する説明書をチャッピーに一応書かせることにした。しかし実際にはこれすらも読んでおらず、チャッピー研究員を信頼して、彼の提案する改善策に全面的に乗っている。なんせチャッピーは明らかにおれより賢いから、おれがなんやかんやいうより、やりたいことを示してあとはチャッピーに任せてしまった方がいい。

ドキュメントとしては、機能ごとにクレートに分割した設計書のようなものと、tmgフォーマットの仕様書、CUIのプロンプトの仕様書を書いた。あとはAGENTS.mdに些細なルールを書き、残りはチャットでインタラクティブに開発をした。

感想

結局、一番難しいのは解法探索エンジンの部分で、おれはこの分野に特に詳しいわけでもないから、IQ140のチャッピー研究員が提案する謎の手法について脳死で肯定している状態になっている。

これ自体、全然健全なことではないと思うし、仮にうまく行かなかったらどうするんだと思うところもあるが、結局のところ、そういう問題を解こうとしてるのであれば自分がやってもうまく行かなかっただろうし、諦めていいのかなと思っている。

むしろおれがやることは、チャッピーがやってることを段階的にチェック可能な形にソフトウェアを設計することであり、分割することであり、ここはAIを使うにおいてはある意味能力といえる部分なのかなと思った。もちろん、仕様書含め、コンパクトなドキュメントをチャッピーに与えられることも重要になる。その際、何もかもをこちらで決めるのではなく、ある程度チャッピーに裁量をもたせる形でやんわりと指示を出す方が自分の能力を超えたソフトウェアを作りやすくなるし、逆に、ゴリゴリに仕様を決め打ちしてプログラミングだけをチャッピーにお願いすれば(問題フォーマットやtsumego-cuiはこのタイプ)、確かにそのとおりのものが出てくるだろうなとも思った。ここらへんは、作るソフトウェアの性質に依るのではなかろうか。

アプリの完成度だが、正しい手を打つこともあるし、明らかにおかしな手(自殺手とか)を打つこともあって、なんとも言えない出来になっている。さらに改善する方法は、もはやおれにはわからないので、もう少しやらせてみてだめな場合、エンジンは自前で実装せず、チャッピーに投げるというのも手なのではないかとすら思ってるところだ。その場合、おれは一体何をやってるんだろうか。まぁ、いいのか。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。