extern int DumpPosition(const TanBoard anBoard, char *szOutput, const evalcontext * pec, cubeinfo * pci, int fOutputMWC, int UNUSED(fOutputWinPC), int fOutputInvert, const char *szMatchID) { float aarOutput[2][NUM_ROLLOUT_OUTPUTS]; positionclass pc = ClassifyPosition(anBoard, pci->bgv); int i, nPlies; int j; evalcontext ec; static const char *aszEvaluator[] = { N_("Over"), N_("Hypergammon-1"), N_("Hypergammon-2"), N_("Hypergammon-3"), N_("Bearoff2"), N_("Bearoff-TS"), N_("Bearoff1"), N_("Bearoff-OS"), N_("Race"), N_("Crashed"), N_("Contact") }; strcpy(szOutput, ""); sprintf(strchr(szOutput, 0), "%s:\t", _("Position ID")); strcat(szOutput, PositionID(anBoard)); strcat(szOutput, "\n"); if (szMatchID) { sprintf(strchr(szOutput, 0), "%s:\t", _("Match ID")); strcat(szOutput, szMatchID); strcat(szOutput, "\n"); } strcat(szOutput, "\n"); sprintf(strchr(szOutput, 0), "%s: \t", _("Evaluator")); strcat(szOutput, gettext(aszEvaluator[pc])); strcat(szOutput, "\n\n"); acdf[pc] (anBoard, strchr(szOutput, 0), pci->bgv); szOutput = strchr(szOutput, 0); sprintf(strchr(szOutput, 0), "\n" " %-7s %-7s %-7s %-7s %-7s %-9s %-9s\n", _("Win"), _("W(g)"), _("W(bg)"), _("L(g)"), _("L(bg)"), (!pci->nMatchTo || (pci->nMatchTo && !fOutputMWC)) ? _("Equity") : _("MWC"), _("Cubeful")); nPlies = pec->nPlies > 9 ? 9 : pec->nPlies; memcpy(&ec, pec, sizeof(evalcontext)); for (i = 0; i <= nPlies; i++) { szOutput = strchr(szOutput, 0); ec.nPlies = i; if (GeneralCubeDecisionE(aarOutput, anBoard, pci, &ec, 0) < 0) return -1; if (!i) strcpy(szOutput, _("static")); else sprintf(szOutput, "%2d %s", i, _("ply")); szOutput = strchr(szOutput, 0); if (fOutputInvert) { InvertEvaluationR(aarOutput[0], pci); InvertEvaluationR(aarOutput[1], pci); pci->fMove = !pci->fMove; } /* Print %'s and equities */ strcat(szOutput, ": "); for (j = 0; j < 5; ++j) { sprintf(strchr(szOutput, 0), "%-7s ", OutputPercent(aarOutput[0][j])); } if (pci->nMatchTo) sprintf(strchr(szOutput, 0), "%-9s ", OutputEquity(Utility(aarOutput[0], pci), pci, TRUE)); else sprintf(strchr(szOutput, 0), "%-9s ", OutputMoneyEquity(aarOutput[0], TRUE)); sprintf(strchr(szOutput, 0), "%-9s ", OutputMWC(aarOutput[0][6], pci, TRUE)); strcat(szOutput, "\n"); if (fOutputInvert) { pci->fMove = !pci->fMove; } } /* if cube is available, output cube action */ if (GetDPEq(NULL, NULL, pci)) { evalsetup es; es.et = EVAL_EVAL; es.ec = *pec; strcat(szOutput, "\n\n"); strcat(szOutput, OutputCubeAnalysis(aarOutput, NULL, &es, pci)); } return 0; }
static void add_level(GtkTreeStore * model, GtkTreeIter * iter, const int n, const TanBoard anBoard, evalcontext * pec, cubeinfo * pci, const gboolean fInvert, float arOutput[NUM_ROLLOUT_OUTPUTS]) { int n0, n1; GtkTreeIter child_iter; cubeinfo ci; TanBoard an; float ar[NUM_ROLLOUT_OUTPUTS]; int anMove[8]; int i; char szRoll[3], szMove[100], *szEquity; /* cubeinfo for opponent on roll */ memcpy(&ci, pci, sizeof(cubeinfo)); ci.fMove = !pci->fMove; for (i = 0; i < NUM_ROLLOUT_OUTPUTS; ++i) arOutput[i] = 0.0f; for (n0 = 0; n0 < 6; ++n0) { for (n1 = 0; n1 <= n0; ++n1) { memcpy(an, anBoard, sizeof(an)); if (FindBestMove(anMove, n0 + 1, n1 + 1, an, pci, pec, defaultFilters) < 0) return; SwapSides(an); gtk_tree_store_append(model, &child_iter, iter); if (n) { add_level(model, &child_iter, n - 1, (ConstTanBoard) an, pec, &ci, !fInvert, ar); if (fInterrupt) return; } else { /* evaluate resulting position */ ProgressValueAdd(1); if (GeneralEvaluationE(ar, (ConstTanBoard) an, &ci, pec) < 0) return; } if (fInvert) InvertEvaluationR(ar, &ci); sprintf(szRoll, "%d%d", n0 + 1, n1 + 1); FormatMove(szMove, anBoard, anMove); szEquity = OutputMWC(ar[OUTPUT_CUBEFUL_EQUITY], fInvert ? pci : &ci, TRUE); gtk_tree_store_set(model, &child_iter, 0, szRoll, 1, szMove, 2, szEquity, -1); for (i = 0; i < NUM_ROLLOUT_OUTPUTS; ++i) arOutput[i] += (n0 == n1) ? ar[i] : 2.0f * ar[i]; } } for (i = 0; i < NUM_ROLLOUT_OUTPUTS; ++i) arOutput[i] /= 36.0f; /* add average equity */ szEquity = OutputMWC(arOutput[OUTPUT_CUBEFUL_EQUITY], fInvert ? pci : &ci, TRUE); gtk_tree_store_append(model, &child_iter, iter); gtk_tree_store_set(model, &child_iter, 0, _("Average equity"), 1, "", 2, szEquity, -1); if (!fInvert) InvertEvaluationR(arOutput, pci); }