Use different voting strategies
The TraitorsGame class can take different voting strategies for traitors
and/or faithful:
>>> import backstab
>>> game = backstab.TraitorsGame(n_players=9, n_traitors=3)
>>> game.simulate(n=1000, seed=0, faithful=backstab.FixedOrder(), traitor=backstab.Collusion())
SimulationResults(n=1000, P(F)=0.985 [0.977,0.993], avg_rounds=4.0)
Here are the available strategies:
>>> backstab.FixedOrder()
FixedOrder()
>>> backstab.RandomVote()
RandomVote()
>>> backstab.Collusion()
Collusion()
>>> backstab.MixedDeviation()
MixedDeviation(p=0.2)
>>> backstab.RampDeviation()
RampDeviation(p_start=0.0, p_end=1.0)
>>> backstab.ThresholdDeviation()
ThresholdDeviation(threshold=8, p_late=1.0)
>>> backstab.OptimalTimingDeviation()
OptimalTimingDeviation()
Use Random Voting
We need to disable detect:
>>> game = backstab.TraitorsGame(n_players=9, n_traitors=3, detect=False)
>>> game.simulate(n=1000, seed=0, faithful=backstab.RandomVote(), traitor=backstab.RandomVote())
SimulationResults(n=1000, P(F)=0.132 [0.111,0.153], avg_rounds=2.9)
Use Collusion
>>> game.simulate(n=1000, seed=0, faithful=backstab.RandomVote(), traitor=backstab.Collusion())
SimulationResults(n=1000, P(F)=0.004 [0.000,0.008], avg_rounds=2.1)
Use detection and Fixed Order
We need to enable detect (this is True by default):
>>> game = backstab.TraitorsGame(n_players=9, n_traitors=3, detect=True)
>>> game.simulate(n=1000, seed=0, faithful=backstab.FixedOrder(), traitor=backstab.Collusion())
SimulationResults(n=1000, P(F)=0.985 [0.977,0.993], avg_rounds=4.0)
Use Fixed Order with Detection and Optimal Timing Deviation
>>> game.simulate(n=1000, seed=0, faithful=backstab.FixedOrder(), traitor=backstab.OptimalTimingDeviation())
SimulationResults(n=1000, P(F)=0.026 [0.016,0.036], avg_rounds=2.4)