それでは、ポケモン用のAI環境を作っていきましょう。
まずは要件定義から
システムに必要なもの
- 対戦環境 :PokemonShowdownサーバーをローカルに構築
- 自動対戦機能 :ランダムに100~1000試合程度、結果を収束させる
- PTランダム生成器:初期PT生成やノイズや突然変異も兼ねて必須
- 評価システム :対戦ログの判断によるPT評価
- PT作成AI :PT評価を元にした強化学習によるPT生成
- 行動選択システム:対戦ログを元にバトル方針を選択
- プレイヤーAI :PT生成と行動選択を統括し、全体方針を決定するAI
- 個性付けシステム:プレイヤーAIに戦術傾向の設定用(評価値に影響)
- 学習管理システム:世代管理やログの分析、マッチングの手動調性など
- 全体システムUI :これらを統括管理できるUI
作る物が決まったので、さっそく作っていきましょう。
まずは対戦環境の構築から
これは様々な場面で使い、今後の拡張性も考慮したいので、メインで動かすPCとは別の物を使います。
毎回サーバーを起動したり、普段使うようなPCに常駐させるのは邪魔ですし、メインのPCに外部からアクセスする可能性のある環境を入れたくないですからね。
サーバーのPCはN100のミニPCを使用します。私の環境ではRAM12GBですが、多いに越したことはないので、適当にいい感じのやつを使いましょう。
悩んだら、この辺りをどうぞ
N100 RAM16GB ROM512GB(これの12GB版を使用中) https://amzn.to/45imDYc
N100 RAM12GB ROM256GB(投稿時は一番安いやつ) https://amzn.to/4md6ycd
これに、Ubuntu24.04.2 LTSを導入し、初期設定を済ませておいてください。
SSHで接続できるように、ローカル内の固定IPやSSH設定などもやっておくと良いでしょう。
Node.jsは20.15.1を使用します。(ダメなら、v18あたりにダウングレード予定)
一応、Pythonは3.6以上を推奨です。
デフォルトで入っているとは思いますが、GitHubも入れておきましょう。
共有フォルダを作成し、メインで使うPCからネットワーク上のフォルダ(共有フォルダ)として接続できるようにしておくと、開発環境として非常に便利です。
これらが完了したら、サーバーの環境設定はひとまず終わりです。
(ちなみに、現在は同じPCでLLMサーバーが稼働中です。呼び出されなければリソース使わないし、大丈夫だと思いたい)
今後は上記が完了している前提のもと、SSHで接続しつつ開発を行います。
Showdownを入れよう
一通りの設定が終わったら、さっそく構築に入りましょう。
共有フォルダに移動し、専用のフォルダを作っておきます。
私は「pokemon」というフォルダ名にしました。
mkdir pokemon
cd pokemon
このフォルダに、Showdownをクローンし、必要なモジュールをインストールします。
git clone https://github.com/smogon/pokemon-showdown.git
cd pokemon-showdown
npm install
コンフィグをコピーし、必要なファイルを作成後、サーバーを起動します。
デフォルトではポート8000で起動するので、必要に応じてconfig/config.jsのexports.portを調整しましょう。
私はウパーが好きなので、8058番とします。
また、160行目あたりのexports.loginserverは開発環境で何度もログイン施行を行うので、
exports.loginserver = 'http://play.pokemonshowdown.com/';
↓
//exports.loginserver = 'http://play.pokemonshowdown.com/';
exports.loginserver = null;
としておきましょう。
設定が終わったら、起動しましょう。
npm run start
起動できたらひとまずはOKです。
http://[PCのローカルIPアドレス]:8058
にブラウザでアクセスして、Showdownサーバーを確認しましょう。
ちなみに、cloudflare tunnelなどで解放してあげれば、外からのアクセスも可能です。
Pokedexに入っているGlitchとCAPの世代をはじけば、SVまでの全ポケモンを使った戦闘が可能となります。
GlitchとCAPの世代がいわゆる改造ポケモンやBWのショーで出てきたポケモンなので、対戦では絶対に出てきません。
感想など
正直、技や特性まで完備されてる時点で、Showdownプロジェクトが凄すぎますよね。
将来的には、各自が育成したAIやAIレギュのようなものができるのでしょうか?
将棋やチェスのように、AI大会とかも作ってみたいですね。
とりあえず、ここでは一通りの構築方法を、ある程度歯抜けにして載せていくと思いますので、いい感じに調べながら一緒にやっていきましょう。