機械学習周りのプログラミング中心。 イベント情報
ポケモンバトルAI本電子書籍通販中

オセロAI

【CodinGameオセロ】DNNの推論器の独自実装

前回、AlphaZero方式でモデルの学習が実現できました。しかしモデルの推論にTensorflowを用いていたため、CodinGameに投稿できるコードになりませんでした。ここからは、C++言語だけでモデルの推論ができるように実装を進めます。 C++言語からDNNモデルを推…

【CodinGameオセロ】棋譜生成と学習のループ

準備が整ったので、AlphaZero方式の強化学習のコアを実装します。 ソースコードはこのバージョンです。 https://github.com/select766/codingame-othello/tree/826d5aa02298d07ca088969bdd8f10c3ca2e8c3f 必要なモジュールは2つです。(1)自己対戦により棋譜…

【CodinGameオセロ】並列対局を想定したMCTSの実装

AlphaZero式の強化学習において、学習データを作成するために必要なMCTSの実装を行います。 現時点のコードのバージョンはこちらです。 https://github.com/select766/codingame-othello/tree/826d5aa02298d07ca088969bdd8f10c3ca2e8c3f AlphaZeroの学習サイ…

【CodinGameオセロ】DNNの方策だけで打つAIの実装

前回、DNNを教師あり学習しました。今回は学習したモデルをAIの探索に組み込みます。まずは、局面の先読みをせずに方策(policy)の出力をそのまま打つAIを実装します。 今回の時点のコードです(前回記事と同じ) https://github.com/select766/codingame-oth…

【CodinGameオセロ】アルファベータ法による指し手を用いたDNNの教師あり学習

今回から機械学習に入ります。まずは、アルファベータ法で実装したAIを用いて棋譜を生成し、それを用いてDNN (Deep Neural Network)を教師あり学習することを試みます。 ソースコードのバージョンは以下の通りです。 https://github.com/select766/codingame…

【CodinGameオセロ】ソースコードの分割と自動連結

前回までで、評価関数を開発しない範囲でランダムより強いAIを実装してきました。機械学習に入る前に一点だけ改良を加えておきます。それはソースコードの分割です。ソースコードが1000行に達しており、1ファイルに記述し続けるのは見通しが悪い状態になって…

【CodinGameオセロ】ビットボードの実装と合法手生成のテスト

前回、アルファベータ法+石の数による評価によってランダムよりは強いAIを実装しました。ただし、合法手生成速度が遅く、CodinGameの制限時間内では深さ5までしか読めませんでした。アルファベータ法のAIそのものは最終的に使わないため速度はあまり重要で…

【CodinGameオセロ】アルファベータ法による探索

前回は、局面を合法手で1手進めたときに、最も多くの石をひっくりかえせるような手を選ぶというGreedyなAIを実装しました。しかしランダムプレイヤーに対して勝率63%程度となり、あまり強いとは言えません。機械学習を導入したいのですが、最初は強化学習で…

【CodinGameオセロ】GreedyなAIと自己対局

前回は、盤面の情報を格納し、合法手を列挙してくれる盤面クラスを作りました。まずは、機械学習なしに簡単に作れるAIを作っていきます。これを作る理由は、機械学習で作ったAIを評価する際の対戦相手とするためです。機械学習を用いたAIは、学習データを用…

【CodinGameオセロ】環境構築と盤面クラスの実装

これからCodinGameで動くオセロAIを作っていきます。まずは、環境構築と盤面クラスの実装です。盤面クラスは、オセロの盤面をプログラム内で表現し、合法手(その時点で石を打てる場所)を列挙したり、選んだ手で局面を次に進めたりする機能を持つもので、ゲ…

【CodinGameオセロ】1文字に1.994バイトを埋め込むbase63483/base63481を開発した

CodinGameにおけるオセロAIの対戦は、提出するものが実行バイナリではなく、プログラムのソースコードです。提出可能なソースコードは1ファイルのみで、サイズ制限は10万文字です。なお、重要なのは、サイズ制限が10万バイトではなく、10万「文字」であると…

【CodinGameオセロ】AlphaZero式オセロAIを自作する

2023年3月から、CodinGameというサービス上で動作するオセロAIを開発しています。目的は、AlphaZeroのアルゴリズムをスクラッチから実装する体験をすることです。AlphaZeroは、ゲーム固有の戦略に関する知識をプログラムに実装することなく、強化学習によっ…

【CodinGameオセロ】実行環境チェック

最近、CodingameというサイトでオセロAIを開発しています。自分が実装したAIのコードをサーバに送信し、サーバ上で他のユーザが開発したAIと対戦する仕組みになっています。ソースコードの長さ等、自分で用意したマシンでAIを動作させる場合には発生しない特…