エンジニアでいかに稼ぐか?学校や会社では知ることができなった体験、経験を綴ります

【76】コンピュータ将棋ソフト開発者になってわかったこと

»

こんにちは手塚規雄です。

第3回電王トーナメントに参加してきました。28チーム参加での22位で3勝5敗という成績でしたが、応募当時から思えば良い意味で信じられない結果に終わりました。半年前に電王戦をネタにコラムに取り上げた時には自分が開発することを想像していませんでしたし、応募も締め切り直前でした。そのために2ヶ月という短期間での開発と結果的になってしまったのです。

 

そもそも2ヶ月で将棋ソフトは作れるのか?

とりあえず動くだけで良ければ作れますが、自分が思った通り作るには時間がたりませんでした。ではなぜ動かすだけなら簡単なのか?

これは有名な「Bonanza」をはじめ多くの将棋ソフトが公開されています。特に今年の「Apery」の公開が一番大きな影響だったと思います。俗に言われるAperyチルドレンが今回の大会でも参加されていました。Aperyは比較的にソースコードが読みやすくという特徴もありました。初心者には「なのはmini」がオススメです。Twitterでもそのように教わりました。電王トーナメントで「Calamity」で出場されているソフトの簡易版(?)ですが、それでも十分な強さを持っています。(作者の川端さんに事前準備中に見せていただいたのですが、なのはmini対Calamityでなのはminiが勝つこともあったようです。)他にも特徴の違うソフトがあり、多くのソースコードを読むことでも理解することができました。

ただやはりソースコードだけでは将棋ソフトの仕様をなんとなーく理解はできるものの、なぜこのような仕様になっているか?それがまったくわかりせん。しっかり理解するために基礎となる知識が必要というのがわかりました。その上で開発期間中にWeb公開された「コンピュータ将棋のアルゴリズムHTML版」には非常にお世話になりました。その他には「Bonanzaソース完全解析ブログ」です。こちらはBonanzaに関して理解するのに役立ちました。ちょっと難しいのですが、電王戦関係者の名前がコメント欄に現れるのでそれはそれで面白かったです。

動かすにはベースとなるソフトがあるし、勉強できる環境や教えていただける環境もあります。でも時間が純粋に足りないというのが実情です。

 

短期間開発ができる例外的な存在

短期間でソフト作成した組は私の他には今回、tanuki-の野田さん、超やねうら王の磯崎さんです。「天才」という言葉はあまり使いたくありませんのであえて「バケモノ」と表現させていただきますが、彼らは他の人と違います。

野田さんは競技プログラミングの方であり、実装能力でいえば今大会ではトップだと思っています。電王トーナメントに競技プログラミング勢が参加したらかなり上位に行くのでは?と想像していたのですが、入賞はしなかったものの案の定今大会で暴れまわっていました。

一方、電王戦にも参加している磯崎さんはそもそもコンピュータ将棋に関する知識は「Bonanzaソース完全解析ブログ」からもわかると思いますが、アピール文からソフトの強さを想像できたり、勘違いや間違いを指摘できるなどまさに「バケモノ」なわけです。

そういう方以外は3、4ヶ月の時間を使ってゆっくり開発したほうがよいでしょう。私はもう2ヶ月開発という苦痛は味わいたくありません。しかもバグ満載だったので間に合っていないとも言える状態ですから。ちなみに本番でも対局開始直後にエラーを吐き出していたので、本当にアレがよく動いたなと思っています。エラーの原因は、自宅PCと本番PCで何か環境的な違いか、磯崎さんが言っていたWindowsDefenderが何か悪さをしたのかなど想像したものの、完全にはわかっていません。

 

それ以上に苦戦したものが言語の壁

以前コラムにてちょっと愚痴をこぼしたのがC++です。私自身C++の経験がほぼ無しのため、その部分が一番苦戦しました。多くのソフトがC++で開発されているので、それを読み解く事が難しかったです。(Bonanzaに至ってはC言語でコメントがほぼ無い)それでC++で作ろうとすると絶対に間に合わないのでそこで得意なC#で作ることになりました。(開発者にCOBOLができると言ったら相当驚かれました…)

それでもC++からC#に書き換えるのが難しいので、結局過去にC#で作られていたBlunderに白羽の矢が立ちました。Blunderが公開されていなかったら、間違いなく参加できずに終わっていたでしょう。今回D言語で参加したD将棋というソフトがありましたが、その苦労はかなり大きかったと思います。さらにD将棋は予選突破組なので作者の古居さんは本当にスゴイと思いました。

 

