LoginSignup
101
43
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

世界1位取った後3年間オセロAIを作り続けたらナニモワカラナクなってチョットダケデキルようになった話

Last updated at Posted at 2024-06-26

2021年、ふとしたきっかけでオセロAIを作り始め、オセロAIコンテストに作ったAIを提出し、なんやかんやあって半年かけてそのコンテストで世界1位になりました

それで満足…?と思いきや、全然満足せず、コンテスト関係なしにオセロAIを作って早3年。この記事ではオセロAIが色々なところに私を連れて行ってくれた話と、オセロAIが深いという話をします。

この記事は2年ほど前に書いていっぱい読んでいただけた以下の記事「カンゼンニリカイシタ話」の続編、みたいな立ち位置です。単体で読んでも、以下の記事と合わせて読んでも楽しめます。

世界1位からさらに高みを目指す

私が参加したオセロAIのコンテスト(CodinGame Othello)は、コンテストという特性上、かなり厳しい制約が設けられていました。例えば着手する時間です。これは1手あたり0.15秒以下でないといけません。また、コード長にも制限があり、外部ファイルも使えません。並列化も(多分)できません。これではなかなか強いオセロAIは作れません。

世界1位になった直後は、その喜びと見識の狭さから「私のオセロAIはめちゃくちゃ強い!」と思い込んでいたわけですが、上記の制約を外した環境ではまだまだでした。例えばオープンソースで有名な強力オセロAIであるEdax。このオセロAIにはコテンパンにやられていました。

そういうわけで、コンテストで世界1位になった後も継続してオセロAIを改良し、より強くなるよう様々な工夫を施しました。この試みは世界1位(2021年11月)から3年近く経った今でも続いています。コンテストでは1500行程度であったAIが、今では15倍、23000行程度になりました。それでもなおオセロAIを強く、そして速くする技術についてはまだまだ知らないことだらけだと感じる日々です。

今ではこの成果を色々な人に使ってもらうため、オセロプレイヤが使うことを念頭にしたオセロソフトを作って公開しています。無料でダウンロードできます!ぜひ!!

app_ja.png

人力オセロを始めた

実は、私は全然ゲームをしない人でして、ゲームを長期的に楽しんだことはほぼありませんでした。そんな私でしたが、オセロAIを作っているとだんだん「あれ?実はオセロというゲームは人間がやると面白いのではないか?」と思うようになってきました。そういうわけで、オセロAIを作り始めて1年ほど経った頃、本格的に人力オセロを始めました。ちょうど大学に(人力)オセロサークルがあったので加入し、人力オセロを楽しむようになりました。

オセロサークルに入ったことで人力オセロの大会にも出るようになり、日本オセロ連盟で級位をいただきました。また、大会に出るようになるとオセロプレイヤの知り合いも増え、私のオセロソフトを使っていただいているという声も聞けるようになりました。これはとても嬉しかったです。こうやって自分自身が人力でオセロをすることで、これからのオセロAIに求められるものが何かを考えるようになっていきました。これは後述します。

IMG_5889.jpg
↑オセロ2級の賞状(強いです!と自信を持って言えるわけではないが…)

最近は忙しくてあまり人力の大会に出ていないのですが、きちんと練習してまた大会に出たいです。

研究を始めた

オセロAIに関して大学でお世話になっている先生に話してみたところ、「せっかく1位になったんなら工夫した点を論文としてまとめてみたら?」と言っていただきました。研究、というか探究的な活動はいっぱいしたことがあったのですが、まともに論文を書いた経験がなかった(学部2年相当でした)ため、これは良い機会だと思いました。せっかく論文にするのであれば発表してきたら良いということで、とある研究発表会に参加することにしました。これで論文を提出する締切も発生して、「締切駆動開発」みたいな感じでガガガッと論文を書きました。

