def test_update_info():
    """Assert that player actually updates its internal state."""
    c_player = CounterRPSAgent()
    assert c_player.last_move is None

    c_player.update_info(last_move=1)
    assert c_player.last_move == 1
def test_reset_state():
    """Assert that last_move is reset with call to reset_state."""
    c_player = CounterRPSAgent()
    assert c_player.last_move is None

    c_player.last_move = 0
    assert c_player.last_move is not None

    c_player.reset_state()
    assert c_player.last_move is None
Beispiel #3
0
    def add_agents_proportions(self):
        """Logic for adding agents based on proportions vector."""
        num_rock = ceil(float(self.proportions[0]) * self.num_players)
        num_paper = ceil(float(self.proportions[1]) * self.num_players)
        num_scissors = ceil(float(self.proportions[2]) * self.num_players)
        num_mixed = ceil(float(self.proportions[3]) * self.num_players)
        num_counter = ceil(float(self.proportions[4]) * self.num_players)

        for rock_ind in range(num_rock):
            agent_id = 'rock_{}'.format(rock_ind)
            player = RPSAgent(id_in=agent_id, strategy_in='rock')
            self.ladder.add_player(player)

        for paper_ind in range(num_paper):
            agent_id = 'paper_{}'.format(paper_ind)
            player = RPSAgent(id_in=agent_id, strategy_in='paper')
            self.ladder.add_player(player)

        for sciss_ind in range(num_scissors):
            agent_id = 'scissors_{}'.format(sciss_ind)
            player = RPSAgent(id_in=agent_id, strategy_in='scissors')
            self.ladder.add_player(player)

        for mixed_ind in range(num_mixed):
            agent_id = 'mixed_{}'.format(mixed_ind)
            player = RPSAgent(id_in=agent_id)
            self.ladder.add_player(player)

        for counter_ind in range(num_counter):
            agent_id = 'counter_{}'.format(counter_ind)
            player = CounterRPSAgent(id_in=agent_id)
            self.ladder.add_player(player)
    def add_agents_config(self):
        """Logic for adding agents from a specified config."""
        for conf in self.config:
            num_agents = ceil(float(conf["proportion"]*self.num_players))
            for agent_ind in range(num_agents):
                player = None
                agent_id = "{}_{}".format(conf["agent_type"], agent_ind)
                strategy = conf.get("agent_strategy", None)
                weight = conf.get("weight", 1)
                if conf.get("agent_class") == "counter":
                    player = CounterRPSAgent(id_in=agent_id)
                elif conf.get("agent_class") == "adjusting":
                    player = AdjustingRPSAgent(id_in=agent_id, strategy_in=strategy, weight=weight)
                else:
                    player = RPSAgent(id_in=agent_id, strategy_in=strategy)

                player.type = conf["agent_type"]
                self.ladder.add_player(player)
def test_make_move():
    """Test logic for making moves."""
    c_player = CounterRPSAgent()

    # Makes random move
    assert c_player.make_move() in [0, 1, 2]

    # Counters opponent's move
    opp_move_rock = 0
    c_player.last_move = opp_move_rock
    assert c_player.make_move() == 1

    opp_move_paper = 1
    c_player.last_move = opp_move_paper
    assert c_player.make_move() == 2

    opp_move_scissors = 2
    c_player.last_move = opp_move_scissors
    assert c_player.make_move() == 0
def test_init():
    """Test that class initializes properly."""
    CounterRPSAgent()