From 2430f9982e75052e5c227967fd82a84752aadf03 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 14 Nov 2023 14:54:44 +0100 Subject: [PATCH 01/28] Wall observations in python --- gym_microrts/envs/vec_env.py | 6 ++-- gym_microrts/microrts | 2 +- tests/test_e2e.py | 40 ++++++++++++------------ tests/test_observation.py | 60 ++++++++++++++++++++++++++---------- 4 files changed, 69 insertions(+), 39 deletions(-) diff --git a/gym_microrts/envs/vec_env.py b/gym_microrts/envs/vec_env.py index aed545fa..65f73bba 100644 --- a/gym_microrts/envs/vec_env.py +++ b/gym_microrts/envs/vec_env.py @@ -145,11 +145,11 @@ def __init__( # computed properties # [num_planes_hp(5), num_planes_resources(5), num_planes_player(3), - # num_planes_unit_type(z), num_planes_unit_action(6)] + # num_planes_unit_type(z), num_planes_unit_action(6), num_planes_terrain(2)] - self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6] + self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2] if partial_obs: - self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2] + self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2, 2] # 2 extra for visibility self.observation_space = gym.spaces.Box( low=0.0, high=1.0, shape=(self.height, self.width, sum(self.num_planes)), dtype=np.int32 ) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index 1e3b6639..d09e85a8 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit 1e3b6639b05c188767b4098c36813319b71222db +Subproject commit d09e85a8f77612151d0ce69bdb010af69a15fcee diff --git a/tests/test_e2e.py b/tests/test_e2e.py index 0746b538..db5833f2 100644 --- a/tests/test_e2e.py +++ b/tests/test_e2e.py @@ -14,22 +14,24 @@ def test_ppo_gridnet(): assert grepexc.returncode in [0, 134] -def test_ppo_gridnet_eval_selfplay(): - try: - subprocess.run( - "cd experiments; python ppo_gridnet_eval.py --num-steps 16 --total-timesteps 32 --cuda False", - shell=True, - check=True, - ) - except subprocess.CalledProcessError as grepexc: - print("error code", grepexc.returncode, grepexc.output) - assert grepexc.returncode in [0, 134] - - -def test_ppo_gridnet_eval_bot(): - - subprocess.run( - "cd experiments; python ppo_gridnet_eval.py --ai coacAI --num-steps 16 --total-timesteps 32 --cuda False", - shell=True, - check=True, - ) +# TODO need to add the two tests below back in once we have a new trained model + +# def test_ppo_gridnet_eval_selfplay(): +# try: +# subprocess.run( +# "cd experiments; python ppo_gridnet_eval.py --num-steps 16 --total-timesteps 32 --cuda False", +# shell=True, +# check=True, +# ) +# except subprocess.CalledProcessError as grepexc: +# print("error code", grepexc.returncode, grepexc.output) +# assert grepexc.returncode in [0, 134] +# +# +# def test_ppo_gridnet_eval_bot(): +# +# subprocess.run( +# "cd experiments; python ppo_gridnet_eval.py --ai coacAI --num-steps 16 --total-timesteps 32 --cuda False", +# shell=True, +# check=True, +# ) diff --git a/tests/test_observation.py b/tests/test_observation.py index 8e712269..1b439410 100644 --- a/tests/test_observation.py +++ b/tests/test_observation.py @@ -20,36 +20,40 @@ def test_observation(): # fmt: off next_obs = envs.reset() resource = np.array([ - 0., 1., 0., 0., 0., # 1 hp - 0., 0., 0., 0., 1., # >= 4 resources - 1., 0., 0., # no owner + 0., 1., 0., 0., 0., # 1 hp + 0., 0., 0., 0., 1., # >= 4 resources + 1., 0., 0., # no owner 0., 1., 0., 0., 0., 0., 0., 0., # unit type resource - 1., 0., 0., 0., 0., 0. # currently not executing actions + 1., 0., 0., 0., 0., 0., # currently not executing actions + 1., 0., # terrain: TERRAIN_NONE ]).astype(np.int32) p1_worker = np.array([ - 0., 1., 0., 0., 0., # 1 hp - 1., 0., 0., 0., 0., # 0 resources - 0., 1., 0., # player 1 owns it - 0., 0., 0., 0., 1., 0., 0., 0., # unit type worker - 1., 0., 0., 0., 0., 0. # currently not executing actions + 0., 1., 0., 0., 0., # 1 hp + 1., 0., 0., 0., 0., # 0 resources + 0., 1., 0., # player 1 owns it + 0., 0., 0., 0., 1., 0., 0., 0., # unit type worker + 1., 0., 0., 0., 0., 0., # currently not executing actions + 1., 0., # terrain: TERRAIN_NONE ]).astype(np.int32) p1_base = np.array([ 0., 0., 0., 0., 1., # 1 hp 1., 0., 0., 0., 0., # 0 resources 0., 1., 0., # player 1 owns it - 0., 0., 1., 0., 0., 0., 0., 0., # unit type base - 1., 0., 0., 0., 0., 0. # currently not executing actions + 0., 0., 1., 0., 0., 0., 0., 0., # unit type base + 1., 0., 0., 0., 0., 0., # currently not executing actions + 1., 0., # terrain: TERRAIN_NONE ]).astype(np.int32) p2_worker = p1_worker.copy() - p2_worker[10:13] = np.array([0., 0., 1.,]) # player 2 owns it + p2_worker[10:13] = np.array([0., 0., 1., ]) # player 2 owns it p2_base = p1_base.copy() - p2_base[10:13] = np.array([0., 0., 1.,]) # player 2 owns it + p2_base[10:13] = np.array([0., 0., 1., ]) # player 2 owns it empty_cell = np.array([ 1., 0., 0., 0., 0., # 0 hp 1., 0., 0., 0., 0., # 0 resources 1., 0., 0., # no owner - 1., 0., 0., 0., 0., 0., 0., 0., # unit type empty cell - 1., 0., 0., 0., 0., 0. # currently not executing actions + 1., 0., 0., 0., 0., 0., 0., 0., # unit type empty cell + 1., 0., 0., 0., 0., 0., # currently not executing actions + 1., 0., # terrain: TERRAIN_NONE ]).astype(np.int32) # fmt: on @@ -77,4 +81,28 @@ def test_observation(): for item in [resource, resource, p1_worker, p1_base, resource, resource, p2_worker, p2_base]: feature_sum += item.sum() feature_sum += empty_cell.sum() * (256 - 8) - assert next_obs.sum() == feature_sum * 2 == 2560.0 + assert next_obs.sum() == feature_sum * 2 == 3072.0 + + # test observation with walls + envs = MicroRTSGridModeVecEnv( + num_bot_envs=0, + num_selfplay_envs=2, + partial_obs=False, + max_steps=5000, + render_theme=2, + ai2s=[], + map_paths=["maps/barricades24x24.xml"], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + ) + # fmt: off + wall = np.array([ + 1., 0., 0., 0., 0., # 0 hp + 1., 0., 0., 0., 0., # 0 resources + 1., 0., 0., # no owner + 1., 0., 0., 0., 0., 0., 0., 0., # unit type `-` + 1., 0., 0., 0., 0., 0., # currently not executing actions + 0., 1., # terrain: TERRAIN_WALL + ]).astype(np.int32) + # fmt: on + next_obs = envs.reset() + np.testing.assert_array_equal(next_obs[0][6][6], wall) From 23a598daf938208e503c606694e1962c0af22011 Mon Sep 17 00:00:00 2001 From: Dennis Soemers Date: Tue, 14 Nov 2023 15:58:48 +0100 Subject: [PATCH 02/28] Update README.md --- README.md | 54 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index f2bc5c28..cc60fa58 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,7 @@ Formerly Gym-μRTS/Gym-MicroRTS [](https://discord.gg/DdJsrdry6F) -[]( -https://github.com/vwxyzjn/gym-microrts/actions) +[](https://github.com/Farama-Foundation/MicroRTS-Py/actions) []( https://pypi.org/project/gym-microrts/) @@ -64,7 +63,7 @@ Before diving into the code, we highly recommend reading the preprint of our pap ### Depreciation note -Note that the experiments in the technical paper above are done with [`gym_microrts==0.3.2`](https://github.com/vwxyzjn/gym-microrts/tree/v0.3.2). As we move forward beyond `v0.4.x`, we are planing to deprecate UAS despite its better performance in the paper. This is because UAS has more complex implementation and makes it really difficult to incorporate selfplay or imitation learning in the future. +Note that the experiments in the technical paper above are done with [`gym_microrts==0.3.2`](https://github.com/vwxyzjn/gym-microrts/tree/v0.3.2). As we move forward beyond `v0.4.x`, we are planning to deprecate UAS despite its better performance in the paper. This is because UAS has a more complex implementation and makes it really difficult to incorporate selfplay or imitation learning in the future. @@ -72,30 +71,51 @@ Note that the experiments in the technical paper above are done with [`gym_micro Here is a description of Gym-μRTS's observation and action space: -* **Observation Space.** (`Box(0, 1, (h, w, 27), int32)`) Given a map of size `h x w`, the observation is a tensor of shape `(h, w, n_f)`, where `n_f` is a number of feature planes that have binary values. The observation space used in this paper uses 27 feature planes as shown in the following table. A feature plane can be thought of as a concatenation of multiple one-hot encoded features. As an example, if there is a worker with hit points equal to 1, not carrying any resources, owner being Player 1, and currently not executing any actions, then the one-hot encoding features will look like the following: +* **Observation Space.** (`Box(0, 1, (h, w, 29), int32)`) Given a map of size `h x w`, the observation is a tensor of shape `(h, w, n_f)`, where `n_f` is a number of feature planes that have binary values. The observation space used in the original paper used 27 feature planes. Since then, 2 more feature planes (for terrain/walls) have been added, increasing the number of feature planes to 29, as shown below. A feature plane can be thought of as a concatenation of multiple one-hot encoded features. As an example, the unit at a cell could be encoded as follows: - `[0,1,0,0,0], [1,0,0,0,0], [1,0,0], [0,0,0,0,1,0,0,0], [1,0,0,0,0,0]` + * the unit has 1 hit point -> `[0,1,0,0,0]` + * the unit is not carrying any resources, -> `[1,0,0,0,0]` + * the unit is owned by Player 1 -> `[0,1,0]` + * the unit is a worker -> `[0,0,0,0,1,0,0,0]` + * the unit is not executing any actions -> `[1,0,0,0,0,0]` + * the unit is standing at free terrain cell -> `[1,0]` + The 29 values of each feature plane for the position in the map of such a worker will thus be: - The 27 values of each feature plane for the position in the map of such worker will thus be: + `[0,1,0,0,0, 1,0,0,0,0, 0,1,0, 0,0,0,0,1,0,0,0, 1,0,0,0,0,0, 1,0]` + +* **Partial Observation Space.** (`Box(0, 1, (h, w, 31), int32)`) under the partial observation space, there are two additional planes indicating if the unit is visible to the opponent. For example, if the unit is visible to the opponent, the feature plane will be `[0,1]`. If the unit is not visible to the opponent, the feature plane will be `[1,0]`. Using the example above and assuming that the worker unit is not visible to the opponent, then the 31 values of each feature plane for the position in the map of such worker will thus be: - `[0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0]` - -* **Partial Observation Space.** (`Box(0, 1, (h, w, 29), int32)`) Given a map of size `h x w`, the observation is a tensor of shape `(h, w, n_f)`, where `n_f` is a number of feature planes that have binary values. The observation space for partial observability uses 29 feature planes as shown in the following table. A feature plane can be thought of as a concatenation of multiple one-hot encoded features. As an example, if there is a worker with hit points equal to 1, not carrying any resources, owner being Player 1, currently not executing any actions, and not visible to the opponent, then the one-hot encoding features will look like the following: - - `[0,1,0,0,0], [1,0,0,0,0], [1,0,0], [0,0,0,0,1,0,0,0], [1,0,0,0,0,0], [1,0]` - - - The 29 values of each feature plane for the position in the map of such worker will thus be: - - `[0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0]` + `[0,1,0,0,0, 1,0,0,0,0, 0,1,0, 0,0,0,0,1,0,0,0, 1,0,0,0,0,0, 1,0, 1,0]` * **Action Space.** (`MultiDiscrete(concat(h * w * [[6 4 4 4 4 7 a_r]]))`) Given a map of size `h x w` and the maximum attack range `a_r=7`, the action is an (7hw)-dimensional vector of discrete values as specified in the following table. The first 7 component of the action vector represents the actions issued to the unit at `x=0,y=0`, and the second 7 component represents actions issued to the unit at `x=0,y=1`, etc. In these 7 components, the first component is the action type, and the rest of components represent the different parameters different action types can take. Depending on which action type is selected, the game engine will use the corresponding parameters to execute the action. As an example, if the RL agent issues a move south action to the worker at $x=0, y=1$ in a 2x2 map, the action will be encoded in the following way: `concat([0,0,0,0,0,0,0], [1,2,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0]]` `=[0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]` -![image](https://user-images.githubusercontent.com/5555347/120344517-a5bf7300-c2c7-11eb-81b6-172813ba8a0b.png) + + +Here are tables summarizing observation features and action components, where $a_r=7$ is the maximum attack range, and `-` means not applicable. + +| Observation Features | Planes | Description | +|-----------------------------|--------------------|----------------------------------------------------------| +| Hit Points | 5 | 0, 1, 2, 3, $\geq 4$ | +| Resources | 5 | 0, 1, 2, 3, $\geq 4$ | +| Owner | 3 | -,player 1, player 2 | +| Unit Types | 8 | -, resource, base, barrack, worker, light, heavy, ranged | +| Current Action | 6 | -, move, harvest, return, produce, attack | +| Terrain | 2 | free, wall | + +| Action Components | Range | Description | +|-----------------------------|--------------------|----------------------------------------------------------| +| Source Unit | $[0,h \times w-1]$ | the location of the unit selected to perform an action | +| Action Type | $[0,5]$ | NOOP, move, harvest, return, produce, attack | +| Move Parameter | $[0,3]$ | north, east, south, west | +| Harvest Parameter | $[0,3]$ | north, east, south, west | +| Return Parameter | $[0,3]$ | north, east, south, west | +| Produce Direction Parameter | $[0,3]$ | north, east, south, west | +| Produce Type Parameter | $[0,6]$ | resource, base, barrack, worker, light, heavy, ranged | +| Relative Attack Position | $[0,a_r^2 - 1]$ | the relative location of the unit that will be attacked | ## Evaluation From 6bfb91c6b7798042f2987dbe81a1b71313707a17 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Mon, 27 Nov 2023 16:06:02 +0100 Subject: [PATCH 03/28] also updated botenv --- README.md | 462 +++++++------- experiments/ppo_gridnet.py | 1132 +++++++++++++++++----------------- gym_microrts/envs/vec_env.py | 1112 ++++++++++++++++----------------- tests/test_e2e.py | 74 +-- tests/test_observation.py | 216 +++---- 5 files changed, 1498 insertions(+), 1498 deletions(-) diff --git a/README.md b/README.md index cc60fa58..9229192d 100644 --- a/README.md +++ b/README.md @@ -1,231 +1,231 @@ -

- -

- -Formerly Gym-μRTS/Gym-MicroRTS - -[](https://discord.gg/DdJsrdry6F) -[](https://github.com/Farama-Foundation/MicroRTS-Py/actions) -[]( -https://pypi.org/project/gym-microrts/) - -This repo contains the source code for the gym wrapper of μRTS authored by [Santiago Ontañón](https://github.com/santiontanon/microrts). - -MicroRTS-Py will eventually be updated, maintained, and made compliant with the standards of the Farama Foundation (https://farama.org/project_standards). However, this is currently a lower priority than other projects we're working to maintain. If you'd like to contribute to development, you can join our discord server here- https://discord.gg/jfERDCSw. - -![demo.gif](static/fullgame.gif) - -## Get Started - -Prerequisites: -* Python 3.8+ -* [Poetry](https://python-poetry.org) -* Java 8.0+ -* FFmpeg (for video recording utilities) - -```bash -$ git clone --recursive https://github.com/Farama-Foundation/MicroRTS-Py.git && \ -cd MicroRTS-Py -poetry install -# The `poetry install` command above creates a virtual environment for us, in which all the dependencies are installed. -# We can use `poetry shell` to create a new shell in which this environment is activated. Once we are done working with -# MicroRTS, we can leave it again using `exit`. -poetry shell -# By default, the torch wheel is built with CUDA 10.2. If you are using newer NVIDIA GPUs (e.g., 3060 TI), you may need to specifically install CUDA 11.3 wheels by overriding the torch dependency with pip: -# poetry run pip install "torch==1.12.1" --upgrade --extra-index-url https://download.pytorch.org/whl/cu113 -python hello_world.py -``` - -To train an agent, run the following - -```bash -cd experiments -python ppo_gridnet.py \ - --total-timesteps 100000000 \ - --capture-video \ - --seed 1 -``` - -[![asciicast](https://asciinema.org/a/586754.svg)](https://asciinema.org/a/586754) - -For running a partial observable example, tune the `partial_obs` argument. -```bash -cd experiments -python ppo_gridnet.py \ - --partial-obs \ - --capture-video \ - --seed 1 -``` - -## Technical Paper - -Before diving into the code, we highly recommend reading the preprint of our paper: [Gym-μRTS: Toward Affordable Deep Reinforcement Learning Research in Real-time Strategy Games](https://arxiv.org/abs/2105.13807). - -### Depreciation note - -Note that the experiments in the technical paper above are done with [`gym_microrts==0.3.2`](https://github.com/vwxyzjn/gym-microrts/tree/v0.3.2). As we move forward beyond `v0.4.x`, we are planning to deprecate UAS despite its better performance in the paper. This is because UAS has a more complex implementation and makes it really difficult to incorporate selfplay or imitation learning in the future. - - - -## Environment Specification - -Here is a description of Gym-μRTS's observation and action space: - -* **Observation Space.** (`Box(0, 1, (h, w, 29), int32)`) Given a map of size `h x w`, the observation is a tensor of shape `(h, w, n_f)`, where `n_f` is a number of feature planes that have binary values. The observation space used in the original paper used 27 feature planes. Since then, 2 more feature planes (for terrain/walls) have been added, increasing the number of feature planes to 29, as shown below. A feature plane can be thought of as a concatenation of multiple one-hot encoded features. As an example, the unit at a cell could be encoded as follows: - - * the unit has 1 hit point -> `[0,1,0,0,0]` - * the unit is not carrying any resources, -> `[1,0,0,0,0]` - * the unit is owned by Player 1 -> `[0,1,0]` - * the unit is a worker -> `[0,0,0,0,1,0,0,0]` - * the unit is not executing any actions -> `[1,0,0,0,0,0]` - * the unit is standing at free terrain cell -> `[1,0]` - - The 29 values of each feature plane for the position in the map of such a worker will thus be: - - `[0,1,0,0,0, 1,0,0,0,0, 0,1,0, 0,0,0,0,1,0,0,0, 1,0,0,0,0,0, 1,0]` - -* **Partial Observation Space.** (`Box(0, 1, (h, w, 31), int32)`) under the partial observation space, there are two additional planes indicating if the unit is visible to the opponent. For example, if the unit is visible to the opponent, the feature plane will be `[0,1]`. If the unit is not visible to the opponent, the feature plane will be `[1,0]`. Using the example above and assuming that the worker unit is not visible to the opponent, then the 31 values of each feature plane for the position in the map of such worker will thus be: - - `[0,1,0,0,0, 1,0,0,0,0, 0,1,0, 0,0,0,0,1,0,0,0, 1,0,0,0,0,0, 1,0, 1,0]` - -* **Action Space.** (`MultiDiscrete(concat(h * w * [[6 4 4 4 4 7 a_r]]))`) Given a map of size `h x w` and the maximum attack range `a_r=7`, the action is an (7hw)-dimensional vector of discrete values as specified in the following table. The first 7 component of the action vector represents the actions issued to the unit at `x=0,y=0`, and the second 7 component represents actions issued to the unit at `x=0,y=1`, etc. In these 7 components, the first component is the action type, and the rest of components represent the different parameters different action types can take. Depending on which action type is selected, the game engine will use the corresponding parameters to execute the action. As an example, if the RL agent issues a move south action to the worker at $x=0, y=1$ in a 2x2 map, the action will be encoded in the following way: - - `concat([0,0,0,0,0,0,0], [1,2,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0]]` - `=[0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]` - - - -Here are tables summarizing observation features and action components, where $a_r=7$ is the maximum attack range, and `-` means not applicable. - -| Observation Features | Planes | Description | -|-----------------------------|--------------------|----------------------------------------------------------| -| Hit Points | 5 | 0, 1, 2, 3, $\geq 4$ | -| Resources | 5 | 0, 1, 2, 3, $\geq 4$ | -| Owner | 3 | -,player 1, player 2 | -| Unit Types | 8 | -, resource, base, barrack, worker, light, heavy, ranged | -| Current Action | 6 | -, move, harvest, return, produce, attack | -| Terrain | 2 | free, wall | - -| Action Components | Range | Description | -|-----------------------------|--------------------|----------------------------------------------------------| -| Source Unit | $[0,h \times w-1]$ | the location of the unit selected to perform an action | -| Action Type | $[0,5]$ | NOOP, move, harvest, return, produce, attack | -| Move Parameter | $[0,3]$ | north, east, south, west | -| Harvest Parameter | $[0,3]$ | north, east, south, west | -| Return Parameter | $[0,3]$ | north, east, south, west | -| Produce Direction Parameter | $[0,3]$ | north, east, south, west | -| Produce Type Parameter | $[0,6]$ | resource, base, barrack, worker, light, heavy, ranged | -| Relative Attack Position | $[0,a_r^2 - 1]$ | the relative location of the unit that will be attacked | - -## Evaluation - -You can evaluate trained agents against a built-in bot: - -```bash -cd experiments -python ppo_gridnet_eval.py \ - --agent-model-path gym-microrts-static-files/agent_sota.pt \ - --ai coacAI -``` - -Alternatively, you can evaluate the trained RL bots against themselves - -```bash -cd experiments -python ppo_gridnet_eval.py \ - --agent-model-path gym-microrts-static-files/agent_sota.pt \ - --agent2-model-path gym-microrts-static-files/agent_sota.pt -``` - -### Evaluate Trueskill of the agents - -This repository already contains a preset Trueskill database in `experiments/league.db`. To evaluate a new AI, try running the following command, which will iteratively find good matches for `agent.pt` until the engine is confident `agent.pt`'s Trueskill (by having the agent's Trueskill sigma below `--highest-sigma 1.4`). - -```bash -cd experiments -python league.py --evals gym-microrts-static-files/agent_sota.pt --highest-sigma 1.4 --update-db False -``` - -To recreate the preset Trueskill database, start a round-robin Trueskill evaluation among built-in AIs by removing the database in `experiments/league.db`. -```bash -cd experiments -rm league.csv league.db -python league.py --evals randomBiasedAI workerRushAI lightRushAI coacAI -``` - -## Multi-maps support - -The training script allows you to train the agents with more than one maps and evaluate with more than one maps. Try executing: - -``` -cd experiments -python ppo_gridnet.py \ - --train-maps maps/16x16/basesWorkers16x16B.xml maps/16x16/basesWorkers16x16C.xml maps/16x16/basesWorkers16x16D.xml maps/16x16/basesWorkers16x16E.xml maps/16x16/basesWorkers16x16F.xml \ - --eval-maps maps/16x16/basesWorkers16x16B.xml maps/16x16/basesWorkers16x16C.xml maps/16x16/basesWorkers16x16D.xml maps/16x16/basesWorkers16x16E.xml maps/16x16/basesWorkers16x16F.xml -``` - -where `--train-maps` allows you to specify the training maps and `--eval-maps` the evaluation maps. `--train-maps` and `--eval-maps` do not have to match (so you can evaluate on maps the agent has never trained on before). - -## Known issues - -[ ] Rendering does not exactly work in macos. See https://github.com/jpype-project/jpype/issues/906 - -## Papers written using Gym-μRTS - -* AIIDE 2022 Strategy Games Workshop: [Transformers as Policies for Variable Action Environments](https://arxiv.org/abs/2301.03679) -* CoG 2021: [Gym-μRTS: Toward Affordable Deep Reinforcement Learning Research in Real-time Strategy Games](https://arxiv.org/abs/2105.13807), -* AAAI RLG 2021: [Generalization in Deep Reinforcement Learning with Real-time Strategy Games](http://aaai-rlg.mlanctot.info/papers/AAAI21-RLG_paper_33.pdf), -* AIIDE 2020 Strategy Games Workshop: [Action Guidance: Getting the Best of Training Agents with Sparse Rewards and Shaped Rewards](https://arxiv.org/abs/2010.03956), -* AIIDE 2019 Strategy Games Workshop: [Comparing Observation and Action Representations for Deep Reinforcement Learning in MicroRTS](https://arxiv.org/abs/1910.12134), - -## PettingZoo API - -We wrapped our Gym-µRTS simulator into a PettingZoo environment, which is defined in `gym_microrts/pettingzoo_api.py`. An example usage of the Gym-µRTS PettingZoo environment can be found in `hello_world_pettingzoo.py`. - - -## Cite this project - -To cite the Gym-µRTS simulator: - -```bibtex -@inproceedings{huang2021gym, - author = {Shengyi Huang and - Santiago Onta{\~{n}}{\'{o}}n and - Chris Bamford and - Lukasz Grela}, - title = {Gym-{\(\mathrm{\mu}\)}RTS: Toward Affordable Full Game Real-time Strategy - Games Research with Deep Reinforcement Learning}, - booktitle = {2021 {IEEE} Conference on Games (CoG), Copenhagen, Denmark, August - 17-20, 2021}, - pages = {671--678}, - publisher = {{IEEE}}, - year = {2021}, - url = {https://doi.org/10.1109/CoG52621.2021.9619076}, - doi = {10.1109/CoG52621.2021.9619076}, - timestamp = {Fri, 10 Dec 2021 10:41:01 +0100}, - biburl = {https://dblp.org/rec/conf/cig/HuangO0G21.bib}, - bibsource = {dblp computer science bibliography, https://dblp.org} -} -``` - -To cite the invalid action masking technique used in our training script: - -```bibtex -@inproceedings{huang2020closer, - author = {Shengyi Huang and - Santiago Onta{\~{n}}{\'{o}}n}, - editor = {Roman Bart{\'{a}}k and - Fazel Keshtkar and - Michael Franklin}, - title = {A Closer Look at Invalid Action Masking in Policy Gradient Algorithms}, - booktitle = {Proceedings of the Thirty-Fifth International Florida Artificial Intelligence - Research Society Conference, {FLAIRS} 2022, Hutchinson Island, Jensen - Beach, Florida, USA, May 15-18, 2022}, - year = {2022}, - url = {https://doi.org/10.32473/flairs.v35i.130584}, - doi = {10.32473/flairs.v35i.130584}, - timestamp = {Thu, 09 Jun 2022 16:44:11 +0200}, - biburl = {https://dblp.org/rec/conf/flairs/HuangO22.bib}, - bibsource = {dblp computer science bibliography, https://dblp.org} -} -``` +

+ +

+ +Formerly Gym-μRTS/Gym-MicroRTS + +[](https://discord.gg/DdJsrdry6F) +[](https://github.com/Farama-Foundation/MicroRTS-Py/actions) +[]( +https://pypi.org/project/gym-microrts/) + +This repo contains the source code for the gym wrapper of μRTS authored by [Santiago Ontañón](https://github.com/santiontanon/microrts). + +MicroRTS-Py will eventually be updated, maintained, and made compliant with the standards of the Farama Foundation (https://farama.org/project_standards). However, this is currently a lower priority than other projects we're working to maintain. If you'd like to contribute to development, you can join our discord server here- https://discord.gg/jfERDCSw. + +![demo.gif](static/fullgame.gif) + +## Get Started + +Prerequisites: +* Python 3.8+ +* [Poetry](https://python-poetry.org) +* Java 8.0+ +* FFmpeg (for video recording utilities) + +```bash +$ git clone --recursive https://github.com/Farama-Foundation/MicroRTS-Py.git && \ +cd MicroRTS-Py +poetry install +# The `poetry install` command above creates a virtual environment for us, in which all the dependencies are installed. +# We can use `poetry shell` to create a new shell in which this environment is activated. Once we are done working with +# MicroRTS, we can leave it again using `exit`. +poetry shell +# By default, the torch wheel is built with CUDA 10.2. If you are using newer NVIDIA GPUs (e.g., 3060 TI), you may need to specifically install CUDA 11.3 wheels by overriding the torch dependency with pip: +# poetry run pip install "torch==1.12.1" --upgrade --extra-index-url https://download.pytorch.org/whl/cu113 +python hello_world.py +``` + +To train an agent, run the following + +```bash +cd experiments +python ppo_gridnet.py \ + --total-timesteps 100000000 \ + --capture-video \ + --seed 1 +``` + +[![asciicast](https://asciinema.org/a/586754.svg)](https://asciinema.org/a/586754) + +For running a partial observable example, tune the `partial_obs` argument. +```bash +cd experiments +python ppo_gridnet.py \ + --partial-obs \ + --capture-video \ + --seed 1 +``` + +## Technical Paper + +Before diving into the code, we highly recommend reading the preprint of our paper: [Gym-μRTS: Toward Affordable Deep Reinforcement Learning Research in Real-time Strategy Games](https://arxiv.org/abs/2105.13807). + +### Depreciation note + +Note that the experiments in the technical paper above are done with [`gym_microrts==0.3.2`](https://github.com/vwxyzjn/gym-microrts/tree/v0.3.2). As we move forward beyond `v0.4.x`, we are planning to deprecate UAS despite its better performance in the paper. This is because UAS has a more complex implementation and makes it really difficult to incorporate selfplay or imitation learning in the future. + + + +## Environment Specification + +Here is a description of Gym-μRTS's observation and action space: + +* **Observation Space.** (`Box(0, 1, (h, w, 29), int32)`) Given a map of size `h x w`, the observation is a tensor of shape `(h, w, n_f)`, where `n_f` is a number of feature planes that have binary values. The observation space used in the original paper used 27 feature planes. Since then, 2 more feature planes (for terrain/walls) have been added, increasing the number of feature planes to 29, as shown below. A feature plane can be thought of as a concatenation of multiple one-hot encoded features. As an example, the unit at a cell could be encoded as follows: + + * the unit has 1 hit point -> `[0,1,0,0,0]` + * the unit is not carrying any resources, -> `[1,0,0,0,0]` + * the unit is owned by Player 1 -> `[0,1,0]` + * the unit is a worker -> `[0,0,0,0,1,0,0,0]` + * the unit is not executing any actions -> `[1,0,0,0,0,0]` + * the unit is standing at free terrain cell -> `[1,0]` + + The 29 values of each feature plane for the position in the map of such a worker will thus be: + + `[0,1,0,0,0, 1,0,0,0,0, 0,1,0, 0,0,0,0,1,0,0,0, 1,0,0,0,0,0, 1,0]` + +* **Partial Observation Space.** (`Box(0, 1, (h, w, 31), int32)`) under the partial observation space, there are two additional planes indicating if the unit is visible to the opponent. For example, if the unit is visible to the opponent, the feature plane will be `[0,1]`. If the unit is not visible to the opponent, the feature plane will be `[1,0]`. Using the example above and assuming that the worker unit is not visible to the opponent, then the 31 values of each feature plane for the position in the map of such worker will thus be: + + `[0,1,0,0,0, 1,0,0,0,0, 0,1,0, 0,0,0,0,1,0,0,0, 1,0,0,0,0,0, 1,0, 1,0]` + +* **Action Space.** (`MultiDiscrete(concat(h * w * [[6 4 4 4 4 7 a_r]]))`) Given a map of size `h x w` and the maximum attack range `a_r=7`, the action is an (7hw)-dimensional vector of discrete values as specified in the following table. The first 7 component of the action vector represents the actions issued to the unit at `x=0,y=0`, and the second 7 component represents actions issued to the unit at `x=0,y=1`, etc. In these 7 components, the first component is the action type, and the rest of components represent the different parameters different action types can take. Depending on which action type is selected, the game engine will use the corresponding parameters to execute the action. As an example, if the RL agent issues a move south action to the worker at $x=0, y=1$ in a 2x2 map, the action will be encoded in the following way: + + `concat([0,0,0,0,0,0,0], [1,2,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0]]` + `=[0,0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]` + + + +Here are tables summarizing observation features and action components, where $a_r=7$ is the maximum attack range, and `-` means not applicable. + +| Observation Features | Planes | Description | +|-----------------------------|--------------------|----------------------------------------------------------| +| Hit Points | 5 | 0, 1, 2, 3, $\geq 4$ | +| Resources | 5 | 0, 1, 2, 3, $\geq 4$ | +| Owner | 3 | -,player 1, player 2 | +| Unit Types | 8 | -, resource, base, barrack, worker, light, heavy, ranged | +| Current Action | 6 | -, move, harvest, return, produce, attack | +| Terrain | 2 | free, wall | + +| Action Components | Range | Description | +|-----------------------------|--------------------|----------------------------------------------------------| +| Source Unit | $[0,h \times w-1]$ | the location of the unit selected to perform an action | +| Action Type | $[0,5]$ | NOOP, move, harvest, return, produce, attack | +| Move Parameter | $[0,3]$ | north, east, south, west | +| Harvest Parameter | $[0,3]$ | north, east, south, west | +| Return Parameter | $[0,3]$ | north, east, south, west | +| Produce Direction Parameter | $[0,3]$ | north, east, south, west | +| Produce Type Parameter | $[0,6]$ | resource, base, barrack, worker, light, heavy, ranged | +| Relative Attack Position | $[0,a_r^2 - 1]$ | the relative location of the unit that will be attacked | + +## Evaluation + +You can evaluate trained agents against a built-in bot: + +```bash +cd experiments +python ppo_gridnet_eval.py \ + --agent-model-path gym-microrts-static-files/agent_sota.pt \ + --ai coacAI +``` + +Alternatively, you can evaluate the trained RL bots against themselves + +```bash +cd experiments +python ppo_gridnet_eval.py \ + --agent-model-path gym-microrts-static-files/agent_sota.pt \ + --agent2-model-path gym-microrts-static-files/agent_sota.pt +``` + +### Evaluate Trueskill of the agents + +This repository already contains a preset Trueskill database in `experiments/league.db`. To evaluate a new AI, try running the following command, which will iteratively find good matches for `agent.pt` until the engine is confident `agent.pt`'s Trueskill (by having the agent's Trueskill sigma below `--highest-sigma 1.4`). + +```bash +cd experiments +python league.py --evals gym-microrts-static-files/agent_sota.pt --highest-sigma 1.4 --update-db False +``` + +To recreate the preset Trueskill database, start a round-robin Trueskill evaluation among built-in AIs by removing the database in `experiments/league.db`. +```bash +cd experiments +rm league.csv league.db +python league.py --evals randomBiasedAI workerRushAI lightRushAI coacAI +``` + +## Multi-maps support + +The training script allows you to train the agents with more than one maps and evaluate with more than one maps. Try executing: + +``` +cd experiments +python ppo_gridnet.py \ + --train-maps maps/16x16/basesWorkers16x16B.xml maps/16x16/basesWorkers16x16C.xml maps/16x16/basesWorkers16x16D.xml maps/16x16/basesWorkers16x16E.xml maps/16x16/basesWorkers16x16F.xml \ + --eval-maps maps/16x16/basesWorkers16x16B.xml maps/16x16/basesWorkers16x16C.xml maps/16x16/basesWorkers16x16D.xml maps/16x16/basesWorkers16x16E.xml maps/16x16/basesWorkers16x16F.xml +``` + +where `--train-maps` allows you to specify the training maps and `--eval-maps` the evaluation maps. `--train-maps` and `--eval-maps` do not have to match (so you can evaluate on maps the agent has never trained on before). + +## Known issues + +[ ] Rendering does not exactly work in macos. See https://github.com/jpype-project/jpype/issues/906 + +## Papers written using Gym-μRTS + +* AIIDE 2022 Strategy Games Workshop: [Transformers as Policies for Variable Action Environments](https://arxiv.org/abs/2301.03679) +* CoG 2021: [Gym-μRTS: Toward Affordable Deep Reinforcement Learning Research in Real-time Strategy Games](https://arxiv.org/abs/2105.13807), +* AAAI RLG 2021: [Generalization in Deep Reinforcement Learning with Real-time Strategy Games](http://aaai-rlg.mlanctot.info/papers/AAAI21-RLG_paper_33.pdf), +* AIIDE 2020 Strategy Games Workshop: [Action Guidance: Getting the Best of Training Agents with Sparse Rewards and Shaped Rewards](https://arxiv.org/abs/2010.03956), +* AIIDE 2019 Strategy Games Workshop: [Comparing Observation and Action Representations for Deep Reinforcement Learning in MicroRTS](https://arxiv.org/abs/1910.12134), + +## PettingZoo API + +We wrapped our Gym-µRTS simulator into a PettingZoo environment, which is defined in `gym_microrts/pettingzoo_api.py`. An example usage of the Gym-µRTS PettingZoo environment can be found in `hello_world_pettingzoo.py`. + + +## Cite this project + +To cite the Gym-µRTS simulator: + +```bibtex +@inproceedings{huang2021gym, + author = {Shengyi Huang and + Santiago Onta{\~{n}}{\'{o}}n and + Chris Bamford and + Lukasz Grela}, + title = {Gym-{\(\mathrm{\mu}\)}RTS: Toward Affordable Full Game Real-time Strategy + Games Research with Deep Reinforcement Learning}, + booktitle = {2021 {IEEE} Conference on Games (CoG), Copenhagen, Denmark, August + 17-20, 2021}, + pages = {671--678}, + publisher = {{IEEE}}, + year = {2021}, + url = {https://doi.org/10.1109/CoG52621.2021.9619076}, + doi = {10.1109/CoG52621.2021.9619076}, + timestamp = {Fri, 10 Dec 2021 10:41:01 +0100}, + biburl = {https://dblp.org/rec/conf/cig/HuangO0G21.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} +``` + +To cite the invalid action masking technique used in our training script: + +```bibtex +@inproceedings{huang2020closer, + author = {Shengyi Huang and + Santiago Onta{\~{n}}{\'{o}}n}, + editor = {Roman Bart{\'{a}}k and + Fazel Keshtkar and + Michael Franklin}, + title = {A Closer Look at Invalid Action Masking in Policy Gradient Algorithms}, + booktitle = {Proceedings of the Thirty-Fifth International Florida Artificial Intelligence + Research Society Conference, {FLAIRS} 2022, Hutchinson Island, Jensen + Beach, Florida, USA, May 15-18, 2022}, + year = {2022}, + url = {https://doi.org/10.32473/flairs.v35i.130584}, + doi = {10.32473/flairs.v35i.130584}, + timestamp = {Thu, 09 Jun 2022 16:44:11 +0200}, + biburl = {https://dblp.org/rec/conf/flairs/HuangO22.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} +``` diff --git a/experiments/ppo_gridnet.py b/experiments/ppo_gridnet.py index 720d95bc..fd6cd8c2 100644 --- a/experiments/ppo_gridnet.py +++ b/experiments/ppo_gridnet.py @@ -1,566 +1,566 @@ -# http://proceedings.mlr.press/v97/han19a/han19a.pdf - -import argparse -import os -import random -import subprocess -import time -from distutils.util import strtobool -from typing import List - -import numpy as np -import pandas as pd -import torch -import torch.nn as nn -import torch.optim as optim -from gym.spaces import MultiDiscrete -from stable_baselines3.common.vec_env import VecEnvWrapper, VecMonitor, VecVideoRecorder -from torch.distributions.categorical import Categorical -from torch.utils.tensorboard import SummaryWriter - -from gym_microrts import microrts_ai -from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv - - -def parse_args(): - # fmt: off - parser = argparse.ArgumentParser() - parser.add_argument('--exp-name', type=str, default=os.path.basename(__file__).rstrip(".py"), - help='the name of this experiment') - parser.add_argument('--gym-id', type=str, default="MicroRTSGridModeVecEnv", - help='the id of the gym environment') - parser.add_argument('--learning-rate', type=float, default=2.5e-4, - help='the learning rate of the optimizer') - parser.add_argument('--seed', type=int, default=1, - help='seed of the experiment') - parser.add_argument('--total-timesteps', type=int, default=50000000, - help='total timesteps of the experiments') - parser.add_argument('--torch-deterministic', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help='if toggled, `torch.backends.cudnn.deterministic=False`') - parser.add_argument('--cuda', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help='if toggled, cuda will not be enabled by default') - parser.add_argument('--prod-mode', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='run the script in production mode and use wandb to log outputs') - parser.add_argument('--capture-video', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='whether to capture videos of the agent performances (check out `videos` folder)') - parser.add_argument('--wandb-project-name', type=str, default="gym-microrts", - help="the wandb's project name") - parser.add_argument('--wandb-entity', type=str, default=None, - help="the entity (team) of wandb's project") - - # Algorithm specific arguments - parser.add_argument('--partial-obs', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='if toggled, the game will have partial observability') - parser.add_argument('--n-minibatch', type=int, default=4, - help='the number of mini batch') - parser.add_argument('--num-bot-envs', type=int, default=0, - help='the number of bot game environment; 16 bot envs means 16 games') - parser.add_argument('--num-selfplay-envs', type=int, default=24, - help='the number of self play envs; 16 self play envs means 8 games') - parser.add_argument('--num-steps', type=int, default=256, - help='the number of steps per game environment') - parser.add_argument('--gamma', type=float, default=0.99, - help='the discount factor gamma') - parser.add_argument('--gae-lambda', type=float, default=0.95, - help='the lambda for the general advantage estimation') - parser.add_argument('--ent-coef', type=float, default=0.01, - help="coefficient of the entropy") - parser.add_argument('--vf-coef', type=float, default=0.5, - help="coefficient of the value function") - parser.add_argument('--max-grad-norm', type=float, default=0.5, - help='the maximum norm for the gradient clipping') - parser.add_argument('--clip-coef', type=float, default=0.1, - help="the surrogate clipping coefficient") - parser.add_argument('--update-epochs', type=int, default=4, - help="the K epochs to update the policy") - parser.add_argument('--kle-stop', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='If toggled, the policy updates will be early stopped w.r.t target-kl') - parser.add_argument('--kle-rollback', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='If toggled, the policy updates will roll back to previous policy if KL exceeds target-kl') - parser.add_argument('--target-kl', type=float, default=0.03, - help='the target-kl variable that is referred by --kl') - parser.add_argument('--gae', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help='Use GAE for advantage computation') - parser.add_argument('--norm-adv', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help="Toggles advantages normalization") - parser.add_argument('--anneal-lr', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help="Toggle learning rate annealing for policy and value networks") - parser.add_argument('--clip-vloss', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help='Toggles whether or not to use a clipped loss for the value function, as per the paper.') - parser.add_argument('--num-models', type=int, default=100, - help='the number of models saved') - parser.add_argument('--max-eval-workers', type=int, default=4, - help='the maximum number of eval workers (skips evaluation when set to 0)') - parser.add_argument('--train-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], - help='the list of maps used during training') - parser.add_argument('--eval-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], - help='the list of maps used during evaluation') - - args = parser.parse_args() - if not args.seed: - args.seed = int(time.time()) - args.num_envs = args.num_selfplay_envs + args.num_bot_envs - args.batch_size = int(args.num_envs * args.num_steps) - args.minibatch_size = int(args.batch_size // args.n_minibatch) - args.num_updates = args.total_timesteps // args.batch_size - args.save_frequency = max(1, int(args.num_updates // args.num_models)) - # fmt: on - return args - - -class MicroRTSStatsRecorder(VecEnvWrapper): - def __init__(self, env, gamma=0.99) -> None: - super().__init__(env) - self.gamma = gamma - - def reset(self): - obs = self.venv.reset() - self.raw_rewards = [[] for _ in range(self.num_envs)] - self.ts = np.zeros(self.num_envs, dtype=np.float32) - self.raw_discount_rewards = [[] for _ in range(self.num_envs)] - return obs - - def step_wait(self): - obs, rews, dones, infos = self.venv.step_wait() - newinfos = list(infos[:]) - for i in range(len(dones)): - self.raw_rewards[i] += [infos[i]["raw_rewards"]] - self.raw_discount_rewards[i] += [ - (self.gamma ** self.ts[i]) - * np.concatenate((infos[i]["raw_rewards"], infos[i]["raw_rewards"].sum()), axis=None) - ] - self.ts[i] += 1 - if dones[i]: - info = infos[i].copy() - raw_returns = np.array(self.raw_rewards[i]).sum(0) - raw_names = [str(rf) for rf in self.rfs] - raw_discount_returns = np.array(self.raw_discount_rewards[i]).sum(0) - raw_discount_names = ["discounted_" + str(rf) for rf in self.rfs] + ["discounted"] - info["microrts_stats"] = dict(zip(raw_names, raw_returns)) - info["microrts_stats"].update(dict(zip(raw_discount_names, raw_discount_returns))) - self.raw_rewards[i] = [] - self.raw_discount_rewards[i] = [] - self.ts[i] = 0 - newinfos[i] = info - return obs, rews, dones, newinfos - - -# ALGO LOGIC: initialize agent here: -class CategoricalMasked(Categorical): - def __init__(self, probs=None, logits=None, validate_args=None, masks=[], mask_value=None): - logits = torch.where(masks.bool(), logits, mask_value) - super(CategoricalMasked, self).__init__(probs, logits, validate_args) - - -class Transpose(nn.Module): - def __init__(self, permutation): - super().__init__() - self.permutation = permutation - - def forward(self, x): - return x.permute(self.permutation) - - -def layer_init(layer, std=np.sqrt(2), bias_const=0.0): - torch.nn.init.orthogonal_(layer.weight, std) - torch.nn.init.constant_(layer.bias, bias_const) - return layer - - -class Agent(nn.Module): - def __init__(self, envs, mapsize=16 * 16): - super(Agent, self).__init__() - self.mapsize = mapsize - h, w, c = envs.observation_space.shape - self.encoder = nn.Sequential( - Transpose((0, 3, 1, 2)), - layer_init(nn.Conv2d(c, 32, kernel_size=3, padding=1)), - nn.MaxPool2d(3, stride=2, padding=1), - nn.ReLU(), - layer_init(nn.Conv2d(32, 64, kernel_size=3, padding=1)), - nn.MaxPool2d(3, stride=2, padding=1), - nn.ReLU(), - ) - - self.actor = nn.Sequential( - layer_init(nn.ConvTranspose2d(64, 32, 3, stride=2, padding=1, output_padding=1)), - nn.ReLU(), - layer_init(nn.ConvTranspose2d(32, 78, 3, stride=2, padding=1, output_padding=1)), - Transpose((0, 2, 3, 1)), - ) - self.critic = nn.Sequential( - nn.Flatten(), - layer_init(nn.Linear(64 * 4 * 4, 128)), - nn.ReLU(), - layer_init(nn.Linear(128, 1), std=1), - ) - self.register_buffer("mask_value", torch.tensor(-1e8)) - - def get_action_and_value(self, x, action=None, invalid_action_masks=None, envs=None, device=None): - hidden = self.encoder(x) - logits = self.actor(hidden) - grid_logits = logits.reshape(-1, envs.action_plane_space.nvec.sum()) - split_logits = torch.split(grid_logits, envs.action_plane_space.nvec.tolist(), dim=1) - - if action is None: - invalid_action_masks = invalid_action_masks.view(-1, invalid_action_masks.shape[-1]) - split_invalid_action_masks = torch.split(invalid_action_masks, envs.action_plane_space.nvec.tolist(), dim=1) - multi_categoricals = [ - CategoricalMasked(logits=logits, masks=iam, mask_value=self.mask_value) - for (logits, iam) in zip(split_logits, split_invalid_action_masks) - ] - action = torch.stack([categorical.sample() for categorical in multi_categoricals]) - else: - invalid_action_masks = invalid_action_masks.view(-1, invalid_action_masks.shape[-1]) - action = action.view(-1, action.shape[-1]).T - split_invalid_action_masks = torch.split(invalid_action_masks, envs.action_plane_space.nvec.tolist(), dim=1) - multi_categoricals = [ - CategoricalMasked(logits=logits, masks=iam, mask_value=self.mask_value) - for (logits, iam) in zip(split_logits, split_invalid_action_masks) - ] - logprob = torch.stack([categorical.log_prob(a) for a, categorical in zip(action, multi_categoricals)]) - entropy = torch.stack([categorical.entropy() for categorical in multi_categoricals]) - num_predicted_parameters = len(envs.action_plane_space.nvec) - logprob = logprob.T.view(-1, self.mapsize, num_predicted_parameters) - entropy = entropy.T.view(-1, self.mapsize, num_predicted_parameters) - action = action.T.view(-1, self.mapsize, num_predicted_parameters) - return action, logprob.sum(1).sum(1), entropy.sum(1).sum(1), invalid_action_masks, self.critic(hidden) - - def get_value(self, x): - return self.critic(self.encoder(x)) - - -def run_evaluation(model_path: str, output_path: str, eval_maps: List[str]): - args = [ - "python", - "league.py", - "--evals", - model_path, - "--update-db", - "false", - "--cuda", - "false", - "--output-path", - output_path, - "--model-type", - "ppo_gridnet", - "--maps", - *eval_maps, - ] - fd = subprocess.Popen(args) - print(f"Evaluating {model_path}") - return_code = fd.wait() - assert return_code == 0 - return (model_path, output_path) - - -class TrueskillWriter: - def __init__(self, prod_mode, writer, league_path: str, league_step_path: str): - self.prod_mode = prod_mode - self.writer = writer - self.trueskill_df = pd.read_csv(league_path) - self.trueskill_step_df = pd.read_csv(league_step_path) - self.trueskill_step_df["type"] = self.trueskill_step_df["name"] - self.trueskill_step_df["step"] = 0 - # xxx(okachaiev): not sure we need this copy - self.preset_trueskill_step_df = self.trueskill_step_df.copy() - - def on_evaluation_done(self, future): - if future.cancelled(): - return - model_path, output_path = future.result() - league = pd.read_csv(output_path, index_col="name") - assert model_path in league.index - model_global_step = int(model_path.split("/")[-1][:-3]) - self.writer.add_scalar("charts/trueskill", league.loc[model_path]["trueskill"], model_global_step) - print(f"global_step={model_global_step}, trueskill={league.loc[model_path]['trueskill']}") - - # table visualization logic - if self.prod_mode: - trueskill_data = { - "name": league.loc[model_path].name, - "mu": league.loc[model_path]["mu"], - "sigma": league.loc[model_path]["sigma"], - "trueskill": league.loc[model_path]["trueskill"], - } - self.trueskill_df = self.trueskill_df.append(trueskill_data, ignore_index=True) - wandb.log({"trueskill": wandb.Table(dataframe=self.trueskill_df)}) - trueskill_data["type"] = "training" - trueskill_data["step"] = model_global_step - self.trueskill_step_df = self.trueskill_step_df.append(trueskill_data, ignore_index=True) - preset_trueskill_step_df_clone = self.preset_trueskill_step_df.copy() - preset_trueskill_step_df_clone["step"] = model_global_step - self.trueskill_step_df = self.trueskill_step_df.append(preset_trueskill_step_df_clone, ignore_index=True) - wandb.log({"trueskill_step": wandb.Table(dataframe=self.trueskill_step_df)}) - - -if __name__ == "__main__": - args = parse_args() - - print(f"Save frequency: {args.save_frequency}") - - # TRY NOT TO MODIFY: setup the environment - experiment_name = f"{args.gym_id}__{args.exp_name}__{args.seed}__{int(time.time())}" - if args.prod_mode: - import wandb - - run = wandb.init( - project=args.wandb_project_name, - entity=args.wandb_entity, - # sync_tensorboard=True, - config=vars(args), - name=experiment_name, - monitor_gym=True, - save_code=True, - ) - wandb.tensorboard.patch(save=False) - writer = SummaryWriter(f"runs/{experiment_name}") - writer.add_text( - "hyperparameters", "|param|value|\n|-|-|\n%s" % ("\n".join([f"|{key}|{value}|" for key, value in vars(args).items()])) - ) - - # TRY NOT TO MODIFY: seeding - device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") - - print(f"Device: {device}") - - random.seed(args.seed) - np.random.seed(args.seed) - torch.manual_seed(args.seed) - torch.backends.cudnn.deterministic = args.torch_deterministic - envs = MicroRTSGridModeVecEnv( - num_selfplay_envs=args.num_selfplay_envs, - num_bot_envs=args.num_bot_envs, - partial_obs=args.partial_obs, - max_steps=2000, - render_theme=2, - ai2s=[microrts_ai.coacAI for _ in range(args.num_bot_envs - 6)] - + [microrts_ai.randomBiasedAI for _ in range(min(args.num_bot_envs, 2))] - + [microrts_ai.lightRushAI for _ in range(min(args.num_bot_envs, 2))] - + [microrts_ai.workerRushAI for _ in range(min(args.num_bot_envs, 2))], - map_paths=[args.train_maps[0]], - reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), - cycle_maps=args.train_maps, - ) - envs = MicroRTSStatsRecorder(envs, args.gamma) - envs = VecMonitor(envs) - if args.capture_video: - envs = VecVideoRecorder( - envs, f"videos/{experiment_name}", record_video_trigger=lambda x: x % 100000 == 0, video_length=2000 - ) - assert isinstance(envs.action_space, MultiDiscrete), "only MultiDiscrete action space is supported" - - eval_executor = None - if args.max_eval_workers > 0: - from concurrent.futures import ThreadPoolExecutor - - eval_executor = ThreadPoolExecutor(max_workers=args.max_eval_workers, thread_name_prefix="league-eval-") - - agent = Agent(envs).to(device) - optimizer = optim.Adam(agent.parameters(), lr=args.learning_rate, eps=1e-5) - if args.anneal_lr: - # https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/ppo2/defaults.py#L20 - lr = lambda f: f * args.learning_rate - - # ALGO Logic: Storage for epoch data - mapsize = 16 * 16 - action_space_shape = (mapsize, len(envs.action_plane_space.nvec)) - invalid_action_shape = (mapsize, envs.action_plane_space.nvec.sum()) - - obs = torch.zeros((args.num_steps, args.num_envs) + envs.observation_space.shape).to(device) - actions = torch.zeros((args.num_steps, args.num_envs) + action_space_shape).to(device) - logprobs = torch.zeros((args.num_steps, args.num_envs)).to(device) - rewards = torch.zeros((args.num_steps, args.num_envs)).to(device) - dones = torch.zeros((args.num_steps, args.num_envs)).to(device) - values = torch.zeros((args.num_steps, args.num_envs)).to(device) - invalid_action_masks = torch.zeros((args.num_steps, args.num_envs) + invalid_action_shape).to(device) - # TRY NOT TO MODIFY: start the game - global_step = 0 - start_time = time.time() - # Note how `next_obs` and `next_done` are used; their usage is equivalent to - # https://github.com/ikostrikov/pytorch-a2c-ppo-acktr-gail/blob/84a7582477fb0d5c82ad6d850fe476829dddd2e1/a2c_ppo_acktr/storage.py#L60 - next_obs = torch.Tensor(envs.reset()).to(device) - next_done = torch.zeros(args.num_envs).to(device) - - # CRASH AND RESUME LOGIC: - starting_update = 1 - - if args.prod_mode and wandb.run.resumed: - starting_update = run.summary.get("charts/update") + 1 - global_step = starting_update * args.batch_size - api = wandb.Api() - run = api.run(f"{run.entity}/{run.project}/{run.id}") - model = run.file("agent.pt") - model.download(f"models/{experiment_name}/") - agent.load_state_dict(torch.load(f"models/{experiment_name}/agent.pt", map_location=device)) - agent.eval() - print(f"resumed at update {starting_update}") - - print("Model's state_dict:") - for param_tensor in agent.state_dict(): - print(param_tensor, "\t", agent.state_dict()[param_tensor].size()) - total_params = sum([param.nelement() for param in agent.parameters()]) - print("Model's total parameters:", total_params) - - # EVALUATION LOGIC: - trueskill_writer = TrueskillWriter( - args.prod_mode, writer, "gym-microrts-static-files/league.csv", "gym-microrts-static-files/league.csv" - ) - - for update in range(starting_update, args.num_updates + 1): - # Annealing the rate if instructed to do so. - if args.anneal_lr: - frac = 1.0 - (update - 1.0) / args.num_updates - lrnow = lr(frac) - optimizer.param_groups[0]["lr"] = lrnow - - # TRY NOT TO MODIFY: prepare the execution of the game. - for step in range(0, args.num_steps): - # envs.render() - global_step += 1 * args.num_envs - obs[step] = next_obs - dones[step] = next_done - # ALGO LOGIC: put action logic here - with torch.no_grad(): - invalid_action_masks[step] = torch.tensor(envs.get_action_mask()).to(device) - action, logproba, _, _, vs = agent.get_action_and_value( - next_obs, envs=envs, invalid_action_masks=invalid_action_masks[step], device=device - ) - values[step] = vs.flatten() - - actions[step] = action - logprobs[step] = logproba - try: - next_obs, rs, ds, infos = envs.step(action.cpu().numpy().reshape(envs.num_envs, -1)) - next_obs = torch.Tensor(next_obs).to(device) - except Exception as e: - e.printStackTrace() - raise - rewards[step], next_done = torch.Tensor(rs).to(device), torch.Tensor(ds).to(device) - - for info in infos: - if "episode" in info.keys(): - print(f"global_step={global_step}, episodic_return={info['episode']['r']}") - writer.add_scalar("charts/episodic_return", info["episode"]["r"], global_step) - writer.add_scalar("charts/episodic_length", info["episode"]["l"], global_step) - for key in info["microrts_stats"]: - writer.add_scalar(f"charts/episodic_return/{key}", info["microrts_stats"][key], global_step) - break - - # bootstrap reward if not done. reached the batch limit - with torch.no_grad(): - last_value = agent.get_value(next_obs).reshape(1, -1) - if args.gae: - advantages = torch.zeros_like(rewards).to(device) - lastgaelam = 0 - for t in reversed(range(args.num_steps)): - if t == args.num_steps - 1: - nextnonterminal = 1.0 - next_done - nextvalues = last_value - else: - nextnonterminal = 1.0 - dones[t + 1] - nextvalues = values[t + 1] - delta = rewards[t] + args.gamma * nextvalues * nextnonterminal - values[t] - advantages[t] = lastgaelam = delta + args.gamma * args.gae_lambda * nextnonterminal * lastgaelam - returns = advantages + values - else: - returns = torch.zeros_like(rewards).to(device) - for t in reversed(range(args.num_steps)): - if t == args.num_steps - 1: - nextnonterminal = 1.0 - next_done - next_return = last_value - else: - nextnonterminal = 1.0 - dones[t + 1] - next_return = returns[t + 1] - returns[t] = rewards[t] + args.gamma * nextnonterminal * next_return - advantages = returns - values - - # flatten the batch - b_obs = obs.reshape((-1,) + envs.observation_space.shape) - b_logprobs = logprobs.reshape(-1) - b_actions = actions.reshape((-1,) + action_space_shape) - b_advantages = advantages.reshape(-1) - b_returns = returns.reshape(-1) - b_values = values.reshape(-1) - b_invalid_action_masks = invalid_action_masks.reshape((-1,) + invalid_action_shape) - - # Optimizing the policy and value network - inds = np.arange( - args.batch_size, - ) - for i_epoch_pi in range(args.update_epochs): - np.random.shuffle(inds) - for start in range(0, args.batch_size, args.minibatch_size): - end = start + args.minibatch_size - minibatch_ind = inds[start:end] - mb_advantages = b_advantages[minibatch_ind] - if args.norm_adv: - mb_advantages = (mb_advantages - mb_advantages.mean()) / (mb_advantages.std() + 1e-8) - _, newlogproba, entropy, _, new_values = agent.get_action_and_value( - b_obs[minibatch_ind], b_actions.long()[minibatch_ind], b_invalid_action_masks[minibatch_ind], envs, device - ) - ratio = (newlogproba - b_logprobs[minibatch_ind]).exp() - - # Stats - approx_kl = (b_logprobs[minibatch_ind] - newlogproba).mean() - - # Policy loss - pg_loss1 = -mb_advantages * ratio - pg_loss2 = -mb_advantages * torch.clamp(ratio, 1 - args.clip_coef, 1 + args.clip_coef) - pg_loss = torch.max(pg_loss1, pg_loss2).mean() - entropy_loss = entropy.mean() - - # Value loss - new_values = new_values.view(-1) - if args.clip_vloss: - v_loss_unclipped = (new_values - b_returns[minibatch_ind]) ** 2 - v_clipped = b_values[minibatch_ind] + torch.clamp( - new_values - b_values[minibatch_ind], -args.clip_coef, args.clip_coef - ) - v_loss_clipped = (v_clipped - b_returns[minibatch_ind]) ** 2 - v_loss_max = torch.max(v_loss_unclipped, v_loss_clipped) - v_loss = 0.5 * v_loss_max.mean() - else: - v_loss = 0.5 * ((new_values - b_returns[minibatch_ind]) ** 2) - - loss = pg_loss - args.ent_coef * entropy_loss + v_loss * args.vf_coef - - optimizer.zero_grad() - loss.backward() - nn.utils.clip_grad_norm_(agent.parameters(), args.max_grad_norm) - optimizer.step() - - if (update - 1) % args.save_frequency == 0: - if not os.path.exists(f"models/{experiment_name}"): - os.makedirs(f"models/{experiment_name}") - torch.save(agent.state_dict(), f"models/{experiment_name}/agent.pt") - torch.save(agent.state_dict(), f"models/{experiment_name}/{global_step}.pt") - if args.prod_mode: - wandb.save(f"models/{experiment_name}/agent.pt", base_path=f"models/{experiment_name}", policy="now") - if eval_executor is not None: - future = eval_executor.submit( - run_evaluation, - f"models/{experiment_name}/{global_step}.pt", - f"runs/{experiment_name}/{global_step}.csv", - args.eval_maps, - ) - print(f"Queued models/{experiment_name}/{global_step}.pt") - future.add_done_callback(trueskill_writer.on_evaluation_done) - - # TRY NOT TO MODIFY: record rewards for plotting purposes - writer.add_scalar("charts/learning_rate", optimizer.param_groups[0]["lr"], global_step) - writer.add_scalar("charts/update", update, global_step) - writer.add_scalar("losses/value_loss", v_loss.detach().item(), global_step) - writer.add_scalar("losses/policy_loss", pg_loss.detach().item(), global_step) - writer.add_scalar("losses/entropy", entropy.detach().mean().item(), global_step) - writer.add_scalar("losses/approx_kl", approx_kl.detach().item(), global_step) - if args.kle_stop or args.kle_rollback: - writer.add_scalar("debug/pg_stop_iter", i_epoch_pi, global_step) - writer.add_scalar("charts/sps", int(global_step / (time.time() - start_time)), global_step) - print("SPS:", int(global_step / (time.time() - start_time))) - - if eval_executor is not None: - # shutdown pool of threads but make sure we finished scheduled evaluations - eval_executor.shutdown(wait=True, cancel_futures=False) - envs.close() - writer.close() +# http://proceedings.mlr.press/v97/han19a/han19a.pdf + +import argparse +import os +import random +import subprocess +import time +from distutils.util import strtobool +from typing import List + +import numpy as np +import pandas as pd +import torch +import torch.nn as nn +import torch.optim as optim +from gym.spaces import MultiDiscrete +from stable_baselines3.common.vec_env import VecEnvWrapper, VecMonitor, VecVideoRecorder +from torch.distributions.categorical import Categorical +from torch.utils.tensorboard import SummaryWriter + +from gym_microrts import microrts_ai +from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv + + +def parse_args(): + # fmt: off + parser = argparse.ArgumentParser() + parser.add_argument('--exp-name', type=str, default=os.path.basename(__file__).rstrip(".py"), + help='the name of this experiment') + parser.add_argument('--gym-id', type=str, default="MicroRTSGridModeVecEnv", + help='the id of the gym environment') + parser.add_argument('--learning-rate', type=float, default=2.5e-4, + help='the learning rate of the optimizer') + parser.add_argument('--seed', type=int, default=1, + help='seed of the experiment') + parser.add_argument('--total-timesteps', type=int, default=50000000, + help='total timesteps of the experiments') + parser.add_argument('--torch-deterministic', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='if toggled, `torch.backends.cudnn.deterministic=False`') + parser.add_argument('--cuda', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='if toggled, cuda will not be enabled by default') + parser.add_argument('--prod-mode', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='run the script in production mode and use wandb to log outputs') + parser.add_argument('--capture-video', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='whether to capture videos of the agent performances (check out `videos` folder)') + parser.add_argument('--wandb-project-name', type=str, default="gym-microrts", + help="the wandb's project name") + parser.add_argument('--wandb-entity', type=str, default=None, + help="the entity (team) of wandb's project") + + # Algorithm specific arguments + parser.add_argument('--partial-obs', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='if toggled, the game will have partial observability') + parser.add_argument('--n-minibatch', type=int, default=4, + help='the number of mini batch') + parser.add_argument('--num-bot-envs', type=int, default=0, + help='the number of bot game environment; 16 bot envs means 16 games') + parser.add_argument('--num-selfplay-envs', type=int, default=24, + help='the number of self play envs; 16 self play envs means 8 games') + parser.add_argument('--num-steps', type=int, default=256, + help='the number of steps per game environment') + parser.add_argument('--gamma', type=float, default=0.99, + help='the discount factor gamma') + parser.add_argument('--gae-lambda', type=float, default=0.95, + help='the lambda for the general advantage estimation') + parser.add_argument('--ent-coef', type=float, default=0.01, + help="coefficient of the entropy") + parser.add_argument('--vf-coef', type=float, default=0.5, + help="coefficient of the value function") + parser.add_argument('--max-grad-norm', type=float, default=0.5, + help='the maximum norm for the gradient clipping') + parser.add_argument('--clip-coef', type=float, default=0.1, + help="the surrogate clipping coefficient") + parser.add_argument('--update-epochs', type=int, default=4, + help="the K epochs to update the policy") + parser.add_argument('--kle-stop', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='If toggled, the policy updates will be early stopped w.r.t target-kl') + parser.add_argument('--kle-rollback', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='If toggled, the policy updates will roll back to previous policy if KL exceeds target-kl') + parser.add_argument('--target-kl', type=float, default=0.03, + help='the target-kl variable that is referred by --kl') + parser.add_argument('--gae', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='Use GAE for advantage computation') + parser.add_argument('--norm-adv', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help="Toggles advantages normalization") + parser.add_argument('--anneal-lr', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help="Toggle learning rate annealing for policy and value networks") + parser.add_argument('--clip-vloss', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='Toggles whether or not to use a clipped loss for the value function, as per the paper.') + parser.add_argument('--num-models', type=int, default=100, + help='the number of models saved') + parser.add_argument('--max-eval-workers', type=int, default=4, + help='the maximum number of eval workers (skips evaluation when set to 0)') + parser.add_argument('--train-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], + help='the list of maps used during training') + parser.add_argument('--eval-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], + help='the list of maps used during evaluation') + + args = parser.parse_args() + if not args.seed: + args.seed = int(time.time()) + args.num_envs = args.num_selfplay_envs + args.num_bot_envs + args.batch_size = int(args.num_envs * args.num_steps) + args.minibatch_size = int(args.batch_size // args.n_minibatch) + args.num_updates = args.total_timesteps // args.batch_size + args.save_frequency = max(1, int(args.num_updates // args.num_models)) + # fmt: on + return args + + +class MicroRTSStatsRecorder(VecEnvWrapper): + def __init__(self, env, gamma=0.99) -> None: + super().__init__(env) + self.gamma = gamma + + def reset(self): + obs = self.venv.reset() + self.raw_rewards = [[] for _ in range(self.num_envs)] + self.ts = np.zeros(self.num_envs, dtype=np.float32) + self.raw_discount_rewards = [[] for _ in range(self.num_envs)] + return obs + + def step_wait(self): + obs, rews, dones, infos = self.venv.step_wait() + newinfos = list(infos[:]) + for i in range(len(dones)): + self.raw_rewards[i] += [infos[i]["raw_rewards"]] + self.raw_discount_rewards[i] += [ + (self.gamma ** self.ts[i]) + * np.concatenate((infos[i]["raw_rewards"], infos[i]["raw_rewards"].sum()), axis=None) + ] + self.ts[i] += 1 + if dones[i]: + info = infos[i].copy() + raw_returns = np.array(self.raw_rewards[i]).sum(0) + raw_names = [str(rf) for rf in self.rfs] + raw_discount_returns = np.array(self.raw_discount_rewards[i]).sum(0) + raw_discount_names = ["discounted_" + str(rf) for rf in self.rfs] + ["discounted"] + info["microrts_stats"] = dict(zip(raw_names, raw_returns)) + info["microrts_stats"].update(dict(zip(raw_discount_names, raw_discount_returns))) + self.raw_rewards[i] = [] + self.raw_discount_rewards[i] = [] + self.ts[i] = 0 + newinfos[i] = info + return obs, rews, dones, newinfos + + +# ALGO LOGIC: initialize agent here: +class CategoricalMasked(Categorical): + def __init__(self, probs=None, logits=None, validate_args=None, masks=[], mask_value=None): + logits = torch.where(masks.bool(), logits, mask_value) + super(CategoricalMasked, self).__init__(probs, logits, validate_args) + + +class Transpose(nn.Module): + def __init__(self, permutation): + super().__init__() + self.permutation = permutation + + def forward(self, x): + return x.permute(self.permutation) + + +def layer_init(layer, std=np.sqrt(2), bias_const=0.0): + torch.nn.init.orthogonal_(layer.weight, std) + torch.nn.init.constant_(layer.bias, bias_const) + return layer + + +class Agent(nn.Module): + def __init__(self, envs, mapsize=16 * 16): + super(Agent, self).__init__() + self.mapsize = mapsize + h, w, c = envs.observation_space.shape + self.encoder = nn.Sequential( + Transpose((0, 3, 1, 2)), + layer_init(nn.Conv2d(c, 32, kernel_size=3, padding=1)), + nn.MaxPool2d(3, stride=2, padding=1), + nn.ReLU(), + layer_init(nn.Conv2d(32, 64, kernel_size=3, padding=1)), + nn.MaxPool2d(3, stride=2, padding=1), + nn.ReLU(), + ) + + self.actor = nn.Sequential( + layer_init(nn.ConvTranspose2d(64, 32, 3, stride=2, padding=1, output_padding=1)), + nn.ReLU(), + layer_init(nn.ConvTranspose2d(32, 78, 3, stride=2, padding=1, output_padding=1)), + Transpose((0, 2, 3, 1)), + ) + self.critic = nn.Sequential( + nn.Flatten(), + layer_init(nn.Linear(64 * 4 * 4, 128)), + nn.ReLU(), + layer_init(nn.Linear(128, 1), std=1), + ) + self.register_buffer("mask_value", torch.tensor(-1e8)) + + def get_action_and_value(self, x, action=None, invalid_action_masks=None, envs=None, device=None): + hidden = self.encoder(x) + logits = self.actor(hidden) + grid_logits = logits.reshape(-1, envs.action_plane_space.nvec.sum()) + split_logits = torch.split(grid_logits, envs.action_plane_space.nvec.tolist(), dim=1) + + if action is None: + invalid_action_masks = invalid_action_masks.view(-1, invalid_action_masks.shape[-1]) + split_invalid_action_masks = torch.split(invalid_action_masks, envs.action_plane_space.nvec.tolist(), dim=1) + multi_categoricals = [ + CategoricalMasked(logits=logits, masks=iam, mask_value=self.mask_value) + for (logits, iam) in zip(split_logits, split_invalid_action_masks) + ] + action = torch.stack([categorical.sample() for categorical in multi_categoricals]) + else: + invalid_action_masks = invalid_action_masks.view(-1, invalid_action_masks.shape[-1]) + action = action.view(-1, action.shape[-1]).T + split_invalid_action_masks = torch.split(invalid_action_masks, envs.action_plane_space.nvec.tolist(), dim=1) + multi_categoricals = [ + CategoricalMasked(logits=logits, masks=iam, mask_value=self.mask_value) + for (logits, iam) in zip(split_logits, split_invalid_action_masks) + ] + logprob = torch.stack([categorical.log_prob(a) for a, categorical in zip(action, multi_categoricals)]) + entropy = torch.stack([categorical.entropy() for categorical in multi_categoricals]) + num_predicted_parameters = len(envs.action_plane_space.nvec) + logprob = logprob.T.view(-1, self.mapsize, num_predicted_parameters) + entropy = entropy.T.view(-1, self.mapsize, num_predicted_parameters) + action = action.T.view(-1, self.mapsize, num_predicted_parameters) + return action, logprob.sum(1).sum(1), entropy.sum(1).sum(1), invalid_action_masks, self.critic(hidden) + + def get_value(self, x): + return self.critic(self.encoder(x)) + + +def run_evaluation(model_path: str, output_path: str, eval_maps: List[str]): + args = [ + "python", + "league.py", + "--evals", + model_path, + "--update-db", + "false", + "--cuda", + "false", + "--output-path", + output_path, + "--model-type", + "ppo_gridnet", + "--maps", + *eval_maps, + ] + fd = subprocess.Popen(args) + print(f"Evaluating {model_path}") + return_code = fd.wait() + assert return_code == 0 + return (model_path, output_path) + + +class TrueskillWriter: + def __init__(self, prod_mode, writer, league_path: str, league_step_path: str): + self.prod_mode = prod_mode + self.writer = writer + self.trueskill_df = pd.read_csv(league_path) + self.trueskill_step_df = pd.read_csv(league_step_path) + self.trueskill_step_df["type"] = self.trueskill_step_df["name"] + self.trueskill_step_df["step"] = 0 + # xxx(okachaiev): not sure we need this copy + self.preset_trueskill_step_df = self.trueskill_step_df.copy() + + def on_evaluation_done(self, future): + if future.cancelled(): + return + model_path, output_path = future.result() + league = pd.read_csv(output_path, index_col="name") + assert model_path in league.index + model_global_step = int(model_path.split("/")[-1][:-3]) + self.writer.add_scalar("charts/trueskill", league.loc[model_path]["trueskill"], model_global_step) + print(f"global_step={model_global_step}, trueskill={league.loc[model_path]['trueskill']}") + + # table visualization logic + if self.prod_mode: + trueskill_data = { + "name": league.loc[model_path].name, + "mu": league.loc[model_path]["mu"], + "sigma": league.loc[model_path]["sigma"], + "trueskill": league.loc[model_path]["trueskill"], + } + self.trueskill_df = self.trueskill_df.append(trueskill_data, ignore_index=True) + wandb.log({"trueskill": wandb.Table(dataframe=self.trueskill_df)}) + trueskill_data["type"] = "training" + trueskill_data["step"] = model_global_step + self.trueskill_step_df = self.trueskill_step_df.append(trueskill_data, ignore_index=True) + preset_trueskill_step_df_clone = self.preset_trueskill_step_df.copy() + preset_trueskill_step_df_clone["step"] = model_global_step + self.trueskill_step_df = self.trueskill_step_df.append(preset_trueskill_step_df_clone, ignore_index=True) + wandb.log({"trueskill_step": wandb.Table(dataframe=self.trueskill_step_df)}) + + +if __name__ == "__main__": + args = parse_args() + + print(f"Save frequency: {args.save_frequency}") + + # TRY NOT TO MODIFY: setup the environment + experiment_name = f"{args.gym_id}__{args.exp_name}__{args.seed}__{int(time.time())}" + if args.prod_mode: + import wandb + + run = wandb.init( + project=args.wandb_project_name, + entity=args.wandb_entity, + # sync_tensorboard=True, + config=vars(args), + name=experiment_name, + monitor_gym=True, + save_code=True, + ) + wandb.tensorboard.patch(save=False) + writer = SummaryWriter(f"runs/{experiment_name}") + writer.add_text( + "hyperparameters", "|param|value|\n|-|-|\n%s" % ("\n".join([f"|{key}|{value}|" for key, value in vars(args).items()])) + ) + + # TRY NOT TO MODIFY: seeding + device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") + + print(f"Device: {device}") + + random.seed(args.seed) + np.random.seed(args.seed) + torch.manual_seed(args.seed) + torch.backends.cudnn.deterministic = args.torch_deterministic + envs = MicroRTSGridModeVecEnv( + num_selfplay_envs=args.num_selfplay_envs, + num_bot_envs=args.num_bot_envs, + partial_obs=args.partial_obs, + max_steps=2000, + render_theme=2, + ai2s=[microrts_ai.coacAI for _ in range(args.num_bot_envs - 6)] + + [microrts_ai.randomBiasedAI for _ in range(min(args.num_bot_envs, 2))] + + [microrts_ai.lightRushAI for _ in range(min(args.num_bot_envs, 2))] + + [microrts_ai.workerRushAI for _ in range(min(args.num_bot_envs, 2))], + map_paths=[args.train_maps[0]], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + cycle_maps=args.train_maps, + ) + envs = MicroRTSStatsRecorder(envs, args.gamma) + envs = VecMonitor(envs) + if args.capture_video: + envs = VecVideoRecorder( + envs, f"videos/{experiment_name}", record_video_trigger=lambda x: x % 100000 == 0, video_length=2000 + ) + assert isinstance(envs.action_space, MultiDiscrete), "only MultiDiscrete action space is supported" + + eval_executor = None + if args.max_eval_workers > 0: + from concurrent.futures import ThreadPoolExecutor + + eval_executor = ThreadPoolExecutor(max_workers=args.max_eval_workers, thread_name_prefix="league-eval-") + + agent = Agent(envs).to(device) + optimizer = optim.Adam(agent.parameters(), lr=args.learning_rate, eps=1e-5) + if args.anneal_lr: + # https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/ppo2/defaults.py#L20 + lr = lambda f: f * args.learning_rate + + # ALGO Logic: Storage for epoch data + mapsize = 16 * 16 + action_space_shape = (mapsize, len(envs.action_plane_space.nvec)) + invalid_action_shape = (mapsize, envs.action_plane_space.nvec.sum()) + + obs = torch.zeros((args.num_steps, args.num_envs) + envs.observation_space.shape).to(device) + actions = torch.zeros((args.num_steps, args.num_envs) + action_space_shape).to(device) + logprobs = torch.zeros((args.num_steps, args.num_envs)).to(device) + rewards = torch.zeros((args.num_steps, args.num_envs)).to(device) + dones = torch.zeros((args.num_steps, args.num_envs)).to(device) + values = torch.zeros((args.num_steps, args.num_envs)).to(device) + invalid_action_masks = torch.zeros((args.num_steps, args.num_envs) + invalid_action_shape).to(device) + # TRY NOT TO MODIFY: start the game + global_step = 0 + start_time = time.time() + # Note how `next_obs` and `next_done` are used; their usage is equivalent to + # https://github.com/ikostrikov/pytorch-a2c-ppo-acktr-gail/blob/84a7582477fb0d5c82ad6d850fe476829dddd2e1/a2c_ppo_acktr/storage.py#L60 + next_obs = torch.Tensor(envs.reset()).to(device) + next_done = torch.zeros(args.num_envs).to(device) + + # CRASH AND RESUME LOGIC: + starting_update = 1 + + if args.prod_mode and wandb.run.resumed: + starting_update = run.summary.get("charts/update") + 1 + global_step = starting_update * args.batch_size + api = wandb.Api() + run = api.run(f"{run.entity}/{run.project}/{run.id}") + model = run.file("agent.pt") + model.download(f"models/{experiment_name}/") + agent.load_state_dict(torch.load(f"models/{experiment_name}/agent.pt", map_location=device)) + agent.eval() + print(f"resumed at update {starting_update}") + + print("Model's state_dict:") + for param_tensor in agent.state_dict(): + print(param_tensor, "\t", agent.state_dict()[param_tensor].size()) + total_params = sum([param.nelement() for param in agent.parameters()]) + print("Model's total parameters:", total_params) + + # EVALUATION LOGIC: + trueskill_writer = TrueskillWriter( + args.prod_mode, writer, "gym-microrts-static-files/league.csv", "gym-microrts-static-files/league.csv" + ) + + for update in range(starting_update, args.num_updates + 1): + # Annealing the rate if instructed to do so. + if args.anneal_lr: + frac = 1.0 - (update - 1.0) / args.num_updates + lrnow = lr(frac) + optimizer.param_groups[0]["lr"] = lrnow + + # TRY NOT TO MODIFY: prepare the execution of the game. + for step in range(0, args.num_steps): + # envs.render() + global_step += 1 * args.num_envs + obs[step] = next_obs + dones[step] = next_done + # ALGO LOGIC: put action logic here + with torch.no_grad(): + invalid_action_masks[step] = torch.tensor(envs.get_action_mask()).to(device) + action, logproba, _, _, vs = agent.get_action_and_value( + next_obs, envs=envs, invalid_action_masks=invalid_action_masks[step], device=device + ) + values[step] = vs.flatten() + + actions[step] = action + logprobs[step] = logproba + try: + next_obs, rs, ds, infos = envs.step(action.cpu().numpy().reshape(envs.num_envs, -1)) + next_obs = torch.Tensor(next_obs).to(device) + except Exception as e: + e.printStackTrace() + raise + rewards[step], next_done = torch.Tensor(rs).to(device), torch.Tensor(ds).to(device) + + for info in infos: + if "episode" in info.keys(): + print(f"global_step={global_step}, episodic_return={info['episode']['r']}") + writer.add_scalar("charts/episodic_return", info["episode"]["r"], global_step) + writer.add_scalar("charts/episodic_length", info["episode"]["l"], global_step) + for key in info["microrts_stats"]: + writer.add_scalar(f"charts/episodic_return/{key}", info["microrts_stats"][key], global_step) + break + + # bootstrap reward if not done. reached the batch limit + with torch.no_grad(): + last_value = agent.get_value(next_obs).reshape(1, -1) + if args.gae: + advantages = torch.zeros_like(rewards).to(device) + lastgaelam = 0 + for t in reversed(range(args.num_steps)): + if t == args.num_steps - 1: + nextnonterminal = 1.0 - next_done + nextvalues = last_value + else: + nextnonterminal = 1.0 - dones[t + 1] + nextvalues = values[t + 1] + delta = rewards[t] + args.gamma * nextvalues * nextnonterminal - values[t] + advantages[t] = lastgaelam = delta + args.gamma * args.gae_lambda * nextnonterminal * lastgaelam + returns = advantages + values + else: + returns = torch.zeros_like(rewards).to(device) + for t in reversed(range(args.num_steps)): + if t == args.num_steps - 1: + nextnonterminal = 1.0 - next_done + next_return = last_value + else: + nextnonterminal = 1.0 - dones[t + 1] + next_return = returns[t + 1] + returns[t] = rewards[t] + args.gamma * nextnonterminal * next_return + advantages = returns - values + + # flatten the batch + b_obs = obs.reshape((-1,) + envs.observation_space.shape) + b_logprobs = logprobs.reshape(-1) + b_actions = actions.reshape((-1,) + action_space_shape) + b_advantages = advantages.reshape(-1) + b_returns = returns.reshape(-1) + b_values = values.reshape(-1) + b_invalid_action_masks = invalid_action_masks.reshape((-1,) + invalid_action_shape) + + # Optimizing the policy and value network + inds = np.arange( + args.batch_size, + ) + for i_epoch_pi in range(args.update_epochs): + np.random.shuffle(inds) + for start in range(0, args.batch_size, args.minibatch_size): + end = start + args.minibatch_size + minibatch_ind = inds[start:end] + mb_advantages = b_advantages[minibatch_ind] + if args.norm_adv: + mb_advantages = (mb_advantages - mb_advantages.mean()) / (mb_advantages.std() + 1e-8) + _, newlogproba, entropy, _, new_values = agent.get_action_and_value( + b_obs[minibatch_ind], b_actions.long()[minibatch_ind], b_invalid_action_masks[minibatch_ind], envs, device + ) + ratio = (newlogproba - b_logprobs[minibatch_ind]).exp() + + # Stats + approx_kl = (b_logprobs[minibatch_ind] - newlogproba).mean() + + # Policy loss + pg_loss1 = -mb_advantages * ratio + pg_loss2 = -mb_advantages * torch.clamp(ratio, 1 - args.clip_coef, 1 + args.clip_coef) + pg_loss = torch.max(pg_loss1, pg_loss2).mean() + entropy_loss = entropy.mean() + + # Value loss + new_values = new_values.view(-1) + if args.clip_vloss: + v_loss_unclipped = (new_values - b_returns[minibatch_ind]) ** 2 + v_clipped = b_values[minibatch_ind] + torch.clamp( + new_values - b_values[minibatch_ind], -args.clip_coef, args.clip_coef + ) + v_loss_clipped = (v_clipped - b_returns[minibatch_ind]) ** 2 + v_loss_max = torch.max(v_loss_unclipped, v_loss_clipped) + v_loss = 0.5 * v_loss_max.mean() + else: + v_loss = 0.5 * ((new_values - b_returns[minibatch_ind]) ** 2) + + loss = pg_loss - args.ent_coef * entropy_loss + v_loss * args.vf_coef + + optimizer.zero_grad() + loss.backward() + nn.utils.clip_grad_norm_(agent.parameters(), args.max_grad_norm) + optimizer.step() + + if (update - 1) % args.save_frequency == 0: + if not os.path.exists(f"models/{experiment_name}"): + os.makedirs(f"models/{experiment_name}") + torch.save(agent.state_dict(), f"models/{experiment_name}/agent.pt") + torch.save(agent.state_dict(), f"models/{experiment_name}/{global_step}.pt") + if args.prod_mode: + wandb.save(f"models/{experiment_name}/agent.pt", base_path=f"models/{experiment_name}", policy="now") + if eval_executor is not None: + future = eval_executor.submit( + run_evaluation, + f"models/{experiment_name}/{global_step}.pt", + f"runs/{experiment_name}/{global_step}.csv", + args.eval_maps, + ) + print(f"Queued models/{experiment_name}/{global_step}.pt") + future.add_done_callback(trueskill_writer.on_evaluation_done) + + # TRY NOT TO MODIFY: record rewards for plotting purposes + writer.add_scalar("charts/learning_rate", optimizer.param_groups[0]["lr"], global_step) + writer.add_scalar("charts/update", update, global_step) + writer.add_scalar("losses/value_loss", v_loss.detach().item(), global_step) + writer.add_scalar("losses/policy_loss", pg_loss.detach().item(), global_step) + writer.add_scalar("losses/entropy", entropy.detach().mean().item(), global_step) + writer.add_scalar("losses/approx_kl", approx_kl.detach().item(), global_step) + if args.kle_stop or args.kle_rollback: + writer.add_scalar("debug/pg_stop_iter", i_epoch_pi, global_step) + writer.add_scalar("charts/sps", int(global_step / (time.time() - start_time)), global_step) + print("SPS:", int(global_step / (time.time() - start_time))) + + if eval_executor is not None: + # shutdown pool of threads but make sure we finished scheduled evaluations + eval_executor.shutdown(wait=True, cancel_futures=False) + envs.close() + writer.close() diff --git a/gym_microrts/envs/vec_env.py b/gym_microrts/envs/vec_env.py index 65f73bba..0ebd75ac 100644 --- a/gym_microrts/envs/vec_env.py +++ b/gym_microrts/envs/vec_env.py @@ -1,556 +1,556 @@ -import json -import os -import subprocess -import sys -import warnings -import xml.etree.ElementTree as ET -from itertools import cycle - -import gym -import jpype -import jpype.imports -import numpy as np -from jpype.imports import registerDomain -from jpype.types import JArray, JInt -from PIL import Image - -import gym_microrts - -MICRORTS_CLONE_MESSAGE = """ -WARNING: the repository does not include the microrts git submodule. -Executing `git submodule update --init --recursive` to clone it now. -""" - -MICRORTS_MAC_OS_RENDER_MESSAGE = """ -gym-microrts render is not available on MacOS. See https://github.com/jpype-project/jpype/issues/906 - -It is however possible to record the videos via `env.render(mode='rgb_array')`. -See https://github.com/vwxyzjn/gym-microrts/blob/b46c0815efd60ae959b70c14659efb95ef16ffb0/hello_world_record_video.py -as an example. -""" - - -class MicroRTSGridModeVecEnv: - metadata = {"render.modes": ["human", "rgb_array"], "video.frames_per_second": 150} - """ - [[0]x_coordinate*y_coordinate(x*y), [1]a_t(6), [2]p_move(4), [3]p_harvest(4), - [4]p_return(4), [5]p_produce_direction(4), [6]p_produce_unit_type(z), - [7]x_coordinate*y_coordinate(x*y)] - Create a baselines VecEnv environment from a gym3 environment. - :param env: gym3 environment to adapt - """ - - def __init__( - self, - num_selfplay_envs, - num_bot_envs, - partial_obs=False, - max_steps=2000, - render_theme=2, - frame_skip=0, - ai2s=[], - map_paths=["maps/10x10/basesTwoWorkers10x10.xml"], - reward_weight=np.array([0.0, 1.0, 0.0, 0.0, 0.0, 5.0]), - cycle_maps=[], - autobuild=True, - jvm_args=[], - ): - - self.num_selfplay_envs = num_selfplay_envs - self.num_bot_envs = num_bot_envs - self.num_envs = num_selfplay_envs + num_bot_envs - assert self.num_bot_envs == len(ai2s), "for each environment, a microrts ai should be provided" - self.partial_obs = partial_obs - self.max_steps = max_steps - self.render_theme = render_theme - self.frame_skip = frame_skip - self.ai2s = ai2s - self.map_paths = map_paths - if len(map_paths) == 1: - self.map_paths = [map_paths[0] for _ in range(self.num_envs)] - else: - assert ( - len(map_paths) == self.num_envs - ), "if multiple maps are provided, they should be provided for each environment" - self.reward_weight = reward_weight - - self.microrts_path = os.path.join(gym_microrts.__path__[0], "microrts") - - # prepare training maps - self.cycle_maps = list(map(lambda i: os.path.join(self.microrts_path, i), cycle_maps)) - self.next_map = cycle(self.cycle_maps) - - if not os.path.exists(f"{self.microrts_path}/README.md"): - print(MICRORTS_CLONE_MESSAGE) - os.system(f"git submodule update --init --recursive") - - if autobuild: - print(f"removing {self.microrts_path}/microrts.jar...") - if os.path.exists(f"{self.microrts_path}/microrts.jar"): - os.remove(f"{self.microrts_path}/microrts.jar") - print(f"building {self.microrts_path}/microrts.jar...") - root_dir = os.path.dirname(gym_microrts.__path__[0]) - print(root_dir) - subprocess.run(["bash", "build.sh", "&>", "build.log"], cwd=f"{root_dir}") - - # read map - root = ET.parse(os.path.join(self.microrts_path, self.map_paths[0])).getroot() - self.height, self.width = int(root.get("height")), int(root.get("width")) - - # launch the JVM - if not jpype._jpype.isStarted(): - registerDomain("ts", alias="tests") - registerDomain("ai") - jars = [ - "microrts.jar", - "lib/bots/Coac.jar", - "lib/bots/Droplet.jar", - "lib/bots/GRojoA3N.jar", - "lib/bots/Izanagi.jar", - "lib/bots/MixedBot.jar", - "lib/bots/TiamatBot.jar", - "lib/bots/UMSBot.jar", - "lib/bots/mayariBot.jar", # "MindSeal.jar" - ] - for jar in jars: - jpype.addClassPath(os.path.join(self.microrts_path, jar)) - jpype.startJVM(*jvm_args, convertStrings=False) - - # start microrts client - from rts.units import UnitTypeTable - - self.real_utt = UnitTypeTable() - from ai.reward import ( - AttackRewardFunction, - ProduceBuildingRewardFunction, - ProduceCombatUnitRewardFunction, - ProduceWorkerRewardFunction, - ResourceGatherRewardFunction, - RewardFunctionInterface, - WinLossRewardFunction, - ) - - self.rfs = JArray(RewardFunctionInterface)( - [ - WinLossRewardFunction(), - ResourceGatherRewardFunction(), - ProduceWorkerRewardFunction(), - ProduceBuildingRewardFunction(), - AttackRewardFunction(), - ProduceCombatUnitRewardFunction(), - # CloserToEnemyBaseRewardFunction(), - ] - ) - self.start_client() - - # computed properties - # [num_planes_hp(5), num_planes_resources(5), num_planes_player(3), - # num_planes_unit_type(z), num_planes_unit_action(6), num_planes_terrain(2)] - - self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2] - if partial_obs: - self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2, 2] # 2 extra for visibility - self.observation_space = gym.spaces.Box( - low=0.0, high=1.0, shape=(self.height, self.width, sum(self.num_planes)), dtype=np.int32 - ) - - self.num_planes_len = len(self.num_planes) - self.num_planes_prefix_sum = [0] - for num_plane in self.num_planes: - self.num_planes_prefix_sum.append(self.num_planes_prefix_sum[-1] + num_plane) - - self.action_space_dims = [6, 4, 4, 4, 4, len(self.utt["unitTypes"]), 7 * 7] - self.action_space = gym.spaces.MultiDiscrete(np.array([self.action_space_dims] * self.height * self.width).flatten()) - self.action_plane_space = gym.spaces.MultiDiscrete(self.action_space_dims) - self.source_unit_idxs = np.tile(np.arange(self.height * self.width), (self.num_envs, 1)) - self.source_unit_idxs = self.source_unit_idxs.reshape((self.source_unit_idxs.shape + (1,))) - - def start_client(self): - - from ai.core import AI - from ts import JNIGridnetVecClient as Client - - self.vec_client = Client( - self.num_selfplay_envs, - self.num_bot_envs, - self.max_steps, - self.rfs, - os.path.expanduser(self.microrts_path), - self.map_paths, - JArray(AI)([ai2(self.real_utt) for ai2 in self.ai2s]), - self.real_utt, - self.partial_obs, - ) - self.render_client = ( - self.vec_client.selfPlayClients[0] if len(self.vec_client.selfPlayClients) > 0 else self.vec_client.clients[0] - ) - # get the unit type table - self.utt = json.loads(str(self.render_client.sendUTT())) - - def reset(self): - responses = self.vec_client.reset([0] * self.num_envs) - obs = [self._encode_obs(np.array(ro)) for ro in responses.observation] - - return np.array(obs) - - def _encode_obs(self, obs): - obs = obs.reshape(len(obs), -1).clip(0, np.array([self.num_planes]).T - 1) - obs_planes = np.zeros((self.height * self.width, self.num_planes_prefix_sum[-1]), dtype=np.int32) - obs_planes_idx = np.arange(len(obs_planes)) - obs_planes[obs_planes_idx, obs[0]] = 1 - - for i in range(1, self.num_planes_len): - obs_planes[obs_planes_idx, obs[i] + self.num_planes_prefix_sum[i]] = 1 - return obs_planes.reshape(self.height, self.width, -1) - - def step_async(self, actions): - actions = actions.reshape((self.num_envs, self.width * self.height, -1)) - actions = np.concatenate((self.source_unit_idxs, actions), 2) # specify source unit - # valid actions - actions = actions[np.where(self.source_unit_mask == 1)] - action_counts_per_env = self.source_unit_mask.sum(1) - java_actions = [None] * len(action_counts_per_env) - action_idx = 0 - for outer_idx, action_count in enumerate(action_counts_per_env): - java_valid_action = [None] * action_count - for idx in range(action_count): - java_valid_action[idx] = JArray(JInt)(actions[action_idx]) - action_idx += 1 - java_actions[outer_idx] = JArray(JArray(JInt))(java_valid_action) - self.actions = JArray(JArray(JArray(JInt)))(java_actions) - - def step_wait(self): - responses = self.vec_client.gameStep(self.actions, [0] * self.num_envs) - reward, done = np.array(responses.reward), np.array(responses.done) - obs = [self._encode_obs(np.array(ro)) for ro in responses.observation] - infos = [{"raw_rewards": item} for item in reward] - # check if it is in evaluation, if not, then change maps - if len(self.cycle_maps) > 0: - # check if an environment is done, if done, reset the client, and replace the observation - for done_idx, d in enumerate(done[:, 0]): - # bot envs settings - if done_idx < self.num_bot_envs: - if d: - self.vec_client.clients[done_idx].mapPath = next(self.next_map) - response = self.vec_client.clients[done_idx].reset(0) - obs[done_idx] = self._encode_obs(np.array(response.observation)) - # selfplay envs settings - else: - if d and done_idx % 2 == 0: - done_idx -= self.num_bot_envs # recalibrate the index - self.vec_client.selfPlayClients[done_idx // 2].mapPath = next(self.next_map) - self.vec_client.selfPlayClients[done_idx // 2].reset() - p0_response = self.vec_client.selfPlayClients[done_idx // 2].getResponse(0) - p1_response = self.vec_client.selfPlayClients[done_idx // 2].getResponse(1) - obs[done_idx] = self._encode_obs(np.array(p0_response.observation)) - obs[done_idx + 1] = self._encode_obs(np.array(p1_response.observation)) - return np.array(obs), reward @ self.reward_weight, done[:, 0], infos - - def step(self, ac): - self.step_async(ac) - return self.step_wait() - - def getattr_depth_check(self, name, already_found): - """ - Check if an attribute reference is being hidden in a recursive call to __getattr__ - :param name: (str) name of attribute to check for - :param already_found: (bool) whether this attribute has already been found in a wrapper - :return: (str or None) name of module whose attribute is being shadowed, if any. - """ - if hasattr(self, name) and already_found: - return "{0}.{1}".format(type(self).__module__, type(self).__name__) - else: - return None - - def render(self, mode="human"): - if mode == "human": - self.render_client.render(False) - # give warning on macos because the render is not available - if sys.platform == "darwin": - warnings.warn(MICRORTS_MAC_OS_RENDER_MESSAGE) - elif mode == "rgb_array": - bytes_array = np.array(self.render_client.render(True)) - image = Image.frombytes("RGB", (640, 640), bytes_array) - return np.array(image)[:, :, ::-1] - - def close(self): - if jpype._jpype.isStarted(): - self.vec_client.close() - jpype.shutdownJVM() - - def get_action_mask(self): - """ - :return: Mask for action types and action parameters, - of shape [num_envs, map height * width, action types + params] - """ - # action_mask shape: [num_envs, map height, map width, 1 + action types + params] - action_mask = np.array(self.vec_client.getMasks(0)) - # self.source_unit_mask shape: [num_envs, map height * map width * 1] - self.source_unit_mask = action_mask[:, :, :, 0].reshape(self.num_envs, -1) - action_type_and_parameter_mask = action_mask[:, :, :, 1:].reshape(self.num_envs, self.height * self.width, -1) - return action_type_and_parameter_mask - - -class MicroRTSBotVecEnv(MicroRTSGridModeVecEnv): - metadata = {"render.modes": ["human", "rgb_array"], "video.frames_per_second": 150} - - def __init__( - self, - ai1s=[], - ai2s=[], - partial_obs=False, - max_steps=2000, - render_theme=2, - map_paths="maps/10x10/basesTwoWorkers10x10.xml", - reward_weight=np.array([0.0, 1.0, 0.0, 0.0, 0.0, 5.0]), - autobuild=True, - jvm_args=[], - ): - - self.ai1s = ai1s - self.ai2s = ai2s - assert len(ai1s) == len(ai2s), "for each environment, a microrts ai should be provided" - self.num_envs = len(ai1s) - self.partial_obs = partial_obs - self.max_steps = max_steps - self.render_theme = render_theme - self.map_paths = map_paths - self.reward_weight = reward_weight - - # read map - self.microrts_path = os.path.join(gym_microrts.__path__[0], "microrts") - if not os.path.exists(f"{self.microrts_path}/README.md"): - print(MICRORTS_CLONE_MESSAGE) - os.system(f"git submodule update --init --recursive") - - if autobuild: - print(f"removing {self.microrts_path}/microrts.jar...") - if os.path.exists(f"{self.microrts_path}/microrts.jar"): - os.remove(f"{self.microrts_path}/microrts.jar") - print(f"building {self.microrts_path}/microrts.jar...") - root_dir = os.path.dirname(gym_microrts.__path__[0]) - print(root_dir) - subprocess.run(["bash", "build.sh", "&>", "build.log"], cwd=f"{root_dir}") - - root = ET.parse(os.path.join(self.microrts_path, self.map_paths[0])).getroot() - self.height, self.width = int(root.get("height")), int(root.get("width")) - - # launch the JVM - if not jpype._jpype.isStarted(): - registerDomain("ts", alias="tests") - registerDomain("ai") - registerDomain("rts") - jars = [ - "microrts.jar", - "lib/bots/Coac.jar", - "lib/bots/Droplet.jar", - "lib/bots/GRojoA3N.jar", - "lib/bots/Izanagi.jar", - "lib/bots/MixedBot.jar", - "lib/bots/TiamatBot.jar", - "lib/bots/UMSBot.jar", - "lib/bots/mayariBot.jar", # "MindSeal.jar" - ] - for jar in jars: - jpype.addClassPath(os.path.join(self.microrts_path, jar)) - jpype.startJVM(*jvm_args, convertStrings=False) - - # start microrts client - from rts.units import UnitTypeTable - - self.real_utt = UnitTypeTable() - from ai.reward import ( - AttackRewardFunction, - ProduceBuildingRewardFunction, - ProduceCombatUnitRewardFunction, - ProduceWorkerRewardFunction, - ResourceGatherRewardFunction, - RewardFunctionInterface, - WinLossRewardFunction, - ) - - self.rfs = JArray(RewardFunctionInterface)( - [ - WinLossRewardFunction(), - ResourceGatherRewardFunction(), - ProduceWorkerRewardFunction(), - ProduceBuildingRewardFunction(), - AttackRewardFunction(), - ProduceCombatUnitRewardFunction(), - # CloserToEnemyBaseRewardFunction(), - ] - ) - self.start_client() - - # computed properties - # [num_planes_hp(5), num_planes_resources(5), num_planes_player(5), - # num_planes_unit_type(z), num_planes_unit_action(6)] - - self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6] - if partial_obs: - self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2] - self.observation_space = gym.spaces.Discrete(2) - self.action_space = gym.spaces.Discrete(2) - - def start_client(self): - - from ai.core import AI - from ts import JNIGridnetVecClient as Client - - self.vec_client = Client( - self.max_steps, - self.rfs, - os.path.expanduser(self.microrts_path), - self.map_paths, - JArray(AI)([ai1(self.real_utt) for ai1 in self.ai1s]), - JArray(AI)([ai2(self.real_utt) for ai2 in self.ai2s]), - self.real_utt, - self.partial_obs, - ) - self.render_client = self.vec_client.botClients[0] - # get the unit type table - self.utt = json.loads(str(self.render_client.sendUTT())) - - def reset(self): - responses = self.vec_client.reset([0 for _ in range(self.num_envs)]) - raw_obs, reward, done, info = np.ones((self.num_envs, 2)), np.array(responses.reward), np.array(responses.done), {} - return raw_obs - - def step_async(self, actions): - self.actions = actions - - def step_wait(self): - responses = self.vec_client.gameStep(self.actions, [0 for _ in range(self.num_envs)]) - raw_obs, reward, done = np.ones((self.num_envs, 2)), np.array(responses.reward), np.array(responses.done) - infos = [{"raw_rewards": item} for item in reward] - return raw_obs, reward @ self.reward_weight, done[:, 0], infos - - -class MicroRTSGridModeSharedMemVecEnv(MicroRTSGridModeVecEnv): - """ - Similar function to `MicroRTSGridModeVecEnv` but uses shared mem buffers for - zero-copy data exchange between NumPy and JVM runtimes. Drastically improves - performance of the environment with some limitations introduced to the API. - Notably, all games should be performed on the same map. - """ - - def __init__( - self, - num_selfplay_envs, - num_bot_envs, - partial_obs=False, - max_steps=2000, - render_theme=2, - frame_skip=0, - ai2s=[], - map_paths=["maps/10x10/basesTwoWorkers10x10.xml"], - reward_weight=np.array([0.0, 1.0, 0.0, 0.0, 0.0, 5.0]), - cycle_maps=[], - ): - if len(map_paths) > 1 and len(set(map_paths)) > 1: - raise ValueError("Mem shared environment requires all games to be played on the same map.") - - super(MicroRTSGridModeSharedMemVecEnv, self).__init__( - num_selfplay_envs, - num_bot_envs, - partial_obs, - max_steps, - render_theme, - frame_skip, - ai2s, - map_paths, - reward_weight, - cycle_maps, - ) - - def _allocate_shared_buffer(self, nbytes): - from java.nio import ByteOrder - from jpype.nio import convertToDirectBuffer - - c_buffer = bytearray(nbytes) - jvm_buffer = convertToDirectBuffer(c_buffer).order(ByteOrder.nativeOrder()).asIntBuffer() - np_buffer = np.asarray(jvm_buffer, order="C") - return jvm_buffer, np_buffer - - def start_client(self): - - from ai.core import AI - from rts import GameState - from ts import JNIGridnetSharedMemVecClient as Client - - self.num_feature_planes = GameState.numFeaturePlanes - num_unit_types = len(self.real_utt.getUnitTypes()) - self.action_space_dims = [6, 4, 4, 4, 4, num_unit_types, (self.real_utt.getMaxAttackRange() * 2 + 1) ** 2] - self.masks_dim = sum(self.action_space_dims) - self.action_dim = len(self.action_space_dims) - - # pre-allocate shared buffers with JVM - obs_nbytes = self.num_envs * self.height * self.width * self.num_feature_planes * 4 - obs_jvm_buffer, obs_np_buffer = self._allocate_shared_buffer(obs_nbytes) - self.obs = obs_np_buffer.reshape((self.num_envs, self.height, self.width, self.num_feature_planes)) - - action_mask_nbytes = self.num_envs * self.height * self.width * self.masks_dim * 4 - action_mask_jvm_buffer, action_mask_np_buffer = self._allocate_shared_buffer(action_mask_nbytes) - self.action_mask = action_mask_np_buffer.reshape((self.num_envs, self.height * self.width, self.masks_dim)) - - action_nbytes = self.num_envs * self.width * self.height * self.action_dim * 4 - action_jvm_buffer, action_np_buffer = self._allocate_shared_buffer(action_nbytes) - self.actions = action_np_buffer.reshape((self.num_envs, self.height * self.width, self.action_dim)) - - self.vec_client = Client( - self.num_selfplay_envs, - self.num_bot_envs, - self.max_steps, - self.rfs, - os.path.expanduser(self.microrts_path), - self.map_paths[0], - JArray(AI)([ai2(self.real_utt) for ai2 in self.ai2s]), - self.real_utt, - self.partial_obs, - obs_jvm_buffer, - action_mask_jvm_buffer, - action_jvm_buffer, - 0, - ) - self.render_client = ( - self.vec_client.selfPlayClients[0] if len(self.vec_client.selfPlayClients) > 0 else self.vec_client.clients[0] - ) - # get the unit type table - self.utt = json.loads(str(self.render_client.sendUTT())) - - def reset(self): - self.vec_client.reset([0] * self.num_envs) - return self.obs - - def step_async(self, actions): - actions = actions.reshape((self.num_envs, self.width * self.height, self.action_dim)) - np.copyto(self.actions, actions) - - def step_wait(self): - responses = self.vec_client.gameStep([0] * self.num_envs) - reward, done = np.array(responses.reward), np.array(responses.done) - infos = [{"raw_rewards": item} for item in reward] - # check if it is in evaluation, if not, then change maps - if len(self.cycle_maps) > 1: - # check if an environment is done, if done, reset the client, and replace the observation - for done_idx, d in enumerate(done[:, 0]): - # bot envs settings - if done_idx < self.num_bot_envs: - if d: - self.vec_client.clients[done_idx].mapPath = next(self.next_map) - self.vec_client.clients[done_idx].reset(0) - # self.obs[done_idx] = self._encode_obs(np.array(response.observation)) - # selfplay envs settings - else: - if d and done_idx % 2 == 0: - done_idx -= self.num_bot_envs # recalibrate the index - self.vec_client.selfPlayClients[done_idx // 2].mapPath = next(self.next_map) - self.vec_client.selfPlayClients[done_idx // 2].reset() - # self.vec_client.selfPlayClients[done_idx // 2].reset() - # self.obs[done_idx] = self._encode_obs(np.array(p0_response.observation)) - # self.obs[done_idx + 1] = self._encode_obs(np.array(p1_response.observation)) - return self.obs, reward @ self.reward_weight, done[:, 0], infos - - def get_action_mask(self): - self.vec_client.getMasks(0) - return self.action_mask +import json +import os +import subprocess +import sys +import warnings +import xml.etree.ElementTree as ET +from itertools import cycle + +import gym +import jpype +import jpype.imports +import numpy as np +from jpype.imports import registerDomain +from jpype.types import JArray, JInt +from PIL import Image + +import gym_microrts + +MICRORTS_CLONE_MESSAGE = """ +WARNING: the repository does not include the microrts git submodule. +Executing `git submodule update --init --recursive` to clone it now. +""" + +MICRORTS_MAC_OS_RENDER_MESSAGE = """ +gym-microrts render is not available on MacOS. See https://github.com/jpype-project/jpype/issues/906 + +It is however possible to record the videos via `env.render(mode='rgb_array')`. +See https://github.com/vwxyzjn/gym-microrts/blob/b46c0815efd60ae959b70c14659efb95ef16ffb0/hello_world_record_video.py +as an example. +""" + + +class MicroRTSGridModeVecEnv: + metadata = {"render.modes": ["human", "rgb_array"], "video.frames_per_second": 150} + """ + [[0]x_coordinate*y_coordinate(x*y), [1]a_t(6), [2]p_move(4), [3]p_harvest(4), + [4]p_return(4), [5]p_produce_direction(4), [6]p_produce_unit_type(z), + [7]x_coordinate*y_coordinate(x*y)] + Create a baselines VecEnv environment from a gym3 environment. + :param env: gym3 environment to adapt + """ + + def __init__( + self, + num_selfplay_envs, + num_bot_envs, + partial_obs=False, + max_steps=2000, + render_theme=2, + frame_skip=0, + ai2s=[], + map_paths=["maps/10x10/basesTwoWorkers10x10.xml"], + reward_weight=np.array([0.0, 1.0, 0.0, 0.0, 0.0, 5.0]), + cycle_maps=[], + autobuild=True, + jvm_args=[], + ): + + self.num_selfplay_envs = num_selfplay_envs + self.num_bot_envs = num_bot_envs + self.num_envs = num_selfplay_envs + num_bot_envs + assert self.num_bot_envs == len(ai2s), "for each environment, a microrts ai should be provided" + self.partial_obs = partial_obs + self.max_steps = max_steps + self.render_theme = render_theme + self.frame_skip = frame_skip + self.ai2s = ai2s + self.map_paths = map_paths + if len(map_paths) == 1: + self.map_paths = [map_paths[0] for _ in range(self.num_envs)] + else: + assert ( + len(map_paths) == self.num_envs + ), "if multiple maps are provided, they should be provided for each environment" + self.reward_weight = reward_weight + + self.microrts_path = os.path.join(gym_microrts.__path__[0], "microrts") + + # prepare training maps + self.cycle_maps = list(map(lambda i: os.path.join(self.microrts_path, i), cycle_maps)) + self.next_map = cycle(self.cycle_maps) + + if not os.path.exists(f"{self.microrts_path}/README.md"): + print(MICRORTS_CLONE_MESSAGE) + os.system(f"git submodule update --init --recursive") + + if autobuild: + print(f"removing {self.microrts_path}/microrts.jar...") + if os.path.exists(f"{self.microrts_path}/microrts.jar"): + os.remove(f"{self.microrts_path}/microrts.jar") + print(f"building {self.microrts_path}/microrts.jar...") + root_dir = os.path.dirname(gym_microrts.__path__[0]) + print(root_dir) + subprocess.run(["bash", "build.sh", "&>", "build.log"], cwd=f"{root_dir}") + + # read map + root = ET.parse(os.path.join(self.microrts_path, self.map_paths[0])).getroot() + self.height, self.width = int(root.get("height")), int(root.get("width")) + + # launch the JVM + if not jpype._jpype.isStarted(): + registerDomain("ts", alias="tests") + registerDomain("ai") + jars = [ + "microrts.jar", + "lib/bots/Coac.jar", + "lib/bots/Droplet.jar", + "lib/bots/GRojoA3N.jar", + "lib/bots/Izanagi.jar", + "lib/bots/MixedBot.jar", + "lib/bots/TiamatBot.jar", + "lib/bots/UMSBot.jar", + "lib/bots/mayariBot.jar", # "MindSeal.jar" + ] + for jar in jars: + jpype.addClassPath(os.path.join(self.microrts_path, jar)) + jpype.startJVM(*jvm_args, convertStrings=False) + + # start microrts client + from rts.units import UnitTypeTable + + self.real_utt = UnitTypeTable() + from ai.reward import ( + AttackRewardFunction, + ProduceBuildingRewardFunction, + ProduceCombatUnitRewardFunction, + ProduceWorkerRewardFunction, + ResourceGatherRewardFunction, + RewardFunctionInterface, + WinLossRewardFunction, + ) + + self.rfs = JArray(RewardFunctionInterface)( + [ + WinLossRewardFunction(), + ResourceGatherRewardFunction(), + ProduceWorkerRewardFunction(), + ProduceBuildingRewardFunction(), + AttackRewardFunction(), + ProduceCombatUnitRewardFunction(), + # CloserToEnemyBaseRewardFunction(), + ] + ) + self.start_client() + + # computed properties + # [num_planes_hp(5), num_planes_resources(5), num_planes_player(3), + # num_planes_unit_type(z), num_planes_unit_action(6), num_planes_terrain(2)] + + self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2] + if partial_obs: + self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2, 2] # 2 extra for visibility + self.observation_space = gym.spaces.Box( + low=0.0, high=1.0, shape=(self.height, self.width, sum(self.num_planes)), dtype=np.int32 + ) + + self.num_planes_len = len(self.num_planes) + self.num_planes_prefix_sum = [0] + for num_plane in self.num_planes: + self.num_planes_prefix_sum.append(self.num_planes_prefix_sum[-1] + num_plane) + + self.action_space_dims = [6, 4, 4, 4, 4, len(self.utt["unitTypes"]), 7 * 7] + self.action_space = gym.spaces.MultiDiscrete(np.array([self.action_space_dims] * self.height * self.width).flatten()) + self.action_plane_space = gym.spaces.MultiDiscrete(self.action_space_dims) + self.source_unit_idxs = np.tile(np.arange(self.height * self.width), (self.num_envs, 1)) + self.source_unit_idxs = self.source_unit_idxs.reshape((self.source_unit_idxs.shape + (1,))) + + def start_client(self): + + from ai.core import AI + from ts import JNIGridnetVecClient as Client + + self.vec_client = Client( + self.num_selfplay_envs, + self.num_bot_envs, + self.max_steps, + self.rfs, + os.path.expanduser(self.microrts_path), + self.map_paths, + JArray(AI)([ai2(self.real_utt) for ai2 in self.ai2s]), + self.real_utt, + self.partial_obs, + ) + self.render_client = ( + self.vec_client.selfPlayClients[0] if len(self.vec_client.selfPlayClients) > 0 else self.vec_client.clients[0] + ) + # get the unit type table + self.utt = json.loads(str(self.render_client.sendUTT())) + + def reset(self): + responses = self.vec_client.reset([0] * self.num_envs) + obs = [self._encode_obs(np.array(ro)) for ro in responses.observation] + + return np.array(obs) + + def _encode_obs(self, obs): + obs = obs.reshape(len(obs), -1).clip(0, np.array([self.num_planes]).T - 1) + obs_planes = np.zeros((self.height * self.width, self.num_planes_prefix_sum[-1]), dtype=np.int32) + obs_planes_idx = np.arange(len(obs_planes)) + obs_planes[obs_planes_idx, obs[0]] = 1 + + for i in range(1, self.num_planes_len): + obs_planes[obs_planes_idx, obs[i] + self.num_planes_prefix_sum[i]] = 1 + return obs_planes.reshape(self.height, self.width, -1) + + def step_async(self, actions): + actions = actions.reshape((self.num_envs, self.width * self.height, -1)) + actions = np.concatenate((self.source_unit_idxs, actions), 2) # specify source unit + # valid actions + actions = actions[np.where(self.source_unit_mask == 1)] + action_counts_per_env = self.source_unit_mask.sum(1) + java_actions = [None] * len(action_counts_per_env) + action_idx = 0 + for outer_idx, action_count in enumerate(action_counts_per_env): + java_valid_action = [None] * action_count + for idx in range(action_count): + java_valid_action[idx] = JArray(JInt)(actions[action_idx]) + action_idx += 1 + java_actions[outer_idx] = JArray(JArray(JInt))(java_valid_action) + self.actions = JArray(JArray(JArray(JInt)))(java_actions) + + def step_wait(self): + responses = self.vec_client.gameStep(self.actions, [0] * self.num_envs) + reward, done = np.array(responses.reward), np.array(responses.done) + obs = [self._encode_obs(np.array(ro)) for ro in responses.observation] + infos = [{"raw_rewards": item} for item in reward] + # check if it is in evaluation, if not, then change maps + if len(self.cycle_maps) > 0: + # check if an environment is done, if done, reset the client, and replace the observation + for done_idx, d in enumerate(done[:, 0]): + # bot envs settings + if done_idx < self.num_bot_envs: + if d: + self.vec_client.clients[done_idx].mapPath = next(self.next_map) + response = self.vec_client.clients[done_idx].reset(0) + obs[done_idx] = self._encode_obs(np.array(response.observation)) + # selfplay envs settings + else: + if d and done_idx % 2 == 0: + done_idx -= self.num_bot_envs # recalibrate the index + self.vec_client.selfPlayClients[done_idx // 2].mapPath = next(self.next_map) + self.vec_client.selfPlayClients[done_idx // 2].reset() + p0_response = self.vec_client.selfPlayClients[done_idx // 2].getResponse(0) + p1_response = self.vec_client.selfPlayClients[done_idx // 2].getResponse(1) + obs[done_idx] = self._encode_obs(np.array(p0_response.observation)) + obs[done_idx + 1] = self._encode_obs(np.array(p1_response.observation)) + return np.array(obs), reward @ self.reward_weight, done[:, 0], infos + + def step(self, ac): + self.step_async(ac) + return self.step_wait() + + def getattr_depth_check(self, name, already_found): + """ + Check if an attribute reference is being hidden in a recursive call to __getattr__ + :param name: (str) name of attribute to check for + :param already_found: (bool) whether this attribute has already been found in a wrapper + :return: (str or None) name of module whose attribute is being shadowed, if any. + """ + if hasattr(self, name) and already_found: + return "{0}.{1}".format(type(self).__module__, type(self).__name__) + else: + return None + + def render(self, mode="human"): + if mode == "human": + self.render_client.render(False) + # give warning on macos because the render is not available + if sys.platform == "darwin": + warnings.warn(MICRORTS_MAC_OS_RENDER_MESSAGE) + elif mode == "rgb_array": + bytes_array = np.array(self.render_client.render(True)) + image = Image.frombytes("RGB", (640, 640), bytes_array) + return np.array(image)[:, :, ::-1] + + def close(self): + if jpype._jpype.isStarted(): + self.vec_client.close() + jpype.shutdownJVM() + + def get_action_mask(self): + """ + :return: Mask for action types and action parameters, + of shape [num_envs, map height * width, action types + params] + """ + # action_mask shape: [num_envs, map height, map width, 1 + action types + params] + action_mask = np.array(self.vec_client.getMasks(0)) + # self.source_unit_mask shape: [num_envs, map height * map width * 1] + self.source_unit_mask = action_mask[:, :, :, 0].reshape(self.num_envs, -1) + action_type_and_parameter_mask = action_mask[:, :, :, 1:].reshape(self.num_envs, self.height * self.width, -1) + return action_type_and_parameter_mask + + +class MicroRTSBotVecEnv(MicroRTSGridModeVecEnv): + metadata = {"render.modes": ["human", "rgb_array"], "video.frames_per_second": 150} + + def __init__( + self, + ai1s=[], + ai2s=[], + partial_obs=False, + max_steps=2000, + render_theme=2, + map_paths="maps/10x10/basesTwoWorkers10x10.xml", + reward_weight=np.array([0.0, 1.0, 0.0, 0.0, 0.0, 5.0]), + autobuild=True, + jvm_args=[], + ): + + self.ai1s = ai1s + self.ai2s = ai2s + assert len(ai1s) == len(ai2s), "for each environment, a microrts ai should be provided" + self.num_envs = len(ai1s) + self.partial_obs = partial_obs + self.max_steps = max_steps + self.render_theme = render_theme + self.map_paths = map_paths + self.reward_weight = reward_weight + + # read map + self.microrts_path = os.path.join(gym_microrts.__path__[0], "microrts") + if not os.path.exists(f"{self.microrts_path}/README.md"): + print(MICRORTS_CLONE_MESSAGE) + os.system(f"git submodule update --init --recursive") + + if autobuild: + print(f"removing {self.microrts_path}/microrts.jar...") + if os.path.exists(f"{self.microrts_path}/microrts.jar"): + os.remove(f"{self.microrts_path}/microrts.jar") + print(f"building {self.microrts_path}/microrts.jar...") + root_dir = os.path.dirname(gym_microrts.__path__[0]) + print(root_dir) + subprocess.run(["bash", "build.sh", "&>", "build.log"], cwd=f"{root_dir}") + + root = ET.parse(os.path.join(self.microrts_path, self.map_paths[0])).getroot() + self.height, self.width = int(root.get("height")), int(root.get("width")) + + # launch the JVM + if not jpype._jpype.isStarted(): + registerDomain("ts", alias="tests") + registerDomain("ai") + registerDomain("rts") + jars = [ + "microrts.jar", + "lib/bots/Coac.jar", + "lib/bots/Droplet.jar", + "lib/bots/GRojoA3N.jar", + "lib/bots/Izanagi.jar", + "lib/bots/MixedBot.jar", + "lib/bots/TiamatBot.jar", + "lib/bots/UMSBot.jar", + "lib/bots/mayariBot.jar", # "MindSeal.jar" + ] + for jar in jars: + jpype.addClassPath(os.path.join(self.microrts_path, jar)) + jpype.startJVM(*jvm_args, convertStrings=False) + + # start microrts client + from rts.units import UnitTypeTable + + self.real_utt = UnitTypeTable() + from ai.reward import ( + AttackRewardFunction, + ProduceBuildingRewardFunction, + ProduceCombatUnitRewardFunction, + ProduceWorkerRewardFunction, + ResourceGatherRewardFunction, + RewardFunctionInterface, + WinLossRewardFunction, + ) + + self.rfs = JArray(RewardFunctionInterface)( + [ + WinLossRewardFunction(), + ResourceGatherRewardFunction(), + ProduceWorkerRewardFunction(), + ProduceBuildingRewardFunction(), + AttackRewardFunction(), + ProduceCombatUnitRewardFunction(), + # CloserToEnemyBaseRewardFunction(), + ] + ) + self.start_client() + + # computed properties + # [num_planes_hp(5), num_planes_resources(5), num_planes_player(5), + # num_planes_unit_type(z), num_planes_unit_action(6), num_planes_terrain(2)] + + self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2] + if partial_obs: + self.num_planes = [5, 5, 3, len(self.utt["unitTypes"]) + 1, 6, 2, 2] # 2 extra for visibility + self.observation_space = gym.spaces.Discrete(2) + self.action_space = gym.spaces.Discrete(2) + + def start_client(self): + + from ai.core import AI + from ts import JNIGridnetVecClient as Client + + self.vec_client = Client( + self.max_steps, + self.rfs, + os.path.expanduser(self.microrts_path), + self.map_paths, + JArray(AI)([ai1(self.real_utt) for ai1 in self.ai1s]), + JArray(AI)([ai2(self.real_utt) for ai2 in self.ai2s]), + self.real_utt, + self.partial_obs, + ) + self.render_client = self.vec_client.botClients[0] + # get the unit type table + self.utt = json.loads(str(self.render_client.sendUTT())) + + def reset(self): + responses = self.vec_client.reset([0 for _ in range(self.num_envs)]) + raw_obs, reward, done, info = np.ones((self.num_envs, 2)), np.array(responses.reward), np.array(responses.done), {} + return raw_obs + + def step_async(self, actions): + self.actions = actions + + def step_wait(self): + responses = self.vec_client.gameStep(self.actions, [0 for _ in range(self.num_envs)]) + raw_obs, reward, done = np.ones((self.num_envs, 2)), np.array(responses.reward), np.array(responses.done) + infos = [{"raw_rewards": item} for item in reward] + return raw_obs, reward @ self.reward_weight, done[:, 0], infos + + +class MicroRTSGridModeSharedMemVecEnv(MicroRTSGridModeVecEnv): + """ + Similar function to `MicroRTSGridModeVecEnv` but uses shared mem buffers for + zero-copy data exchange between NumPy and JVM runtimes. Drastically improves + performance of the environment with some limitations introduced to the API. + Notably, all games should be performed on the same map. + """ + + def __init__( + self, + num_selfplay_envs, + num_bot_envs, + partial_obs=False, + max_steps=2000, + render_theme=2, + frame_skip=0, + ai2s=[], + map_paths=["maps/10x10/basesTwoWorkers10x10.xml"], + reward_weight=np.array([0.0, 1.0, 0.0, 0.0, 0.0, 5.0]), + cycle_maps=[], + ): + if len(map_paths) > 1 and len(set(map_paths)) > 1: + raise ValueError("Mem shared environment requires all games to be played on the same map.") + + super(MicroRTSGridModeSharedMemVecEnv, self).__init__( + num_selfplay_envs, + num_bot_envs, + partial_obs, + max_steps, + render_theme, + frame_skip, + ai2s, + map_paths, + reward_weight, + cycle_maps, + ) + + def _allocate_shared_buffer(self, nbytes): + from java.nio import ByteOrder + from jpype.nio import convertToDirectBuffer + + c_buffer = bytearray(nbytes) + jvm_buffer = convertToDirectBuffer(c_buffer).order(ByteOrder.nativeOrder()).asIntBuffer() + np_buffer = np.asarray(jvm_buffer, order="C") + return jvm_buffer, np_buffer + + def start_client(self): + + from ai.core import AI + from rts import GameState + from ts import JNIGridnetSharedMemVecClient as Client + + self.num_feature_planes = GameState.numFeaturePlanes + num_unit_types = len(self.real_utt.getUnitTypes()) + self.action_space_dims = [6, 4, 4, 4, 4, num_unit_types, (self.real_utt.getMaxAttackRange() * 2 + 1) ** 2] + self.masks_dim = sum(self.action_space_dims) + self.action_dim = len(self.action_space_dims) + + # pre-allocate shared buffers with JVM + obs_nbytes = self.num_envs * self.height * self.width * self.num_feature_planes * 4 + obs_jvm_buffer, obs_np_buffer = self._allocate_shared_buffer(obs_nbytes) + self.obs = obs_np_buffer.reshape((self.num_envs, self.height, self.width, self.num_feature_planes)) + + action_mask_nbytes = self.num_envs * self.height * self.width * self.masks_dim * 4 + action_mask_jvm_buffer, action_mask_np_buffer = self._allocate_shared_buffer(action_mask_nbytes) + self.action_mask = action_mask_np_buffer.reshape((self.num_envs, self.height * self.width, self.masks_dim)) + + action_nbytes = self.num_envs * self.width * self.height * self.action_dim * 4 + action_jvm_buffer, action_np_buffer = self._allocate_shared_buffer(action_nbytes) + self.actions = action_np_buffer.reshape((self.num_envs, self.height * self.width, self.action_dim)) + + self.vec_client = Client( + self.num_selfplay_envs, + self.num_bot_envs, + self.max_steps, + self.rfs, + os.path.expanduser(self.microrts_path), + self.map_paths[0], + JArray(AI)([ai2(self.real_utt) for ai2 in self.ai2s]), + self.real_utt, + self.partial_obs, + obs_jvm_buffer, + action_mask_jvm_buffer, + action_jvm_buffer, + 0, + ) + self.render_client = ( + self.vec_client.selfPlayClients[0] if len(self.vec_client.selfPlayClients) > 0 else self.vec_client.clients[0] + ) + # get the unit type table + self.utt = json.loads(str(self.render_client.sendUTT())) + + def reset(self): + self.vec_client.reset([0] * self.num_envs) + return self.obs + + def step_async(self, actions): + actions = actions.reshape((self.num_envs, self.width * self.height, self.action_dim)) + np.copyto(self.actions, actions) + + def step_wait(self): + responses = self.vec_client.gameStep([0] * self.num_envs) + reward, done = np.array(responses.reward), np.array(responses.done) + infos = [{"raw_rewards": item} for item in reward] + # check if it is in evaluation, if not, then change maps + if len(self.cycle_maps) > 1: + # check if an environment is done, if done, reset the client, and replace the observation + for done_idx, d in enumerate(done[:, 0]): + # bot envs settings + if done_idx < self.num_bot_envs: + if d: + self.vec_client.clients[done_idx].mapPath = next(self.next_map) + self.vec_client.clients[done_idx].reset(0) + # self.obs[done_idx] = self._encode_obs(np.array(response.observation)) + # selfplay envs settings + else: + if d and done_idx % 2 == 0: + done_idx -= self.num_bot_envs # recalibrate the index + self.vec_client.selfPlayClients[done_idx // 2].mapPath = next(self.next_map) + self.vec_client.selfPlayClients[done_idx // 2].reset() + # self.vec_client.selfPlayClients[done_idx // 2].reset() + # self.obs[done_idx] = self._encode_obs(np.array(p0_response.observation)) + # self.obs[done_idx + 1] = self._encode_obs(np.array(p1_response.observation)) + return self.obs, reward @ self.reward_weight, done[:, 0], infos + + def get_action_mask(self): + self.vec_client.getMasks(0) + return self.action_mask diff --git a/tests/test_e2e.py b/tests/test_e2e.py index db5833f2..90d0ae9b 100644 --- a/tests/test_e2e.py +++ b/tests/test_e2e.py @@ -1,37 +1,37 @@ -import subprocess - - -def test_ppo_gridnet(): - - try: - subprocess.run( - "cd experiments; python ppo_gridnet.py --num-bot-envs 0 --num-selfplay-envs 2 --num-steps 16 --total-timesteps 32 --cuda False --max-eval-workers 0", - shell=True, - check=True, - ) - except subprocess.CalledProcessError as grepexc: - print("error code", grepexc.returncode, grepexc.output) - assert grepexc.returncode in [0, 134] - - -# TODO need to add the two tests below back in once we have a new trained model - -# def test_ppo_gridnet_eval_selfplay(): -# try: -# subprocess.run( -# "cd experiments; python ppo_gridnet_eval.py --num-steps 16 --total-timesteps 32 --cuda False", -# shell=True, -# check=True, -# ) -# except subprocess.CalledProcessError as grepexc: -# print("error code", grepexc.returncode, grepexc.output) -# assert grepexc.returncode in [0, 134] -# -# -# def test_ppo_gridnet_eval_bot(): -# -# subprocess.run( -# "cd experiments; python ppo_gridnet_eval.py --ai coacAI --num-steps 16 --total-timesteps 32 --cuda False", -# shell=True, -# check=True, -# ) +import subprocess + + +def test_ppo_gridnet(): + + try: + subprocess.run( + "cd experiments; python ppo_gridnet.py --num-bot-envs 0 --num-selfplay-envs 2 --num-steps 16 --total-timesteps 32 --cuda False --max-eval-workers 0", + shell=True, + check=True, + ) + except subprocess.CalledProcessError as grepexc: + print("error code", grepexc.returncode, grepexc.output) + assert grepexc.returncode in [0, 134] + + +# TODO need to add the two tests below back in once we have a new trained model + +# def test_ppo_gridnet_eval_selfplay(): +# try: +# subprocess.run( +# "cd experiments; python ppo_gridnet_eval.py --num-steps 16 --total-timesteps 32 --cuda False", +# shell=True, +# check=True, +# ) +# except subprocess.CalledProcessError as grepexc: +# print("error code", grepexc.returncode, grepexc.output) +# assert grepexc.returncode in [0, 134] +# +# +# def test_ppo_gridnet_eval_bot(): +# +# subprocess.run( +# "cd experiments; python ppo_gridnet_eval.py --ai coacAI --num-steps 16 --total-timesteps 32 --cuda False", +# shell=True, +# check=True, +# ) diff --git a/tests/test_observation.py b/tests/test_observation.py index 1b439410..6f4a69c7 100644 --- a/tests/test_observation.py +++ b/tests/test_observation.py @@ -1,108 +1,108 @@ -import numpy as np - -from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv - -render = False - - -def test_observation(): - envs = MicroRTSGridModeVecEnv( - num_bot_envs=0, - num_selfplay_envs=2, - partial_obs=False, - max_steps=5000, - render_theme=2, - ai2s=[], - map_paths=["maps/16x16/basesWorkers16x16A.xml"], - reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), - ) - - # fmt: off - next_obs = envs.reset() - resource = np.array([ - 0., 1., 0., 0., 0., # 1 hp - 0., 0., 0., 0., 1., # >= 4 resources - 1., 0., 0., # no owner - 0., 1., 0., 0., 0., 0., 0., 0., # unit type resource - 1., 0., 0., 0., 0., 0., # currently not executing actions - 1., 0., # terrain: TERRAIN_NONE - ]).astype(np.int32) - p1_worker = np.array([ - 0., 1., 0., 0., 0., # 1 hp - 1., 0., 0., 0., 0., # 0 resources - 0., 1., 0., # player 1 owns it - 0., 0., 0., 0., 1., 0., 0., 0., # unit type worker - 1., 0., 0., 0., 0., 0., # currently not executing actions - 1., 0., # terrain: TERRAIN_NONE - ]).astype(np.int32) - p1_base = np.array([ - 0., 0., 0., 0., 1., # 1 hp - 1., 0., 0., 0., 0., # 0 resources - 0., 1., 0., # player 1 owns it - 0., 0., 1., 0., 0., 0., 0., 0., # unit type base - 1., 0., 0., 0., 0., 0., # currently not executing actions - 1., 0., # terrain: TERRAIN_NONE - ]).astype(np.int32) - p2_worker = p1_worker.copy() - p2_worker[10:13] = np.array([0., 0., 1., ]) # player 2 owns it - p2_base = p1_base.copy() - p2_base[10:13] = np.array([0., 0., 1., ]) # player 2 owns it - empty_cell = np.array([ - 1., 0., 0., 0., 0., # 0 hp - 1., 0., 0., 0., 0., # 0 resources - 1., 0., 0., # no owner - 1., 0., 0., 0., 0., 0., 0., 0., # unit type empty cell - 1., 0., 0., 0., 0., 0., # currently not executing actions - 1., 0., # terrain: TERRAIN_NONE - ]).astype(np.int32) - # fmt: on - - # player 1's perspective - np.testing.assert_array_equal(next_obs[0][0][0], resource) - np.testing.assert_array_equal(next_obs[0][1][0], resource) - np.testing.assert_array_equal(next_obs[0][1][1], p1_worker) - np.testing.assert_array_equal(next_obs[0][2][2], p1_base) - np.testing.assert_array_equal(next_obs[0][15][15], resource) - np.testing.assert_array_equal(next_obs[0][14][15], resource) - np.testing.assert_array_equal(next_obs[0][14][14], p2_worker) - np.testing.assert_array_equal(next_obs[0][13][13], p2_base) - - # player 2's perspective (self play) - np.testing.assert_array_equal(next_obs[1][0][0], resource) - np.testing.assert_array_equal(next_obs[1][1][0], resource) - np.testing.assert_array_equal(next_obs[1][1][1], p2_worker) - np.testing.assert_array_equal(next_obs[1][2][2], p2_base) - np.testing.assert_array_equal(next_obs[1][15][15], resource) - np.testing.assert_array_equal(next_obs[1][14][15], resource) - np.testing.assert_array_equal(next_obs[1][14][14], p1_worker) - np.testing.assert_array_equal(next_obs[1][13][13], p1_base) - - feature_sum = 0 - for item in [resource, resource, p1_worker, p1_base, resource, resource, p2_worker, p2_base]: - feature_sum += item.sum() - feature_sum += empty_cell.sum() * (256 - 8) - assert next_obs.sum() == feature_sum * 2 == 3072.0 - - # test observation with walls - envs = MicroRTSGridModeVecEnv( - num_bot_envs=0, - num_selfplay_envs=2, - partial_obs=False, - max_steps=5000, - render_theme=2, - ai2s=[], - map_paths=["maps/barricades24x24.xml"], - reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), - ) - # fmt: off - wall = np.array([ - 1., 0., 0., 0., 0., # 0 hp - 1., 0., 0., 0., 0., # 0 resources - 1., 0., 0., # no owner - 1., 0., 0., 0., 0., 0., 0., 0., # unit type `-` - 1., 0., 0., 0., 0., 0., # currently not executing actions - 0., 1., # terrain: TERRAIN_WALL - ]).astype(np.int32) - # fmt: on - next_obs = envs.reset() - np.testing.assert_array_equal(next_obs[0][6][6], wall) +import numpy as np + +from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv + +render = False + + +def test_observation(): + envs = MicroRTSGridModeVecEnv( + num_bot_envs=0, + num_selfplay_envs=2, + partial_obs=False, + max_steps=5000, + render_theme=2, + ai2s=[], + map_paths=["maps/16x16/basesWorkers16x16A.xml"], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + ) + + # fmt: off + next_obs = envs.reset() + resource = np.array([ + 0., 1., 0., 0., 0., # 1 hp + 0., 0., 0., 0., 1., # >= 4 resources + 1., 0., 0., # no owner + 0., 1., 0., 0., 0., 0., 0., 0., # unit type resource + 1., 0., 0., 0., 0., 0., # currently not executing actions + 1., 0., # terrain: TERRAIN_NONE + ]).astype(np.int32) + p1_worker = np.array([ + 0., 1., 0., 0., 0., # 1 hp + 1., 0., 0., 0., 0., # 0 resources + 0., 1., 0., # player 1 owns it + 0., 0., 0., 0., 1., 0., 0., 0., # unit type worker + 1., 0., 0., 0., 0., 0., # currently not executing actions + 1., 0., # terrain: TERRAIN_NONE + ]).astype(np.int32) + p1_base = np.array([ + 0., 0., 0., 0., 1., # 1 hp + 1., 0., 0., 0., 0., # 0 resources + 0., 1., 0., # player 1 owns it + 0., 0., 1., 0., 0., 0., 0., 0., # unit type base + 1., 0., 0., 0., 0., 0., # currently not executing actions + 1., 0., # terrain: TERRAIN_NONE + ]).astype(np.int32) + p2_worker = p1_worker.copy() + p2_worker[10:13] = np.array([0., 0., 1., ]) # player 2 owns it + p2_base = p1_base.copy() + p2_base[10:13] = np.array([0., 0., 1., ]) # player 2 owns it + empty_cell = np.array([ + 1., 0., 0., 0., 0., # 0 hp + 1., 0., 0., 0., 0., # 0 resources + 1., 0., 0., # no owner + 1., 0., 0., 0., 0., 0., 0., 0., # unit type empty cell + 1., 0., 0., 0., 0., 0., # currently not executing actions + 1., 0., # terrain: TERRAIN_NONE + ]).astype(np.int32) + # fmt: on + + # player 1's perspective + np.testing.assert_array_equal(next_obs[0][0][0], resource) + np.testing.assert_array_equal(next_obs[0][1][0], resource) + np.testing.assert_array_equal(next_obs[0][1][1], p1_worker) + np.testing.assert_array_equal(next_obs[0][2][2], p1_base) + np.testing.assert_array_equal(next_obs[0][15][15], resource) + np.testing.assert_array_equal(next_obs[0][14][15], resource) + np.testing.assert_array_equal(next_obs[0][14][14], p2_worker) + np.testing.assert_array_equal(next_obs[0][13][13], p2_base) + + # player 2's perspective (self play) + np.testing.assert_array_equal(next_obs[1][0][0], resource) + np.testing.assert_array_equal(next_obs[1][1][0], resource) + np.testing.assert_array_equal(next_obs[1][1][1], p2_worker) + np.testing.assert_array_equal(next_obs[1][2][2], p2_base) + np.testing.assert_array_equal(next_obs[1][15][15], resource) + np.testing.assert_array_equal(next_obs[1][14][15], resource) + np.testing.assert_array_equal(next_obs[1][14][14], p1_worker) + np.testing.assert_array_equal(next_obs[1][13][13], p1_base) + + feature_sum = 0 + for item in [resource, resource, p1_worker, p1_base, resource, resource, p2_worker, p2_base]: + feature_sum += item.sum() + feature_sum += empty_cell.sum() * (256 - 8) + assert next_obs.sum() == feature_sum * 2 == 3072.0 + + # test observation with walls + envs = MicroRTSGridModeVecEnv( + num_bot_envs=0, + num_selfplay_envs=2, + partial_obs=False, + max_steps=5000, + render_theme=2, + ai2s=[], + map_paths=["maps/barricades24x24.xml"], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + ) + # fmt: off + wall = np.array([ + 1., 0., 0., 0., 0., # 0 hp + 1., 0., 0., 0., 0., # 0 resources + 1., 0., 0., # no owner + 1., 0., 0., 0., 0., 0., 0., 0., # unit type `-` + 1., 0., 0., 0., 0., 0., # currently not executing actions + 0., 1., # terrain: TERRAIN_WALL + ]).astype(np.int32) + # fmt: on + next_obs = envs.reset() + np.testing.assert_array_equal(next_obs[0][6][6], wall) From ee80ffec023463ed3b7849a197d0de6449c8dc56 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Wed, 29 Nov 2023 12:11:03 +0100 Subject: [PATCH 04/28] init variable map sizes PPO --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index d09e85a8..b09555c6 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit d09e85a8f77612151d0ce69bdb010af69a15fcee +Subproject commit b09555c6d681f98e3daf411421c70cd4893592b0 From 737250fd6f909c8b64e1f54104aea88e930330a3 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Wed, 29 Nov 2023 12:12:27 +0100 Subject: [PATCH 05/28] init variable map sizes PPO --- experiments/ppo_gridnet_variable_mapsizes.py | 565 +++++++++++++++++++ 1 file changed, 565 insertions(+) create mode 100644 experiments/ppo_gridnet_variable_mapsizes.py diff --git a/experiments/ppo_gridnet_variable_mapsizes.py b/experiments/ppo_gridnet_variable_mapsizes.py new file mode 100644 index 00000000..a551559a --- /dev/null +++ b/experiments/ppo_gridnet_variable_mapsizes.py @@ -0,0 +1,565 @@ +# http://proceedings.mlr.press/v97/han19a/han19a.pdf + +import argparse +import os +import random +import subprocess +import time +from distutils.util import strtobool +from typing import List + +import numpy as np +import pandas as pd +import torch +import torch.nn as nn +import torch.optim as optim +from gym.spaces import MultiDiscrete +from stable_baselines3.common.vec_env import VecEnvWrapper, VecMonitor, VecVideoRecorder +from torch.distributions.categorical import Categorical +from torch.utils.tensorboard import SummaryWriter + +from gym_microrts import microrts_ai +from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv + + +def parse_args(): + # fmt: off + parser = argparse.ArgumentParser() + parser.add_argument('--exp-name', type=str, default=os.path.basename(__file__).rstrip(".py"), + help='the name of this experiment') + parser.add_argument('--gym-id', type=str, default="MicroRTSGridModeVecEnv", + help='the id of the gym environment') + parser.add_argument('--learning-rate', type=float, default=2.5e-4, + help='the learning rate of the optimizer') + parser.add_argument('--seed', type=int, default=1, + help='seed of the experiment') + parser.add_argument('--total-timesteps', type=int, default=50000000, + help='total timesteps of the experiments') + parser.add_argument('--torch-deterministic', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='if toggled, `torch.backends.cudnn.deterministic=False`') + parser.add_argument('--cuda', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='if toggled, cuda will not be enabled by default') + parser.add_argument('--prod-mode', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='run the script in production mode and use wandb to log outputs') + parser.add_argument('--capture-video', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='whether to capture videos of the agent performances (check out `videos` folder)') + parser.add_argument('--wandb-project-name', type=str, default="gym-microrts", + help="the wandb's project name") + parser.add_argument('--wandb-entity', type=str, default=None, + help="the entity (team) of wandb's project") + + # Algorithm specific arguments + parser.add_argument('--partial-obs', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='if toggled, the game will have partial observability') + parser.add_argument('--n-minibatch', type=int, default=4, + help='the number of mini batch') + parser.add_argument('--num-bot-envs', type=int, default=0, + help='the number of bot game environment; 16 bot envs means 16 games') + parser.add_argument('--num-selfplay-envs', type=int, default=24, + help='the number of self play envs; 16 self play envs means 8 games') + parser.add_argument('--num-steps', type=int, default=256, + help='the number of steps per game environment') + parser.add_argument('--gamma', type=float, default=0.99, + help='the discount factor gamma') + parser.add_argument('--gae-lambda', type=float, default=0.95, + help='the lambda for the general advantage estimation') + parser.add_argument('--ent-coef', type=float, default=0.01, + help="coefficient of the entropy") + parser.add_argument('--vf-coef', type=float, default=0.5, + help="coefficient of the value function") + parser.add_argument('--max-grad-norm', type=float, default=0.5, + help='the maximum norm for the gradient clipping') + parser.add_argument('--clip-coef', type=float, default=0.1, + help="the surrogate clipping coefficient") + parser.add_argument('--update-epochs', type=int, default=4, + help="the K epochs to update the policy") + parser.add_argument('--kle-stop', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='If toggled, the policy updates will be early stopped w.r.t target-kl') + parser.add_argument('--kle-rollback', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='If toggled, the policy updates will roll back to previous policy if KL exceeds target-kl') + parser.add_argument('--target-kl', type=float, default=0.03, + help='the target-kl variable that is referred by --kl') + parser.add_argument('--gae', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='Use GAE for advantage computation') + parser.add_argument('--norm-adv', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help="Toggles advantages normalization") + parser.add_argument('--anneal-lr', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help="Toggle learning rate annealing for policy and value networks") + parser.add_argument('--clip-vloss', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='Toggles whether or not to use a clipped loss for the value function, as per the paper.') + parser.add_argument('--num-models', type=int, default=100, + help='the number of models saved') + parser.add_argument('--max-eval-workers', type=int, default=4, + help='the maximum number of eval workers (skips evaluation when set to 0)') + parser.add_argument('--train-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], + help='the list of maps used during training') + parser.add_argument('--eval-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], + help='the list of maps used during evaluation') + + args = parser.parse_args() + if not args.seed: + args.seed = int(time.time()) + args.num_envs = args.num_selfplay_envs + args.num_bot_envs + args.batch_size = int(args.num_envs * args.num_steps) + args.minibatch_size = int(args.batch_size // args.n_minibatch) + args.num_updates = args.total_timesteps // args.batch_size + args.save_frequency = max(1, int(args.num_updates // args.num_models)) + # fmt: on + return args + + +class MicroRTSStatsRecorder(VecEnvWrapper): + def __init__(self, env, gamma=0.99) -> None: + super().__init__(env) + self.gamma = gamma + + def reset(self): + obs = self.venv.reset() + self.raw_rewards = [[] for _ in range(self.num_envs)] + self.ts = np.zeros(self.num_envs, dtype=np.float32) + self.raw_discount_rewards = [[] for _ in range(self.num_envs)] + return obs + + def step_wait(self): + obs, rews, dones, infos = self.venv.step_wait() + newinfos = list(infos[:]) + for i in range(len(dones)): + self.raw_rewards[i] += [infos[i]["raw_rewards"]] + self.raw_discount_rewards[i] += [ + (self.gamma ** self.ts[i]) + * np.concatenate((infos[i]["raw_rewards"], infos[i]["raw_rewards"].sum()), axis=None) + ] + self.ts[i] += 1 + if dones[i]: + info = infos[i].copy() + raw_returns = np.array(self.raw_rewards[i]).sum(0) + raw_names = [str(rf) for rf in self.rfs] + raw_discount_returns = np.array(self.raw_discount_rewards[i]).sum(0) + raw_discount_names = ["discounted_" + str(rf) for rf in self.rfs] + ["discounted"] + info["microrts_stats"] = dict(zip(raw_names, raw_returns)) + info["microrts_stats"].update(dict(zip(raw_discount_names, raw_discount_returns))) + self.raw_rewards[i] = [] + self.raw_discount_rewards[i] = [] + self.ts[i] = 0 + newinfos[i] = info + return obs, rews, dones, newinfos + + +# ALGO LOGIC: initialize agent here: +class CategoricalMasked(Categorical): + def __init__(self, probs=None, logits=None, validate_args=None, masks=[], mask_value=None): + logits = torch.where(masks.bool(), logits, mask_value) + super(CategoricalMasked, self).__init__(probs, logits, validate_args) + + +class Transpose(nn.Module): + def __init__(self, permutation): + super().__init__() + self.permutation = permutation + + def forward(self, x): + return x.permute(self.permutation) + + +def layer_init(layer, std=np.sqrt(2), bias_const=0.0): + torch.nn.init.orthogonal_(layer.weight, std) + torch.nn.init.constant_(layer.bias, bias_const) + return layer + + +class Agent(nn.Module): + def __init__(self, envs): + super(Agent, self).__init__() + h, w, c = envs.observation_space.shape + self.encoder = nn.Sequential( + Transpose((0, 3, 1, 2)), + layer_init(nn.Conv2d(c, 32, kernel_size=3, padding=1)), + nn.MaxPool2d(3, stride=2, padding=1), + nn.ReLU(), + layer_init(nn.Conv2d(32, 64, kernel_size=3, padding=1)), + nn.MaxPool2d(3, stride=2, padding=1), + nn.ReLU(), + ) + + self.actor = nn.Sequential( + layer_init(nn.ConvTranspose2d(64, 32, 3, stride=2, padding=1, output_padding=1)), + nn.ReLU(), + layer_init(nn.ConvTranspose2d(32, 78, 3, stride=2, padding=1, output_padding=1)), + Transpose((0, 2, 3, 1)), + ) + self.critic = nn.Sequential( + nn.Flatten(), + layer_init(nn.Linear(64 * 4 * 4, 128)), + nn.ReLU(), + layer_init(nn.Linear(128, 1), std=1), + ) + self.register_buffer("mask_value", torch.tensor(-1e8)) + + def get_action_and_value(self, x, action=None, invalid_action_masks=None, envs=None, device=None): + hidden = self.encoder(x) + logits = self.actor(hidden) + grid_logits = logits.reshape(-1, envs.action_plane_space.nvec.sum()) + split_logits = torch.split(grid_logits, envs.action_plane_space.nvec.tolist(), dim=1) + + if action is None: + invalid_action_masks = invalid_action_masks.view(-1, invalid_action_masks.shape[-1]) + split_invalid_action_masks = torch.split(invalid_action_masks, envs.action_plane_space.nvec.tolist(), dim=1) + multi_categoricals = [ + CategoricalMasked(logits=logits, masks=iam, mask_value=self.mask_value) + for (logits, iam) in zip(split_logits, split_invalid_action_masks) + ] + action = torch.stack([categorical.sample() for categorical in multi_categoricals]) + else: + invalid_action_masks = invalid_action_masks.view(-1, invalid_action_masks.shape[-1]) + action = action.view(-1, action.shape[-1]).T + split_invalid_action_masks = torch.split(invalid_action_masks, envs.action_plane_space.nvec.tolist(), dim=1) + multi_categoricals = [ + CategoricalMasked(logits=logits, masks=iam, mask_value=self.mask_value) + for (logits, iam) in zip(split_logits, split_invalid_action_masks) + ] + logprob = torch.stack([categorical.log_prob(a) for a, categorical in zip(action, multi_categoricals)]) + entropy = torch.stack([categorical.entropy() for categorical in multi_categoricals]) + num_predicted_parameters = len(envs.action_plane_space.nvec) + logprob = logprob.T.view(-1, self.mapsize, num_predicted_parameters) + entropy = entropy.T.view(-1, self.mapsize, num_predicted_parameters) + action = action.T.view(-1, self.mapsize, num_predicted_parameters) + return action, logprob.sum(1).sum(1), entropy.sum(1).sum(1), invalid_action_masks, self.critic(hidden) + + def get_value(self, x): + return self.critic(self.encoder(x)) + + +def run_evaluation(model_path: str, output_path: str, eval_maps: List[str]): + args = [ + "python", + "league.py", + "--evals", + model_path, + "--update-db", + "false", + "--cuda", + "false", + "--output-path", + output_path, + "--model-type", + "ppo_gridnet", + "--maps", + *eval_maps, + ] + fd = subprocess.Popen(args) + print(f"Evaluating {model_path}") + return_code = fd.wait() + assert return_code == 0 + return (model_path, output_path) + + +class TrueskillWriter: + def __init__(self, prod_mode, writer, league_path: str, league_step_path: str): + self.prod_mode = prod_mode + self.writer = writer + self.trueskill_df = pd.read_csv(league_path) + self.trueskill_step_df = pd.read_csv(league_step_path) + self.trueskill_step_df["type"] = self.trueskill_step_df["name"] + self.trueskill_step_df["step"] = 0 + # xxx(okachaiev): not sure we need this copy + self.preset_trueskill_step_df = self.trueskill_step_df.copy() + + def on_evaluation_done(self, future): + if future.cancelled(): + return + model_path, output_path = future.result() + league = pd.read_csv(output_path, index_col="name") + assert model_path in league.index + model_global_step = int(model_path.split("/")[-1][:-3]) + self.writer.add_scalar("charts/trueskill", league.loc[model_path]["trueskill"], model_global_step) + print(f"global_step={model_global_step}, trueskill={league.loc[model_path]['trueskill']}") + + # table visualization logic + if self.prod_mode: + trueskill_data = { + "name": league.loc[model_path].name, + "mu": league.loc[model_path]["mu"], + "sigma": league.loc[model_path]["sigma"], + "trueskill": league.loc[model_path]["trueskill"], + } + self.trueskill_df = self.trueskill_df.append(trueskill_data, ignore_index=True) + wandb.log({"trueskill": wandb.Table(dataframe=self.trueskill_df)}) + trueskill_data["type"] = "training" + trueskill_data["step"] = model_global_step + self.trueskill_step_df = self.trueskill_step_df.append(trueskill_data, ignore_index=True) + preset_trueskill_step_df_clone = self.preset_trueskill_step_df.copy() + preset_trueskill_step_df_clone["step"] = model_global_step + self.trueskill_step_df = self.trueskill_step_df.append(preset_trueskill_step_df_clone, ignore_index=True) + wandb.log({"trueskill_step": wandb.Table(dataframe=self.trueskill_step_df)}) + + +if __name__ == "__main__": + args = parse_args() + + print(f"Save frequency: {args.save_frequency}") + + # TRY NOT TO MODIFY: setup the environment + experiment_name = f"{args.gym_id}__{args.exp_name}__{args.seed}__{int(time.time())}" + if args.prod_mode: + import wandb + + run = wandb.init( + project=args.wandb_project_name, + entity=args.wandb_entity, + # sync_tensorboard=True, + config=vars(args), + name=experiment_name, + monitor_gym=True, + save_code=True, + ) + wandb.tensorboard.patch(save=False) + writer = SummaryWriter(f"runs/{experiment_name}") + writer.add_text( + "hyperparameters", "|param|value|\n|-|-|\n%s" % ("\n".join([f"|{key}|{value}|" for key, value in vars(args).items()])) + ) + + # TRY NOT TO MODIFY: seeding + device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") + + print(f"Device: {device}") + + random.seed(args.seed) + np.random.seed(args.seed) + torch.manual_seed(args.seed) + torch.backends.cudnn.deterministic = args.torch_deterministic + envs = MicroRTSGridModeVecEnv( + num_selfplay_envs=args.num_selfplay_envs, + num_bot_envs=args.num_bot_envs, + partial_obs=args.partial_obs, + max_steps=2000, + render_theme=2, + ai2s=[microrts_ai.coacAI for _ in range(args.num_bot_envs - 6)] + + [microrts_ai.randomBiasedAI for _ in range(min(args.num_bot_envs, 2))] + + [microrts_ai.lightRushAI for _ in range(min(args.num_bot_envs, 2))] + + [microrts_ai.workerRushAI for _ in range(min(args.num_bot_envs, 2))], + map_paths=[args.train_maps[0]], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + cycle_maps=args.train_maps, + ) + envs = MicroRTSStatsRecorder(envs, args.gamma) + envs = VecMonitor(envs) + if args.capture_video: + envs = VecVideoRecorder( + envs, f"videos/{experiment_name}", record_video_trigger=lambda x: x % 100000 == 0, video_length=2000 + ) + assert isinstance(envs.action_space, MultiDiscrete), "only MultiDiscrete action space is supported" + + eval_executor = None + if args.max_eval_workers > 0: + from concurrent.futures import ThreadPoolExecutor + + eval_executor = ThreadPoolExecutor(max_workers=args.max_eval_workers, thread_name_prefix="league-eval-") + + agent = Agent(envs).to(device) + optimizer = optim.Adam(agent.parameters(), lr=args.learning_rate, eps=1e-5) + if args.anneal_lr: + # https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/ppo2/defaults.py#L20 + lr = lambda f: f * args.learning_rate + + # ALGO Logic: Storage for epoch data + mapsize = 16 * 16 + action_space_shape = (mapsize, len(envs.action_plane_space.nvec)) + invalid_action_shape = (mapsize, envs.action_plane_space.nvec.sum()) + + obs = torch.zeros((args.num_steps, args.num_envs) + envs.observation_space.shape).to(device) + actions = torch.zeros((args.num_steps, args.num_envs) + action_space_shape).to(device) + logprobs = torch.zeros((args.num_steps, args.num_envs)).to(device) + rewards = torch.zeros((args.num_steps, args.num_envs)).to(device) + dones = torch.zeros((args.num_steps, args.num_envs)).to(device) + values = torch.zeros((args.num_steps, args.num_envs)).to(device) + invalid_action_masks = torch.zeros((args.num_steps, args.num_envs) + invalid_action_shape).to(device) + # TRY NOT TO MODIFY: start the game + global_step = 0 + start_time = time.time() + # Note how `next_obs` and `next_done` are used; their usage is equivalent to + # https://github.com/ikostrikov/pytorch-a2c-ppo-acktr-gail/blob/84a7582477fb0d5c82ad6d850fe476829dddd2e1/a2c_ppo_acktr/storage.py#L60 + next_obs = torch.Tensor(envs.reset()).to(device) + next_done = torch.zeros(args.num_envs).to(device) + + # CRASH AND RESUME LOGIC: + starting_update = 1 + + if args.prod_mode and wandb.run.resumed: + starting_update = run.summary.get("charts/update") + 1 + global_step = starting_update * args.batch_size + api = wandb.Api() + run = api.run(f"{run.entity}/{run.project}/{run.id}") + model = run.file("agent.pt") + model.download(f"models/{experiment_name}/") + agent.load_state_dict(torch.load(f"models/{experiment_name}/agent.pt", map_location=device)) + agent.eval() + print(f"resumed at update {starting_update}") + + print("Model's state_dict:") + for param_tensor in agent.state_dict(): + print(param_tensor, "\t", agent.state_dict()[param_tensor].size()) + total_params = sum([param.nelement() for param in agent.parameters()]) + print("Model's total parameters:", total_params) + + # EVALUATION LOGIC: + trueskill_writer = TrueskillWriter( + args.prod_mode, writer, "gym-microrts-static-files/league.csv", "gym-microrts-static-files/league.csv" + ) + + for update in range(starting_update, args.num_updates + 1): + # Annealing the rate if instructed to do so. + if args.anneal_lr: + frac = 1.0 - (update - 1.0) / args.num_updates + lrnow = lr(frac) + optimizer.param_groups[0]["lr"] = lrnow + + # TRY NOT TO MODIFY: prepare the execution of the game. + for step in range(0, args.num_steps): + # envs.render() + global_step += 1 * args.num_envs + obs[step] = next_obs + dones[step] = next_done + # ALGO LOGIC: put action logic here + with torch.no_grad(): + invalid_action_masks[step] = torch.tensor(envs.get_action_mask()).to(device) + action, logproba, _, _, vs = agent.get_action_and_value( + next_obs, envs=envs, invalid_action_masks=invalid_action_masks[step], device=device + ) + values[step] = vs.flatten() + + actions[step] = action + logprobs[step] = logproba + try: + next_obs, rs, ds, infos = envs.step(action.cpu().numpy().reshape(envs.num_envs, -1)) + next_obs = torch.Tensor(next_obs).to(device) + except Exception as e: + e.printStackTrace() + raise + rewards[step], next_done = torch.Tensor(rs).to(device), torch.Tensor(ds).to(device) + + for info in infos: + if "episode" in info.keys(): + print(f"global_step={global_step}, episodic_return={info['episode']['r']}") + writer.add_scalar("charts/episodic_return", info["episode"]["r"], global_step) + writer.add_scalar("charts/episodic_length", info["episode"]["l"], global_step) + for key in info["microrts_stats"]: + writer.add_scalar(f"charts/episodic_return/{key}", info["microrts_stats"][key], global_step) + break + + # bootstrap reward if not done. reached the batch limit + with torch.no_grad(): + last_value = agent.get_value(next_obs).reshape(1, -1) + if args.gae: + advantages = torch.zeros_like(rewards).to(device) + lastgaelam = 0 + for t in reversed(range(args.num_steps)): + if t == args.num_steps - 1: + nextnonterminal = 1.0 - next_done + nextvalues = last_value + else: + nextnonterminal = 1.0 - dones[t + 1] + nextvalues = values[t + 1] + delta = rewards[t] + args.gamma * nextvalues * nextnonterminal - values[t] + advantages[t] = lastgaelam = delta + args.gamma * args.gae_lambda * nextnonterminal * lastgaelam + returns = advantages + values + else: + returns = torch.zeros_like(rewards).to(device) + for t in reversed(range(args.num_steps)): + if t == args.num_steps - 1: + nextnonterminal = 1.0 - next_done + next_return = last_value + else: + nextnonterminal = 1.0 - dones[t + 1] + next_return = returns[t + 1] + returns[t] = rewards[t] + args.gamma * nextnonterminal * next_return + advantages = returns - values + + # flatten the batch + b_obs = obs.reshape((-1,) + envs.observation_space.shape) + b_logprobs = logprobs.reshape(-1) + b_actions = actions.reshape((-1,) + action_space_shape) + b_advantages = advantages.reshape(-1) + b_returns = returns.reshape(-1) + b_values = values.reshape(-1) + b_invalid_action_masks = invalid_action_masks.reshape((-1,) + invalid_action_shape) + + # Optimizing the policy and value network + inds = np.arange( + args.batch_size, + ) + for i_epoch_pi in range(args.update_epochs): + np.random.shuffle(inds) + for start in range(0, args.batch_size, args.minibatch_size): + end = start + args.minibatch_size + minibatch_ind = inds[start:end] + mb_advantages = b_advantages[minibatch_ind] + if args.norm_adv: + mb_advantages = (mb_advantages - mb_advantages.mean()) / (mb_advantages.std() + 1e-8) + _, newlogproba, entropy, _, new_values = agent.get_action_and_value( + b_obs[minibatch_ind], b_actions.long()[minibatch_ind], b_invalid_action_masks[minibatch_ind], envs, device + ) + ratio = (newlogproba - b_logprobs[minibatch_ind]).exp() + + # Stats + approx_kl = (b_logprobs[minibatch_ind] - newlogproba).mean() + + # Policy loss + pg_loss1 = -mb_advantages * ratio + pg_loss2 = -mb_advantages * torch.clamp(ratio, 1 - args.clip_coef, 1 + args.clip_coef) + pg_loss = torch.max(pg_loss1, pg_loss2).mean() + entropy_loss = entropy.mean() + + # Value loss + new_values = new_values.view(-1) + if args.clip_vloss: + v_loss_unclipped = (new_values - b_returns[minibatch_ind]) ** 2 + v_clipped = b_values[minibatch_ind] + torch.clamp( + new_values - b_values[minibatch_ind], -args.clip_coef, args.clip_coef + ) + v_loss_clipped = (v_clipped - b_returns[minibatch_ind]) ** 2 + v_loss_max = torch.max(v_loss_unclipped, v_loss_clipped) + v_loss = 0.5 * v_loss_max.mean() + else: + v_loss = 0.5 * ((new_values - b_returns[minibatch_ind]) ** 2) + + loss = pg_loss - args.ent_coef * entropy_loss + v_loss * args.vf_coef + + optimizer.zero_grad() + loss.backward() + nn.utils.clip_grad_norm_(agent.parameters(), args.max_grad_norm) + optimizer.step() + + if (update - 1) % args.save_frequency == 0: + if not os.path.exists(f"models/{experiment_name}"): + os.makedirs(f"models/{experiment_name}") + torch.save(agent.state_dict(), f"models/{experiment_name}/agent.pt") + torch.save(agent.state_dict(), f"models/{experiment_name}/{global_step}.pt") + if args.prod_mode: + wandb.save(f"models/{experiment_name}/agent.pt", base_path=f"models/{experiment_name}", policy="now") + if eval_executor is not None: + future = eval_executor.submit( + run_evaluation, + f"models/{experiment_name}/{global_step}.pt", + f"runs/{experiment_name}/{global_step}.csv", + args.eval_maps, + ) + print(f"Queued models/{experiment_name}/{global_step}.pt") + future.add_done_callback(trueskill_writer.on_evaluation_done) + + # TRY NOT TO MODIFY: record rewards for plotting purposes + writer.add_scalar("charts/learning_rate", optimizer.param_groups[0]["lr"], global_step) + writer.add_scalar("charts/update", update, global_step) + writer.add_scalar("losses/value_loss", v_loss.detach().item(), global_step) + writer.add_scalar("losses/policy_loss", pg_loss.detach().item(), global_step) + writer.add_scalar("losses/entropy", entropy.detach().mean().item(), global_step) + writer.add_scalar("losses/approx_kl", approx_kl.detach().item(), global_step) + if args.kle_stop or args.kle_rollback: + writer.add_scalar("debug/pg_stop_iter", i_epoch_pi, global_step) + writer.add_scalar("charts/sps", int(global_step / (time.time() - start_time)), global_step) + print("SPS:", int(global_step / (time.time() - start_time))) + + if eval_executor is not None: + # shutdown pool of threads but make sure we finished scheduled evaluations + eval_executor.shutdown(wait=True, cancel_futures=False) + envs.close() + writer.close() From da86e48980e4e8f98de8e468826b04f4b0a9e323 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Wed, 29 Nov 2023 15:01:01 +0100 Subject: [PATCH 06/28] fully conv+pooling ppo, not hardcoded to 16x16 maps --- experiments/league.py | 6 +++- experiments/ppo_gridnet_variable_mapsizes.py | 34 ++++++++++++++++---- gym_microrts/envs/vec_env.py | 26 +++++++++++++-- 3 files changed, 55 insertions(+), 11 deletions(-) diff --git a/experiments/league.py b/experiments/league.py index 66d02d32..13bf988f 100644 --- a/experiments/league.py +++ b/experiments/league.py @@ -58,7 +58,7 @@ def parse_args(): help='the highest sigma of the trueskill evaluation') parser.add_argument('--output-path', type=str, default=f"league.temp.csv", help='the output path of the leaderboard csv') - parser.add_argument('--model-type', type=str, default=f"ppo_gridnet_large", choices=["ppo_gridnet_large", "ppo_gridnet"], + parser.add_argument('--model-type', type=str, default=f"ppo_gridnet_large", choices=["ppo_gridnet_large", "ppo_gridnet_variable_mapsizes", "ppo_gridnet"], help='the output path of the leaderboard csv') parser.add_argument('--maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], help="the maps to do trueskill evaluations") @@ -86,6 +86,10 @@ def parse_args(): if args.model_type == "ppo_gridnet_large": from ppo_gridnet_large import Agent, MicroRTSStatsRecorder + from gym_microrts.envs.vec_env import MicroRTSBotVecEnv, MicroRTSGridModeVecEnv +elif args.model_type == "ppo_gridnet_variable_mapsizes": + from ppo_gridnet_variable_mapsizes import Agent, MicroRTSStatsRecorder + from gym_microrts.envs.vec_env import MicroRTSBotVecEnv, MicroRTSGridModeVecEnv else: from ppo_gridnet import Agent, MicroRTSStatsRecorder diff --git a/experiments/ppo_gridnet_variable_mapsizes.py b/experiments/ppo_gridnet_variable_mapsizes.py index a551559a..f22e772a 100644 --- a/experiments/ppo_gridnet_variable_mapsizes.py +++ b/experiments/ppo_gridnet_variable_mapsizes.py @@ -1,5 +1,3 @@ -# http://proceedings.mlr.press/v97/han19a/han19a.pdf - import argparse import os import random @@ -12,6 +10,7 @@ import pandas as pd import torch import torch.nn as nn +import torch.nn.functional as F import torch.optim as optim from gym.spaces import MultiDiscrete from stable_baselines3.common.vec_env import VecEnvWrapper, VecMonitor, VecVideoRecorder @@ -91,7 +90,7 @@ def parse_args(): help='the number of models saved') parser.add_argument('--max-eval-workers', type=int, default=4, help='the maximum number of eval workers (skips evaluation when set to 0)') - parser.add_argument('--train-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], + parser.add_argument('--train-maps', nargs='+', default=["maps/EightBasesWorkers16x12.xml"], help='the list of maps used during training') parser.add_argument('--eval-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], help='the list of maps used during evaluation') @@ -170,6 +169,7 @@ def layer_init(layer, std=np.sqrt(2), bias_const=0.0): class Agent(nn.Module): def __init__(self, envs): super(Agent, self).__init__() + self.mapsize = envs.height * envs.width h, w, c = envs.observation_space.shape self.encoder = nn.Sequential( Transpose((0, 3, 1, 2)), @@ -187,14 +187,34 @@ def __init__(self, envs): layer_init(nn.ConvTranspose2d(32, 78, 3, stride=2, padding=1, output_padding=1)), Transpose((0, 2, 3, 1)), ) - self.critic = nn.Sequential( + + # The old critic (cannot handle different map sizes) + # self.critic = nn.Sequential( + # nn.Flatten(), + # layer_init(nn.Linear(64 * 4 * 4, 128)), + # nn.ReLU(), + # layer_init(nn.Linear(128, 1), std=1), + # ) + + self.num_critic_channels = 32 + self.critic_before_pooling = nn.Sequential( + layer_init(nn.ConvTranspose2d(64, self.num_critic_channels, 3, stride=2, padding=1, output_padding=1)), + nn.ReLU(), + ) + self.critic_after_pooling = nn.Sequential( nn.Flatten(), - layer_init(nn.Linear(64 * 4 * 4, 128)), + layer_init(nn.Linear(self.num_critic_channels * 2, 128)), nn.ReLU(), layer_init(nn.Linear(128, 1), std=1), ) + self.register_buffer("mask_value", torch.tensor(-1e8)) + def critic(self, encoded_input): + v = self.critic_before_pooling(encoded_input) + pool = torch.cat((F.adaptive_max_pool2d(v, 1), F.adaptive_avg_pool2d(v, 1)), 1) + return self.critic_after_pooling(pool) + def get_action_and_value(self, x, action=None, invalid_action_masks=None, envs=None, device=None): hidden = self.encoder(x) logits = self.actor(hidden) @@ -242,7 +262,7 @@ def run_evaluation(model_path: str, output_path: str, eval_maps: List[str]): "--output-path", output_path, "--model-type", - "ppo_gridnet", + "ppo_gridnet_variable_mapsizes", "--maps", *eval_maps, ] @@ -362,7 +382,7 @@ def on_evaluation_done(self, future): lr = lambda f: f * args.learning_rate # ALGO Logic: Storage for epoch data - mapsize = 16 * 16 + mapsize = envs.height * envs.width action_space_shape = (mapsize, len(envs.action_plane_space.nvec)) invalid_action_shape = (mapsize, envs.action_plane_space.nvec.sum()) diff --git a/gym_microrts/envs/vec_env.py b/gym_microrts/envs/vec_env.py index 0ebd75ac..a92f32d4 100644 --- a/gym_microrts/envs/vec_env.py +++ b/gym_microrts/envs/vec_env.py @@ -93,9 +93,29 @@ def __init__( print(root_dir) subprocess.run(["bash", "build.sh", "&>", "build.log"], cwd=f"{root_dir}") - # read map - root = ET.parse(os.path.join(self.microrts_path, self.map_paths[0])).getroot() - self.height, self.width = int(root.get("height")), int(root.get("width")) + # read maps, store all map sizes + self.map_heights = np.zeros(len(map_paths), dtype=int) + self.map_widths = np.zeros(len(map_paths), dtype=int) + self.cycle_map_heights = np.zeros(len(self.cycle_maps), dtype=int) + self.cycle_map_widths = np.zeros(len(self.cycle_maps), dtype=int) + + for i in range(len(map_paths)): + root = ET.parse(os.path.join(self.microrts_path, self.map_paths[i])).getroot() + self.map_heights[i] = int(root.get("height")) + self.map_widths[i] = int(root.get("width")) + + for i in range(len(self.cycle_maps)): + root = ET.parse(self.cycle_maps[i]).getroot() + self.cycle_map_heights[i] = int(root.get("height")) + self.cycle_map_widths[i] = int(root.get("width")) + + # for height and width (independent of map) we'll pick the biggest over all maps + self.height = np.max(self.map_heights) + self.width = np.max(self.map_widths) + + if len(self.cycle_maps) > 0: + self.height = max(self.height, np.max(self.cycle_map_heights)) + self.width = max(self.width, np.max(self.cycle_map_widths)) # launch the JVM if not jpype._jpype.isStarted(): From bcf152835bf3aac10fe1182f644734e0f306e673 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Fri, 1 Dec 2023 12:40:58 +0100 Subject: [PATCH 07/28] updated java --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index d09e85a8..1b86c88e 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit d09e85a8f77612151d0ce69bdb010af69a15fcee +Subproject commit 1b86c88ee89acc69b75d10228df1ad9ee308f2b0 From b02fe6f6e75e7d2b90566d3f6422ffe8763adcc0 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Fri, 8 Dec 2023 15:20:21 +0100 Subject: [PATCH 08/28] reshaping obs tensors for map sizes --- experiments/ppo_gridnet_variable_mapsizes.py | 4 +++- gym_microrts/envs/vec_env.py | 15 +++++++++++++++ gym_microrts/microrts | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/experiments/ppo_gridnet_variable_mapsizes.py b/experiments/ppo_gridnet_variable_mapsizes.py index f22e772a..0f34dc7a 100644 --- a/experiments/ppo_gridnet_variable_mapsizes.py +++ b/experiments/ppo_gridnet_variable_mapsizes.py @@ -94,6 +94,8 @@ def parse_args(): help='the list of maps used during training') parser.add_argument('--eval-maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], help='the list of maps used during evaluation') + parser.add_argument('--cycle-maps', nargs='+', default=["maps/EightBasesWorkers16x12.xml", "maps/16x16/basesWorkers16x16A.xml"], + help='list of maps to cycle through after environments complete during training') args = parser.parse_args() if not args.seed: @@ -359,7 +361,7 @@ def on_evaluation_done(self, future): + [microrts_ai.workerRushAI for _ in range(min(args.num_bot_envs, 2))], map_paths=[args.train_maps[0]], reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), - cycle_maps=args.train_maps, + cycle_maps=args.cycle_maps, ) envs = MicroRTSStatsRecorder(envs, args.gamma) envs = VecMonitor(envs) diff --git a/gym_microrts/envs/vec_env.py b/gym_microrts/envs/vec_env.py index a92f32d4..f6bd60ff 100644 --- a/gym_microrts/envs/vec_env.py +++ b/gym_microrts/envs/vec_env.py @@ -214,6 +214,20 @@ def reset(self): return np.array(obs) def _encode_obs(self, obs): + num_channels, height, width = obs.shape + + # Add padding to obs such that it is as big as we need for our biggest map + pad_width = self.width - width + pad_height = self.height - height + if pad_width > 0 or pad_height > 0: + obs_padded = np.ndarray((num_channels, self.height, self.width), np.int32) + for channel_idx, plane in enumerate(obs): + if channel_idx == 5: # Index for the walls/terrain channel + obs_padded[channel_idx, :, :] = np.pad(plane, ((0, pad_height), (0, pad_width)), constant_values=1) + else: + obs_padded[channel_idx, :, :] = np.pad(plane, ((0, pad_height), (0, pad_width)), constant_values=0) + obs = obs_padded + obs = obs.reshape(len(obs), -1).clip(0, np.array([self.num_planes]).T - 1) obs_planes = np.zeros((self.height * self.width, self.num_planes_prefix_sum[-1]), dtype=np.int32) obs_planes_idx = np.arange(len(obs_planes)) @@ -221,6 +235,7 @@ def _encode_obs(self, obs): for i in range(1, self.num_planes_len): obs_planes[obs_planes_idx, obs[i] + self.num_planes_prefix_sum[i]] = 1 + return obs_planes.reshape(self.height, self.width, -1) def step_async(self, actions): diff --git a/gym_microrts/microrts b/gym_microrts/microrts index b09555c6..ecbfb379 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit b09555c6d681f98e3daf411421c70cd4893592b0 +Subproject commit ecbfb3794706882bf461657aa3d490b374f9985c From 76dada71aab3f52604666a35f8ab902bda1d99b7 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Mon, 11 Dec 2023 15:55:00 +0100 Subject: [PATCH 09/28] update java repo --- experiments/league.py | 986 +++++++++++++++++++++--------------------- 1 file changed, 493 insertions(+), 493 deletions(-) diff --git a/experiments/league.py b/experiments/league.py index 66d02d32..b29e9f64 100644 --- a/experiments/league.py +++ b/experiments/league.py @@ -1,493 +1,493 @@ -# http://proceedings.mlr.press/v97/han19a/han19a.pdf - -import argparse -import datetime -import itertools -import os -import random -import shutil -import uuid -from distutils.util import strtobool -from enum import Enum - -import numpy as np -import pandas as pd -import torch -from peewee import ( - JOIN, - CharField, - DateTimeField, - FloatField, - ForeignKeyField, - Model, - SmallIntegerField, - SqliteDatabase, - fn, -) -from stable_baselines3.common.vec_env import VecMonitor -from trueskill import Rating, quality_1vs1, rate_1vs1 - -from gym_microrts import microrts_ai # fmt: off - -torch.set_num_threads(1) - - -def parse_args(): - # fmt: off - parser = argparse.ArgumentParser() - parser.add_argument('--exp-name', type=str, default=os.path.basename(__file__).rstrip(".py"), - help='the name of this experiment') - parser.add_argument('--prod-mode', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='run the script in production mode and use wandb to log outputs') - parser.add_argument('--wandb-project-name', type=str, default="cleanRL", - help="the wandb's project name") - parser.add_argument('--wandb-entity', type=str, default=None, - help="the entity (team) of wandb's project") - - parser.add_argument('--partial-obs', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='if toggled, the game will have partial observability') - parser.add_argument('--evals', nargs='+', default=["randomBiasedAI","workerRushAI","lightRushAI", "coacAI"], # [], - help='the ais') - parser.add_argument('--num-matches', type=int, default=10, - help='seed of the experiment') - parser.add_argument('--update-db', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help='if toggled, the database will be updated') - parser.add_argument('--cuda', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help='if toggled, cuda will not be enabled by default') - parser.add_argument('--highest-sigma', type=float, default=1.4, - help='the highest sigma of the trueskill evaluation') - parser.add_argument('--output-path', type=str, default=f"league.temp.csv", - help='the output path of the leaderboard csv') - parser.add_argument('--model-type', type=str, default=f"ppo_gridnet_large", choices=["ppo_gridnet_large", "ppo_gridnet"], - help='the output path of the leaderboard csv') - parser.add_argument('--maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], - help="the maps to do trueskill evaluations") - # ["randomBiasedAI","workerRushAI","lightRushAI","coacAI"] - # default=["randomBiasedAI","workerRushAI","lightRushAI","coacAI","randomAI","passiveAI","naiveMCTSAI","mixedBot","rojo","izanagi","tiamat","droplet","guidedRojoA3N"] - args = parser.parse_args() - # fmt: on - return args - - -args = parse_args() -dbname = "league" -if args.partial_obs: - dbname = "po_league" -dbpath = f"gym-microrts-static-files/{dbname}.db" -csvpath = f"gym-microrts-static-files/{dbname}.csv" -if not args.update_db: - if not os.path.exists(f"gym-microrts-static-files/tmp"): - os.makedirs(f"gym-microrts-static-files/tmp") - tmp_dbpath = f"gym-microrts-static-files/tmp/{str(uuid.uuid4())}.db" - shutil.copyfile(dbpath, tmp_dbpath) - dbpath = tmp_dbpath -db = SqliteDatabase(dbpath) - -if args.model_type == "ppo_gridnet_large": - from ppo_gridnet_large import Agent, MicroRTSStatsRecorder - - from gym_microrts.envs.vec_env import MicroRTSBotVecEnv, MicroRTSGridModeVecEnv -else: - from ppo_gridnet import Agent, MicroRTSStatsRecorder - - from gym_microrts.envs.vec_env import MicroRTSBotVecEnv, MicroRTSGridModeVecEnv - - -class BaseModel(Model): - class Meta: - database = db - - -class AI(BaseModel): - name = CharField(unique=True) - mu = FloatField() - sigma = FloatField() - ai_type = CharField() - - def __str__(self): - return f"🤖 {self.name} with N({round(self.mu, 3)}, {round(self.sigma, 3)})" - - -class MatchHistory(BaseModel): - challenger = ForeignKeyField(AI, backref="challenger_match_histories") - defender = ForeignKeyField(AI, backref="defender_match_histories") - win = SmallIntegerField() - draw = SmallIntegerField() - loss = SmallIntegerField() - created_date = DateTimeField(default=datetime.datetime.now) - - -db.connect() -db.create_tables([AI, MatchHistory]) - - -class Outcome(Enum): - WIN = 1 - DRAW = 0 - LOSS = -1 - - -class Match: - def __init__(self, partial_obs: bool, match_up=None, map_path="maps/16x16/basesWorkers16x16A.xml"): - # mode 0: rl-ai vs built-in-ai - # mode 1: rl-ai vs rl-ai - # mode 2: built-in-ai vs built-in-ai - - built_in_ais = None - built_in_ais2 = None - rl_ai = None - rl_ai2 = None - self.map_path = map_path - - # determine mode - rl_ais = [] - built_in_ais = [] - for ai in match_up: - if ai[-3:] == ".pt": - rl_ais += [ai] - else: - built_in_ais += [ai] - if len(rl_ais) == 1: - mode = 0 - p0 = rl_ais[0] - p1 = built_in_ais[0] - rl_ai = p0 - built_in_ais = [eval(f"microrts_ai.{p1}")] - elif len(rl_ais) == 2: - mode = 1 - p0 = rl_ais[0] - p1 = rl_ais[1] - rl_ai = p0 - rl_ai2 = p1 - else: - mode = 2 - p0 = built_in_ais[0] - p1 = built_in_ais[1] - built_in_ais = [eval(f"microrts_ai.{p0}")] - built_in_ais2 = [eval(f"microrts_ai.{p1}")] - - self.p0, self.p1 = p0, p1 - - self.mode = mode - self.partial_obs = partial_obs - self.built_in_ais = built_in_ais - self.built_in_ais2 = built_in_ais2 - self.rl_ai = rl_ai - self.rl_ai2 = rl_ai2 - self.device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") - max_steps = 5000 - if mode == 0: - self.envs = MicroRTSGridModeVecEnv( - num_bot_envs=len(built_in_ais), - num_selfplay_envs=0, - partial_obs=partial_obs, - max_steps=max_steps, - render_theme=2, - ai2s=built_in_ais, - map_paths=[map_path], - reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), - autobuild=False, - ) - self.agent = Agent(self.envs).to(self.device) - self.agent.load_state_dict(torch.load(self.rl_ai, map_location=self.device)) - self.agent.eval() - elif mode == 1: - self.envs = MicroRTSGridModeVecEnv( - num_bot_envs=0, - num_selfplay_envs=2, - partial_obs=partial_obs, - max_steps=max_steps, - render_theme=2, - map_paths=[map_path], - reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), - autobuild=False, - ) - self.agent = Agent(self.envs).to(self.device) - self.agent.load_state_dict(torch.load(self.rl_ai, map_location=self.device)) - self.agent.eval() - self.agent2 = Agent(self.envs).to(self.device) - self.agent2.load_state_dict(torch.load(self.rl_ai2, map_location=self.device)) - self.agent2.eval() - else: - self.envs = MicroRTSBotVecEnv( - ai1s=built_in_ais, - ai2s=built_in_ais2, - max_steps=max_steps, - render_theme=2, - map_paths=[map_path], - reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), - autobuild=False, - ) - self.envs = MicroRTSStatsRecorder(self.envs) - self.envs = VecMonitor(self.envs) - - def run(self, num_matches=7): - if self.mode == 0: - return self.run_m0(num_matches) - elif self.mode == 1: - return self.run_m1(num_matches) - else: - return self.run_m2(num_matches) - - def run_m0(self, num_matches): - results = [] - 16 * 16 - next_obs = torch.Tensor(self.envs.reset()).to(self.device) - while True: - # self.envs.render() - # ALGO LOGIC: put action logic here - with torch.no_grad(): - mask = torch.tensor(np.array(self.envs.get_action_mask())).to(self.device) - action, _, _, _, _ = self.agent.get_action_and_value( - next_obs, envs=self.envs, invalid_action_masks=mask, device=self.device - ) - try: - next_obs, rs, ds, infos = self.envs.step(action.cpu().numpy().reshape(self.envs.num_envs, -1)) - next_obs = torch.Tensor(next_obs).to(self.device) - except Exception as e: - e.printStackTrace() - raise - - for idx, info in enumerate(infos): - if "episode" in info.keys(): - results += [info["microrts_stats"]["WinLossRewardFunction"]] - if len(results) >= num_matches: - return results - - def run_m1(self, num_matches): - results = [] - 16 * 16 - next_obs = torch.Tensor(self.envs.reset()).to(self.device) - while True: - # self.envs.render() - # ALGO LOGIC: put action logic here - with torch.no_grad(): - mask = torch.tensor(np.array(self.envs.get_action_mask())).to(self.device) - - p1_obs = next_obs[::2] - p2_obs = next_obs[1::2] - p1_mask = mask[::2] - p2_mask = mask[1::2] - - p1_action, _, _, _, _ = self.agent.get_action_and_value( - p1_obs, envs=self.envs, invalid_action_masks=p1_mask, device=self.device - ) - p2_action, _, _, _, _ = self.agent2.get_action_and_value( - p2_obs, envs=self.envs, invalid_action_masks=p2_mask, device=self.device - ) - action = torch.zeros((self.envs.num_envs, p2_action.shape[1], p2_action.shape[2])) - action[::2] = p1_action - action[1::2] = p2_action - - try: - next_obs, rs, ds, infos = self.envs.step(action.cpu().numpy().reshape(self.envs.num_envs, -1)) - next_obs = torch.Tensor(next_obs).to(self.device) - except Exception as e: - e.printStackTrace() - raise - - for idx, info in enumerate(infos): - if "episode" in info.keys(): - results += [info["microrts_stats"]["WinLossRewardFunction"]] - if len(results) >= num_matches: - return results - - def run_m2(self, num_matches): - results = [] - self.envs.reset() - while True: - # self.envs.render() - # dummy actions - next_obs, reward, done, infos = self.envs.step( - [ - [ - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], - ] - ] - ) - for idx, info in enumerate(infos): - if "episode" in info.keys(): - results += [info["microrts_stats"]["WinLossRewardFunction"]] - if len(results) >= num_matches: - return results - - -def get_ai_type(ai_name): - if ai_name[-3:] == ".pt": - return "rl_ai" - else: - return "built_in_ai" - - -def get_match_history(ai_name): - query = ( - MatchHistory.select( - AI.name, - fn.SUM(MatchHistory.win).alias("wins"), - fn.SUM(MatchHistory.draw).alias("draws"), - fn.SUM(MatchHistory.loss).alias("losss"), - ) - .join(AI, JOIN.LEFT_OUTER, on=MatchHistory.defender) - .group_by(MatchHistory.defender) - .where(MatchHistory.challenger == AI.get(name=ai_name)) - ) - return pd.DataFrame(list(query.dicts())) - - -def get_leaderboard(): - query = AI.select( - AI.name, - AI.mu, - AI.sigma, - (AI.mu - 3 * AI.sigma).alias("trueskill"), - ).order_by((AI.mu - 3 * AI.sigma).desc()) - return pd.DataFrame(list(query.dicts())) - - -def get_leaderboard_existing_ais(existing_ai_names): - query = ( - AI.select( - AI.name, - AI.mu, - AI.sigma, - (AI.mu - 3 * AI.sigma).alias("trueskill"), - ) - .where((AI.name.in_(existing_ai_names))) - .order_by((AI.mu - 3 * AI.sigma).desc()) - ) - return pd.DataFrame(list(query.dicts())) - - -if __name__ == "__main__": - print(f"evaluation maps is", args.maps) - existing_ai_names = [item.name for item in AI.select()] - all_ai_names = set(existing_ai_names + args.evals) - - for ai_name in all_ai_names: - ai = AI.get_or_none(name=ai_name) - if ai is None: - ai = AI(name=ai_name, mu=25.0, sigma=8.333333333333334, ai_type=get_ai_type(ai_name)) - ai.save() - - # case 1: initialize the league with round robin - if len(existing_ai_names) == 0: - match_ups = list(itertools.combinations(all_ai_names, 2)) - np.random.shuffle(match_ups) - for idx in range(2): # switch player 1 and 2's starting locations - for match_up in match_ups: - if idx == 0: - match_up = list(reversed(match_up)) - - for index in range(len(args.maps)): - m = Match(args.partial_obs, match_up, args.maps[index]) - challenger = AI.get_or_none(name=m.p0) - defender = AI.get_or_none(name=m.p1) - - r = m.run(args.num_matches // 2) - for item in r: - drawn = False - if item == Outcome.WIN.value: - winner = challenger - loser = defender - elif item == Outcome.DRAW.value: - drawn = True - else: - winner = defender - loser = challenger - - print(f"{winner.name} {'draws' if drawn else 'wins'} {loser.name}") - - winner_rating, loser_rating = rate_1vs1( - Rating(winner.mu, winner.sigma), Rating(loser.mu, loser.sigma), drawn=drawn - ) - - winner.mu, winner.sigma = winner_rating.mu, winner_rating.sigma - loser.mu, loser.sigma = loser_rating.mu, loser_rating.sigma - winner.save() - loser.save() - - MatchHistory( - challenger=challenger, - defender=defender, - win=int(item == 1), - draw=int(item == 0), - loss=int(item == -1), - ).save() - get_leaderboard().to_csv(csvpath, index=False) - - # case 2: new AIs - else: - leaderboard = get_leaderboard_existing_ais(existing_ai_names) - new_ai_names = [ai_name for ai_name in args.evals if ai_name not in existing_ai_names] - for new_ai_name in new_ai_names: - ai = AI.get(name=new_ai_name) - - while ai.sigma > args.highest_sigma: - - match_qualities = [] - for ai2_name in leaderboard["name"]: - opponent_ai = AI.get(name=ai2_name) - if ai.name == opponent_ai.name: - continue - match_qualities += [[opponent_ai, quality_1vs1(ai, opponent_ai)]] - - # sort by quality - match_qualities = sorted(match_qualities, key=lambda x: x[1], reverse=True) - print("match_qualities[:3]", match_qualities[:3]) - - # run a match if the quality of the opponent is high enough - top_3_ai = [item[0] for item in match_qualities[:3]] - opponent_ai = random.choice(top_3_ai) - match_up = (ai.name, opponent_ai.name) - match_quality = quality_1vs1(ai, opponent_ai) - print(f"the match up is ({ai}, {opponent_ai}), quality is {round(match_quality, 4)}") - winner = ai # dummy setting - for idx in range(2): # switch player 1 and 2's starting locations - if idx == 0: - match_up = list(reversed(match_up)) - - for index in range(len(args.maps)): - m = Match(args.partial_obs, match_up, args.maps[index]) - challenger = AI.get_or_none(name=m.p0) - defender = AI.get_or_none(name=m.p1) - - r = m.run(1) - for item in r: - drawn = False - if item == Outcome.WIN.value: - winner = challenger - loser = defender - elif item == Outcome.DRAW.value: - drawn = True - winner = defender - loser = challenger - else: - winner = defender - loser = challenger - print(f"{winner.name} {'draws' if drawn else 'wins'} {loser.name}") - winner_rating, loser_rating = rate_1vs1( - Rating(winner.mu, winner.sigma), Rating(loser.mu, loser.sigma), drawn=drawn - ) - - # freeze existing AIs ratings - if winner.name == ai.name: - ai.mu, ai.sigma = winner_rating.mu, winner_rating.sigma - ai.save() - else: - ai.mu, ai.sigma = loser_rating.mu, loser_rating.sigma - ai.save() - MatchHistory( - challenger=challenger, - defender=defender, - win=int(item == 1), - draw=int(item == 0), - loss=int(item == -1), - ).save() - - get_leaderboard().to_csv(args.output_path, index=False) - - print("=======================") - print(get_leaderboard()) - if not args.update_db: - os.remove(dbpath) +# http://proceedings.mlr.press/v97/han19a/han19a.pdf + +import argparse +import datetime +import itertools +import os +import random +import shutil +import uuid +from distutils.util import strtobool +from enum import Enum + +import numpy as np +import pandas as pd +import torch +from peewee import ( + JOIN, + CharField, + DateTimeField, + FloatField, + ForeignKeyField, + Model, + SmallIntegerField, + SqliteDatabase, + fn, +) +from stable_baselines3.common.vec_env import VecMonitor +from trueskill import Rating, quality_1vs1, rate_1vs1 + +from gym_microrts import microrts_ai # fmt: off + +torch.set_num_threads(1) + + +def parse_args(): + # fmt: off + parser = argparse.ArgumentParser() + parser.add_argument('--exp-name', type=str, default=os.path.basename(__file__).rstrip(".py"), + help='the name of this experiment') + parser.add_argument('--prod-mode', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='run the script in production mode and use wandb to log outputs') + parser.add_argument('--wandb-project-name', type=str, default="cleanRL", + help="the wandb's project name") + parser.add_argument('--wandb-entity', type=str, default=None, + help="the entity (team) of wandb's project") + + parser.add_argument('--partial-obs', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='if toggled, the game will have partial observability') + parser.add_argument('--evals', nargs='+', default=["randomBiasedAI","workerRushAI","lightRushAI", "coacAI"], # [], + help='the ais') + parser.add_argument('--num-matches', type=int, default=10, + help='seed of the experiment') + parser.add_argument('--update-db', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='if toggled, the database will be updated') + parser.add_argument('--cuda', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='if toggled, cuda will not be enabled by default') + parser.add_argument('--highest-sigma', type=float, default=1.4, + help='the highest sigma of the trueskill evaluation') + parser.add_argument('--output-path', type=str, default=f"league.temp.csv", + help='the output path of the leaderboard csv') + parser.add_argument('--model-type', type=str, default=f"ppo_gridnet_large", choices=["ppo_gridnet_large", "ppo_gridnet"], + help='the output path of the leaderboard csv') + parser.add_argument('--maps', nargs='+', default=["maps/16x16/basesWorkers16x16A.xml"], + help="the maps to do trueskill evaluations") + # ["randomBiasedAI","workerRushAI","lightRushAI","coacAI"] + # default=["randomBiasedAI","workerRushAI","lightRushAI","coacAI","randomAI","passiveAI","naiveMCTSAI","mixedBot","rojo","izanagi","tiamat","droplet","guidedRojoA3N"] + args = parser.parse_args() + # fmt: on + return args + + +args = parse_args() +dbname = "league" +if args.partial_obs: + dbname = "po_league" +dbpath = f"gym-microrts-static-files/{dbname}.db" +csvpath = f"gym-microrts-static-files/{dbname}.csv" +if not args.update_db: + if not os.path.exists(f"gym-microrts-static-files/tmp"): + os.makedirs(f"gym-microrts-static-files/tmp") + tmp_dbpath = f"gym-microrts-static-files/tmp/{str(uuid.uuid4())}.db" + shutil.copyfile(dbpath, tmp_dbpath) + dbpath = tmp_dbpath +db = SqliteDatabase(dbpath) + +if args.model_type == "ppo_gridnet_large": + from ppo_gridnet_large import Agent, MicroRTSStatsRecorder + + from gym_microrts.envs.vec_env import MicroRTSBotVecEnv, MicroRTSGridModeVecEnv +else: + from ppo_gridnet import Agent, MicroRTSStatsRecorder + + from gym_microrts.envs.vec_env import MicroRTSBotVecEnv, MicroRTSGridModeVecEnv + + +class BaseModel(Model): + class Meta: + database = db + + +class AI(BaseModel): + name = CharField(unique=True) + mu = FloatField() + sigma = FloatField() + ai_type = CharField() + + def __str__(self): + return f"🤖 {self.name} with N({round(self.mu, 3)}, {round(self.sigma, 3)})" + + +class MatchHistory(BaseModel): + challenger = ForeignKeyField(AI, backref="challenger_match_histories") + defender = ForeignKeyField(AI, backref="defender_match_histories") + win = SmallIntegerField() + draw = SmallIntegerField() + loss = SmallIntegerField() + created_date = DateTimeField(default=datetime.datetime.now) + + +db.connect() +db.create_tables([AI, MatchHistory]) + + +class Outcome(Enum): + WIN = 1 + DRAW = 0 + LOSS = -1 + + +class Match: + def __init__(self, partial_obs: bool, match_up=None, map_path="maps/16x16/basesWorkers16x16A.xml"): + # mode 0: rl-ai vs built-in-ai + # mode 1: rl-ai vs rl-ai + # mode 2: built-in-ai vs built-in-ai + + built_in_ais = None + built_in_ais2 = None + rl_ai = None + rl_ai2 = None + self.map_path = map_path + + # determine mode + rl_ais = [] + built_in_ais = [] + for ai in match_up: + if ai[-3:] == ".pt": + rl_ais += [ai] + else: + built_in_ais += [ai] + if len(rl_ais) == 1: + mode = 0 + p0 = rl_ais[0] + p1 = built_in_ais[0] + rl_ai = p0 + built_in_ais = [eval(f"microrts_ai.{p1}")] + elif len(rl_ais) == 2: + mode = 1 + p0 = rl_ais[0] + p1 = rl_ais[1] + rl_ai = p0 + rl_ai2 = p1 + else: + mode = 2 + p0 = built_in_ais[0] + p1 = built_in_ais[1] + built_in_ais = [eval(f"microrts_ai.{p0}")] + built_in_ais2 = [eval(f"microrts_ai.{p1}")] + + self.p0, self.p1 = p0, p1 + + self.mode = mode + self.partial_obs = partial_obs + self.built_in_ais = built_in_ais + self.built_in_ais2 = built_in_ais2 + self.rl_ai = rl_ai + self.rl_ai2 = rl_ai2 + self.device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") + max_steps = 5000 + if mode == 0: + self.envs = MicroRTSGridModeVecEnv( + num_bot_envs=len(built_in_ais), + num_selfplay_envs=0, + partial_obs=partial_obs, + max_steps=max_steps, + render_theme=2, + ai2s=built_in_ais, + map_paths=[map_path], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + autobuild=False, + ) + self.agent = Agent(self.envs).to(self.device) + self.agent.load_state_dict(torch.load(self.rl_ai, map_location=self.device)) + self.agent.eval() + elif mode == 1: + self.envs = MicroRTSGridModeVecEnv( + num_bot_envs=0, + num_selfplay_envs=2, + partial_obs=partial_obs, + max_steps=max_steps, + render_theme=2, + map_paths=[map_path], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + autobuild=False, + ) + self.agent = Agent(self.envs).to(self.device) + self.agent.load_state_dict(torch.load(self.rl_ai, map_location=self.device)) + self.agent.eval() + self.agent2 = Agent(self.envs).to(self.device) + self.agent2.load_state_dict(torch.load(self.rl_ai2, map_location=self.device)) + self.agent2.eval() + else: + self.envs = MicroRTSBotVecEnv( + ai1s=built_in_ais, + ai2s=built_in_ais2, + max_steps=max_steps, + render_theme=2, + map_paths=[map_path], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + autobuild=False, + ) + self.envs = MicroRTSStatsRecorder(self.envs) + self.envs = VecMonitor(self.envs) + + def run(self, num_matches=7): + if self.mode == 0: + return self.run_m0(num_matches) + elif self.mode == 1: + return self.run_m1(num_matches) + else: + return self.run_m2(num_matches) + + def run_m0(self, num_matches): + results = [] + 16 * 16 + next_obs = torch.Tensor(self.envs.reset()).to(self.device) + while True: + # self.envs.render() + # ALGO LOGIC: put action logic here + with torch.no_grad(): + mask = torch.tensor(np.array(self.envs.get_action_mask())).to(self.device) + action, _, _, _, _ = self.agent.get_action_and_value( + next_obs, envs=self.envs, invalid_action_masks=mask, device=self.device + ) + try: + next_obs, rs, ds, infos = self.envs.step(action.cpu().numpy().reshape(self.envs.num_envs, -1)) + next_obs = torch.Tensor(next_obs).to(self.device) + except Exception as e: + e.printStackTrace() + raise + + for idx, info in enumerate(infos): + if "episode" in info.keys(): + results += [info["microrts_stats"]["WinLossRewardFunction"]] + if len(results) >= num_matches: + return results + + def run_m1(self, num_matches): + results = [] + 16 * 16 + next_obs = torch.Tensor(self.envs.reset()).to(self.device) + while True: + # self.envs.render() + # ALGO LOGIC: put action logic here + with torch.no_grad(): + mask = torch.tensor(np.array(self.envs.get_action_mask())).to(self.device) + + p1_obs = next_obs[::2] + p2_obs = next_obs[1::2] + p1_mask = mask[::2] + p2_mask = mask[1::2] + + p1_action, _, _, _, _ = self.agent.get_action_and_value( + p1_obs, envs=self.envs, invalid_action_masks=p1_mask, device=self.device + ) + p2_action, _, _, _, _ = self.agent2.get_action_and_value( + p2_obs, envs=self.envs, invalid_action_masks=p2_mask, device=self.device + ) + action = torch.zeros((self.envs.num_envs, p2_action.shape[1], p2_action.shape[2])) + action[::2] = p1_action + action[1::2] = p2_action + + try: + next_obs, rs, ds, infos = self.envs.step(action.cpu().numpy().reshape(self.envs.num_envs, -1)) + next_obs = torch.Tensor(next_obs).to(self.device) + except Exception as e: + e.printStackTrace() + raise + + for idx, info in enumerate(infos): + if "episode" in info.keys(): + results += [info["microrts_stats"]["WinLossRewardFunction"]] + if len(results) >= num_matches: + return results + + def run_m2(self, num_matches): + results = [] + self.envs.reset() + while True: + # self.envs.render() + # dummy actions + next_obs, reward, done, infos = self.envs.step( + [ + [ + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], + ] + ] + ) + for idx, info in enumerate(infos): + if "episode" in info.keys(): + results += [info["microrts_stats"]["WinLossRewardFunction"]] + if len(results) >= num_matches: + return results + + +def get_ai_type(ai_name): + if ai_name[-3:] == ".pt": + return "rl_ai" + else: + return "built_in_ai" + + +def get_match_history(ai_name): + query = ( + MatchHistory.select( + AI.name, + fn.SUM(MatchHistory.win).alias("wins"), + fn.SUM(MatchHistory.draw).alias("draws"), + fn.SUM(MatchHistory.loss).alias("losss"), + ) + .join(AI, JOIN.LEFT_OUTER, on=MatchHistory.defender) + .group_by(MatchHistory.defender) + .where(MatchHistory.challenger == AI.get(name=ai_name)) + ) + return pd.DataFrame(list(query.dicts())) + + +def get_leaderboard(): + query = AI.select( + AI.name, + AI.mu, + AI.sigma, + (AI.mu - 3 * AI.sigma).alias("trueskill"), + ).order_by((AI.mu - 3 * AI.sigma).desc()) + return pd.DataFrame(list(query.dicts())) + + +def get_leaderboard_existing_ais(existing_ai_names): + query = ( + AI.select( + AI.name, + AI.mu, + AI.sigma, + (AI.mu - 3 * AI.sigma).alias("trueskill"), + ) + .where((AI.name.in_(existing_ai_names))) + .order_by((AI.mu - 3 * AI.sigma).desc()) + ) + return pd.DataFrame(list(query.dicts())) + + +if __name__ == "__main__": + print(f"evaluation maps is", args.maps) + existing_ai_names = [item.name for item in AI.select()] + all_ai_names = set(existing_ai_names + args.evals) + + for ai_name in all_ai_names: + ai = AI.get_or_none(name=ai_name) + if ai is None: + ai = AI(name=ai_name, mu=25.0, sigma=8.333333333333334, ai_type=get_ai_type(ai_name)) + ai.save() + + # case 1: initialize the league with round robin + if len(existing_ai_names) == 0: + match_ups = list(itertools.combinations(all_ai_names, 2)) + np.random.shuffle(match_ups) + for idx in range(2): # switch player 1 and 2's starting locations + for match_up in match_ups: + if idx == 0: + match_up = list(reversed(match_up)) + + for index in range(len(args.maps)): + m = Match(args.partial_obs, match_up, args.maps[index]) + challenger = AI.get_or_none(name=m.p0) + defender = AI.get_or_none(name=m.p1) + + r = m.run(args.num_matches // 2) + for item in r: + drawn = False + if item == Outcome.WIN.value: + winner = challenger + loser = defender + elif item == Outcome.DRAW.value: + drawn = True + else: + winner = defender + loser = challenger + + print(f"{winner.name} {'draws' if drawn else 'wins'} {loser.name}") + + winner_rating, loser_rating = rate_1vs1( + Rating(winner.mu, winner.sigma), Rating(loser.mu, loser.sigma), drawn=drawn + ) + + winner.mu, winner.sigma = winner_rating.mu, winner_rating.sigma + loser.mu, loser.sigma = loser_rating.mu, loser_rating.sigma + winner.save() + loser.save() + + MatchHistory( + challenger=challenger, + defender=defender, + win=int(item == 1), + draw=int(item == 0), + loss=int(item == -1), + ).save() + get_leaderboard().to_csv(csvpath, index=False) + + # case 2: new AIs + else: + leaderboard = get_leaderboard_existing_ais(existing_ai_names) + new_ai_names = [ai_name for ai_name in args.evals if ai_name not in existing_ai_names] + for new_ai_name in new_ai_names: + ai = AI.get(name=new_ai_name) + + while ai.sigma > args.highest_sigma: + + match_qualities = [] + for ai2_name in leaderboard["name"]: + opponent_ai = AI.get(name=ai2_name) + if ai.name == opponent_ai.name: + continue + match_qualities += [[opponent_ai, quality_1vs1(ai, opponent_ai)]] + + # sort by quality + match_qualities = sorted(match_qualities, key=lambda x: x[1], reverse=True) + print("match_qualities[:3]", match_qualities[:3]) + + # run a match if the quality of the opponent is high enough + top_3_ai = [item[0] for item in match_qualities[:3]] + opponent_ai = random.choice(top_3_ai) + match_up = (ai.name, opponent_ai.name) + match_quality = quality_1vs1(ai, opponent_ai) + print(f"the match up is ({ai}, {opponent_ai}), quality is {round(match_quality, 4)}") + winner = ai # dummy setting + for idx in range(2): # switch player 1 and 2's starting locations + if idx == 0: + match_up = list(reversed(match_up)) + + for index in range(len(args.maps)): + m = Match(args.partial_obs, match_up, args.maps[index]) + challenger = AI.get_or_none(name=m.p0) + defender = AI.get_or_none(name=m.p1) + + r = m.run(1) + for item in r: + drawn = False + if item == Outcome.WIN.value: + winner = challenger + loser = defender + elif item == Outcome.DRAW.value: + drawn = True + winner = defender + loser = challenger + else: + winner = defender + loser = challenger + print(f"{winner.name} {'draws' if drawn else 'wins'} {loser.name}") + winner_rating, loser_rating = rate_1vs1( + Rating(winner.mu, winner.sigma), Rating(loser.mu, loser.sigma), drawn=drawn + ) + + # freeze existing AIs ratings + if winner.name == ai.name: + ai.mu, ai.sigma = winner_rating.mu, winner_rating.sigma + ai.save() + else: + ai.mu, ai.sigma = loser_rating.mu, loser_rating.sigma + ai.save() + MatchHistory( + challenger=challenger, + defender=defender, + win=int(item == 1), + draw=int(item == 0), + loss=int(item == -1), + ).save() + + get_leaderboard().to_csv(args.output_path, index=False) + + print("=======================") + print(get_leaderboard()) + if not args.update_db: + os.remove(dbpath) From 393415eff4343ac88fed601f534092381e3c457e Mon Sep 17 00:00:00 2001 From: Dennis Soemers Date: Tue, 12 Dec 2023 15:24:29 +0100 Subject: [PATCH 10/28] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9229192d..9cfbd71d 100644 --- a/README.md +++ b/README.md @@ -61,9 +61,10 @@ python ppo_gridnet.py \ Before diving into the code, we highly recommend reading the preprint of our paper: [Gym-μRTS: Toward Affordable Deep Reinforcement Learning Research in Real-time Strategy Games](https://arxiv.org/abs/2105.13807). -### Depreciation note +### Depreciation notes -Note that the experiments in the technical paper above are done with [`gym_microrts==0.3.2`](https://github.com/vwxyzjn/gym-microrts/tree/v0.3.2). As we move forward beyond `v0.4.x`, we are planning to deprecate UAS despite its better performance in the paper. This is because UAS has a more complex implementation and makes it really difficult to incorporate selfplay or imitation learning in the future. +1. Note that the experiments in the technical paper above are done with [`gym_microrts==0.3.2`](https://github.com/vwxyzjn/gym-microrts/tree/v0.3.2). As we move forward beyond `v0.4.x`, we are planning to deprecate UAS despite its better performance in the paper. This is because UAS has a more complex implementation and makes it really difficult to incorporate selfplay or imitation learning in the future. +2. [v0.6.1](https://github.com/Farama-Foundation/MicroRTS-Py/releases/tag/v0.6.1) is the last version in which wall/terrain observations were not present in state tensors. As of December 2023, every state observation has an extra channel encoding the presence of walls, and models trained before this will therefore no longer be compatible with code in the `master` branch. Such models should use the code from `v0.6.1` instead. From b0cd077c94c4e4eee0cbab39b31202d570324d38 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 12 Dec 2023 15:40:07 +0100 Subject: [PATCH 11/28] no more external stat-files submodule --- .gitmodules | 3 --- experiments/gym-microrts-static-files | 1 - 2 files changed, 4 deletions(-) delete mode 160000 experiments/gym-microrts-static-files diff --git a/.gitmodules b/.gitmodules index ad8c0ea2..34854703 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "experiments/gym-microrts-static-files"] - path = experiments/gym-microrts-static-files - url = https://github.com/vwxyzjn/gym-microrts-static-files [submodule "gym_microrts/microrts"] path = gym_microrts/microrts url = https://github.com/Farama-Foundation/MicroRTS.git diff --git a/experiments/gym-microrts-static-files b/experiments/gym-microrts-static-files deleted file mode 160000 index 405f909f..00000000 --- a/experiments/gym-microrts-static-files +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 405f909fd98dd1adae5904e3facb54d8381f6291 From b4588bc449050325037095ead964333f70c2d949 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 12 Dec 2023 15:42:53 +0100 Subject: [PATCH 12/28] updated baseline agent and league files --- .../gym-microrts-static-files/agent_sota.pt | Bin 0 -> 800958 bytes .../gym-microrts-static-files/league.csv | 14 ++++++++++++++ .../gym-microrts-static-files/league.db | Bin 0 -> 73728 bytes 3 files changed, 14 insertions(+) create mode 100644 experiments/gym-microrts-static-files/agent_sota.pt create mode 100644 experiments/gym-microrts-static-files/league.csv create mode 100644 experiments/gym-microrts-static-files/league.db diff --git a/experiments/gym-microrts-static-files/agent_sota.pt b/experiments/gym-microrts-static-files/agent_sota.pt new file mode 100644 index 0000000000000000000000000000000000000000..f738e9b1db4d9b05368ee062aed3cc9dd7f00c3b GIT binary patch literal 800958 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
LMb)J+a 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%0DX%kz|LHs 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 literal 0 HcmV?d00001 diff --git a/experiments/gym-microrts-static-files/league.csv b/experiments/gym-microrts-static-files/league.csv new file mode 100644 index 00000000..7d95b129 --- /dev/null +++ b/experiments/gym-microrts-static-files/league.csv @@ -0,0 +1,14 @@ +name,mu,sigma,trueskill +coacAI,37.01208300442514,1.2057837814702337,33.39473166001444 +workerRushAI,32.177999126535994,1.0158657259647073,29.13040194864187 +droplet,32.046013299709365,1.0151344815092278,29.000609855181683 +mixedBot,31.485630788984253,1.0538188458547628,28.324174251419965 +izanagi,30.251048792700562,1.048141521227313,27.10662422901862 +tiamat,27.8300726697548,1.0437640107384225,24.69878063753953 +lightRushAI,26.430335172946624,1.0158591694179326,23.382757664692825 +rojo,25.174781972400247,1.0053993662036687,22.15858387378924 +guidedRojoA3N,23.137975074471896,0.9950992581462096,20.152677300033268 +naiveMCTSAI,20.932758765019557,0.9990214832647916,17.93569431522518 +randomBiasedAI,16.41033348962392,1.1908998345256558,12.837633986046953 +passiveAI,6.315587903310498,2.2292417057662304,-0.3721372139881929 +randomAI,5.9383357094823985,2.1599970738074847,-0.5416555119400552 diff --git a/experiments/gym-microrts-static-files/league.db b/experiments/gym-microrts-static-files/league.db new file mode 100644 index 0000000000000000000000000000000000000000..af88de47dc2e47db46afd45f780779fb6b0d0041 GIT binary patch literal 73728 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 Ym9VHV-5eRiLWmh>+#-gBr9S2V1u;5z9RL6T literal 0 HcmV?d00001 From 747305c9f3930ecb0a70624a85e5388af42dab47 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 12 Dec 2023 15:51:25 +0100 Subject: [PATCH 13/28] turned e2e test back on --- tests/test_e2e.py | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/tests/test_e2e.py b/tests/test_e2e.py index 90d0ae9b..1ccb3009 100644 --- a/tests/test_e2e.py +++ b/tests/test_e2e.py @@ -14,24 +14,22 @@ def test_ppo_gridnet(): assert grepexc.returncode in [0, 134] -# TODO need to add the two tests below back in once we have a new trained model - -# def test_ppo_gridnet_eval_selfplay(): -# try: -# subprocess.run( -# "cd experiments; python ppo_gridnet_eval.py --num-steps 16 --total-timesteps 32 --cuda False", -# shell=True, -# check=True, -# ) -# except subprocess.CalledProcessError as grepexc: -# print("error code", grepexc.returncode, grepexc.output) -# assert grepexc.returncode in [0, 134] -# -# -# def test_ppo_gridnet_eval_bot(): -# -# subprocess.run( -# "cd experiments; python ppo_gridnet_eval.py --ai coacAI --num-steps 16 --total-timesteps 32 --cuda False", -# shell=True, -# check=True, -# ) +def test_ppo_gridnet_eval_selfplay(): + try: + subprocess.run( + "cd experiments; python ppo_gridnet_eval.py --num-steps 16 --total-timesteps 32 --cuda False", + shell=True, + check=True, + ) + except subprocess.CalledProcessError as grepexc: + print("error code", grepexc.returncode, grepexc.output) + assert grepexc.returncode in [0, 134] + + +def test_ppo_gridnet_eval_bot(): + + subprocess.run( + "cd experiments; python ppo_gridnet_eval.py --ai coacAI --num-steps 16 --total-timesteps 32 --cuda False", + shell=True, + check=True, + ) From 6e3ffe5038e165ad2c42ba9a5c181cd7b102739e Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 12 Dec 2023 16:00:14 +0100 Subject: [PATCH 14/28] updated java repo --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index 1b86c88e..12408d16 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit 1b86c88ee89acc69b75d10228df1ad9ee308f2b0 +Subproject commit 12408d16eed812921e8f5d42b680855577397832 From e6672c536223b665d9cbcdb59d6cf90a2e42a72c Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 12 Dec 2023 16:09:16 +0100 Subject: [PATCH 15/28] now the default model type is not large --- experiments/ppo_gridnet_eval.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/ppo_gridnet_eval.py b/experiments/ppo_gridnet_eval.py index def2e59e..8cc06382 100644 --- a/experiments/ppo_gridnet_eval.py +++ b/experiments/ppo_gridnet_eval.py @@ -52,7 +52,7 @@ def parse_args(): help="the path to the agent's model") parser.add_argument('--ai', type=str, default="", help='the opponent AI to evaluate against') - parser.add_argument('--model-type', type=str, default=f"ppo_gridnet_large", choices=["ppo_gridnet_large", "ppo_gridnet"], + parser.add_argument('--model-type', type=str, default=f"ppo_gridnet", choices=["ppo_gridnet_large", "ppo_gridnet"], help='the output path of the leaderboard csv') args = parser.parse_args() if not args.seed: From 85c446d859bd899ad2d2c00ab1ad791b0717da76 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 12 Dec 2023 21:39:21 +0100 Subject: [PATCH 16/28] updated java repo --- .gitmodules | 6 +- .../gym-microrts-static-files/league.csv | 28 +- experiments/ppo_gridnet_eval.py | 410 +++++++++--------- gym_microrts/microrts | 2 +- 4 files changed, 223 insertions(+), 223 deletions(-) diff --git a/.gitmodules b/.gitmodules index 34854703..d1783a9d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "gym_microrts/microrts"] - path = gym_microrts/microrts - url = https://github.com/Farama-Foundation/MicroRTS.git +[submodule "gym_microrts/microrts"] + path = gym_microrts/microrts + url = https://github.com/Farama-Foundation/MicroRTS.git diff --git a/experiments/gym-microrts-static-files/league.csv b/experiments/gym-microrts-static-files/league.csv index 7d95b129..c6b165a2 100644 --- a/experiments/gym-microrts-static-files/league.csv +++ b/experiments/gym-microrts-static-files/league.csv @@ -1,14 +1,14 @@ -name,mu,sigma,trueskill -coacAI,37.01208300442514,1.2057837814702337,33.39473166001444 -workerRushAI,32.177999126535994,1.0158657259647073,29.13040194864187 -droplet,32.046013299709365,1.0151344815092278,29.000609855181683 -mixedBot,31.485630788984253,1.0538188458547628,28.324174251419965 -izanagi,30.251048792700562,1.048141521227313,27.10662422901862 -tiamat,27.8300726697548,1.0437640107384225,24.69878063753953 -lightRushAI,26.430335172946624,1.0158591694179326,23.382757664692825 -rojo,25.174781972400247,1.0053993662036687,22.15858387378924 -guidedRojoA3N,23.137975074471896,0.9950992581462096,20.152677300033268 -naiveMCTSAI,20.932758765019557,0.9990214832647916,17.93569431522518 -randomBiasedAI,16.41033348962392,1.1908998345256558,12.837633986046953 -passiveAI,6.315587903310498,2.2292417057662304,-0.3721372139881929 -randomAI,5.9383357094823985,2.1599970738074847,-0.5416555119400552 +name,mu,sigma,trueskill +coacAI,37.01208300442514,1.2057837814702337,33.39473166001444 +workerRushAI,32.177999126535994,1.0158657259647073,29.13040194864187 +droplet,32.046013299709365,1.0151344815092278,29.000609855181683 +mixedBot,31.485630788984253,1.0538188458547628,28.324174251419965 +izanagi,30.251048792700562,1.048141521227313,27.10662422901862 +tiamat,27.8300726697548,1.0437640107384225,24.69878063753953 +lightRushAI,26.430335172946624,1.0158591694179326,23.382757664692825 +rojo,25.174781972400247,1.0053993662036687,22.15858387378924 +guidedRojoA3N,23.137975074471896,0.9950992581462096,20.152677300033268 +naiveMCTSAI,20.932758765019557,0.9990214832647916,17.93569431522518 +randomBiasedAI,16.41033348962392,1.1908998345256558,12.837633986046953 +passiveAI,6.315587903310498,2.2292417057662304,-0.3721372139881929 +randomAI,5.9383357094823985,2.1599970738074847,-0.5416555119400552 diff --git a/experiments/ppo_gridnet_eval.py b/experiments/ppo_gridnet_eval.py index 8cc06382..1d9637fc 100644 --- a/experiments/ppo_gridnet_eval.py +++ b/experiments/ppo_gridnet_eval.py @@ -1,205 +1,205 @@ -# http://proceedings.mlr.press/v97/han19a/han19a.pdf - -import argparse -import os -import random -import time -from distutils.util import strtobool - -import numpy as np -import torch -from gym.spaces import MultiDiscrete -from stable_baselines3.common.vec_env import VecMonitor, VecVideoRecorder -from torch.utils.tensorboard import SummaryWriter - -from gym_microrts import microrts_ai # noqa - - -def parse_args(): - # fmt: off - parser = argparse.ArgumentParser() - parser.add_argument('--exp-name', type=str, default=os.path.basename(__file__).rstrip(".py"), - help='the name of this experiment') - parser.add_argument('--gym-id', type=str, default="MicroRTSGridModeVecEnv", - help='the id of the gym environment') - parser.add_argument('--learning-rate', type=float, default=2.5e-4, - help='the learning rate of the optimizer') - parser.add_argument('--seed', type=int, default=1, - help='seed of the experiment') - parser.add_argument('--total-timesteps', type=int, default=1000000, - help='total timesteps of the experiments') - parser.add_argument('--torch-deterministic', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help='if toggled, `torch.backends.cudnn.deterministic=False`') - parser.add_argument('--cuda', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, - help='if toggled, cuda will not be enabled by default') - parser.add_argument('--prod-mode', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='run the script in production mode and use wandb to log outputs') - parser.add_argument('--capture-video', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='whether to capture videos of the agent performances (check out `videos` folder)') - parser.add_argument('--wandb-project-name', type=str, default="cleanRL", - help="the wandb's project name") - parser.add_argument('--wandb-entity', type=str, default=None, - help="the entity (team) of wandb's project") - - # Algorithm specific arguments - parser.add_argument('--partial-obs', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, - help='if toggled, the game will have partial observability') - parser.add_argument('--num-steps', type=int, default=256, - help='the number of steps per game environment') - parser.add_argument("--agent-model-path", type=str, default="gym-microrts-static-files/agent_sota.pt", - help="the path to the agent's model") - parser.add_argument("--agent2-model-path", type=str, default="gym-microrts-static-files/agent_sota.pt", - help="the path to the agent's model") - parser.add_argument('--ai', type=str, default="", - help='the opponent AI to evaluate against') - parser.add_argument('--model-type', type=str, default=f"ppo_gridnet", choices=["ppo_gridnet_large", "ppo_gridnet"], - help='the output path of the leaderboard csv') - args = parser.parse_args() - if not args.seed: - args.seed = int(time.time()) - if args.ai: - args.num_bot_envs, args.num_selfplay_envs = 1, 0 - else: - args.num_bot_envs, args.num_selfplay_envs = 0, 2 - args.num_envs = args.num_selfplay_envs + args.num_bot_envs - args.batch_size = int(args.num_envs * args.num_steps) - args.num_updates = args.total_timesteps // args.batch_size - # fmt: on - return args - - -if __name__ == "__main__": - args = parse_args() - - if args.model_type == "ppo_gridnet_large": - from ppo_gridnet_large import Agent, MicroRTSStatsRecorder - - from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv - else: - from ppo_gridnet import Agent, MicroRTSStatsRecorder - - from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv - - # TRY NOT TO MODIFY: setup the environment - experiment_name = f"{args.gym_id}__{args.exp_name}__{args.seed}__{int(time.time())}" - if args.prod_mode: - import wandb - - run = wandb.init( - project=args.wandb_project_name, - entity=args.wandb_entity, - sync_tensorboard=True, - config=vars(args), - name=experiment_name, - monitor_gym=True, - save_code=True, - ) - CHECKPOINT_FREQUENCY = 10 - writer = SummaryWriter(f"runs/{experiment_name}") - writer.add_text( - "hyperparameters", "|param|value|\n|-|-|\n%s" % ("\n".join([f"|{key}|{value}|" for key, value in vars(args).items()])) - ) - - # TRY NOT TO MODIFY: seeding - device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") - random.seed(args.seed) - np.random.seed(args.seed) - torch.manual_seed(args.seed) - torch.backends.cudnn.deterministic = args.torch_deterministic - - ais = [] - if args.ai: - ais = [eval(f"microrts_ai.{args.ai}")] - envs = MicroRTSGridModeVecEnv( - num_bot_envs=len(ais), - num_selfplay_envs=args.num_selfplay_envs, - partial_obs=args.partial_obs, - max_steps=5000, - render_theme=2, - ai2s=ais, - map_paths=["maps/16x16/basesWorkers16x16A.xml"], - reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), - ) - envs = MicroRTSStatsRecorder(envs) - envs = VecMonitor(envs) - if args.capture_video: - envs = VecVideoRecorder( - envs, f"videos/{experiment_name}", record_video_trigger=lambda x: x % 100000 == 0, video_length=2000 - ) - assert isinstance(envs.action_space, MultiDiscrete), "only MultiDiscrete action space is supported" - - agent = Agent(envs).to(device) - agent2 = Agent(envs).to(device) - - # ALGO Logic: Storage for epoch data - mapsize = 16 * 16 - invalid_action_shape = (mapsize, envs.action_plane_space.nvec.sum()) - - # TRY NOT TO MODIFY: start the game - global_step = 0 - start_time = time.time() - # Note how `next_obs` and `next_done` are used; their usage is equivalent to - # https://github.com/ikostrikov/pytorch-a2c-ppo-acktr-gail/blob/84a7582477fb0d5c82ad6d850fe476829dddd2e1/a2c_ppo_acktr/storage.py#L60 - next_obs = torch.Tensor(envs.reset()).to(device) - next_done = torch.zeros(args.num_envs).to(device) - - ## CRASH AND RESUME LOGIC: - starting_update = 1 - agent.load_state_dict(torch.load(args.agent_model_path, map_location=device)) - agent.eval() - if not args.ai: - agent2.load_state_dict(torch.load(args.agent2_model_path, map_location=device)) - agent2.eval() - - print("Model's state_dict:") - for param_tensor in agent.state_dict(): - print(param_tensor, "\t", agent.state_dict()[param_tensor].size()) - total_params = sum([param.nelement() for param in agent.parameters()]) - print("Model's total parameters:", total_params) - - for update in range(starting_update, args.num_updates + 1): - # TRY NOT TO MODIFY: prepare the execution of the game. - for step in range(0, args.num_steps): - envs.render() - global_step += 1 * args.num_envs - # ALGO LOGIC: put action logic here - with torch.no_grad(): - invalid_action_masks = torch.tensor(np.array(envs.get_action_mask())).to(device) - - if args.ai: - action, logproba, _, _, vs = agent.get_action_and_value( - next_obs, envs=envs, invalid_action_masks=invalid_action_masks, device=device - ) - else: - p1_obs = next_obs[::2] - p2_obs = next_obs[1::2] - p1_mask = invalid_action_masks[::2] - p2_mask = invalid_action_masks[1::2] - - p1_action, _, _, _, _ = agent.get_action_and_value( - p1_obs, envs=envs, invalid_action_masks=p1_mask, device=device - ) - p2_action, _, _, _, _ = agent2.get_action_and_value( - p2_obs, envs=envs, invalid_action_masks=p2_mask, device=device - ) - action = torch.zeros((args.num_envs, p2_action.shape[1], p2_action.shape[2])) - action[::2] = p1_action - action[1::2] = p2_action - - try: - next_obs, rs, ds, infos = envs.step(action.cpu().numpy().reshape(envs.num_envs, -1)) - next_obs = torch.Tensor(next_obs).to(device) - except Exception as e: - e.printStackTrace() - raise - - for idx, info in enumerate(infos): - if "episode" in info.keys(): - if args.ai: - print("against", args.ai, info["microrts_stats"]["WinLossRewardFunction"]) - else: - if idx % 2 == 0: - print(f"player{idx % 2}", info["microrts_stats"]["WinLossRewardFunction"]) - - envs.close() - writer.close() +# http://proceedings.mlr.press/v97/han19a/han19a.pdf + +import argparse +import os +import random +import time +from distutils.util import strtobool + +import numpy as np +import torch +from gym.spaces import MultiDiscrete +from stable_baselines3.common.vec_env import VecMonitor, VecVideoRecorder +from torch.utils.tensorboard import SummaryWriter + +from gym_microrts import microrts_ai # noqa + + +def parse_args(): + # fmt: off + parser = argparse.ArgumentParser() + parser.add_argument('--exp-name', type=str, default=os.path.basename(__file__).rstrip(".py"), + help='the name of this experiment') + parser.add_argument('--gym-id', type=str, default="MicroRTSGridModeVecEnv", + help='the id of the gym environment') + parser.add_argument('--learning-rate', type=float, default=2.5e-4, + help='the learning rate of the optimizer') + parser.add_argument('--seed', type=int, default=1, + help='seed of the experiment') + parser.add_argument('--total-timesteps', type=int, default=1000000, + help='total timesteps of the experiments') + parser.add_argument('--torch-deterministic', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='if toggled, `torch.backends.cudnn.deterministic=False`') + parser.add_argument('--cuda', type=lambda x: bool(strtobool(x)), default=True, nargs='?', const=True, + help='if toggled, cuda will not be enabled by default') + parser.add_argument('--prod-mode', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='run the script in production mode and use wandb to log outputs') + parser.add_argument('--capture-video', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='whether to capture videos of the agent performances (check out `videos` folder)') + parser.add_argument('--wandb-project-name', type=str, default="cleanRL", + help="the wandb's project name") + parser.add_argument('--wandb-entity', type=str, default=None, + help="the entity (team) of wandb's project") + + # Algorithm specific arguments + parser.add_argument('--partial-obs', type=lambda x: bool(strtobool(x)), default=False, nargs='?', const=True, + help='if toggled, the game will have partial observability') + parser.add_argument('--num-steps', type=int, default=256, + help='the number of steps per game environment') + parser.add_argument("--agent-model-path", type=str, default="gym-microrts-static-files/agent_sota.pt", + help="the path to the agent's model") + parser.add_argument("--agent2-model-path", type=str, default="gym-microrts-static-files/agent_sota.pt", + help="the path to the agent's model") + parser.add_argument('--ai', type=str, default="", + help='the opponent AI to evaluate against') + parser.add_argument('--model-type', type=str, default=f"ppo_gridnet", choices=["ppo_gridnet_large", "ppo_gridnet"], + help='the output path of the leaderboard csv') + args = parser.parse_args() + if not args.seed: + args.seed = int(time.time()) + if args.ai: + args.num_bot_envs, args.num_selfplay_envs = 1, 0 + else: + args.num_bot_envs, args.num_selfplay_envs = 0, 2 + args.num_envs = args.num_selfplay_envs + args.num_bot_envs + args.batch_size = int(args.num_envs * args.num_steps) + args.num_updates = args.total_timesteps // args.batch_size + # fmt: on + return args + + +if __name__ == "__main__": + args = parse_args() + + if args.model_type == "ppo_gridnet_large": + from ppo_gridnet_large import Agent, MicroRTSStatsRecorder + + from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv + else: + from ppo_gridnet import Agent, MicroRTSStatsRecorder + + from gym_microrts.envs.vec_env import MicroRTSGridModeVecEnv + + # TRY NOT TO MODIFY: setup the environment + experiment_name = f"{args.gym_id}__{args.exp_name}__{args.seed}__{int(time.time())}" + if args.prod_mode: + import wandb + + run = wandb.init( + project=args.wandb_project_name, + entity=args.wandb_entity, + sync_tensorboard=True, + config=vars(args), + name=experiment_name, + monitor_gym=True, + save_code=True, + ) + CHECKPOINT_FREQUENCY = 10 + writer = SummaryWriter(f"runs/{experiment_name}") + writer.add_text( + "hyperparameters", "|param|value|\n|-|-|\n%s" % ("\n".join([f"|{key}|{value}|" for key, value in vars(args).items()])) + ) + + # TRY NOT TO MODIFY: seeding + device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") + random.seed(args.seed) + np.random.seed(args.seed) + torch.manual_seed(args.seed) + torch.backends.cudnn.deterministic = args.torch_deterministic + + ais = [] + if args.ai: + ais = [eval(f"microrts_ai.{args.ai}")] + envs = MicroRTSGridModeVecEnv( + num_bot_envs=len(ais), + num_selfplay_envs=args.num_selfplay_envs, + partial_obs=args.partial_obs, + max_steps=5000, + render_theme=2, + ai2s=ais, + map_paths=["maps/16x16/basesWorkers16x16A.xml"], + reward_weight=np.array([10.0, 1.0, 1.0, 0.2, 1.0, 4.0]), + ) + envs = MicroRTSStatsRecorder(envs) + envs = VecMonitor(envs) + if args.capture_video: + envs = VecVideoRecorder( + envs, f"videos/{experiment_name}", record_video_trigger=lambda x: x % 100000 == 0, video_length=2000 + ) + assert isinstance(envs.action_space, MultiDiscrete), "only MultiDiscrete action space is supported" + + agent = Agent(envs).to(device) + agent2 = Agent(envs).to(device) + + # ALGO Logic: Storage for epoch data + mapsize = 16 * 16 + invalid_action_shape = (mapsize, envs.action_plane_space.nvec.sum()) + + # TRY NOT TO MODIFY: start the game + global_step = 0 + start_time = time.time() + # Note how `next_obs` and `next_done` are used; their usage is equivalent to + # https://github.com/ikostrikov/pytorch-a2c-ppo-acktr-gail/blob/84a7582477fb0d5c82ad6d850fe476829dddd2e1/a2c_ppo_acktr/storage.py#L60 + next_obs = torch.Tensor(envs.reset()).to(device) + next_done = torch.zeros(args.num_envs).to(device) + + ## CRASH AND RESUME LOGIC: + starting_update = 1 + agent.load_state_dict(torch.load(args.agent_model_path, map_location=device)) + agent.eval() + if not args.ai: + agent2.load_state_dict(torch.load(args.agent2_model_path, map_location=device)) + agent2.eval() + + print("Model's state_dict:") + for param_tensor in agent.state_dict(): + print(param_tensor, "\t", agent.state_dict()[param_tensor].size()) + total_params = sum([param.nelement() for param in agent.parameters()]) + print("Model's total parameters:", total_params) + + for update in range(starting_update, args.num_updates + 1): + # TRY NOT TO MODIFY: prepare the execution of the game. + for step in range(0, args.num_steps): + envs.render() + global_step += 1 * args.num_envs + # ALGO LOGIC: put action logic here + with torch.no_grad(): + invalid_action_masks = torch.tensor(np.array(envs.get_action_mask())).to(device) + + if args.ai: + action, logproba, _, _, vs = agent.get_action_and_value( + next_obs, envs=envs, invalid_action_masks=invalid_action_masks, device=device + ) + else: + p1_obs = next_obs[::2] + p2_obs = next_obs[1::2] + p1_mask = invalid_action_masks[::2] + p2_mask = invalid_action_masks[1::2] + + p1_action, _, _, _, _ = agent.get_action_and_value( + p1_obs, envs=envs, invalid_action_masks=p1_mask, device=device + ) + p2_action, _, _, _, _ = agent2.get_action_and_value( + p2_obs, envs=envs, invalid_action_masks=p2_mask, device=device + ) + action = torch.zeros((args.num_envs, p2_action.shape[1], p2_action.shape[2])) + action[::2] = p1_action + action[1::2] = p2_action + + try: + next_obs, rs, ds, infos = envs.step(action.cpu().numpy().reshape(envs.num_envs, -1)) + next_obs = torch.Tensor(next_obs).to(device) + except Exception as e: + e.printStackTrace() + raise + + for idx, info in enumerate(infos): + if "episode" in info.keys(): + if args.ai: + print("against", args.ai, info["microrts_stats"]["WinLossRewardFunction"]) + else: + if idx % 2 == 0: + print(f"player{idx % 2}", info["microrts_stats"]["WinLossRewardFunction"]) + + envs.close() + writer.close() diff --git a/gym_microrts/microrts b/gym_microrts/microrts index 12408d16..bf76c052 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit 12408d16eed812921e8f5d42b680855577397832 +Subproject commit bf76c0528b97937d09fa055f8cfc51cf80155bf7 From 476a81991eaf37f6079ee49a3f6ba80c3b1f5eaa Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Wed, 13 Dec 2023 13:07:05 +0100 Subject: [PATCH 17/28] padding for masks --- gym_microrts/envs/vec_env.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gym_microrts/envs/vec_env.py b/gym_microrts/envs/vec_env.py index f6bd60ff..306fb3bb 100644 --- a/gym_microrts/envs/vec_env.py +++ b/gym_microrts/envs/vec_env.py @@ -320,6 +320,14 @@ def get_action_mask(self): """ # action_mask shape: [num_envs, map height, map width, 1 + action types + params] action_mask = np.array(self.vec_client.getMasks(0)) + num_envs, height, width, action_channels = action_mask.shape + + # Add padding to the mask such that it is as big as we need for our biggest map + pad_width = self.width - width + pad_height = self.height - height + if pad_width > 0 or pad_height > 0: + action_mask = np.pad(action_mask, ((0, 0), (0, pad_height), (0, pad_width), (0, 0))) + # self.source_unit_mask shape: [num_envs, map height * map width * 1] self.source_unit_mask = action_mask[:, :, :, 0].reshape(self.num_envs, -1) action_type_and_parameter_mask = action_mask[:, :, :, 1:].reshape(self.num_envs, self.height * self.width, -1) From acf1a7e6ed4b643fb8f8f64b212c13bd9c20d672 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Wed, 13 Dec 2023 13:07:52 +0100 Subject: [PATCH 18/28] gitignore these tmp files --- experiments/gym-microrts-static-files/tmp/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 experiments/gym-microrts-static-files/tmp/.gitignore diff --git a/experiments/gym-microrts-static-files/tmp/.gitignore b/experiments/gym-microrts-static-files/tmp/.gitignore new file mode 100644 index 00000000..a92ea3e3 --- /dev/null +++ b/experiments/gym-microrts-static-files/tmp/.gitignore @@ -0,0 +1 @@ +*.db From af5edf009ef9e988e13773aa876f75e58a99559f Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Mon, 18 Dec 2023 16:13:29 +0100 Subject: [PATCH 19/28] no more down/upsampling things that are problematic with certain map sizes --- experiments/league.py | 2 -- experiments/ppo_gridnet.py | 6 ++--- experiments/ppo_gridnet_variable_mapsizes.py | 24 ++++++++++++-------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/experiments/league.py b/experiments/league.py index d94a052e..e40bbced 100644 --- a/experiments/league.py +++ b/experiments/league.py @@ -235,7 +235,6 @@ def run(self, num_matches=7): def run_m0(self, num_matches): results = [] - 16 * 16 next_obs = torch.Tensor(self.envs.reset()).to(self.device) while True: # self.envs.render() @@ -260,7 +259,6 @@ def run_m0(self, num_matches): def run_m1(self, num_matches): results = [] - 16 * 16 next_obs = torch.Tensor(self.envs.reset()).to(self.device) while True: # self.envs.render() diff --git a/experiments/ppo_gridnet.py b/experiments/ppo_gridnet.py index fd6cd8c2..fdf1ea46 100644 --- a/experiments/ppo_gridnet.py +++ b/experiments/ppo_gridnet.py @@ -356,17 +356,17 @@ def on_evaluation_done(self, future): eval_executor = ThreadPoolExecutor(max_workers=args.max_eval_workers, thread_name_prefix="league-eval-") - agent = Agent(envs).to(device) + mapsize = envs.height * envs.width + agent = Agent(envs, mapsize=mapsize).to(device) optimizer = optim.Adam(agent.parameters(), lr=args.learning_rate, eps=1e-5) if args.anneal_lr: # https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/ppo2/defaults.py#L20 lr = lambda f: f * args.learning_rate # ALGO Logic: Storage for epoch data - mapsize = 16 * 16 + action_space_shape = (mapsize, len(envs.action_plane_space.nvec)) invalid_action_shape = (mapsize, envs.action_plane_space.nvec.sum()) - obs = torch.zeros((args.num_steps, args.num_envs) + envs.observation_space.shape).to(device) actions = torch.zeros((args.num_steps, args.num_envs) + action_space_shape).to(device) logprobs = torch.zeros((args.num_steps, args.num_envs)).to(device) diff --git a/experiments/ppo_gridnet_variable_mapsizes.py b/experiments/ppo_gridnet_variable_mapsizes.py index 0f34dc7a..d4cd53a9 100644 --- a/experiments/ppo_gridnet_variable_mapsizes.py +++ b/experiments/ppo_gridnet_variable_mapsizes.py @@ -171,22 +171,23 @@ def layer_init(layer, std=np.sqrt(2), bias_const=0.0): class Agent(nn.Module): def __init__(self, envs): super(Agent, self).__init__() - self.mapsize = envs.height * envs.width - h, w, c = envs.observation_space.shape + # self.mapsize = envs.height * envs.width + # h, w, c + _, _, c = envs.observation_space.shape self.encoder = nn.Sequential( Transpose((0, 3, 1, 2)), layer_init(nn.Conv2d(c, 32, kernel_size=3, padding=1)), - nn.MaxPool2d(3, stride=2, padding=1), + # nn.MaxPool2d(3, stride=2, padding=1), nn.ReLU(), layer_init(nn.Conv2d(32, 64, kernel_size=3, padding=1)), - nn.MaxPool2d(3, stride=2, padding=1), + # nn.MaxPool2d(3, stride=2, padding=1), nn.ReLU(), ) self.actor = nn.Sequential( - layer_init(nn.ConvTranspose2d(64, 32, 3, stride=2, padding=1, output_padding=1)), + layer_init(nn.ConvTranspose2d(64, 32, 3, stride=1, padding=1)), nn.ReLU(), - layer_init(nn.ConvTranspose2d(32, 78, 3, stride=2, padding=1, output_padding=1)), + layer_init(nn.ConvTranspose2d(32, 78, 3, stride=1, padding=1)), Transpose((0, 2, 3, 1)), ) @@ -200,7 +201,7 @@ def __init__(self, envs): self.num_critic_channels = 32 self.critic_before_pooling = nn.Sequential( - layer_init(nn.ConvTranspose2d(64, self.num_critic_channels, 3, stride=2, padding=1, output_padding=1)), + layer_init(nn.ConvTranspose2d(64, self.num_critic_channels, 3, stride=1, padding=1)), nn.ReLU(), ) self.critic_after_pooling = nn.Sequential( @@ -226,6 +227,7 @@ def get_action_and_value(self, x, action=None, invalid_action_masks=None, envs=N if action is None: invalid_action_masks = invalid_action_masks.view(-1, invalid_action_masks.shape[-1]) split_invalid_action_masks = torch.split(invalid_action_masks, envs.action_plane_space.nvec.tolist(), dim=1) + multi_categoricals = [ CategoricalMasked(logits=logits, masks=iam, mask_value=self.mask_value) for (logits, iam) in zip(split_logits, split_invalid_action_masks) @@ -239,12 +241,14 @@ def get_action_and_value(self, x, action=None, invalid_action_masks=None, envs=N CategoricalMasked(logits=logits, masks=iam, mask_value=self.mask_value) for (logits, iam) in zip(split_logits, split_invalid_action_masks) ] + + mapsize = envs.height * envs.width logprob = torch.stack([categorical.log_prob(a) for a, categorical in zip(action, multi_categoricals)]) entropy = torch.stack([categorical.entropy() for categorical in multi_categoricals]) num_predicted_parameters = len(envs.action_plane_space.nvec) - logprob = logprob.T.view(-1, self.mapsize, num_predicted_parameters) - entropy = entropy.T.view(-1, self.mapsize, num_predicted_parameters) - action = action.T.view(-1, self.mapsize, num_predicted_parameters) + logprob = logprob.T.view(-1, mapsize, num_predicted_parameters) + entropy = entropy.T.view(-1, mapsize, num_predicted_parameters) + action = action.T.view(-1, mapsize, num_predicted_parameters) return action, logprob.sum(1).sum(1), entropy.sum(1).sum(1), invalid_action_masks, self.critic(hidden) def get_value(self, x): From 43be327ccd0aff5310d4384269172939f0e9b9b0 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 19 Dec 2023 13:09:24 +0100 Subject: [PATCH 20/28] java repo update --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index c516f9c6..50a912fa 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit c516f9c6e072a030aa8c6354f428228d7efe9e20 +Subproject commit 50a912fa8581c4a05e365c3e4033a52b0696197c From d933a48305b880bb808b177a7104afa277dc0879 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 19 Dec 2023 14:35:13 +0100 Subject: [PATCH 21/28] updated java repo --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index 50a912fa..b7225f1d 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit 50a912fa8581c4a05e365c3e4033a52b0696197c +Subproject commit b7225f1d26fc80c2d5535d1e8007d0bfd471c886 From f603f3aee308074ea7fdd097f6604f666d55c58c Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 19 Dec 2023 15:07:05 +0100 Subject: [PATCH 22/28] updated java repo --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index b7225f1d..dad3fe21 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit b7225f1d26fc80c2d5535d1e8007d0bfd471c886 +Subproject commit dad3fe21317465e071d7201a4ed6d6100b27924b From 4ca88ca05ca6733a8691c5481ef40596aa14fbcb Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 19 Dec 2023 16:33:01 +0100 Subject: [PATCH 23/28] fix for action mask padding on variable map sizes --- gym_microrts/envs/vec_env.py | 13 +++++++------ gym_microrts/microrts | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/gym_microrts/envs/vec_env.py b/gym_microrts/envs/vec_env.py index 306fb3bb..72748c5d 100644 --- a/gym_microrts/envs/vec_env.py +++ b/gym_microrts/envs/vec_env.py @@ -320,13 +320,14 @@ def get_action_mask(self): """ # action_mask shape: [num_envs, map height, map width, 1 + action types + params] action_mask = np.array(self.vec_client.getMasks(0)) - num_envs, height, width, action_channels = action_mask.shape - # Add padding to the mask such that it is as big as we need for our biggest map - pad_width = self.width - width - pad_height = self.height - height - if pad_width > 0 or pad_height > 0: - action_mask = np.pad(action_mask, ((0, 0), (0, pad_height), (0, pad_width), (0, 0))) + for env_idx in range(len(action_mask)): + # Add padding to the mask such that it is as big as we need for our biggest map + height, width, _ = action_mask[env_idx].shape + pad_width = self.width - width + pad_height = self.height - height + if pad_width > 0 or pad_height > 0: + action_mask[env_idx] = np.pad(action_mask[env_idx], ((0, pad_height), (0, pad_width), (0, 0))) # self.source_unit_mask shape: [num_envs, map height * map width * 1] self.source_unit_mask = action_mask[:, :, :, 0].reshape(self.num_envs, -1) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index dad3fe21..491fddcf 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit dad3fe21317465e071d7201a4ed6d6100b27924b +Subproject commit 491fddcfdc99aed0d93840bcc4644f2de5c47112 From d188cbe0e2013d54d1734073eb8de0b5ef8312bb Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Tue, 19 Dec 2023 17:19:00 +0100 Subject: [PATCH 24/28] more padding fixes --- gym_microrts/envs/vec_env.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/gym_microrts/envs/vec_env.py b/gym_microrts/envs/vec_env.py index 72748c5d..86c838ee 100644 --- a/gym_microrts/envs/vec_env.py +++ b/gym_microrts/envs/vec_env.py @@ -321,13 +321,27 @@ def get_action_mask(self): # action_mask shape: [num_envs, map height, map width, 1 + action types + params] action_mask = np.array(self.vec_client.getMasks(0)) - for env_idx in range(len(action_mask)): - # Add padding to the mask such that it is as big as we need for our biggest map - height, width, _ = action_mask[env_idx].shape + if np.ndim(action_mask) == 1: + # Need to add padding to maximum map size for jagged array + action_mask_padded = np.ndarray( + (action_mask.shape[0], self.height, self.width, sum(self.action_space_dims) + 1), np.int32 + ) + for env_idx in range(len(action_mask)): + action_mask_array = np.array(action_mask[env_idx]) + height, width, _ = action_mask_array.shape + pad_width = self.width - width + pad_height = self.height - height + if pad_width > 0 or pad_height > 0: + action_mask_padded[env_idx] = np.pad(action_mask_array, ((0, pad_height), (0, pad_width), (0, 0))) + else: + action_mask_padded[env_idx] = action_mask_array + action_mask = action_mask_padded + elif action_mask.shape[1] < self.height or action_mask.shape[2] < self.width: + # Need to add padding to maximum map size for non-jagged batch that are all too small + _, height, width, _ = action_mask.shape pad_width = self.width - width pad_height = self.height - height - if pad_width > 0 or pad_height > 0: - action_mask[env_idx] = np.pad(action_mask[env_idx], ((0, pad_height), (0, pad_width), (0, 0))) + action_mask = np.pad(action_mask, ((0, 0), (0, pad_height), (0, pad_width), (0, 0))) # self.source_unit_mask shape: [num_envs, map height * map width * 1] self.source_unit_mask = action_mask[:, :, :, 0].reshape(self.num_envs, -1) From 172e57fd96a3aea0cd5329a3d0cc24bd3c06b9db Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Wed, 20 Dec 2023 14:51:28 +0100 Subject: [PATCH 25/28] updated java repo --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index 491fddcf..0e16efc4 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit 491fddcfdc99aed0d93840bcc4644f2de5c47112 +Subproject commit 0e16efc465a8b55efa7691a056439c2ff6f46786 From c0506c8e5f68edb6381ef3171f7a189aee3c23e3 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Thu, 21 Dec 2023 11:04:49 +0100 Subject: [PATCH 26/28] removed guidedRojoA3N from league because it's crashing --- .../gym-microrts-static-files/league.csv | 27 +++++++++--------- .../gym-microrts-static-files/league.db | Bin 73728 -> 69632 bytes 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/experiments/gym-microrts-static-files/league.csv b/experiments/gym-microrts-static-files/league.csv index c6b165a2..d0fb2aa1 100644 --- a/experiments/gym-microrts-static-files/league.csv +++ b/experiments/gym-microrts-static-files/league.csv @@ -1,14 +1,13 @@ -name,mu,sigma,trueskill -coacAI,37.01208300442514,1.2057837814702337,33.39473166001444 -workerRushAI,32.177999126535994,1.0158657259647073,29.13040194864187 -droplet,32.046013299709365,1.0151344815092278,29.000609855181683 -mixedBot,31.485630788984253,1.0538188458547628,28.324174251419965 -izanagi,30.251048792700562,1.048141521227313,27.10662422901862 -tiamat,27.8300726697548,1.0437640107384225,24.69878063753953 -lightRushAI,26.430335172946624,1.0158591694179326,23.382757664692825 -rojo,25.174781972400247,1.0053993662036687,22.15858387378924 -guidedRojoA3N,23.137975074471896,0.9950992581462096,20.152677300033268 -naiveMCTSAI,20.932758765019557,0.9990214832647916,17.93569431522518 -randomBiasedAI,16.41033348962392,1.1908998345256558,12.837633986046953 -passiveAI,6.315587903310498,2.2292417057662304,-0.3721372139881929 -randomAI,5.9383357094823985,2.1599970738074847,-0.5416555119400552 +name,mu,sigma,trueskill +coacAI,36.923289688405525,1.34088485677891,32.90063511806879 +workerRushAI,36.03709563706682,1.1589384846214408,32.560280183202494 +droplet,31.704029704725823,0.9728982037858849,28.785335093368168 +izanagi,32.137680892518816,1.1176715403719928,28.784666271402838 +mixedBot,30.10138243037574,1.0998952344279804,26.801696727091798 +tiamat,29.000843603866457,0.9989029800417669,26.004134663741155 +rojo,25.51046196801082,1.0193126068509855,22.452524147457865 +lightRushAI,25.200606816904337,1.1366932359941933,21.790527108921758 +naiveMCTSAI,23.1505040452353,1.12121816264434,19.786849557302283 +randomBiasedAI,11.418337600522493,1.4736936614311595,6.997256616229015 +randomAI,6.2504777818057065,1.836776105751937,0.740149464549896 +passiveAI,5.875968222282016,1.9933271395347394,-0.10401319632220218 diff --git a/experiments/gym-microrts-static-files/league.db b/experiments/gym-microrts-static-files/league.db index af88de47dc2e47db46afd45f780779fb6b0d0041..f83a7f9e7674a16336b1f5be52d1e0779185cdf4 100644 GIT binary patch literal 69632 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 Ym9VHV-5eRiLWmh>+#-gBr9S2V1u;5z9RL6T From d9fcba04cce47d8cfd70545cec072c125f767f23 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Thu, 21 Dec 2023 11:52:49 +0100 Subject: [PATCH 27/28] updated Java repo --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index 0e16efc4..6348f869 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit 0e16efc465a8b55efa7691a056439c2ff6f46786 +Subproject commit 6348f8691875ce3823a7e3d0376d0e7849149037 From 875111abbf2d19a39fd0718309d8582cb1c2f026 Mon Sep 17 00:00:00 2001 From: DennisSoemers Date: Thu, 21 Dec 2023 11:57:24 +0100 Subject: [PATCH 28/28] updated java repo --- gym_microrts/microrts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gym_microrts/microrts b/gym_microrts/microrts index 6348f869..859a817a 160000 --- a/gym_microrts/microrts +++ b/gym_microrts/microrts @@ -1 +1 @@ -Subproject commit 6348f8691875ce3823a7e3d0376d0e7849149037 +Subproject commit 859a817a78ad2460c503e9448b1efc72cef411bf