public void InitializeEA() { // set up network structure from dropdown XmlDocument xmlConfig = new XmlDocument(); TextAsset textAsset = (TextAsset)Resources.Load("ExperimentSetups/experiment.config.braid.cppn.split"); // load in XML xmlConfig.LoadXml(textAsset.text); // set up experiment experiment = new CPPNExperiment(); experiment.Initialize("Braid Experiment", xmlConfig.DocumentElement, 0, 0); experiment.SetOptimizer(this); // set up network variables messenger = GameObject.FindObjectOfType <ModelMessenger>(); PopulationSize = XmlUtils.GetValueAsInt(xmlConfig.DocumentElement, "PopulationSize"); messenger.SetupEvolutionParameters(PopulationSize); UnitContainer = GameObject.Find("UnitContainer"); if (!UnitContainer) { UnitContainer = new GameObject("UnitContainer"); } // setup the relevant ui IECManager.SetUIToEvolvingState(); BraidSimulationManager.populationSize = PopulationSize; BraidSimulationManager.evaluationsMade = 0; // clean up folders FindObjectOfType <StoryboardUtility>().InitializeStoryboardUtility(); // start the EA Generation = 0; StartEA(); }
public override void Activate(IBlackBox box) { neat = box; messenger = GameObject.FindObjectOfType <ModelMessenger>(); ActivateBraidController(); }
private IEnumerator evaluateList(IList <TGenome> genomeList) { Debug.Log("---------------------- Evaluating List of genomes ----------------------"); Dictionary <TGenome, TPhenome> dict = new Dictionary <TGenome, TPhenome>(); Dictionary <TGenome, FitnessInfo[]> fitnessDict = new Dictionary <TGenome, FitnessInfo[]>(); for (int i = 0; i < m_optimizer.Trials; i++) { m_phenomeEvaluator.Reset(); dict = new Dictionary <TGenome, TPhenome>(); foreach (TGenome genome in genomeList) { TPhenome phenome = m_genomeDecoder.Decode(genome); if (i == 0) { fitnessDict.Add(genome, new FitnessInfo[m_optimizer.Trials]); } dict.Add(genome, phenome); Coroutiner.StartCoroutine(m_phenomeEvaluator.Evaluate(phenome)); } Debug.Log("Done creating phenomes..."); while (!BraidSimulationManager.HasControllersCreatedData()) { Debug.Log("Waiting on controllers..."); yield return(new WaitForSeconds(0.05f)); } ModelMessenger messenger = GameObject.FindObjectOfType <ModelMessenger>(); messenger.SendMessageToGH(); while (!BraidSimulationManager.HasControllersEvaluated()) { yield return(new WaitForSeconds(0.05f)); } BraidSimulationManager.AdvanceGeneration(); Debug.Log("Getting fitness values..."); foreach (TGenome genome in dict.Keys) { TPhenome phenome = dict[genome]; if (phenome != null) { FitnessInfo fitnessInfo = m_phenomeEvaluator.GetLastFitness(phenome); fitnessDict[genome][i] = fitnessInfo; } } Debug.Log("Done getting fitness values..."); } foreach (TGenome genome in dict.Keys) { TPhenome phenome = dict[genome]; if (phenome != null) { double fitness = 0; for (int i = 0; i < m_optimizer.Trials; i++) { fitness += fitnessDict[genome][i]._fitness; } fitness /= m_optimizer.Trials; // Averaged fitness genome.EvaluationInfo.SetFitness(fitness); genome.EvaluationInfo.AuxFitnessArr = fitnessDict[genome][0]._auxFitnessArr; } } Debug.Log("---------------------- End of list evaluation ----------------------"); BraidSimulationManager.evaluationsMade = 0; }