La primera pista está en `finishHand`: el cambio de fichas se divide por 20 y se limita al intervalo de -1 a +1.

Ruta de la recompensa terminal en finishHand
Ruta de la recompensa terminal en finishHand
src/model.cppcpp · 5 líneas
const float reward = std::clamp(
    static_cast<float>(chipDelta) / 20.f,
    -1.f,
    1.f
);

Así, ganar +20 produce +1 y ganar +299 también produce +1. Las pérdidas mayores de -20 se aplanan igual. Desaparece la información de orden entre una victoria modesta y una enorme, y resulta más fácil aprender a alcanzar cualquier final positivo que a hacer crecer la pila con eficiencia.

Distintas ganancias reducidas a la misma recompensa
Distintas ganancias reducidas a la misma recompensa

La segunda pista es la asignación de crédito. El mismo valor terminal se entrega a todas las acciones del episodio.

src/model.cppcpp · 9 líneas
constexpr float kRate = 0.05f;
for (const Step& step : episode_) {
  for (int i = 0; i < kFeatures; ++i) {
    float& weight = weights_[static_cast<size_t>(step.action * kFeatures + i)];
    weight = std::clamp(weight + kRate * reward * step.features[i], -2.f, 2.f);
  }
}
episode_.clear();
save();

No distingue cuánto aportaron un fold, check, call o raise. Si un all-in termina pronto la mano, la trayectoria es corta y el mismo +1 puede reforzar repetidamente unas pocas decisiones. No prueba una causa única, pero sí crea una ventaja estructural para un camino corto y fácil de repetir.

Los snapshots concuerdan. En cheolsu, el total de all-in es +0,818, frente a -1,854 para check y -5,013 para call; la característica de stack del all-in es +0,226. El all-in de younghee ronda cero, pero check y call están cerca de -3,657 y -3,722, de modo que sigue siendo relativamente atractivo. Minsu se inclina por `bbing`, no por all-in.

Modelos distintos concentrados en conjuntos pequeños de acciones
Modelos distintos concentrados en conjuntos pequeños de acciones

No son, por tanto, “el mismo modelo de all-in”. El problema compartido es un colapso hacia pocas acciones, con acciones y perfiles de pesos distintos. Un coeficiente aislado tampoco define la política: características, logits y exploración deciden conjuntamente.

El diagnóstico es limitado. Clipping, crédito terminal uniforme y trayectorias cortas forman un mecanismo plausible y coherente con los pesos. La causalidad requiere ejecuciones controladas que cambien clipping y crédito y comparen distribución de acciones y retorno prolongado.