ガガガッと書いたとは言え、初めての論文です。書き方も知りません。ガガガッと書いて先生に見ていただき、「論文っていうのはこうやって書くんだよ」という優しいコメント(的確で本当に優しい)をいただき、ガガガッと書き直し、何往復かしてどうにかそれっぽくまとまったので提出しました。コメントいただいた先生は指導教員という立場でもなんでもなく、ご厚意でこのような提案・指導をしていただきました。ありがたい限りです。

さて、そういうわけで、夏に研究発表会に参加しました。参加したのは「第48回ゲーム情報学研究発表会」で、長崎県の佐世保で行われました。私は普段茨城県のつくばに住んでいるので、遠いです。完全趣味の研究だったこともあり、せっかくなので一人旅をくっつけて行ってきました。趣味研究はこういうところが良いですね(当然全部自腹ですが)。

DSC_0898.JPG
↑大学の先輩に勧められて行ってきた千綿駅

研究発表会で嬉しかったことは、まず小学生時代に読んだ(そして全然理解できなかった)将棋AIの本の著者の方々にお会いできたことです。それと、他の参加者とご飯に行けたことです。研究イベントに行くと分野の近い研究者といっぱい話せるので非常に楽しいです。それまではずっと孤独にオセロAIを作っていたので、ここではゲームAIの専門用語がするっと伝わることに感動しました

研究が評価された

このとき発表した研究では、この発表会を主催するゲーム情報学研究会より賞をいただけました。初めて論文という形式で成果を書いて、初めて研究発表会という場で発表したので、あまり自信のある研究ではなかったのですが、受賞は非常に嬉しく、モチベーションに繋がりました。この2022年の研究は(自分ではまだまだだと思いつつも)非常に高く評価していただけ、後日にはさらに大きな賞もいただけました。

DSC_0396-scaled.jpg
↑ゲーム情報学研究会 優秀研究賞

また、研究やオセロAI制作の活動を評価していただけたためか、2023年度には2回、招待講演(+特別講演)の機会をいただけました。これは非常に嬉しくて、気合を入れて発表しました。このとき発表のために大学の図書館で色々調べたこと、オセロプレイヤーにインタビューしたことが、私の活動の幅をさらに広げてくれます。これについては後述します。

image.png
↑招待講演の2週間前に「Othello is Solved」という論文が出たので急遽タイトル変更

これらの経験で「あれ、研究って結構楽しいぞ?」と思ったので、その後もオセロAIを題材に別のテーマで研究をして発表したりしています。最初は書き方がわからなかった論文も、だんだんと上手くなっていきました。まあ多分まだまだなのですがね…。今後も楽しく研究をします。

これからのオセロAIに必要なことを考えた

人力でオセロを始めたことをきっかけに、ぼんやりと「ただ強いだけでない、新たなオセロAIが求められているのではないか」と考えるようになりました。というのも、オセロAIは1997年には人間の世界チャンピオンに勝利しています。今ではAIというツールを使ってオセロの勉強をするというのが当然という状況です(将棋と似ています)。オセロAIの強さについても、(技術的課題はあるにしても)オセロプレイヤから見たらすでにほぼ十分な水準です。

しかし、AIは良い手を教えてくれるのですが、その手がなぜ良いのか、なぜ他の手はダメなのかは教えてくれません。自分自身がオセロをするにあたって、「この手、AI的には良いらしいけどなんで良いのか全然わからないや」と思うことが多々ありました。そういうときにはサークルの強い人に聞いて解説してもらったり、強い人でさえわからないので「この手は打てなくてもOK」と言われたりしました。

また、前述の招待講演をするにあたって、オセロの世界チャンピオンにオセロAIの使い方やオセロAIに期待することを聞いてみる、といった試みをしました。そのときにも、今後のオセロAIについて「着手の意味を解説してほしい」「教師としての役割を期待する」という要望をいただきました。

image.png
↑招待講演の目次。世界チャンピオンへのインタビューをもとに未来のオセロAIを考えました。

