Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
6 changes: 1 addition & 5 deletions .idea/blokus-ai.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions baseline_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import gym
import gymnasium as gym

from stable_baselines.common.env_checker import check_env
from stable_baselines.common.policies import MlpPolicy
Expand Down Expand Up @@ -27,7 +27,7 @@

model = A2C.load("blokus_weights")

obs = env.reset()
obs = envreset()
while True:
action, _states = model.predict(obs)
obs, rewards, dones, info = env.step(action)
Expand Down
Binary file added blokus_gym/.DS_Store
Binary file not shown.
7 changes: 6 additions & 1 deletion blokus_gym/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
from gym.envs.registration import register
from gymnasium.envs.registration import register

register(
id='blokus-custom-v0',
entry_point='blokus_gym.envs:BlokusCustomEnv',
)

register(
id='blokus-hard-v0',
Expand Down
2 changes: 1 addition & 1 deletion blokus_gym/envs/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
from blokus_gym.envs.blokus_env import BlokusEnv
from blokus_gym.envs.blokus_envs import BlokusSimpleEnv, BlokusSimpleGreedyEnv, BlokusDuoEnv, BlokusDuoGreedyEnv, BlokusGreedyEnv, BlokusSimpleMinimaxEnv
from blokus_gym.envs.blokus_envs import BlokusSimpleEnv, BlokusSimpleGreedyEnv, BlokusDuoEnv, BlokusDuoGreedyEnv, BlokusGreedyEnv, BlokusSimpleMinimaxEnv, BlokusCustomEnv
12 changes: 9 additions & 3 deletions blokus_gym/envs/blokus_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
from functools import partial
import os
import matplotlib.pyplot as plt
import gym
import gymnasium as gym
import cython
import torch.random

from blokus_gym.envs.game.blokus_game import InvalidMoveByAi
from blokus_gym.envs.game.blokus_game import BlokusGame
from blokus_gym.envs.game.board import Board
Expand All @@ -25,7 +27,7 @@ def possible_moves_func(dummy, board_size, pieces):


class BlokusEnv(gym.Env):
metadata = {'render.modes': ['human']}
metadata = {'render_modes': ['human'], 'render_fps' : 2}
rewards = {'won': 1, 'tie-won': 0, 'default': 0, 'invalid': -100, 'lost': -1}
STATES_FOLDER = "states"

Expand Down Expand Up @@ -118,7 +120,11 @@ def __get_done_reward(self):

return done, reward

def reset(self):
def reset(self, seed=None, options=None):
if seed is not None:
np.random.seed(seed)
torch.random.seed(seed)
random.seed(seed)
self.init_game()
return self.blokus_game.board.tensor

Expand Down
10 changes: 9 additions & 1 deletion blokus_gym/envs/blokus_envs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,15 @@
from blokus_gym.envs.shapes.shapes import get_all_shapes
from blokus_gym.envs.players.greedy_player import GreedyPlayer
from blokus_gym.envs.players.minimax_player import MinimaxPlayer

from blokus_gym.envs.players.random_player import RandomPlayer

class BlokusCustomEnv(BlokusEnv):
NUMBER_OF_PLAYERS = 3
BOARD_SIZE = 10 # This will result in a 10x10 board
STATES_FILE = "states.json" # This needs to be set, if not it will take the base class states
all_shapes = [shape for shape in get_all_shapes()
if shape.size == 4] # This will take only the 4 tiles pieces
bot_type = RandomPlayer # Defaults to RandomPlayer if not passed

class BlokusGreedyEnv(BlokusEnv):
bot_type = GreedyPlayer
Expand Down
7 changes: 4 additions & 3 deletions play.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import blokus_gym
from blokus_gym.envs.blokus_env import BlokusEnv
import gym
import gymnasium as gym
import random

if __name__ == "__main__":
Expand All @@ -9,15 +9,16 @@
print(f"number of possible moves {env.action_space}")
count = 0
nb_rounds = 0
for _ in range(100):
env.reset()
for _ in range(10):
while True:
# input()
action = env.action_space.sample()
count += len(env.ai_possible_indexes())
nb_rounds += 1
# action = random.randint(0, 918)
observation, reward, done, info = env.step(action)
env.render("human")
env.render()
# print(env.ai.all_ids_to_move.keys())
# print(reward)

Expand Down
35 changes: 35 additions & 0 deletions play_custom.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import blokus_gym
from blokus_gym.envs.blokus_env import BlokusEnv
import gymnasium as gym
import random

if __name__ == "__main__":
# env = BlokusEnv()
env = gym.make("blokus_gym:blokus-custom-v0") # Make sure to do: pip install -e . in root
print(f"number of possible moves {env.action_space}")
count = 0
nb_rounds = 0
for _ in range(100):
while True:
# input()
action = env.action_space.sample()
count += len(env.ai_possible_indexes())
nb_rounds += 1
# action = random.randint(0, 918)
observation, reward, done, info = env.step(action)
env.render("human")
# print(env.ai.all_ids_to_move.keys())
# print(reward)

if done:
# print(env.ai.all_ids_to_move.keys())
# input()
print(f"{'won' if reward == 1 else ('tie-won' if reward == 0 else 'lost')}")
# print(env.ai.all_ids_to_move.keys())
observation = env.reset()
# input()
break

print(f"Average number of moves per turn: {count / nb_rounds:.2f}")
print(f"Starter won {env.starter_won / env.games_played * 100:.2f}%")
env.close()
2 changes: 1 addition & 1 deletion rainbow/agent.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import os

import gym
import gymnasium as gym
import torch
import torch.optim as optim
import torch.nn.functional as F
Expand Down
2 changes: 1 addition & 1 deletion rainbow/automated_training.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import gym
import gymnasium as gym
import pandas as pd

from rainbow.agent import Agent
Expand Down
2 changes: 1 addition & 1 deletion rainbow/test_model.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import gym
import gymnasium as gym
from rainbow.agent import Agent

if __name__ == "__main__":
Expand Down
13 changes: 9 additions & 4 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
numpy>=1.17.4
gym>=0.17.1
torch>=1.4.0
cython>=0.29.16
gym==0.15.7
matplotlib>=3.1.2
cython>=0.29.16
numpy>=1.17.4
opencv-python==4.5.3.56
pandas>=1.1.5
setuptools>=58.0.4
stable_baselines>=2.10.2
tensorflow==1.15.2
torch>=1.4.0