見出し画像

50年前のパソコンで強いオセロAIを作りました

ものづくりとプログラミングとルービックキューブのにゃにゃんです。

という自己紹介をしておきながら今回は前回に引き続きオセロの話です。

前回の記事では世界15位のオセロAIを作った話をしました。

これからオセロ(をコンピュータにやらせること)にハマり、何を血迷ったか少ない計算資源で強いオセロAIを作りたくなりました。その名も

レトロオセロAI

GitHubは以下です。

https://github.com/Nyanyan/RetroReversiAI


全体像

画像1

画像2

こんな感じの見た目をしています。

中央には128個のLED(64個×2色)と64個のスイッチがあって、右にメイン(AI&全体制御)基板、左にLEDとスイッチ制御基板がついています。


強さ

前述の世界15位AIの評価関数を簡略化して、読み手数を4手(世界15位は13手くらい)にしました。これだけ機能を絞っても製作者の私は全く勝てません。結構強いです。


「50年前のパソコン」とは?

50年前のパソコンってなんじゃと思うと思います。若干タイトルで釣っていますが、正体は8bitマイコン(マイクロコントローラ)です。

ちょうど50年くらい前に8bitのパソコンが売り出されたらしいですね。ちょうどその頃のパソコンと同じくらいの性能のマイコンが今では250円くらいで買えてしまいます。具体的には、

コアサイズ: 8bit
クロック: 16MHz
RAM: 2kB

といったマイコンです。参考までに今私が記事を書いているパソコンのスペックは以下の通りです。

コアサイズ: 64bit
クロック: 1.99GHz (実用上はこれよりも高い)
RAM: 16GB

うーん、単位が軽く違いますね。


アルゴリズム

50年前のコンピュータレベルの性能なので凝ったことはあまりできません。

世界15位AIはかなり凝ったアルゴリズムを使っていますが、レトロオセロAIはシンプルなNegaAlpha法を使っています。

評価関数には盤面の重みと着手可能手数の重みつけ和を使っています。


高速化

オセロAIのお手軽高速化と言えばbit演算の多用ですね。もちろんレトロオセロAIもbit演算の嵐です。8bitなので符号なし整数8つ分のメモリで64マスの盤面を表します。

また、これがポイントなのですが、レトロオセロAIは並列計算をしています。前述の通り8bitマイコンは250円程度です。10個くらい買ってもあまり財布にダメージがありません。ということで、レトロオセロAIでは探索の最終1手を8個のマイコンで並列計算しています

1つのマスターマイコンから8つのスレーブマイコンにそれぞれ最終1手の探索タスクを同時に割り振ります。それぞれのスレーブマイコンで最終1手を探索して評価値を算出し、マスターマイコンに結果を返します。マスターマイコンではその結果を集計し、メインアルゴリズムのNegaAlpha法を進めます。

1つのマイコンだけでは4手読みはとても時間がかかりますが、並列化することでそれなりのスピードで4手読みが実現できました。


盤面の製作

これが地獄の作業でした。写真から察することができると思いますが、LEDとスイッチの配線に4日くらいかかりました。

iOS の画像(34)

iOS の画像(37)

深夜の過集中を利用して作業していたら無事昼夜逆転しました。

土台はMDFボードを使っていて、これを家にあるCNCフライスで加工しました。

余談ですがこのLED、1つ180円するんですよね。高いです。LED代で1万円超えたことなんて人生初です。


メイン基板の製作

メイン基板はまずAIのスレーブマイコンの配線をして、その後にマスターマイコンをつけて余った場所に7セグメントLEDをつけました。

iOS の画像(35)

上2段がスレーブマイコン、右下がマスターマイコンです。


LED&スイッチ制御基板の製作

画像の基板です。

iOS の画像(36)

たくさんついているICは8bitシフトレジスタで、16個使うことで128個のLEDを制御しています。

右下のICソケットには8bitマイコンがついて、スイッチを制御します。

大量のスイッチを制御する方法はたくさんありますが、今回はマトリクス状に配線して16ピンで制御する手法を取りました。アナログ入力をうまく使えば少ないピン数で制御できますが、私はアナログ入力をそんなに信用していません。それも64個のスイッチを制御するとなるとなおさらです。それならスイッチ制御のためのマイコンをメインのマスターマイコンとは別に用意してしまおうというわけです。


マイコン間の通信

結局レトロオセロAIには10個の8bitマイコンを使いました。それぞれきちんと通信しなくてはいけないのですが、通信は以下の設計にしました。

マスターマイコン - 大量のスレーブマイコン: I2C (400kHz)
マスターマイコン - スイッチ制御マイコン: シリアル (1200bps)

I2Cは正直怖かったです。ノイズ対策には気を使いました。


最後に

毎回ものづくりRTAを勝手にやっているのですが、今回は5/31に思い立って6/10に完成しました。作業日数11日です。作業量が膨大なわりには少ない日数で製作できたと思います。内訳は、

5/31: プログラミング
6/1: プログラミング、部品注文
6/2: マイコンの並列化の実験
6/3-6/4: メイン基板製作
6/5-6/10: 配線、LED&スイッチ制御基板の製作、本体の製作

ハードウェア製作は自動化ができないのでとても時間がかかりますね。トータルの作業時間は多分150時間には達していないくらいだと思います。

ということで、レトロオセロAIと今年の始めに大きく改良したルービッククロックを引っさげてMaker Faire Tokyo 2021に応募しようと思います。選考に通ったらぜひブースに遊びにいらしてください!

この記事が気に入ったらサポートをしてみませんか?