戦年年齢
Age of War AI、私が忌まわしい時間を費やしたプロジェクトであり、それは大規模なスパゲティコードに変わりました。それは私の最初の大きなプロジェクトであり、私がすべての分野で不足していた(そして今でもそうしている)ので、私がどれほど多くを学ばなければならなかったかを示しました。このプロジェクトのコンテキストで、私は次のことをしました:
プロジェクトを行わない方法
- Vanilla Age of Warゲームを取得し、ゲームが進むにつれてOpenCVライブラリを介してデータを抽出し、それをきちんとしたアルゴリズムに供給するモジュールを作成します。私が気付いていなかったのは、ゲームで30〜50人のエージェントを評価することで、セッションあたり10分の平均プレイタイムがトレーニングに非常に多くの時間がかかり、有意な結果が得られなかったということです。
- チートエンジンを取得し、この特定のゲームでは、誰がどんな理由を知っているかについては、フラッシュゲーム用の低いコンパイラを見つけて、値を取得するためのOpenCV全体を回避するためにテキストファイルを生成するスクリプトをゲームに挿入します。チートエンジンでゲームX2をスピードアップすることができたので、わずかに優れた結果を得ましたが、それでもたくさんありませんでした。
- 団結してください。私はすでにゲームコードへの道を見つけたので、すべてのITメカニクスをリバースエンジニアリングし、元のゲームとまったく同じパラメーターを持つUnityで非常に忠実なシミュレーションを作成しました。
- 10倍の速度で統一された50の環境をシミュレートし、これらすべての環境とそれぞれのアクションに神のきちんとしたマネージャーがいる私のpythonスクリプトでTCPを介して通信させます。ここで、私は実際にいくつかの重要な結果と戦略を発展させ、Yayで勝つことができました。しかし、私はMoeが欲しかった
- Unity MLエージェントを完全に切り替えて、PPOでPythonスクリプト、トレーニング、エージェントを基本的に放棄し、パラメーターを大量に切り替えた後に取得します。
- 元のゲームでそれをテストし、それが勝っていることを記録し、3週間以内に終了する可能性のあるプロジェクトで2か月を失ったことに気付きます
- 数学的なエンジンのマニムを使用して、きちんとした視覚化ライブラリを作成します。
ここでこの痛みの概要を見ることができます - 私はこのチャンネルに100%戻って少なくとも1mに戻りますが、今のところは追求すべき他の目標があります。
Python 3.7.9での実行
入力:
- 訓練中の部隊数(1つの入力)
- 敵HP-総健康の割合(1つの入力)
- 私のHP-全健康の割合(1つの入力)
- お金 - 基本単位コスト(Money/cost_of_basic_unit)(1入力)によって正規化
- XP-年齢をアップグレードできるかどうか(1つの入力)
- 能力をアクティブにすることができます-0〜1クールダウン(1入力)
- 地上の私の軍隊タイプ1、2、3、4(4つの入力)
- 地上の敵部隊タイプ1、2、3、4(4つの入力)
- 利用可能な大砲スロットの数(1つの入力)
- プレイヤー年齢-1つのホットエンコード(5つの入力)
- 敵の年齢-1つのホットエンコード(5つの入力)
- タレットと砲塔のあるアレイ年齢(最大4)
- 現在の戦いはどこにありますか(0-1あなたのベースから敵の基地)(1入力)
出力:
- 軍隊の作成ティア1、2、3(3アクション)
- 宇宙年齢のために部隊ティア4を作成する(1アクション)
- キャノンスロットを購入する(1アクション)
- キャノンティア1、2、3を購入する、最初に利用可能なスロット(3アクション)
- 特定のスロットで大砲を販売する(4アクション)
- 待機(1アクション)
- 能力を使用します
依存関係:
- numpy
- パドルOCR
- Open-CV
- scipy
- きちんとしたパイソン
pip install numpy paddlepaddle paddleocr opencv-python scipy neat-python
資産は、ゲームの解決を変更する場合にその特定の解決に対してのみ機能します。それに応じて資産のサイズを変更する必要があります(例:ゲームと資産をx%小さくする)
ここからゲームに使用したアーカイブをダウンロードできます