Skip to content

v0.2.6

@tamastheactual tamastheactual tagged this 06 Jun 09:27
From an HTML-output audit (markup checked against independently computed game
theory). Fixes 3 correctness bugs that taught wrong game theory plus clarity nits:

Correctness:
- extensive_form: strictly_dominated_rows/cols were testing WEAK dominance but
  labeled "strictly dominated" -> now truly strict (entry_deterrence / chain_store
  correctly strike nothing). solve()/explain() surface an in-card note for
  imperfect-info games (backward induction is not a valid SPE there).
- stochastic: best_response_iteration converged on a value delta, so a policy
  cycle (market_entry_general_sum) was reported as a Markov Perfect Equilibrium ->
  now converges on policy stability and the card says "did not converge; not an
  equilibrium" honestly. Stage-game highlighting restricted to the support.
- correlated: compare_equilibria used an arbitrary NE vs welfare-max CE/CCE,
  fabricating a "correlation helps" gap -> now uses the welfare-maximizing NE.
- zero_sum: dominance_detail now checks column mixture-dominance (was rows only).
- bayesian: PostedPrice.explain iterates the candidate price set (matches solve()).
- normal_form: iesds_explain strikethrough reflects the full elimination log, not
  round 1; explain() adds an efficiency step; all-Pareto games drop the noise stars.

Clarity / consistency:
- verify_ce/cce: sum-to-1 guard; neutral gt-ok/gt-bad markers + legend (no longer
  overloading the NE/player colors); mu captioned as P(row,col).
- zero_sum: thread row_name/col_name; action-labeled LP subscripts; conditional
  security footnote; player legend on tables.
- shared: fmt() snaps near-zero to "0" (no "-0"); gt-ok/gt-bad CSS classes.

7 new regression tests guard each correctness fix. 99 tests pass, pyflakes clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Assets 2
Loading