いまソースコードを公開されている人のソースコードの解説は後日詳しく書きますが、まずは簡単にご報告だけ。
今日はCODEVS本戦!俺様のAIはtakapt無双を阻止出来るのであろうか。(たぶん出来ない)
なお、私は今日、早起きしすぎたので、現地では寝てると思います。zzz…
— やねうら王 (@yaneuraou) March 25, 2016
本戦では、リーグAとリーグBに分かれて、それぞれ4人で総当りだったのですが、リーグAではなんと私がtakaptさんにも勝って、私がリーグAで全勝。そのときのtakaptさんの悲壮なツイートがこちら。
やねうらおさんが上位互換AIっぽいのでダメみたいですね(落胆)#codevs
— ぷち@ぷよぷよAIを作っています (@takapt0226) March 26, 2016
そのあと私は順当に決勝まで勝ち上がり、決勝で私はtakaptさんと当たって、4-5で惜しくも私が負けました。まあ、takapt無双に「待った!」をかけただけでも良しとしましょう。
CODEVS5.0本戦、準優勝でした!
応援してくださった皆様、ありがとうございました。あとで詳しい記事書きます。
— やねうら王 (@yaneuraou) March 26, 2016
おそらく、強さ的には私のAIとtakaptさんのAIとは互角ぐらいなのだと思いますが、takaptさんの今回のAIのソースコードが公開されていて、これが2,000行ほどしかなく、それがまた驚きです。
コード公開しましたhttps://t.co/jmnVOQBMKj#codevs
— ぷち@ぷよぷよAIを作っています (@takapt0226) March 25, 2016
実は私のソースコードは、書き捨てた(要らなくなって削除した)部分だけで8,000行ほどあって、それを除いても全体が12,000行ほど…。2万行も書いてます。2週間で将棋ソフト2,3個分ぐらいのプログラムを書いた気がします。これだけ書いて、ぶっちぎりで勝てなかったのだから、仮にtakaptさんのAIに100回やれば私のAIが勝ち越すとしても、私としては完敗と言っていいぐらいの内容です。来年のCODEVSで、この雪辱は果たしますよ!
https://twitter.com/kyanchiaki/status/713659650646761472
その他、色々お祝いのメッセージが届いています。皆様、ありがとうございます。
何かお腹減った…。しかし、晩御飯までそんなに時間があるわけでもないので「耐える」しか選択肢ないのか…。
今日は開発何にも進捗ありませんorz
ついついCodeVSとか見てたので(–;
やねさん、準優勝おめ!— Yasuhiro Ike (@YasuhiroIke) March 26, 2016
@yaneuraou お疲れ様でしたー! 素晴らしい試合でした!
— tek1031 スプラトゥーン始めました (@tek1031) March 26, 2016
やねさん、CODE VSでもそんな上位の成績残されたのですか。パナい(;^ω^) https://t.co/THCem5dmhM
— 香上 智@Labyrinthus+公開 (@kagami_tomo) March 26, 2016
そんななか、ちょっと気になったツイートが一つあったので、長文になりますが、この場をお借りして詳しく返信したいと思います。
やねうらおさん、codevs準優勝だったのか。あの人見ていると時間無いのを言い訳にしてはいけないなと思う。でもね、私みたいな凡人は言い訳くらいさせてもらわないと…。
— Nobuo Araki@もう少し頑張る (@ark_golgo) March 26, 2016
今回のCODEVS5.0は、色々試行錯誤した結果、結局、将棋に近いゲーム性であったと私は理解しました。詰み探索、枝刈り、評価関数の設計etc..。
例えば、私の評価関数は、犬-忍-ソウルの将棋で言うところのKPP(3駒関係)のようなものを特徴因子として持っています。そして、忍者同士の位置関係(将棋だとKK?)、忍者と犬(将棋だとKP)、犬とソウル(PP)、あと、その相対/絶対。このへんは将棋と同相(同型)だと捉えることが出来ます。そうすると将棋の評価関数(3駒関係)のパラメーターのチューニング等の技術がそのまま活かせます。
こう考えていくと私が今回そこそこの成績を残せたのは偶然ではなく必然で、それは私が天才だからというわけではなく、そのゲーム性が自分が専門(?)としている将棋に非常に似ていたからだと言えます。
どんなタイプの問題であっても、その問題に対する適切な解法(アルゴリズム+α)を思いついて、その問題を解けるのが本当の天才なのだと人は思うかも知れませんが、私はそうは思いません。
例えば、将棋や囲碁のAIを作ろうとするとき、その解法自体を自分で作っていくのはそれ自体が大仕事となります。
DeepLearningにしても囲碁のために作られたわけではなく、DeepLearningを研究しているとそれが囲碁に応用できることがわかったというに過ぎません。囲碁をうまく指せるAIを作ろうとしてDeepLearningが生まれたわけではないです。囲碁AIを作ろうとしてDeepLearningが最適解だと考え、DeepLearningを生み出したのならばその人は間違いなく天才だと思いますが、そのような天才はこの世にいないのです。
何が言いたいのかと言うと、将棋や囲碁のAIを作ろうとしたとき、将棋(囲碁)が自分の思っているようなゲーム性のゲームでなければ、そのアプローチは空振りに終わるということです。例えば今回のCODEVS 5.0で、モンテカルロ系(シミュレーション系)の実装をした人はことごとく失敗したはずです。今回のCODEVS 5.0は、そういうゲーム性のゲームではないからです。そして、私は逆に、KPPのような評価関数を書いたとき、このCODEVS 5.0のゲーム性に意外なほどマッチすることに気付きました。
このように、自分が思っているようなゲーム性のゲームであるか否かを実装する前に事前に判断することはとても難しいです。これは、本当に数多くのゲームのAIを実装してきていればある程度経験的に回避できるかも知れませんが、やってみないとわからない要素というのは常につきまとうと思います。
あと、そのゲームに合ったアルゴリズムも既存のアルゴリズムの組み合わせではなく、DeepLearning級のものを自作するという話になってくると一個人がそのゲームのAIを作るために用意できる限度を超えていると思います。
そんなわけでして、荒木さんには「別に私(やねうらお)は天才ではないですよ」とお伝えするとともに、逆に、仮に私が天才だとして、その天才が「そのゲームのゲーム性を事前に判断することはとても難しい」と言っているわけですから、ご自分がとったアプローチがたまたまハズレ方針だったとしても、「まあ、そういうこともあるわな」ぐらいに理解しておくのがよろしいのではないかと思うのですよ。
お疲れ様でした。
敵雷撃をうまく使ってたのがやねさんだけだったのが印象的でした。
来年は運営側として、面白いゲームを考案されることを期待しています。
敵雷撃/敵落石/敵分身 から 敵分身×3回 での詰み(4手詰め)を読んでるのでした。本当は6手詰めまで読もうと思っていたのですがリモートサーバーのスペックが思ったより低くて…。
takaptさんのAI、これを警戒していないのでときどきこれで詰む形になるんですよね。
まだ見てないですが、おめでとうございます。
大工はなんでも釘とハンマーで処理しようとするという話をちらっと思い出しました。
屋根さんの釘とハンマーが超一流だったのでなせたことかなーと思います。
しかし、2万行も書いたとはその情熱には驚かされます。真似したいです。
おめでとうございます。
普通に書いたら2万行になってました。私も2千行で書けるようになりたい…。
切り札を封印して余裕的なものの開発をしてみるとか。
なんて・・・。
配信見ました。
やねさんのAIはやるべきことをやっているという感じで持ち味が出てたと思います。
洞察の深さも出場陣の中でトップの方だったのではないかと思います。
若干オーバーパワーにも見えましたが。
面白かったです。
なお、時代はconstexprですよ。
平時思考は長く。コードは短く。
バランスと割り切りで勝負です。
シンプルに行きましょう!
たまたまニコ生みていたらやねうらおさんが出ていてびっくりしました。
やねさんもぷよぷよ界に進出してみてはいかがでしょうか?
ぷよAIも今回の問題と探索部はわりと似た性質があるので、ぷよAIでも私は上位に来れるとは思いますが、評価関数の性質がずいぶん違うので、うーん、どうでしょう…。
荒木です。
ひとまず、準優勝おめでとうございます。優勝できなかったのに「おめでとうございます」は変かもしれませんが、優勝者と戦績では殆ど差が無いようなので、あえて「おめでとうございます」と言わせていただきます。
それと、わざわざ私なんかのネガティブTweet取り上げて下さってありがとうございます。加えて、慰めてくださってありがとうございます。
まあ、私がTwitterでやねうらおさんのことを「天才」扱いしたり、ブログで保木先生のことを「人の気持ちの分からない天才」と言ったりしているのは、半分は「自分の限界を打ち破れずにいることへの言い訳」ですので。気に障ったなら申し訳ありませんでした。「天才」って言葉は下手に使うと失礼になりますね。
これからもご活躍を期待しています。
まあ、荒木さんが言及されていた保木さんの件にしても、あれは保木さんに「DeepLearning使ってあの論文通りにやったのにそんだけしか成果でなかったんですか。C++わからんとか言ってCでソースコードを書いてるからじゃないですか。プププ」ぐらい返しておけばいいんじゃないかと思うんですけどね。
要するに囲碁にとってDeepLearningが当たり方針だったってだけかなと。勝負の世界なので当然ながら勝敗は付きますが、勝負で負けたから研究やコーディングにおいても負けているというわけではないと思いますよ。こういう視点で保木さんの荒木さんへの発言を捉え直したとき、保木さんの発言は別に無思慮な言葉ではないと思います。
返信ありがとうございます。私にはそういう気の利いた返しは出来ないもので(汗)。自分の専門分野での技術的な議論ならともかく、喧嘩とか煽りに近いフィールドだと私は最弱の部類でしょうね。
とは言っても、私もディープラーニング取り入れたのに、負けてしまったのはちょっと不本意だったなと。もちろん、ブログでも少し触れましたが、ひたすら論文書くこと優先してきたので、ディープラーニングにかける時間、すなわち囲碁AIを強くする時間が殆ど取れなかったのは確かなのですが。
ともかく、いろいろお気遣いありがとうございます。
準優勝おめでとうございます。
ゲーム性ですか。興味深いです。
評価関数+ビームサーチは結構汎用性があるみたいですかね。それを素材にしてどう味付けするか。どうしてもそうなってしまうのかな?
で、保木さんDeepLearningしているんだ。難しいのをいきなりしようとしないで最初はスリーメンズモリスくらいから始めたらと思う
beam search、わりと使いやすく、お手軽ではあるのですが、たくさん探索しないとどうしようもないような問題に対してはStateのコピーのコストとかそれを確保しておくメモリとかが馬鹿にならないと思いました。(今回の問題もそういう性質がないわけでもなく…)
CODE VS for STUDENT今日だったんですね
今回も楽しそうなのに学生じゃないので参加できない(´;ω;`)