Beispiel #1
0
    public void GenerateNextGeneration_Test()
    {
        populationManager.CreateInitialPopulation(parent3GenomeSimple, nodeInnovationCounter, connectionInnovationCounter, 500);
        Assert.NotNull(resultAgentsInitalizedAgentList);
        Assert.NotNull(resultAgentsInitializedSpeciesList);

        //Clear the list to prepare the next generation
        resultAgentsInitalizedAgentList    = null;
        resultAgentsInitializedSpeciesList = null;

        populationManager.GenerateNextGeneration();
        Assert.NotNull(resultAgentsInitalizedAgentList);
        Assert.NotNull(resultAgentsInitializedSpeciesList);
        Assert.AreEqual(500, resultAgentsInitalizedAgentList.Count);
        Assert.AreEqual(1, resultGenerationAgentsInitialized);

        //Clear the list to prepare the next generation
        resultAgentsInitalizedAgentList    = null;
        resultAgentsInitializedSpeciesList = null;

        populationManager.GenerateNextGeneration();
        Assert.NotNull(resultAgentsInitalizedAgentList);
        Assert.NotNull(resultAgentsInitializedSpeciesList);
        Assert.AreEqual(500, resultAgentsInitalizedAgentList.Count);
        Assert.AreEqual(2, resultGenerationAgentsInitialized);
    }
Beispiel #2
0
    public void AllAgentsKilledCallback(List <AgentObject> agents, List <Species> species, int generation)
    {
        //Destry all player
        foreach (GameObject gameObject in GameObject.FindGameObjectsWithTag("Player"))
        {
            Destroy(gameObject);
        }

        GenerationEvaluator eval      = new GenerationEvaluator(agents, species, generation);
        AgentObject         bestAgent = eval.BestAgent;

        Debug.Log("All agents dead. Best fitness: " + bestAgent.GetFitness() + ", Average: " + eval.AverageFitness);

        //GUI Values
        _bestFitnessLastGeneration    = bestAgent.GetFitness();
        _averageFitnessLastGeneration = eval.AverageFitness;

        if (_bestTotalFitness < _bestFitnessLastGeneration)
        {
            _bestTotalFitness = _bestFitnessLastGeneration;
        }
        if (_bestAverageFitness < _averageFitnessLastGeneration)
        {
            _bestAverageFitness = _averageFitnessLastGeneration;
        }

        //Start next generation if the evaluation is running
        if (_evaluationRunning)
        {
            _manager.GenerateNextGeneration();
        }
    }
        public void AllAgentsKilledCallback(List <AgentObject> agents, List <Species> species, int generation)
        {
            //Destry all player
            foreach (GameObject gameObject in GameObject.FindGameObjectsWithTag("Player"))
            {
                Destroy(gameObject);
            }

            GenerationEvaluator eval      = new GenerationEvaluator(agents, species, generation);
            AgentObject         bestAgent = eval.BestAgent;

            Debug.Log("All agents dead. Best fitness: " + bestAgent.GetFitness() + ", Average: " + eval.AverageFitness);

            //Fill the screen
            FillXorScreen(bestAgent.Genome, _screen, _screenObjPrefab);

            SetDisplay(bestAgent.Genome);

            if (CanAgentSolveXOR(bestAgent) || eval.Generation > 500)
            {
                foreach (NodeGene node in bestAgent.Genome.Nodes.Values)
                {
                    Debug.Log("Node: " + node.ID + ", Type: " + node.Type);
                }

                foreach (ConnectionGene connection in bestAgent.Genome.Connections.Values)
                {
                    if (connection.Expressed)
                    {
                        Debug.Log("Connection: In: " + connection.InNode + " Out: " + connection.OutNode + ", Weight: " + connection.Weight + ", InnovationNumber: " + connection.InnovationNumber);
                    }
                }

                result.Add(eval.Generation);

                if (result.Count < amountRuns)
                {
                    _manager.CreateInitialPopulation(startingGenome, new GeneCounter(6), new GeneCounter(9), 400);
                }
                else
                {
                    Debug.Log("FINIIIISHED");
                }
            }
            else
            {
                _manager.GenerateNextGeneration();
            }
        }
Beispiel #4
0
    public void AllAgentsKilledCallback(List <AgentObject> agents, List <Species> species, int generation)
    {
        Debug.Log("Generation " + generation + " finished");
        Debug.Log("Amount Agents: " + agents.Count + ", Amount Species: " + species.Count);

        float bestWeightDiff    = 100;
        float averageWeightDiff = 0;

        float bestFitness = 0;

        foreach (AgentObject agent in agents)
        {
            float weightSum = 0;
            foreach (ConnectionGene con in agent.Genome.Connections.Values)
            {
                if (con.Expressed)
                {
                    weightSum += (float)con.Weight;
                }
            }
            float diff = Mathf.Abs(targetFitness - weightSum);

            if (diff < bestWeightDiff)
            {
                bestWeightDiff = diff;
            }
            if (agent.GetFitness() > bestFitness)
            {
                bestFitness = agent.GetFitness();
            }
            averageWeightDiff += diff;
        }

        averageWeightDiff /= agents.Count;

        Debug.Log("Best Diff: " + bestWeightDiff + " Average:" + averageWeightDiff + " Best Fitness: " + bestFitness);

        //Start next+
        _startNewGen = true;
        manager.GenerateNextGeneration();
    }