第22話 リバーシ思考ルーチン作成大会

※今回の話は、プログラミングの知識がないとわかりにくいかもしれませんが、

 雰囲気を感じていただければと思います。


 5月も残すところ、あと1日となったある日。


「そういえば、高遠と朝倉はプログラミングできたよな」


 唐突に、俊さんにそう尋ねられた。


「一応、ちょっとしたことくらいなら」

「私も、ちょっとはできます」

「いや、ミユは全然ちょっとじゃないから」


 ミユは成績全般が優秀だが、特にコンピュータに関する才能は図抜けたものがある。プログラミング実習中に、即席でゲームを作っているくらいだしな。


「で、どうしたんですか、急に」

「いや、ちょっとした遊びを思いついてな」


 俊さんが提案したのは、通信対戦型のリバーシ(いわゆるオセロのこと)を作って、各自の作った思考ルーチン同士で対戦させてみようということだった。実際のリバーシの画像を用意するのは手間がかかるので、「1、2、白」のようなメッセージを送信しあうことで対戦する方式にするということらしい。


「うちはプログラミングができるやつが多いし、記事のネタにでもと思ってな」

「努力はしますけど、俺、絶対弱いですよ」


 リバーシのルールは単純なので、動くものを作るのは難しくないだろうが、博士課程の俊さんやミユには全然勝てる気がしない。


「勝ち負けは気にしなくていいんだ。どういう工夫をしたか、とかが盛り込めれば」

「わかりました。やりましょう」

「ちょっとおもしろそう。わくわくしてきたよ!」


 早くもうずうずとしているミユ。


「で、プログラミング言語については、何でもいいんですか?」


 プログラミング言語というのは、ソフトウェア、いわゆるアプリを作るための人口言語で、用途に応じて、色々なものがある。それがまた個人によって好みの言語があって、論争になったりするのだが。


TCP/IPティーシーピーアイピーでテキストを送り合うだけだから、好きな言語を使えばいい」

「納得です。TCP/IPを扱うのが楽な言語が良さそうですね」

「強い思考ルーチンを作るのだったら、速度が速い言語の方が有利だぞ」

「俺はそんなに強いの作れませんから」


 TCP/IPというのは、インターネット上で通信をする方式の一つで、だいたいどんなプログラミング言語でも使える。もちろん、うちの編集部のような閉じたネットワーク内での通信にも使える。


 というわけで、唐突に始まったリバーシ思考ルーチン作成大会。俺は、普段使い慣れているPythonパイソンを使うことにした。昨今のAIブームで広まったが、色々な処理がライブラリとして公開されていて扱いやすい。


 俊さんはC++しーぷらすぷらすを選択。C++は特に高速な処理が求められる用途に使われる言語で、使いこなすのは難しいが、使いこなせる人は達人級の人も多い。


 ミユが選んだのはRustラストだ。C++と同じく高速な処理に使えるが、最近できた新しい言語だけあって、C++の欠点が色々改良されていると評判だ。にしても、Rustを選択する時点でやっぱり普通じゃない。


 制限時間は5時間ということで、ひたすらカタカタカタとキーボードを打つ音が編集部に響き渡る。さすがに、俊さんはものすごい速度でプログラムを打ち込んでいるようだ。ミユも同じくらい高速で、迷いなくタイプしているのが恐ろしい。


 俺はというと、いわゆるタッチタイピング(キーボードを見ずに文字を打ち込むこと)はできるものの、この二人には及ばず、試行錯誤しながら、動作確認をしていく。


 3時間が経過した。様子をみると、俺も含め3人とも最低限の思考ルーチンはできたて、自分のマシン内で自分の作った思考ルーチン同士を戦わせるテストに入っている。


「検アルファ・ベータ法を基本にして、GAで行くべきか……」


 俊さんのつぶやきが聞こえる。思考ルーチンの方式らしいが、検索しただけだと、制限時間内に作るのは難しそうだ。GAというのはGenetic Algorithmというらしくて、生物の進化を元にして、プログラム自身を改良するための方式らしい。こちらも、難しそうだ。


 ミユの様子を見ると、思考ルーチン同士を戦わせては改良してを細かく繰り返している様子。こういうときのミユの集中力は凄く、俺が画面を見ているのにも気づいていないようだ。


 俺は、検索して出てきたNegaMax法というのを実装してみることにしたが、勝つのは難しそうだ。


「よし、終了!」


 俊さんの宣言でプログラムの開発はストップ。ここからは、対戦だ。総当り方式で、


・俊さん対ミユ

・俊さん対俺

・ミユ対俺


 の3戦をやることになった。


 まず、1戦目。俊さん対ミユだ。思考ルーチン同士の戦いなので、画面上を高速に


2, 2, 白

...

7, 6, 黒


 いったメッセージが流れていく。ちなみに、1手辺り持ち時間の上限は10秒で、それを過ぎて手が打てなかったら負けが確定する。

というのは、持ち時間を決めないと、思考ルーチンにいつまでも長考させることになりかねいからだ。


 さて、結果として勝ったのは俊さんだった。


「あー、負けちゃった。惜しかったのになあ」


 悔しそうなミユ。


「さすがに先輩としての意地は守れたな」


 ほっとした様子の俊さん。


 次の2戦目は俊さん対俺だ。ミユといい勝負をしていた思考ルーチンに俺が作った弱い思考ルーチンが勝てるわけもなく、大差を付けて敗北してしまった。


「やっぱり、難しいですね」

「ま、1年でこれだけ書けるだけでも上出来だ」


 とはいえ、その1年のミユと比べると差は歴然としているので、少し悔しい気持ちはある。


 最後の3戦目。これまでの2戦を見て、ミユには勝てないだろうな、と思っていたので、消化試合という感じだ。


 と思っていると、何やら盤面が変だ。途中まで、ミユが優勢だったのに、次々と俺が巻き返していく。結果、僅差だが、何故か俺のルーチンが勝ってしまった。


「負けちゃった……」

「勝っちゃいましたけど、なんでですかね」


 これまでの戦績を見る限り、俺のが勝てる要素なんてなさそうだったが。


「そうだな。朝倉の思考ルーチンは、うまく実装されているようだが、弱めの思考ルーチンにうまく対応できずに、変な手を打ってしまった、といったところか。評価関数ひょうかかんすうの設計が甘そうだな」


 そう俊さんが評する。評価関数という言葉の意味はいまいち理解できていない。


「そういうこともあるんですね」


 自分の思考ルーチンが弱いせいで、というのは複雑だが。


「奥が深いだろ?こういう対戦系ゲームで思考ルーチンを作るのは」

「そうですね。色々勉強したくなってきました」

「私も、もっと強いの作りたくなってきました」


 というわけで、結果としては、俊さんが1位、俺とミユが2位という結果になった。


「ね、ね。帰ったら二人で一緒に作ろうよ。俊さんのを負かせるくらいの」

「よし、乗った。色々調べないとな」


 なんだかんだで負けたくなかったので、必死になってしまったし、デートとは違うけど、一緒に考えを巡らせるのもいいかもしれない。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る