現在のオセロAIは、オセロプレイヤにとっては所詮ツールに過ぎません。そのため、人力オセロで強くなろうとすると、私にとってのサークルメンバーのような、強い人に教わるといったことが非常に大事だと思います。ですから、オセロAIはもっと進化して、ツールではなく教師に近づくことができるのではないか? と思っています。もちろん、だからといって完全に一人で人力オセロに強くなることはなかなかできないと思います。そもそもオセロは2人で遊ぶものですし。

図書館の面白さを覚えた

私は、元々本は買う派の人間でした。特に、専門書は書き込みながら理解していくからです(ノートを別で用意するとノートをなくすので…)。ですので昔からあまり図書館を使ってきませんでした。それは大学に入ってからも同じで、例えば情報学分野で情報収集をするときはWebの力を借りれば十分だと思っていました。しかし、オセロAIが図書館の面白さを教えてくれました。

前述の招待講演では、オセロAIの歴史もざっくりとまとめて発表に組み込みました。私が生まれる前の出来事を生で見てきた専門家もいる中で発表するのですから、それはそれは丁寧に調べました。このとき、Webが発達する前の出来事も調べるために図書館を活用したわけです

ちなみに、オセロというゲーム自体(オセロという名前では)1973年発売なので結構新しく、オセロAIの記録でも、私が見つけた中で最古のものは1977年頃のものでした。しかし、これぐらいの年代の資料でも、Webにはほとんど情報がありません。2001年生まれの私にはWebというものは大昔からあったように感じますが、日本におけるWebはざっくり1990年代中盤から始まったようで、それ以前の記録は調べてもほとんど出てきません。これを実感しました。最新の技術情報を調べるだけならWebで良い場合も多いかもしれませんが、少し古い情報を調べるとなると途端に心もとなくなります。

このときはWebの断片的な情報を頼りに、図書館で当時の新聞や雑誌を探して情報収集していました。調べ物の最中には、ゲームAI分野の知っている先生のお名前を見つけて「やはりリアルタイムで経験してらっしゃる…!」と感動したりしていました。招待講演が終わってからもオセロAIの歴史が気になり、1980年代から90年代にASCIIという雑誌で開催していたマイクロオセロリーグという大会について、図書館で雑誌を探して通読するようなこともしました。当時の人たちの努力や考え方を知ったり、現在でもオセロAIを開発している方の名前を見つけて驚いたりしました。

余談ですが、大学の文系の知り合いはもっと古い記録も図書館や博物館で調べており、すごいなぁと思っています。

オセロが弱解決された

私がオセロAI制作に情熱を燃やしているこの3年くらいの間に特大ニュースがありました。それが、Othello is Solved (2023, Hiroki Takizawa)です。双方のプレイヤが最善手を打ち続けると、オセロは引き分けに終わると証明した論文が発表されました。これは2024年6月現在で私が知る限り査読や追実験されたものではないですが、何年も前からオセロプレイヤの間では「99.9%引き分けだろう」みたいに言われていたこともあり、正しそうという意見が多く感じます。

この論文が発表されたとき、私はとても驚きました。そして(眠かったので)二度寝してから読み込み、超長文の解説記事をQiitaに書きました。ありがたいことにこの記事が大変好評で、様々な情報が錯綜する中で一つの道しるべとなったようです。とても嬉しかったです。まあ、弱解決は私も目指していたので非常に悔しくもありましたが…。

実は招待講演をした研究イベントにはOthello is Solvedの著者もいらっしゃり、直接話すことができました。勝手にこのような解説記事を書いて公開していたので少しビクビクしていたのですが、優しく話してくださり、濃い話ができました。オセロAIの制作・研究をしていて良かったなぁと思った瞬間でした。

さらに、このQiitaの解説記事を発端として、情報処理学会の学会誌に特別解説記事を書く機会もいただけました。前述のQiitaの記事は長文ですが、学会誌の記事ではその内容をコンパクトに読みやすくまとめました。こちらの記事は様々な研究者の方に「あの記事良かったよ」と言っていただき、とても嬉しく、励みになりました。こちらの記事はnoteで無料公開されています。

