public override void RefreshView(object genome) { IBlackBox phenome; if (_info.EvaluationMode == IPDExperiment.EvaluationMode.Novelty) { phenome = _info.BestNoveltyGenome(); } else { phenome = _genomeDecoder.Decode(genome as NeatGenome); } _players[0] = new Players.IPDPlayerPhenome(phenome); for (int i = 1; i < _players.Length; i++) { var g = new IPDGame(_info.NumberOfGames, _players[0], _players[i]); g.Run(); _games[0, i] = g; _games[i, 0] = g; } UpdateTable(); UpdateArchiveGraph(); }
private PhenomeInfo EvaluateBehavior(IBlackBox phenome) { Players.IPDPlayerPhenome p = new Players.IPDPlayerPhenome(phenome); double[] scores = new double[_info.OpponentPool.Length + 1]; double wins = 0; int phenomeIndex = _info.OpponentPool.Length; IPDGame[] games = new IPDGame[phenomeIndex]; for (int i = 0; i < phenomeIndex; i++) { games[i] = new IPDGame(_info.NumberOfGames, _info.OpponentPool[i], p); var s = games[i].Evaluate(_info.RandomRobustCheck); scores[i] += s.a + _info.OpponentScores[i]; scores[phenomeIndex] += s.b; if (s.a == s.b) { wins += 0.5; } else if (s.b > s.a) { wins += 1.0; } } double score = scores[phenomeIndex]; var ranks = scores.Rank(); double rank = (ranks[phenomeIndex] - 1) / ((double)ranks.Length - 1); if (rank == 1.0d) { //Ties are not allowed for (int i = 0; i < scores.Length; i++) { if (scores[i] == scores[phenomeIndex] && i != phenomeIndex) { rank -= (1.0 / (double)_info.OpponentPool.Length) / 2.0; } } } return(new PhenomeInfo(phenome, rank, wins, score, games)); }
private void OpponentInfo() { var pool = OpponentPool; OpponentScores = new double[pool.Length]; OpponentPoolGames = new IPDGame[pool.Length, pool.Length]; for (int i = 0; i < pool.Length; i++) { for (int j = i + 1; j < pool.Length; j++) { if (i != j) //currently not against each other but.. { IPDGame g = new IPDGame(NumberOfGames, pool[i], pool[j]); var s = g.Evaluate(RandomRobustCheck); OpponentPoolGames[i, j] = g; OpponentPoolGames[j, i] = g; OpponentScores[i] += s.a; OpponentScores[j] += s.b; } } } }
private void ShowHistory(IPDGame game) { IPDPlayer[] players = new IPDPlayer[2] { game.A, game.B }; int formWidth = 320; Form history = new Form(); history.Text = game.ToString(); history.Size = new Size(formWidth, 500); history.FormBorderStyle = FormBorderStyle.Sizable; history.MinimumSize = new Size(formWidth, 300); history.MaximumSize = new Size(formWidth, 5000); history.MaximizeBox = false; history.MinimizeBox = false; DataGridView table = new DataGridView(); table.Location = new Point(0, 0); table.Dock = DockStyle.Fill; table.AllowUserToAddRows = false; table.RowHeadersWidth = 50; table.EditMode = DataGridViewEditMode.EditProgrammatically; DataGridViewColumn[] cols = new DataGridViewColumn[4]; string[] colHeaders = new string[4] { players[0].Name, players[1].Name, "Result", "Score" }; for (int i = 0; i < cols.Length; i++) { cols[i] = new DataGridViewTextBoxColumn(); cols[i].HeaderText = colHeaders[i]; cols[i].SortMode = DataGridViewColumnSortMode.NotSortable; cols[i].Width = 60; } table.Columns.AddRange(cols); table.Rows.Add(game.Length + 1); int a = 0, b = 0; for (int i = 0; i < game.Length; i++) { table.Rows[i].HeaderCell.Value = i.ToString(); table.Rows[i].Cells[0].Value = game.GetChoice(players[0], i); table.Rows[i].Cells[1].Value = game.GetChoice(players[1], i); table.Rows[i].Cells[2].Value = game.GetPast(players[0], i) + ", " + game.GetPast(players[1], i); a += IPDGame.PastToScore(game.GetPast(players[0], i)); b += IPDGame.PastToScore(game.GetPast(players[1], i)); table.Rows[i].Cells[3].Value = a + ", " + b; } DataGridViewRow total = new DataGridViewRow(); table.Rows.Add(); table.Rows[game.Length].HeaderCell.Value = "T"; table.Rows[game.Length].Cells[0].Value = game.GetScore(players[0]).ToString("F0"); table.Rows[game.Length].Cells[1].Value = game.GetScore(players[1]).ToString("F0"); history.Controls.Add(table); history.Show(); }
public abstract IPDGame.Choices Choice(IPDGame game);