効率的な開発方法はあるのか?

1:公開されているソースコードを元に開発する

2:得意な言語で開発する

3:将棋ソフト用のTwitterアカウントを作り将棋ソフト開発者をフォローする

  そしてわからない時に「誰か助けて!」とつぶやいてみる

この3つを組み合わせるのが一番です。なんだかんだ3の手法で相当助かってしまいました。結局独学できなかったという結論ともいえます。やっぱり先人の知恵は偉大です。

私自身も今後はちゃんと完成させなければなりません。そのためにも当分は1~3の手法を使い続けると思います。ちゃんと完成させてソフトの独自性を出す際には他の方もやっている論文の読み込みなどもチャレンジしていくつもりです。

初心者が参加する時に独自性に関する心配をする方もいますが、コピペでなく自分で少しでもソースコードを書けば十分な独自性だと思います。tanuki-はAperyの高速化だけでも十分な独自性を発揮できたという良い例だと思いませんか?

 

賞金目的で参加?

名人コブラの松山さんがネタ勢でもなく「エンジョイ勢」という表現をしていましたが、私は完全にエンジョイ勢でした。特に2日目も3日目も現地で物凄く楽しませて頂きました。これが目的だったと言っても過言ではありません。磯崎さんではありませんが、もちろん私もお金は欲しいですよ。ただ入賞するのはどうやっても無理だったし、長い年月をかけ開発している人たちにも申し訳ないと思います。

エンジョイ勢として一番よかった事は難しい局面でプロ棋士の方が盤駒を使って検討し、解説しているのが感動であり驚愕でした。決勝戦のponanza-nozomi戦で素人にはさっぱりわからないものをちょっと検討してサラリとわかりやすく解説している勝又先生の姿を見て、プロ棋士は本当にスゴイというかそれを通り過ぎているスゴさでした。

 

プログラマーなら一度腕試しにどうでしょうか?

競技プログラミングでも将棋ソフトでも囲碁ソフトでもそのような世界に飛び込んでみてはどうでしょうか?来年5月には世界コンピュータ将棋選手権もあります(確定のようです)。また第3回電王トーナメント参加者全員に運営さんから第4回開催した時にはお待ちしていますメールが送信されました。普段とは違う世界に飛び込むには良い世界だと思います。

ponanzaの山本さんも大樹の枝の平岡さんも言っていましたが、新規参加は大歓迎の雰囲気ですよ。ただ彼らより強くならなければいつでも歓迎だという事ですが、新人で彼らを脅かすバケモノはそうそう居るはずがありません。それでもなんだかんだ毎年強いソフトが出てきます。それだけ魅力のある世界なのかもしれません。私が実際面白さにハマりました。

 

今回紹介したサイト集

Bonanza:http://www.geocities.jp/bonanza_shogi/

Apery:http://d.hatena.ne.jp/hiraoka64/

なのはmini:http://vivio.blog.shinobi.jp/

コンピュータ将棋のアルゴリズムHTML版:http://homepage1.nifty.com/Ike/ComShogi/index.html

Bonanzaソース完全解析ブログ:http://d.hatena.ne.jp/LS3600/

Blunder:http://ak110.github.io/

世界コンピュータ将棋選手権:http://www.computer-shogi.org/wcsc/

 

------------------------------------------------------------------------------

コメント欄にて書いて欲しいコラムの題材をいつでも受け付けております。ただしその内容に応えられるかどうかはわかりません。基本的にコメント欄には私自身がコメントしないのですが、題材リクエストに関してはレスをすることもありますので、よろしくお願いします。

Comment(1)

コメント

Anubis

いつも楽しく読まさせて頂いています。

将棋ソフトについて思うところがあります。
人為的ミスが無いので、当然、コンピュータの方が強くなると思います。
だが、それが将棋の面白さに直結するのだろうか?

相手の強さを解析して、
接戦してくれるような将棋ソフトってどうなんでしょうかね?
強さではなく、ソフトに人らしさを持たせるというコンセプトです。

将棋ソフトには、強さだけじゃなく、そういう方向の可能性も感じます。
ちょっとご意見聞いてみたいので、コラムの題材に希望してみます。

コメントを投稿する