
オセロAIの構成
オセロは囲碁のクライアントを手本に作りました。Qt アプリ、VLM サーバー、Web対局(othello.mariago.kr)の三つの部分です。Webでは人が黒を持ち、相手をローカルAIと VLM から選びます。
人と打った記録
Webで終わった対局は31局です。人が23局、AIが7局勝ち、1局は引き分けでした。
人が勝った23局のうち12局は9手で終わりました。結果はすべて13–0で、白の石が盤に一つも残りませんでした。手順は二通りだけでした。
- C4 C3 C2 C5 C6 D6 E6 F4 G4: 8局
- D3 C3 B3 E3 F3 F4 F5 D6 D7: 4局
二つ目は一つ目を対角線で反転させた手順です。12局はすべて同じブラウザから打たれました。一度見つけた道を何度も繰り返したのです。

相手は誰だったのか
対局記録には、相手がローカルAIだったのか VLM だったのかは残りません。それでも12局はローカルAIが打った対局と見なせます。同じ手順が8回、4回とそのまま繰り返されたからです。3回目の記事で書きますが、VLM サーバーはこの期間ランダムに手を選んでおり、ランダムでは同じ手順は繰り返されません。
全滅の手順は二つだけだった
ローカルAIが白のとき、黒が打てるすべての手を11手目まで展開してみました。白を全滅させる手順はちょうど二つで、記録に残った二つの手順と同じでした。AIにあった穴はこの二つだけで、その穴を見つけて勝ち続けたのです。
この段階の実際のコード
対局記録のテーブルです。手順(moves)と結果(end_text)はありますが、相手の種類はありません。
othello-web/lib/db.ts
CREATE TABLE IF NOT EXISTS games (
code TEXT PRIMARY KEY,
guest_id TEXT NOT NULL,
access_key TEXT,
size INTEGER NOT NULL DEFAULT 8,
board TEXT NOT NULL,
to_play INTEGER NOT NULL,
last_r INTEGER,
last_c INTEGER,
move_no INTEGER NOT NULL DEFAULT 0,
epoch INTEGER NOT NULL,
started INTEGER NOT NULL DEFAULT 0,
status TEXT NOT NULL DEFAULT 'playing',
end_text TEXT,
moves TEXT NOT NULL DEFAULT '[]',
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);次の記事は「2. 一手先しか見ないAI: 公開されたAIとソースが違っていた」です。
COMMENTS · CHAPTER 01
9手で13–0で負けるオセロAI コメント 0
まだコメントはありません。気になった点や補足があれば残してください。
コメントを登録するには、Googleで始めてニックネームとメールアドレスを登録してください。
Googleで始める