public CluneNetworkEvaluator(uint inputs, uint outputs, uint hidden)
 {
     substrate      = new CluneSubstrate(inputs, outputs, hidden, HyperNEATParameters.substrateActivationFunction);
     noveltyArchive = new NoveltyArchive();
 }
        public void showMovie(string genomeFile, int type)
        {
            if (true) // set to false to use hardcoded output values from a file
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(genomeFile);
                NeatGenome genome = XmlNeatGenomeReaderStatic.Read(doc);

                INetwork   tempNet    = null;
                INetwork   cppn       = null;
                NeatGenome tempGenome = null;

                Substrate substrate;

                if (type == 0)
                {
                    substrate = new CTRNNSubstrate(4, 12, 8, HyperNEATParameters.substrateActivationFunction);
                }
                else if (type == 1)
                {
                    substrate = new SUPGSubstrate(4, 12, 12, HyperNEATParameters.substrateActivationFunction);
                }
                else
                {
                    doClune   = true;
                    substrate = new CluneSubstrate(20, 20, 20, HyperNEATParameters.substrateActivationFunction);
                }

                cppn       = genome.Decode(null);
                tempGenome = substrate.generateGenome(cppn);

                tempNet = tempGenome.Decode(null);

                Controller controller;
                if (type == 0)
                {
                    controller = new Controller(tempNet);
                }
                else if (type == 1)
                {
                    controller = new Controller(tempNet, true, tempGenome, cppn, ((SUPGSubstrate)substrate).getSUPGMap());
                }
                else
                {
                    controller = new Controller(tempNet);
                }


                using (var domain = new Domain())
                {
                    domain.Initialize(controller);
                    domain.RunDraw();
                }
            }
            else
            {
                using (var domain = new Domain())
                {
                    domain.Initialize();
                    domain.RunDraw();
                }
            }
        }