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
            {
            }
        }
 public IPDEvaluator(ref IPDExperiment.Info info)
 {
     _info = info;
     _info.BestNoveltyGenome = () => { var m = _archive.Max(); return(m.Phenome); };
     _info.Archive           = () => { return(_archive); };
     _info.Evaluations       = () => { return(EvaluationCount); };
     PhenomeInfo.Initialize(info);
 }
            public static void Initialize(IPDExperiment.Info info)
            {
                _evaluationMode = info.EvaluationMode;
                switch (_metric = info.NoveltyMetric)
                {
                default:
                case IPDExperiment.NoveltyMetric.Score:
                    _distance = (a, b) => { return(Math.Abs(a.Score - b.Score)); }; break;

                case IPDExperiment.NoveltyMetric.Choice:
                case IPDExperiment.NoveltyMetric.Past:
                    _distance = (a, b) => { return(MathNet.Numerics.Distance.SSD(a._pc, b._pc)); }; break;
                }
            }