Referencia del API¶
Bots¶
API pública para escribir bots de Mus.
Un bot externo solo necesita importar este módulo::
from musst.bots.api import Bot, Observation, Action, PassAction
class MiBot(Bot):
name = "mi_bot"
def decide(self, observation: Observation) -> Action:
return observation.legal_actions[0].default()
El bot controla un asiento. Recibe una :class:Observation (nunca el estado del motor) y
devuelve una :class:Action. El motor vuelve a validar todas las acciones.
AcceptAction
dataclass
¶
Quiero.
Source code in src/musst/engine/actions.py
59 60 61 62 63 | |
AcceptNoLoseAction
dataclass
¶
"Quiero y no pierdo" (FEM VI.9-10): postre con 33 acepta un órdago a juego.
Source code in src/musst/engine/actions.py
66 67 68 69 70 | |
ActionSpec
dataclass
¶
Descripción de una familia de acciones legales.
Para bet/raise indica el rango de cantidades; para discard el número de cartas.
Source code in src/musst/engine/actions.py
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | |
default()
¶
Una acción concreta válida de esta familia (para bots sencillos).
discard no tiene acción por defecto porque depende de la mano.
Source code in src/musst/engine/actions.py
152 153 154 155 156 157 158 159 160 161 162 163 | |
BetAction
dataclass
¶
Envido de amount tantos (envido = 2).
Source code in src/musst/engine/actions.py
43 44 45 46 47 48 | |
Bot
¶
Bases: ABC
Jugador autónomo de Mus.
Source code in src/musst/bots/api.py
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | |
decide(observation)
abstractmethod
¶
Devuelve una acción de observation.legal_actions.
Source code in src/musst/bots/api.py
130 131 132 | |
on_game_end(info)
¶
Opcional: se llama al terminar. Útil para aprender.
Source code in src/musst/bots/api.py
134 135 | |
on_game_start(info)
¶
Opcional: se llama una vez al empezar la partida.
Source code in src/musst/bots/api.py
127 128 | |
signal(observation)
¶
Opcional: seña que quiere hacer ahora (una de observation.available_signals).
Se le pregunta cada vez que avanza el reloj de la mesa, sea o no su turno. Solo verán
la seña quienes le estén mirando (observation.gazes). None = no hacer seña.
Source code in src/musst/bots/api.py
137 138 139 140 141 142 143 | |
Card
dataclass
¶
Un naipe. Inmutable y serializable como "12O" (rey de oros).
Source code in src/musst/engine/cards.py
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | |
parse(code)
classmethod
¶
Crea un naipe desde su código, p. ej. "3E" o "12o".
Source code in src/musst/engine/cards.py
57 58 59 60 61 62 63 | |
CutMusAction
dataclass
¶
Cortar el mus ("no hay mus").
Source code in src/musst/engine/actions.py
21 22 23 24 25 | |
DiscardAction
dataclass
¶
Descartar las cartas indicadas (de min_discard a 4).
Source code in src/musst/engine/actions.py
28 29 30 31 32 33 | |
GameEndInfo
dataclass
¶
Resultado final. history incluye las manos reveladas de cada jugada.
Source code in src/musst/bots/api.py
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | |
GameStartInfo
dataclass
¶
Información pública al empezar una partida.
Source code in src/musst/bots/api.py
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | |
context = field(default_factory=dict)
class-attribute
instance-attribute
¶
Datos opcionales del servidor, p. ej. perfiles históricos públicos de los rivales.
MusAction
dataclass
¶
Dar mus (pedir descarte).
Source code in src/musst/engine/actions.py
14 15 16 17 18 | |
Observation
dataclass
¶
Todo lo que un asiento puede saber legítimamente en este momento.
Source code in src/musst/engine/observation.py
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | |
available_signals = ()
class-attribute
instance-attribute
¶
Señas verdaderas que puedo hacer ahora.
gazes = ()
class-attribute
instance-attribute
¶
A quién mira cada asiento (público). Vacío si las señas están desactivadas.
signals_seen = field(default_factory=dict)
class-attribute
instance-attribute
¶
Señas de esta jugada que he visto (de otros asientos) o que he hecho yo.
to_dict()
¶
Serialización JSON (para web y sandbox).
Source code in src/musst/engine/observation.py
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | |
OrdagoAction
dataclass
¶
Órdago: apostar el juego completo.
Source code in src/musst/engine/actions.py
80 81 82 83 84 | |
PassAction
dataclass
¶
Paso: no envidar en el turno.
Source code in src/musst/engine/actions.py
36 37 38 39 40 | |
RaiseAction
dataclass
¶
Reenvite: subir amount tantos sobre la apuesta pendiente.
Source code in src/musst/engine/actions.py
51 52 53 54 55 56 | |
RejectAction
dataclass
¶
No quiero.
Source code in src/musst/engine/actions.py
73 74 75 76 77 | |
Suit
¶
Bases: str, Enum
Palos de la baraja española.
Source code in src/musst/engine/cards.py
29 30 31 32 33 34 35 36 37 38 39 | |
Utilidades para bots¶
Utilidades públicas para bots. Trabajan solo sobre la :class:Observation.
Incluye muestreo de manos rivales compatibles con la información pública (Monte Carlo) y heurísticas de fuerza por lance.
WinEstimate
dataclass
¶
Source code in src/musst/bots/toolkit.py
110 111 112 113 114 115 116 117 118 119 120 121 | |
confidence
property
¶
Error estándar → confianza en [0, 1].
discard_options(hand, min_discard=1)
¶
Todos los descartes posibles (de min_discard a 4 cartas).
Source code in src/musst/bots/toolkit.py
187 188 189 | |
estimate_lance_win(obs, lance, rng, samples=200, weight=None)
¶
P(mi pareja gana lance) por Monte Carlo sobre las cartas no vistas.
weight permite reponderar cada mundo muestreado (p. ej. con un modelo de rival).
Source code in src/musst/bots/toolkit.py
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | |
hand_strength(hand, lance)
¶
Fuerza heurística de una mano en un lance, en [0, 1]. Rápida y explicable.
Source code in src/musst/bots/toolkit.py
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | |
keep_heuristic_discard(hand)
¶
Descarte clásico: guardar reyes, ases útiles y parejas; tirar el resto (mín. 1).
Source code in src/musst/bots/toolkit.py
192 193 194 195 196 197 198 199 200 | |
sample_world(obs, rng, max_tries=50)
¶
Muestra manos para los otros tres asientos compatibles con lo que sé.
Restricciones: declaraciones públicas de pares/juego y señas que he visto (verdaderas). Se reparte primero a los asientos más restringidos (los que han hecho señas), cada uno con varios intentos, para que una seña rara (p. ej. 31) no obligue a descartar mundos enteros.
Source code in src/musst/bots/toolkit.py
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | |
strength_percentile(hand, lance, samples=300, seed=0)
¶
Percentil de la mano frente a manos aleatorias (con la misma heurística).
Source code in src/musst/bots/toolkit.py
176 177 178 179 180 181 182 183 184 | |
unseen_cards(obs)
¶
Cartas que pueden estar en manos ajenas: todas menos las mías y mis descartes de la jugada.
Source code in src/musst/bots/toolkit.py
22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
Observación¶
Todo lo que un asiento puede saber legítimamente en este momento.
Source code in src/musst/engine/observation.py
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | |
available_signals = ()
class-attribute
instance-attribute
¶
Señas verdaderas que puedo hacer ahora.
gazes = ()
class-attribute
instance-attribute
¶
A quién mira cada asiento (público). Vacío si las señas están desactivadas.
signals_seen = field(default_factory=dict)
class-attribute
instance-attribute
¶
Señas de esta jugada que he visto (de otros asientos) o que he hecho yo.
to_dict()
¶
Serialización JSON (para web y sandbox).
Source code in src/musst/engine/observation.py
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | |
Acciones¶
Acciones tipadas que un jugador puede proponer al motor.
Una acción es una intención. Solo el :class:~musst.engine.rules.RulesEngine decide si es legal.
AcceptAction
dataclass
¶
Quiero.
Source code in src/musst/engine/actions.py
59 60 61 62 63 | |
AcceptNoLoseAction
dataclass
¶
"Quiero y no pierdo" (FEM VI.9-10): postre con 33 acepta un órdago a juego.
Source code in src/musst/engine/actions.py
66 67 68 69 70 | |
ActionSpec
dataclass
¶
Descripción de una familia de acciones legales.
Para bet/raise indica el rango de cantidades; para discard el número de cartas.
Source code in src/musst/engine/actions.py
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | |
default()
¶
Una acción concreta válida de esta familia (para bots sencillos).
discard no tiene acción por defecto porque depende de la mano.
Source code in src/musst/engine/actions.py
152 153 154 155 156 157 158 159 160 161 162 163 | |
BetAction
dataclass
¶
Envido de amount tantos (envido = 2).
Source code in src/musst/engine/actions.py
43 44 45 46 47 48 | |
CutMusAction
dataclass
¶
Cortar el mus ("no hay mus").
Source code in src/musst/engine/actions.py
21 22 23 24 25 | |
DiscardAction
dataclass
¶
Descartar las cartas indicadas (de min_discard a 4).
Source code in src/musst/engine/actions.py
28 29 30 31 32 33 | |
MusAction
dataclass
¶
Dar mus (pedir descarte).
Source code in src/musst/engine/actions.py
14 15 16 17 18 | |
OrdagoAction
dataclass
¶
Órdago: apostar el juego completo.
Source code in src/musst/engine/actions.py
80 81 82 83 84 | |
PassAction
dataclass
¶
Paso: no envidar en el turno.
Source code in src/musst/engine/actions.py
36 37 38 39 40 | |
RaiseAction
dataclass
¶
Reenvite: subir amount tantos sobre la apuesta pendiente.
Source code in src/musst/engine/actions.py
51 52 53 54 55 56 | |
RejectAction
dataclass
¶
No quiero.
Source code in src/musst/engine/actions.py
73 74 75 76 77 | |
action_from_dict(data)
¶
Deserializa y valida la forma (no la legalidad) de una acción.
Source code in src/musst/engine/actions.py
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | |
action_to_dict(action)
¶
Serializa una acción a JSON con discriminador type.
Source code in src/musst/engine/actions.py
111 112 113 114 115 116 117 118 | |
Partidas sin interfaz¶
Juega una partida completa. bots[i] ocupa el asiento i.
Pareja 0 = asientos 0 y 2; pareja 1 = asientos 1 y 3.
Source code in src/musst/runtime/runner.py
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | |