示例#1
0
        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();
        }
示例#2
0
        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
            {
            }
        }
示例#3
0
        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));
        }