AlphaZero / Play.py
amanmoon's picture
Upload 52 files
afab5da verified
Raw
History Blame Contribute Delete
2.12 kB
import os
import numpy as np
import torch
from Games.ConnectFour.ConnectFour import ConnectFour
from Games.ConnectFour.ConnectFourNN import ResNet
from Alpha_MCTS import Alpha_MCTS
class Colors:
RESET = "\033[0m"
RED = "\033[91m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
BLUE = "\033[94m"
MAGENTA = "\033[95m"
CYAN = "\033[96m"
WHITE = "\033[97m"
GAME = "ConnectFour"
args = {
"MODEL_PATH" : os.path.join(os.getcwd(), "Games", GAME, "models_n_optimizers"),
"ADVERSARIAL" : True,
"ROOT_RANDOMNESS": False,
"TEMPERATURE" : 1,
"NO_OF_SEARCHES" : 1200,
"EXPLORATION_CONSTANT" : 1,
}
game = ConnectFour()
device = torch.device("cuda" if torch.cuda.is_available else "cpu")
model = ResNet(game, 9, 128, device)
model.eval()
path = os.path.join(args["MODEL_PATH"], "model.pt")
try:
model.load_state_dict(torch.load(path))
print(Colors.GREEN, "Model Found\n Model Successfully Loaded", Colors.RESET)
except:
print(Colors.RED, "Model Not Found!!!", Colors.RESET)
finally:
mcts = Alpha_MCTS(game, args, model)
state = game.initialise_state()
player = -1
while True:
print(state)
if player == 1:
valid_moves = game.get_valid_moves(state)
print("valid_moves", [i for i in range(game.possible_state) if valid_moves[i] == 1])
action = int(input(f"{player}:"))
if valid_moves[action] == 0:
print("action not valid")
continue
else:
neutral_state = game.change_perspective(state, player)
mcts_probs = mcts.search(neutral_state)
print(Colors.GREEN, "MCTS Move Probabilities:", Colors.RESET,mcts_probs )
action = np.argmax(mcts_probs)
state = game.make_move(state, action, player)
is_terminal, value = game.know_terminal_value(state, action)
if is_terminal:
print(state)
if value == 1:
print(player, "won")
else:
print("draw")
break
player = game.get_opponent(player)