とりあえず概形は作った。
nnt339es.hatenablog.com
導入方法
意外と面倒くさくて、実用的な目途が立ったら追記する。
起動方法
- パッケージルートにDecksディレクトリを作成する
- Decksにydkファイルを用意する
- 引数を渡して
app.py
を起動する。
引数確認方法
python app.py -h
起動コマンド例
python app.py --deck ThunderD --name myAI --port 7911
起動に成功するとDecksディレクトリにそのデッキ用のディレクトリが作成される
#ToDo
ydkファイルを読み込むディレクトリを指定できるようにする。
※注意※
python3.8
が必要。ライブラリはrequirements.pyを参照。
モジュールとして使う
# YGOEnvとDuelAgentをインポート from pyYGOenv import YGOEnv from pyYGOagent import DuelAgent def main(): deck: str = 'deck_name' host: str = '127.0.0.1' # ADSを起動してあるIPアドレス port: int = 7911 # ADSのポート version: int = 38 | 1<<8 | 8<<16 # ADSのバージョン(この例では38.1.8) name: str = 'AI' # ADSで表示する名前 # 環境を作成 collect_env = YGOEnv(deck, host, port, version, name+'_collect') eval_env = YGOEnv(deck, host, port+1, version, name+'_eval') # エージェントを作成 agent = DuelAgent(collect_env, eval_env) # 訓練 agent.train(1000) collect_env.close() eval_env.close() if __name__ == '__main__': main()
簡単な解説
pyYGO
遊戯王一般のオブジェクトを扱うパッケージ。
pyYGOenv
tf-agents.environments.py_environment.PyEnvironment仕様の環境
pyYGOnetwork
通信関連のパッケージ
pyYGOagent
エージェント関連のパッケージ
agent.py
エージェント本体
AIパラメータ
AI関連でいじるべきパラメータ
パラメータ | 説明 | 場所 |
---|
学習率
レイヤー構造
活性化関数
報酬
※注意※
未コーディング箇所
カウンター関連、シンクロ召喚、宣言系の処理は未コーディングなためゲーム中に発生するとエラーを投げてプログラムは終了する。
学習成果
コメントの#unknown
私もよくわからない部分なため質問されても困る箇所。
コーディングポリシー
- クラス名はキャピタライズ。
- 変数名は小文字、区切り文字はアンダーバー
_
。 - 処理で一時的に作成するtemporaryな変数以外はできるだけ詳しい変数名を付ける。英単語の省略もできるだけ避ける。
- 定数は全て大文字、列挙型Enumもすべて大文字。
- 関数名は小文字、区切り文字はアンダーバー
_
。 - 関数処理が大きくなる場合は、空行で処理をブロックに分ける。
- elif も複雑になって読みにくいようであれば空行で区切る。
- メソッド間は空行2つ分空ける。
- 型ヒントが必須の場所:引数、戻り値、初期化時のプロパティ
- 型ヒントが推奨される場所:関数内で初めて出てきた変数
- 型ヒントが非推奨な場所:プロパティへの代入時(selfうんぬんでコードが長くなって読みづらくなるから)
- 数字に意味があるなら定数に適切な名前を付けてラップする。(コメントを付けるぐらいならの意)