PoliciesMultiPlayers.Selfish module¶
Selfish: a multi-player policy where every player is selfish, playing on their side.
without knowing how many players there is,
and not even knowing that they should try to avoid collisions. When a collision happens, the algorithm simply receive a 0 reward for the chosen arm.
-
class
PoliciesMultiPlayers.Selfish.
SelfishChildPointer
(mother, playerId)[source]¶ Bases:
PoliciesMultiPlayers.ChildPointer.ChildPointer
Selfish version of the ChildPointer class (just pretty printed).
-
__module__
= 'PoliciesMultiPlayers.Selfish'¶
-
-
PoliciesMultiPlayers.Selfish.
PENALTY
= None¶ Customize here the value given to a user after a collision XXX If it is None, then player.lower (default to 0) is used instead
-
class
PoliciesMultiPlayers.Selfish.
Selfish
(nbPlayers, nbArms, playerAlgo, penalty=None, *args, **kwargs)[source]¶ Bases:
PoliciesMultiPlayers.BaseMPPolicy.BaseMPPolicy
Selfish: a multi-player policy where every player is selfish, playing on their side.
without nowing how many players there is, and
not even knowing that they should try to avoid collisions. When a collision happens, the algorithm simply receives a 0 reward for the chosen arm (can be changed with penalty= argument).
-
__init__
(nbPlayers, nbArms, playerAlgo, penalty=None, *args, **kwargs)[source]¶ nbPlayers: number of players to create (in self._players).
playerAlgo: class to use for every players.
nbArms: number of arms, given as first argument to playerAlgo.
*args, **kwargs: arguments, named arguments, given to playerAlgo.
Examples:
>>> from Policies import * >>> import random; random.seed(0); import numpy as np; np.random.seed(0) >>> nbArms = 17 >>> nbPlayers = 6 >>> s = Selfish(nbPlayers, nbArms, Uniform) >>> [ child.choice() for child in s.children ] [12, 13, 1, 8, 16, 15] >>> [ child.choice() for child in s.children ] [12, 9, 15, 11, 6, 16]
To get a list of usable players, use
s.children
.Warning:
s._players
is for internal use ONLY!
Warning
I want my code to stay compatible with Python 2, so I cannot use the new syntax of keyword-only argument. It would make more sense to have
*args, penalty=PENALTY, lower=0., amplitude=1., **kwargs
instead ofpenalty=PENALTY, *args, **kwargs
but I can’t.
-
nbPlayers
= None¶ Number of players
-
penalty
= None¶ Penalty = reward given in case of collision
-
children
= None¶ List of children, fake algorithms
-
nbArms
= None¶ Number of arms
-
_handleCollision_one
(playerId, arm, reward=None)[source]¶ Give a reward of 0, or player.lower, or self.penalty, in case of collision.
-
__module__
= 'PoliciesMultiPlayers.Selfish'¶