コード例 #1
0
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);

}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: format.c プロジェクト: alcacoop/libgnubg-android
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;

}