Compare various agents """ import os from typing import List import io from urllib.request import urlopen import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from rlcard3.games.mocsar.agentdb import str_to_agent_dict, get_by_id from rlcard3.utils.config_read import Config conf = Config('environ.properties') # PATH Const LOG_SAVE_PRFX = conf.get_str(section='cfg.compare', key="stat_dir_path") PNG_SAVE_PRFX = conf.get_str(section='cfg.visual', key="png_dir_path") log_dirname = conf.get_str(section='cfg.visual', key="dir_name") log_filename = conf.get_str(section='cfg.visual', key="file_name") def read_data_local() -> pd.DataFrame: csv_file_name = os.path.join(LOG_SAVE_PRFX, log_dirname, log_filename) dfr = pd.read_csv(csv_file_name, sep=";", usecols=["cardnr", "agentid", "agentstr", "payoff"]) return dfr def read_data_github(csv_url:str) -> pd.DataFrame: r1 = urlopen(csv_url) df1 = pd.read_csv(io.BytesIO(r1.read()), compression='gzip',
import rlcard3 from rlcard3.games.mocsar.stat import MocsarStat from rlcard3.utils.config_read import Config from rlcard3.utils.utils import tournament conf = Config('environ.properties') NR_GAMES = conf.get_int(section='cfg.compare', key='nr_games') # Make environment and enable human mode env = rlcard3.make('mocsar-cfg', config={'multi_agent_mode': True}) # Create statistics stat = MocsarStat(game=env.game, agents=env.model.rule_agents, nr_of_games=NR_GAMES, batch_name=conf.get_str(section='cfg.compare', key='batch_name'), log_dir=conf.get_str(section='cfg.compare', key='stat_dir_path')) # Register agents agent_str = conf.get_str(section='cfg.compare', key="agent_str") nr_cards = conf.get_int(section='global', key='nr_cards') agents = {agent_str: 1, "mocsar_random": 3} print(f"mocsar_pl_dqn_pytorch_load_model_cfg, Agents:{agents}") # # Here we directly load NFSP models from /models module # rl_agents = models.load(agent_str, # num_players=env.game.get_player_num(), # action_num=env.action_num,
import rlcard3 from rlcard3.games.mocsar.agentdb import str_to_agent_list from rlcard3.games.mocsar.stat import MocsarStat from rlcard3.utils.config_read import Config conf = Config('environ.properties') NR_GAMES = conf.get_int(section='cfg.compare', key='nr_games') # Make environment and enable human mode env = rlcard3.make('mocsar-cfg', config={'multi_agent_mode': True}) # Create statistics stat = MocsarStat(game=env.game, agents=env.model.rule_agents, nr_of_games=NR_GAMES, batch_name=conf.get_str(section='cfg.compare', key='batch_name'), log_dir=conf.get_str(section='cfg.compare', key='stat_dir_path')) # Register agents agents_list = str_to_agent_list(agent_str_list=conf.get_str(section='cfg.compare', key="agent_list")) print(f"mocsar_pl_cfg_config, Agents:{agents_list}") # Try different agent combinations # List of nr of cards card_nr_list = [i for i in range(15, 56, 4)] + [i for i in range(62, 111, 4)] for agents in agents_list: env.model.create_agents(agents) print(f"Agents:{[(ag.__str__() + ', ') for ag in env.model.rule_agents]}") # Iterate over nr of cards for nr_cards in card_nr_list: env.game.set_game_params(num_players=4, num_cards=nr_cards)
''' Another example of loading a pre-trained NFSP model on Leduc Hold'em Here, we directly load the model from model zoo ''' import rlcard3 from rlcard3.agents.random_agent import RandomAgent from rlcard3.utils.utils import set_global_seed, tournament from rlcard3 import models from rlcard3.utils.config_read import Config # Make environment env = rlcard3.make('mocsar') # Get parameters conf = Config('environ.properties') evaluate_num = conf.get_int(section='cfg.compare', key='nr_games') agent_str = conf.get_str(section='cfg.compare', key="agent_str") nr_cards = conf.get_int(section='global', key='nr_cards') # Set a global seed #set_global_seed(0) # Here we directly load NFSP models from /models module dqn_agents = models.load(agent_str, num_players=env.game.get_player_num(), action_num=env.action_num, state_shape=env.state_shape).agents # Evaluate the performance. Play with random agents. random_agent = RandomAgent(env.action_num) env.game.set_game_params(num_players=4, num_cards=nr_cards) env.set_agents([dqn_agents[0], random_agent, random_agent, random_agent])