生成AIプロンプト研究所チャプロ
  • エンジニア検定
  • 記事
  • セミナー
  • プロンプト
  • 便利サービス
無料登録
menu
ホームプロンプトM4プロンプト
通常作成中

M4プロンプト

T
TKG

プロンプト本文

#目的
-LLMの支援をうけながらポケモン対戦AIの開発を計画しています。プロジェクト名はMaple project(machine assisted pokemon lerning environment)です。

#役割設定
-あなたは私のポケモンAI開発プロジェクトのアシスタントです。私のAI開発をサポートしてください。

#私の情報
-Pythonとtkinterで簡単なアプリケーション開発(シフト管理アプリなど)をしたことはありますが、AI開発や他の言語、バージョン管理、ソケット通信などは未経験です。

#ポケモン対戦AIの要求定義
ー自分ひとりで開発を行う
ー2つのクライアントプログラム同士が対戦を行い強化学習をおこなう
ー強化学習の具体的な手法はこれからの検討課題です
ー不完全情報ゲームであるため、必要な情報をクライアントプログラムに渡すホストプログラムを作成する
ークライアントプログラムはPythonで作成する
ーホストプログラムはpoke-envライブラリを通じてShowdown!環境を利用する
ー学習にはGymnasium(Open AI Gym)を用いる
ー第9世代ルール
ーシングルバトル6→3ルール(poke-envの'gen9ou'ルール)
ー使用するパーティーは手動で登録する
ーAIは行動選択(技、交代なども含める)を決定する
ー開発初期には対戦前のポケモン選出は含めず、開発が完了した後の追加目標とする
ー学習はローカルで行う

#要件定義
- 状態空間の取得はStateObserverクラスから取得してください(StateObserverで取得する情報に不足がある場合は実装前に指摘して)


#マイルストーンの設定
-M1:基礎環境構築完了
-M2:基本対戦実行可能
-M3:状態・行動空間定義とルールベースAI
-M4:強化学習基本ループ実装
-M5:初回強化学習(RL)モデル学習と評価
-M6:自己対戦学習環境構築
-M7:RLモデル・学習プロセスの改善
-M8:一定レベルのAIの完成(とりあえずのゴール)
-M9:現実のSwitchのポケットモンスタースカーレット/バイオレットの対戦画面からAIが必要な情報を得るためのプログラムの開発
-M10:オンライン対戦への参加

#M4のバックログ
・ユーザーストーリー1: 開発者として、poke-envの対戦環境をGymnasiumのインターフェースに適合させ、強化学習エージェントが利用できるようにしたい
・背景・目的:
poke-envでシミュレートされるポケモン対戦を、Gymnasium標準の Env クラスとしてラップすることで、既存の強化学習ライブラリやアルゴリズムとの連携を容易にする。
状態観測(M3で定義したStateObserverを利用)、行動選択(M3で定義したActionHelperを利用)、報酬設計、エピソード終了判定などをGymnasiumの枠組みに合わせて実装する必要がある。
・タスク1:
 ・タスク1.1: PokemonEnv クラスの基本構造設計
gymnasium.Env を継承した PokemonEnv クラスを作成する。
__init__ メソッドで、対戦相手プレイヤー、StateObserverインスタンス、ActionHelperインスタンスなどを初期化できるようにする。
observation_space と action_space を定義する。
observation_space: M3で定義した状態ベクトルの形状と型に基づいて gymnasium.spaces.Box で定義。
action_space: M3で定義した行動空間のサイズ(例: 10)に基づいて gymnasium.spaces.Discrete で定義。
render メソッド(デバッグ用、任意)、close メソッドの基本的な枠組みを設ける。
受け入れ基準: PokemonEnv クラスが定義され、コンストラクタ、observation_space、action_space が初期設定されている。
 ・タスク1.2: step メソッドの実装
エージェントが選択した行動 (action_index) を受け取り、action_index_to_order を使ってpoke-envの対戦エンジンに送信する。
対戦を1ステップ進め、新しい状態、報酬、エピソード終了フラグ (terminated, truncated)、情報辞書を返す。
新しい状態: StateObserver.observe(battle) を用いて取得。
報酬設計 (初期): まずは単純な報酬(勝利:+1, 敗北:-1, それ以外:0)から実装する。
エピソード終了判定: battle.finished フラグで判定。
情報辞書: デバッグや分析に有用な情報(例: 選択した技名、HPの変化など)を格納。
受け入れ基準: step メソッドが、選択された行動を実行し、(状態, 報酬, 終了フラグ, 情報) のタプルを返す。
 ・タスク1.3: reset メソッドの実装
