# PoliciesMultiPlayers.rhoRandRand module¶

rhoRandRand: implementation of a variant of the multi-player policy from [Distributed Algorithms for Learning…, Anandkumar et al., 2010](http://ieeexplore.ieee.org/document/5462144/).

• Each child player is selfish, and plays according to an index policy (any index policy, e.g., UCB, Thompson, KL-UCB, BayesUCB etc),

• But instead of aiming at the best (the 1-st best) arm, player i aims at the k-th best arm, for k again uniformly drawn from [1, …, rank_i],

• At first, every player has a random rank_i from 1 to M, and when a collision occurs, rank_i is sampled from a uniform distribution on [1, …, M] where M is the number of player.

Note

This algorithm is intended to be stupid! It does not work at all!!

Note

This is not fully decentralized: as each child player needs to know the (fixed) number of players.

class PoliciesMultiPlayers.rhoRandRand.oneRhoRandRand(maxRank, *args, **kwargs)[source]

Class that acts as a child policy, but in fact it pass all its method calls to the mother class, who passes it to its i-th player.

• Except for the handleCollision method: a new random rank is sampled after observing a collision,

• And the player does not aim at the best arm, but at the rank-th best arm, based on her index policy.

__init__(maxRank, *args, **kwargs)[source]

Initialize self. See help(type(self)) for accurate signature.

maxRank = None

Max rank, usually nbPlayers but can be different

rank = None

Current rank, starting to 1

__str__()[source]

Return str(self).

startGame()[source]

Start game.

handleCollision(arm, reward=None)[source]

Get a new rank.

choice()[source]

Chose with a RANDOM rank.

__module__ = 'PoliciesMultiPlayers.rhoRandRand'
class PoliciesMultiPlayers.rhoRandRand.rhoRandRand(nbPlayers, nbArms, playerAlgo, lower=0.0, amplitude=1.0, maxRank=None, *args, **kwargs)[source]

rhoRandRand: implementation of the multi-player policy from [Distributed Algorithms for Learning…, Anandkumar et al., 2010](http://ieeexplore.ieee.org/document/5462144/).

__init__(nbPlayers, nbArms, playerAlgo, lower=0.0, amplitude=1.0, maxRank=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.

• maxRank: maximum rank allowed by the rhoRand child (default to nbPlayers, but for instance if there is 2 × rhoRand[UCB] + 2 × rhoRand[klUCB], maxRank should be 4 not 2).

• *args, **kwargs: arguments, named arguments, given to playerAlgo.

Example:

>>> from Policies import *
>>> import random; random.seed(0); import numpy as np; np.random.seed(0)
>>> nbArms = 17
>>> nbPlayers = 6
>>> s = rhoRandRand(nbPlayers, nbArms, UCB)
>>> [ child.choice() for child in s.children ]
[12, 15, 0, 3, 3, 7]
>>> [ child.choice() for child in s.children ]
[9, 4, 6, 12, 1, 6]

• To get a list of usable players, use s.children.

• Warning: s._players is for internal use ONLY!

maxRank = None

Max rank, usually nbPlayers but can be different

nbPlayers = None

Number of players

nbArms = None

Number of arms

children = None

List of children, fake algorithms

__str__()[source]

Return str(self).

__module__ = 'PoliciesMultiPlayers.rhoRandRand'