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(); }
public IPDDomain(IGenomeDecoder <NeatGenome, IBlackBox> genomeDecoder, ref IPDExperiment.Info info) { InitializeComponent(); try { _genomeDecoder = genomeDecoder; _info = info; _players = new IPDPlayer[info.OpponentPool.Length + 1]; _players[0] = new Players.IPDPlayerPhenome(null); Array.Copy(info.OpponentPool, 0, _players, 1, info.OpponentPool.Length); _games = new IPDGame[info.OpponentPool.Length + 1, info.OpponentPool.Length + 1]; for (int i = 1; i < _players.Length; i++) { for (int j = 1; j < _players.Length; j++) { _games[i, j] = info.OpponentPoolGames[i - 1, j - 1]; } } SuspendLayout(); CreateTable(); CreateArchiveGraph(); CreateInfoLabel(); CreateSSButtons(); ResumeLayout(); } catch { } }
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)); }