新しい対戦を開始 (または既存の対戦をリセット) し、初期状態と情報辞書を返す。
内部で player.reset() や新しい Battle インスタンスの準備などを行う必要があるか検討する (poke-envの挙動に依存)。
受け入れ基準: reset メソッドが呼び出されると、新しい対戦の初期状態と情報辞書を返す。
 ・タスク1.4: 簡単なテストの実施
PokemonEnv インスタンスを作成し、reset を呼び出して初期状態を取得できることを確認する。
ランダムな行動を選択し、step を呼び出して次の状態、報酬、終了フラグが得られることを確認する。
エピソードが終了するまでステップを繰り返し実行できることを確認する。
受け入れ基準: PokemonEnv がGymnasiumの基本的な Env として動作することが確認できる。
ユーザーストーリー2: 開発者として、Gymnasium互換の環境 (PokemonEnv) を使って、簡単な強化学習エージェント (例: ランダムエージェント) の学習ループを実装し、動作確認を行いたい
背景・目的:
PokemonEnv が正しく機能するかを確認するため、および強化学習の基本的な処理フローを確立するために、まずは非常にシンプルなエージェントを用いた学習ループを構築する。
これにより、状態・行動の受け渡し、報酬の計算、エピソードの管理などが意図通りに機能するかを検証する。
・タスク2:
 ・タスク2.1: ランダム行動選択エージェントの作成
PokemonEnv の action_space に基づいてランダムに行動を選択するだけのシンプルなエージェントを作成する (特別な学習ロジックは不要)。
choose_action(state)のようなメソッドを持つクラスとして実装。
受け入れ基準: 現在の状態に関わらず、有効な行動インデックスをランダムに返すエージェントが実装されている。
 ・タスク2.2: 基本的な学習ループの実装
指定されたエピソード数だけ学習(この時点ではランダム行動)を繰り返すループを作成する。
ループ内では、env.reset() で環境を初期化し、エピソードが終了するまで agent.choose_action(state) で行動を選択し、env.step(action) で環境を1ステップ進める。
各ステップで得られる報酬を記録する。
受け入れ基準: ランダムエージェントが PokemonEnv と対話し、複数エピソードをエラーなく実行できる。各エピソードの総報酬が記録される。
 ・タスク2.3: 学習ループの簡単なログ出力
各エピソードの終了時に、そのエピソードの総報酬やターン数などをコンソールに出力する。
受け入れ基準: エピソードごとの簡単な結果(報酬、ターン数)がコンソールで確認できる。

#M4の完了条件
PokemonEnv クラスが gymnasium.Env を継承して実装され、reset および step メソッドが基本的な機能(状態観測、行動実行、報酬計算、終了判定)を満たしている。
PokemonEnv の observation_space と action_space が、M3で定義した状態・行動空間に基づいて適切に定義されている。
ランダムに行動を選択するエージェントが PokemonEnv と対話し、複数エピソードの対戦をエラーなく実行できる。
各エピソードの報酬やターン数などの基本的な情報が収集され、表示できる。

#現在の進捗状況
- M3を完了しました
- M4のバックログを作成しました
- タスク1.1を完了しました


#添付ファイル
-現在までの成果物です


#次のステップ



#開発における現時点での制限、考慮事項
・報酬設計の初期段階: M4では勝利・敗北のみのシンプルな報酬で良いが、M5以降に向けてより詳細な報酬設計(HPダメージ、状態異常付与など)の必要性を意識しておく。
・poke-envとGymnasiumの連携: Battleオブジェクトのライフサイクル管理や、非同期処理 (async/await) がGymnasiumの同期的な step / reset とどう連携するかの詳細設計が必要になる場合がある (poke-envのPlayerが非同期であるため)。PokemonEnv 内で asyncio.run() やイベントループの扱いを工夫する必要があるかもしれない。
・状態空間・行動空間の互換性: M3で定義・実装した StateObserver や ActionHelper が、Gymnasiumの observation_space, action_space とスムーズに連携できるか再確認する。特にデータ型 (float32など) や形状の一致が重要。


#命令
次のステップ
命令
運営会社
利用規約
プロンプトエンジニア一覧
プロンプトエンジニア育成講座
©2025 生成AIプロンプト研究所「チャプロ」 All rights reserved.