static void TextRolloutProgress(float aarOutput[][NUM_ROLLOUT_OUTPUTS], float aarStdDev[][NUM_ROLLOUT_OUTPUTS], const rolloutcontext * prc, const cubeinfo aci[], unsigned int initial_game_count, const int iGame, const int iAlternative, const int nRank, const float rJsd, const int fStopped, const int fShowRanks, int fCubeRollout, rolloutprogress * prp) { char *pch, *pc; time_t t; static unsigned int n_games_todo = 0; static unsigned int n_games_done = 0; static int min_games_done = 0; /* write progress 1/10th trial or just when called if mt */ if (!iAlternative) outputl(""); pch = OutputRolloutResult(NULL, (char (*)[1024])prp->ppch[iAlternative], (float (*)[NUM_ROLLOUT_OUTPUTS]) aarOutput[iAlternative], (float (*)[NUM_ROLLOUT_OUTPUTS]) aarStdDev[iAlternative], &aci[0], iAlternative, 1, prc->fCubeful); if (fShowRanks && iGame > 1) { pc = strrchr(pch, '\n'); *pc = 0; if (fCubeRollout) sprintf(pc, " %c", fStopped ? 's' : 'r'); else sprintf(pc, " %d%c", nRank, fStopped ? 's' : 'r'); if (nRank != 1 || fCubeRollout) sprintf(strchr(pc, 0), " %5.3f\n", rJsd); else strcat(pc, "\n"); } prp->iNextAlternative++; prp->iNextAlternative = (prp->iNextAlternative) % prp->n; if (iAlternative == (prp->n - 1)) prp->iNextGame += prc->nTrials / 10; output(pch); output(OutputRolloutContext(NULL, prc)); if (iAlternative == 0) { n_games_todo = 0; n_games_done = 0; min_games_done = prc->nTrials; } n_games_done += iGame + 1; if (!fStopped) { n_games_todo += prc->nTrials - (iGame + 1); if (iGame < min_games_done) min_games_done = iGame + 1; } if (iAlternative != (prp->n - 1)) return; /* time elapsed and time left */ t = time_left(n_games_todo, n_games_done, initial_game_count, prp->tStart); outputf(_("Time elapsed %s"), formatDelta(time(NULL) - prp->tStart)); outputf(_(" Estimated time left %s\n"), formatDelta(t)); /* estimated SE */ /* calculate estimated SE */ if (iGame <= 10) return; if (prc->fCubeful) pc = OutputMWC(estimatedSE (aarStdDev[0][OUTPUT_CUBEFUL_EQUITY], iGame, prc->nTrials), &aci[0], FALSE); else pc = OutputEquityScale(estimatedSE (aarStdDev[0][OUTPUT_EQUITY], iGame, prc->nTrials), &aci[0], &aci[0], FALSE); if (prp->ppch && prp->ppch[0] && *prp->ppch[0]) outputf(_("Estimated SE for \"%s\" after %d trials %s\n"), prp->ppch[0], prc->nTrials, pc); else outputf(_("Estimated SE after %d trials %s\n"), prc->nTrials, pc); }
static void GTKRolloutProgress(float aarOutput[][NUM_ROLLOUT_OUTPUTS], float aarStdDev[][NUM_ROLLOUT_OUTPUTS], const rolloutcontext * prc, const cubeinfo aci[], unsigned int initial_game_count, const int iGame, const int iAlternative, const int nRank, const float rJsd, const int fStopped, const int fShowRanks, int fCubeRollout, rolloutprogress * prp) { static unsigned int n_games_todo = 0; static unsigned int n_games_done = 0; static int min_games_done = 0; char sz[32]; int i; gchar *gsz; double frac; GtkTreeIter iter; if (!prp || !prp->pwRolloutResult) return; gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(prp->pwRolloutResultList), &iter, NULL, iAlternative); gtk_list_store_set(prp->pwRolloutResultList, &iter, TRIALS_C, iGame + 1, -1); for (i = 0; i < NUM_ROLLOUT_OUTPUTS; i++) { /* result */ if (i < OUTPUT_EQUITY) strcpy(sz, OutputPercent(aarOutput[iAlternative][i])); else if (i == OUTPUT_EQUITY) strcpy(sz, OutputEquityScale(aarOutput[iAlternative][i], &aci[iAlternative], &aci[0], TRUE)); else strcpy(sz, prc->fCubeful ? OutputMWC(aarOutput[iAlternative][i], &aci[0], TRUE) : "n/a"); gtk_list_store_set(prp->pwRolloutResultList, &iter, i + 3, sz, -1); } if (prc->fCubeful) strcpy(sz, OutputMWC(aarStdDev[iAlternative][OUTPUT_CUBEFUL_EQUITY], &aci[0], FALSE)); else strcpy(sz, OutputEquityScale(aarStdDev[iAlternative][OUTPUT_EQUITY], &aci[iAlternative], &aci[0], FALSE)); gtk_list_store_set(prp->pwRolloutResultList, &iter, i + 3, sz, -1); if (fShowRanks && iGame > 1) { gtk_list_store_set(prp->pwRolloutResultList, &iter, RANK_C, nRank, -1); if (nRank != 1 || fCubeRollout) sprintf(sz, "%5.3f", rJsd); else strcpy(sz, " "); gtk_list_store_set(prp->pwRolloutResultList, &iter, i + 4, sz, -1); } /* Update progress bar with highest number trials for all the alternatives */ if (iAlternative == 0) { n_games_todo = 0; n_games_done = 0; min_games_done = prc->nTrials; } n_games_done += iGame + 1; if (!fStopped) { n_games_todo += prc->nTrials - (iGame + 1); if (iGame < min_games_done) min_games_done = iGame + 1; } if (iAlternative == (prp->n - 1)) { frac = ((float)min_games_done)/prc->nTrials; gsz = g_strdup_printf("%d/%d (%d%%)", min_games_done, prc->nTrials, (int)(100.0f * frac)); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(prp->pwRolloutProgress), frac); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(prp->pwRolloutProgress), gsz); g_free(gsz); prp->nGamesDone = min_games_done; } /* calculate estimate time left */ if ((iAlternative == (prp->n - 1)) && n_games_done > initial_game_count) { time_t t = time_left(n_games_todo, n_games_done, initial_game_count, prp->tStart); gtk_label_set_text(GTK_LABEL(prp->pwElapsed), formatDelta(time(NULL) - prp->tStart)); gtk_label_set_text(GTK_LABEL(prp->pwLeft), formatDelta(t)); } /* calculate estimated SE */ if (!iAlternative && iGame > 10) { float r; if (prc->fCubeful) { r = estimatedSE(aarStdDev[0][OUTPUT_CUBEFUL_EQUITY], iGame, prc->nTrials); gtk_label_set_text(GTK_LABEL(prp->pwSE), OutputMWC(r, &aci[0], FALSE)); } else { r = estimatedSE(aarStdDev[0][OUTPUT_EQUITY], iGame, prc->nTrials); gtk_label_set_text(GTK_LABEL(prp->pwSE), OutputEquityScale(r, &aci[0], &aci[0], FALSE)); } } return; }
extern char * OutputRolloutResult(const char *szIndent, char asz[][1024], float aarOutput[][NUM_ROLLOUT_OUTPUTS], float aarStdDev[][NUM_ROLLOUT_OUTPUTS], const cubeinfo aci[], const int alt, const int cci, const int fCubeful) { static char sz[1024]; int ici; char *pc; strcpy(sz, ""); for (ici = 0; ici < cci; ici++) { /* header */ if (asz && *asz[ici]) { if (szIndent && *szIndent) strcat(sz, szIndent); sprintf(pc = strchr(sz, 0), "%s:\n", asz[ici]); } /* output */ if (szIndent && *szIndent) strcat(sz, szIndent); strcat(sz, " "); strcat(sz, OutputPercents(aarOutput[ici], TRUE)); strcat(sz, " CL "); strcat(sz, OutputEquityScale(aarOutput[ici][OUTPUT_EQUITY], &aci[alt + ici], &aci[0], TRUE)); if (fCubeful) { strcat(sz, " CF "); strcat(sz, OutputMWC(aarOutput[ici][OUTPUT_CUBEFUL_EQUITY], &aci[0], TRUE)); } strcat(sz, "\n"); /* std dev */ if (szIndent && *szIndent) strcat(sz, szIndent); strcat(sz, " ["); strcat(sz, OutputPercents(aarStdDev[ici], FALSE)); strcat(sz, " CL "); strcat(sz, OutputEquityScale(aarStdDev[ici][OUTPUT_EQUITY], &aci[alt + ici], &aci[0], FALSE)); if (fCubeful) { strcat(sz, " CF "); strcat(sz, OutputMWC(aarStdDev[ici][OUTPUT_CUBEFUL_EQUITY], &aci[0], FALSE)); } strcat(sz, "]\n"); } return sz; }