オセロソフトを開発している

冒頭に書いた通り、私は継続してオセロソフト "Egaroucid" を制作しています。この活動それ自体も様々な方向に発展しました。

まず、私自身がオセロプレイヤとなったことや、それをきっかけに様々なオセロプレイヤと知り合えたことで、このオセロソフトに搭載する機能を洗練できました。よく「アプリ開発をするときは作者がそのアプリのヘビーユーザであることが大事」とは聞きますが、本当にその通りだと思います。私がほしい機能を作ったり、オセロプレイヤから要望のあった機能を作ったり、そういった開発を行ってきました。

例えば、サークルで人力オセロの教本を作るとなったときには、「オセロの盤面画像が大量に必要だろうな」と思い、盤面画像を簡単に生成できる機能を作りました。教本はモノクロで印刷することも多いので白黒画像の生成に対応したり、石にマークをつけられると便利だと思ったのでマークをつける機能を搭載したりしました。
image.png

またある時には、「人力オセロの訓練のためにランダム局面を生成できるようにしてほしい」という要望をいただきました。詳しく聞いてみると、オセロの盤面をパッと見て形勢を判断する練習をしているとのことでした。なかなか凄まじい練習ですが、応援の気持ちも込めて実装しました。

このとき、「人間同士で打っていてあり得るような状態がほしいので、あまり悪手を打ちすぎないでほしい」と言われたので、そこそこ良さそうな手をランダムに打つようにしました。さらにさらに、「局面生成や評価値表示のオンオフを繰り返すので、ショートカットキーに対応してほしい」と言われたので、確かにそうだなぁと思ってショートカットキーを追加しました。
image.png

私はどちらかというとオセロAIの中身を作るのが好きで、ソフトの画面を作るような作業はあまり好きではなく、苦手でした。ただ、ビジュアルデザインを友人が考えてくれたり、好みのGUIライブラリ(Siv3D)に出会えたり、このソフトを実際に使ってくれる人と関わったりすることで、そういった苦手意識は徐々に消えていきました

こういった開発を継続していたため、また、日本語と英語に対応していたため、海外の方からもご連絡いただくこともあります。例えば、現在のEgaroucidは中国語に対応しているのですが、これは中国のユーザさんが翻訳を作ってくださったものです。Egaroucidは多言語対応しやすいように設計しているのですが、その努力が報われた瞬間でした。

image.png
↑中国語表示にしたEgaroucid

さらに、最近は世界オセロ連盟のニュースページにEgaroucidや私の紹介を書いていただけました。こうやって様々な人に使っていただけると、とにかく嬉しいです。

実際にオセロソフトを作ると、強いオセロAIがあるだけだとあまり意味がなくて、それが使いやすい形でユーザの手元に届くことが大切なのだと実感します。この「使いやすい形」をさらに発展させていって、最終的には前述のように、教師としての役割を持つオセロAIを作りたいです。

実は2022年にオセロを打つロボットを作ったのですが、このようなロボットが指導対局してくれたり都度打ち方を教えてくれるような未来があると面白いなぁ…、などと妄想しています。

DSC_0017 - コピー.JPG
↑オセロロボット "Isevot"『二回ひねって一度たつ』(KUMA experiment vol.1)での展示

わからなくて、面白い

オセロAI制作を始めた当初は先人が進んできた道を頑張ってついていくような感覚でしたが、気付いたらところどころ、自分で薮をかき分けている場所もありました。先人の道も薮も、わからないところはまだまだたくさんありますが、逆に3年間ずっと(たまに大学を休学して)やっていてもまだまだわからないことが山ほどあるというのは、オセロAIの深さを感じます。そんなわけで、自分である程度理解した情報は、誰か他の人、または未来の自分のために技術解説として書いてひっそり公開しています。

ふと振り返ってみると、オセロAIが色々なところに私を運んでくれていました。これからも、当分は色々なところに連れて行ってもらおうと思います。

101
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
101
43