Moteur : classement de l'analyse d'un coup, comme gnubg de bureau

engine_analyse_move rend les dix premiers coups de la liste de l'analyse,
chacun au niveau où gnubg l'a évalué, et refait d'abord l'analyse de la
chance comme AnalyzeMove : son cache change les coups restés à 0 pli.
Les références d'analyse gagnent le niveau de chaque coup du classement,
comparé par compare.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-12 02:47:38 +01:00
co-authored by Claude Opus 5.5
parent c42316d9d8
commit 1d21ac15d2
23 changed files with 516 additions and 22 deletions
+30
View File
@@ -210,6 +210,36 @@ def compare_move_analysis(report, cli, case):
report.number(where, "equity_loss", expected["equity_loss"], actual["equity_loss"])
same_label(report, where, "skill", expected["skill"], actual["skill"],
expected["equity_loss"], SKILL_THRESHOLDS)
compare_analysis_ranking(report, where, expected, actual)
def compare_analysis_ranking(report, where, expected, actual):
"""Classement de l'analyse : les dix premiers coups de gnubg (le moteur
n'en rend pas plus), au même niveau et à la même équité, à la tolérance
près ; le meilleur coup et le coup joué y ont exactement les évaluations
de best et played."""
engine = actual["ranking"]
reference = expected["ranking"][:10]
report.same(where, "taille du classement", len(reference), len(engine))
by_move = {m["move"]: m for m in engine}
for m in reference:
other = by_move.get(m["move"])
here = "%s classement %s" % (where, m["move"])
if other is None:
# Un coup à égalité avec le dixième peut changer de côté.
tied = abs(m["equity"] - reference[-1]["equity"]) <= report.tolerance
if not tied:
report.same(here, "présent", True, False)
continue
report.same(here, "ply", m["ply"], other["ply"])
report.number(here, "equity", m["equity"], other["equity"])
if engine:
report.same(where, "classement, meilleur coup", actual["best"], engine[0])
for m in engine:
if m["move"] == actual["played"]["move"]:
report.same(where, "classement, coup joué", actual["played"], m)
report.same(where, "classement, rang du coup joué", actual["rank"],
engine.index(m) + 1)
def compare_cube_analysis(report, cli, case):