def reprarms(self, nbPlayers=None, openTag='', endTag='^*', latex=True): """ Return a str representation of the list of the arms (like `repr(self.arms)` but better). - For Markovian MAB, the chain and the steady Bernoulli arm is represented. - If nbPlayers > 0, it surrounds the representation of the best arms by openTag, endTag (for plot titles, in a multi-player setting). - Example: openTag = '', endTag = '^*' for LaTeX tags to put a star exponent. - Example: openTag = '<red>', endTag = '</red>' for HTML-like tags. - Example: openTag = r'\textcolor{red}{', endTag = '}' for LaTeX tags. """ if nbPlayers is None: text = repr(self.matrix_transitions) else: assert nbPlayers >= 0, "Error, the 'nbPlayers' argument for reprarms method of a MAB object has to be a non-negative integer." # DEBUG means = self.means bestArms = np.argsort(means)[-min(nbPlayers, self.nbArms):] if nbPlayers == 0: bestArms = [] dollar = '$' if latex else '' text = r'{} Markovian rewards, {}[{}]{}'.format( "Rested" if self.rested else "Restless", dollar, ', '.join( r"{}P: {}, \pi: {} ∼ {}{}".format( openTag if armId in bestArms else "", np.asarray(mat).tolist(), st, repr(arm), endTag if armId in bestArms else "" ) for armId, (arm, mat, st) in enumerate(zip(self.arms, self.matrix_transitions, self.steadys)) ), dollar ) return wraplatex(text) if latex else wraptext(text)
def reprarms(self, nbPlayers=None, openTag='', endTag='^*', latex=True): """ Return a str representation of the list of the arms (like `repr(self.arms)` but better) - If nbPlayers > 0, it surrounds the representation of the best arms by openTag, endTag (for plot titles, in a multi-player setting). - Example: openTag = '', endTag = '^*' for LaTeX tags to put a star exponent. - Example: openTag = '<red>', endTag = '</red>' for HTML-like tags. - Example: openTag = r'\textcolor{red}{', endTag = '}' for LaTeX tags. """ if nbPlayers is None: text = repr(self.arms) else: assert nbPlayers >= 0, "Error, the 'nbPlayers' argument for reprarms method of a MAB object has to be a non-negative integer." # DEBUG append_to_repr = "" means = self.means bestmean = np.max(means) bestArms = np.argsort(means)[-min(nbPlayers, self.nbArms):] repr_arms = [repr(arm) for arm in self.arms] # WARNING improve display for Gaussian arms that all have same variance if all("Gaussian" in str(type(arm)) for arm in self.arms) and len({arm.sigma for arm in self.arms}) == 1: sigma = self.arms[0].sigma repr_arms = [s.replace(', {:.3g}'.format(sigma), '') for s in repr_arms] append_to_repr = r", \sigma^2={:.3g}".format(sigma) if latex else ", sigma2={:.3g}".format(sigma) if nbPlayers == 0: bestArms = [] text = '[{}]'.format(', '.join( openTag + repr_arms[armId] + endTag if (nbPlayers > 0 and (armId in bestArms or np.isclose(arm.mean, bestmean))) else repr_arms[armId] for armId, arm in enumerate(self.arms)) ) text += append_to_repr return wraplatex('$' + text + '$') if latex else wraptext(text)
def reprarms(self, nbPlayers=None, openTag='', endTag='^*', latex=True): """Cannot represent the dynamic arms, so print the DynamicMAB object""" # print("reprarms of a DynamicMAB object...") # DEBUG # print(" It has self._historyOfMeans =\n{}".format(self._historyOfMeans)) # DEBUG # print(" It has self.means =\n{}".format(self.means)) # DEBUG if latex: text = r"%s, %s with uniform means on $[%.3g, %.3g]$%s" % ("Bayesian MAB", str(self._arms[0]), self.args["lower"], self.args["lower"] + self.args["amplitude"], "" if self.args["mingap"] is None or self.args["mingap"] == 0 else r", min gap$=%.3g$" % self.args["mingap"]) else: text = r"%s, %s with uniform means on [%.3g, %.3g]%s" % ("Bayesian MAB", str(self._arms[0]), self.args["lower"], self.args["lower"] + self.args["amplitude"], "" if self.args["mingap"] is None or self.args["mingap"] == 0 else r", min gap=%.3g" % self.args["mingap"]) return wraptext(text)
def strPlayers(self, short=False, latex=True): """Get a string of the players and their activations probability for this environment.""" listStrPlayersActivations = [ ("%s, $p=%s$" if latex else "%s, p=%s") % (_extract(str(player)), str(activation)) for (player, activation) in zip(self.players, self.activations) ] if len(set(listStrPlayersActivations) ) == 1: # Unique user and unique activation if latex: text = r'${} \times$ {}'.format(self.nbPlayers, listStrPlayersActivations[0]) else: text = r'{} x {}'.format(self.nbPlayers, listStrPlayersActivations[0]) else: text = ', '.join(listStrPlayersActivations) text = wraptext(text) if not short: text = '{} players: {}'.format(self.nbPlayers, text) return text