Open AI Gym to play 1v1 Catan against a random bot
Project description
Catanatron Gym
For reinforcement learning purposes, we provide an Open AI Gym environment. To use:
pip install catanatron_gym
Make your training loop, ensuring to respect env.get_valid_actions()
.
import random
import gym
env = gym.make("catanatron_gym:catanatron-v0")
observation = env.reset()
for _ in range(1000):
action = random.choice(env.get_valid_actions()) # your agent here (this takes random actions)
observation, reward, done, info = env.step(action)
if done:
observation = env.reset()
env.close()
For action
documentation see here.
For observation
documentation see here.
You can access env.game.state
and build your own "observation" (features) vector as well.
Stable-Baselines3 Example
Catanatron works well with SB3, and better with the Maskable models of the SB3 Contrib repo. Here a small example of how it may work.
import gym
import numpy as np
from sb3_contrib.common.maskable.policies import MaskableActorCriticPolicy
from sb3_contrib.common.wrappers import ActionMasker
from sb3_contrib.ppo_mask import MaskablePPO
def mask_fn(env) -> np.ndarray:
valid_actions = env.get_valid_actions()
mask = np.zeros(env.action_space.n, dtype=np.float32)
mask[valid_actions] = 1
return np.array([bool(i) for i in mask])
# Init Environment and Model
env = gym.make("catanatron_gym:catanatron-v0")
env = ActionMasker(env, mask_fn) # Wrap to enable masking
model = MaskablePPO(MaskableActorCriticPolicy, env, verbose=1)
# Train
model.learn(total_timesteps=1_000_000)
Configuration
You can also configure what map to use, how many vps to win, among other variables in the environment,
with the config
keyword argument. See source for details.
from catanatron import Color
from catanatron.players.weighted_random import WeightedRandomPlayer
def my_reward_function(game, p0_color):
winning_color = game.winning_color()
if p0_color == winning_color:
return 100
elif winning_color is None:
return 0
else:
return -100
# 3-player catan on a "Mini" map (7 tiles) until 6 points.
env = gym.make(
"catanatron_gym:catanatron-v0",
config={
"map_type": "MINI",
"vps_to_win": 6,
"enemies": [WeightedRandomPlayer(Color.RED), WeightedRandomPlayer(Color.ORANGE)],
"reward_function": my_reward_function,
"representation": "mixed",
},
)
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
File details
Details for the file catanatron_gym-3.2.0.tar.gz
.
File metadata
- Download URL: catanatron_gym-3.2.0.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 00d551b171c1523f4d93d955c6560343db200442569768f24e9c4d2b49da53c7 |
|
MD5 | 527c2470a8671fa42bcabec053abe1c6 |
|
BLAKE2b-256 | 6434c70ffcc649326dde48e9eadd6f4efa097dfe671f1d2fc6f64d5e7faf917d |
File details
Details for the file catanatron_gym-3.2.0-py3-none-any.whl
.
File metadata
- Download URL: catanatron_gym-3.2.0-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae6cf34c32dff20bfeecc30bf0a8a38494f62e8e4c6d0e6dab9944370f3780a2 |
|
MD5 | 393b568203c04f20ed3a840b7fd5710d |
|
BLAKE2b-256 | 7639bb7bface5bd09589e233b8a1d5759e88993bbdec2373dc1e013d8e251006 |