Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
}
def __init__(self) -> None:
transitions = (
(1, C, 2, D),
(1, D, 1, D),
(2, C, 2, C),
(2, D, 3, C),
(3, C, 3, C),
(3, D, 3, C),
)
super().__init__(transitions=transitions, initial_state=1, initial_action=D)
class SolutionB5(FSMPlayer):
"""
FSM player described in http://DOI.org/10.1109/TCIAIG.2014.2326012.
Names
- Solution B5: [Ashlock2015]_
"""
name = "SolutionB5"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
def __init__(self) -> None:
transitions = (
(0, C, 0, C),
(0, D, 2, D),
(1, C, 3, D),
(1, D, 0, C),
(2, C, 2, D),
(2, D, 1, C),
(3, C, 3, D),
(3, D, 1, D),
)
super().__init__(transitions=transitions, initial_state=0, initial_action=C)
class EvolvedFSM16(FSMPlayer):
"""
A 16 state FSM player trained with an evolutionary algorithm.
Names:
- Evolved FSM 16: Original name by Marc Harper
"""
name = "Evolved FSM 16"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
) -> None:
super().__init__()
self.initial_state = initial_state
self.initial_action = initial_action
self.fsm = SimpleFSM(transitions, initial_state)
def strategy(self, opponent: Player) -> Action:
if len(self.history) == 0:
return self.initial_action
else:
action = self.fsm.move(opponent.history[-1])
return action
class Fortress3(FSMPlayer):
"""Finite state machine player specified in http://DOI.org/10.1109/CEC.2006.1688322.
Note that the description in http://www.graham-kendall.com/papers/lhk2011.pdf
is not correct.
Names:
- Fortress 3: [Ashlock2006b]_
"""
name = "Fortress3"
classifier = {
"memory_depth": 2,
"stochastic": False,
"makes_use_of": set(),
(11, C, 6, D),
(11, D, 5, D),
(12, C, 6, D),
(12, D, 9, D),
(13, C, 9, D),
(13, D, 8, D),
(14, C, 8, D),
(14, D, 13, D),
(15, C, 4, C),
(15, D, 5, C),
)
super().__init__(transitions=transitions, initial_state=0, initial_action=C)
class TF2(FSMPlayer):
"""
A FSM player trained to maximize Moran fixation probabilities.
Names:
- TF2: Original name by Marc Harper
"""
name = "TF2"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
"manipulates_source": False,
(11, C, 7, D),
(11, D, 13, D),
(12, C, 3, C),
(12, D, 8, D),
(13, C, 7, C),
(13, D, 10, D),
(14, C, 10, D),
(14, D, 7, D),
(15, C, 15, C),
(15, D, 11, D),
)
super().__init__(transitions=transitions, initial_state=0, initial_action=C)
class TF3(FSMPlayer):
"""
A FSM player trained to maximize Moran fixation probabilities.
Names:
- TF3: Original name by Marc Harper
"""
name = "TF3"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
"manipulates_source": False,
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
"manipulates_source": False,
"manipulates_state": False,
}
def __init__(self) -> None:
transitions = ((1, C, 1, C), (1, D, 2, D), (2, C, 1, D), (2, D, 1, D))
super().__init__(transitions=transitions, initial_state=1, initial_action=C)
class EvolvedFSM4(FSMPlayer):
"""
A 4 state FSM player trained with an evolutionary algorithm.
Names:
- Evolved FSM 4: Original name by Marc Harper
"""
name = "Evolved FSM 4"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
"manipulates_source": False,
"manipulates_source": False,
"manipulates_state": False,
}
def __init__(self) -> None:
transitions = (
(1, C, 1, C),
(1, D, 2, C),
(2, C, 1, D),
(2, D, 1, C),
)
super().__init__(transitions=transitions, initial_state=1, initial_action=C)
class UsuallyDefects(FSMPlayer):
"""
This strategy defects except after a D following a C.
Names:
- Usually Defects (UD): [Ashlock2009]_
"""
name = "UsuallyDefects"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
"manipulates_source": False,
(11, C, 15, D),
(11, D, 5, D),
(12, C, 8, C),
(12, D, 11, D),
(13, C, 13, D),
(13, D, 7, D),
(14, C, 13, D),
(14, D, 13, D),
(15, C, 15, D),
(15, D, 2, C),
)
super().__init__(transitions=transitions, initial_state=0, initial_action=C)
class EvolvedFSM16Noise05(FSMPlayer):
"""
A 16 state FSM player trained with an evolutionary algorithm with
noisy matches (noise=0.05).
Names:
- Evolved FSM 16 Noise 05: Original name by Marc Harper
"""
name = "Evolved FSM 16 Noise 05"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
(12, D, 2, C),
(13, C, 13, C),
(13, D, 6, C),
(14, C, 3, D),
(14, D, 13, D),
(15, C, 5, D),
(15, D, 11, C),
)
super().__init__(transitions=transitions, initial_state=0, initial_action=C)
# Strategies trained with Moran process objectives
class TF1(FSMPlayer):
"""
A FSM player trained to maximize Moran fixation probabilities.
Names:
- TF1: Original name by Marc Harper
"""
name = "TF1"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
"manipulates_source": False,
(4, C, 2, C),
(4, D, 6, D),
(5, C, 7, D),
(5, D, 3, D),
(6, C, 7, C),
(6, D, 7, D),
(7, C, 8, D),
(7, D, 7, D),
(8, C, 8, D),
(8, D, 6, D),
)
super().__init__(transitions=transitions, initial_state=0, initial_action=C)
class Pun1(FSMPlayer):
"""FSM player described in [Ashlock2006]_.
Names:
- Pun1: [Ashlock2006]_
"""
name = "Pun1"
classifier = {
"memory_depth": float("inf"),
"stochastic": False,
"makes_use_of": set(),
"long_run_time": False,
"inspects_source": False,
"manipulates_source": False,
"manipulates_state": False,