A library to enable AI agent training on board game
Project description
AzulMARL
PettingZoo AI env for Azul multiplayer board game to enable AI agent training.
Most important libraries used
Usage
Initiating the env via PettingZoo
from azul_marl_env import azul_v1_2players, azul_v1_3players, azul_v1_4players
env_2players = azul_v1_2players()
env_3players = azul_v1_3players()
env_4players = azul_v1_4players()
env_2players_custom_max_moves = azul_v1_2players(max_moves=100)
Initiating the env directly
from azul_marl_env import AzulEnv
env = AzulEnv(player_count=2)
env = AzulEnv(player_count=3)
env = AzulEnv(player_count=4)
env = AzulEnv(player_count=2, max_moves=100)
Making moves
from azul_marl_env import azul_v1_2players
import random
# Create and reset the environment
env = azul_v1_2players()
observation, info = env.reset()
for agent in env.agent_iter():
valid_moves = info["valid_moves"]
action = random.choice(valid_moves)
# Execute the move
observation, reward, terminated, truncated, info = env.step(action)
# Render the environment
env.render()
if terminated or truncated:
break
env.close()
Example of a complete game using random valid moves
from azul_marl_env import azul_v1_2players
import random
def play_random_game():
env = azul_v1_2players()
observation, info = env.reset()
for agent in env.agent_iter():
valid_moves = info["valid_moves"]
action = random.choice(valid_moves)
observation, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
print(f"Game finished! Final scores: {[player['score'] for player in observation['players']]}")
break
env.close()
play_random_game()
Environment Details
Factory count (num_factories):
- 2 player game -> 5
- 3 player game -> 7
- 4 player game -> 9
-
Action Space: MultiDiscrete([num_factories + 1, 5, 20, 5])
- First value: Factory index. Index 0 is taken for the center so the factory indexes are: 0 based factory index + 1.
- Second value: Tile color (0-4 representing different colors)
- Third value: Number of tiles to place on floor (0-19)
- Fourth value: Pattern line index (0-4)
-
Observation Space: Dictionary containing:
factories: Box(0, 4, (num_factories, 5), int32) - Tile counts in each factorycenter: Box(0, 3 * num_factories, (5,), int32) - Tile counts in centerplayers: Tuple of player states, each containing:pattern_lines: Box(0, 5, (5, 5), int32) - Current pattern lineswall: Box(0, 5, (5, 5), int32) - Wall statefloor: Box(0, 5, (7,), int32) - Floor tilesis_starting: Discrete(2) - First player markerscore: Discrete(241) - Player's score
bag: Box(0, 100, (5,), int32) - Remaining tiles in baglid: Box(0, 100, (5,), int32) - Discarded tiles
-
Reward:
-1for each step until game end-2for invalid moves- Final Azul score is added to cumulative reward at game end
-
Done:
Truewhen:-
Game is completed (at least one player filled at least one horizontal wall)
-
Falseotherwise -
Truncated:
Truewhen: -
Maximum moves reached (player_count * 150 by default)
-
Falseotherwise
-
-
Info: Contains
valid_moveslist for the current player
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file azul_marl_env-1.0.4.tar.gz.
File metadata
- Download URL: azul_marl_env-1.0.4.tar.gz
- Upload date:
- Size: 19.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c12062b796451c423e4f809954988d91323cd84379f967c6cc48b1b7da96dec4
|
|
| MD5 |
26cfa502752d7c291a52690990d85997
|
|
| BLAKE2b-256 |
d3ed9d4185782697801a7ae004098c35eb3133fba148090fe4c6f6034f9ace83
|
File details
Details for the file azul_marl_env-1.0.4-py3-none-any.whl.
File metadata
- Download URL: azul_marl_env-1.0.4-py3-none-any.whl
- Upload date:
- Size: 19.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40fc1087232a7974c85b8c0a22e65453fb82dad40582e5f13c0c4a6d3a3df48a
|
|
| MD5 |
ce1ab2ff3674ebe902c7f770dd781bc7
|
|
| BLAKE2b-256 |
d4e14602f638d708f238b5e7c671fd51d203944dd0a27115105e13f954dd12d9
|