Beispiel #1
0
        public Feeler(Creature owner, int index, bool isChild)
        {
            this.owner = owner;

            inFoodValueFeeler.SetName(Creature.NAME_IN_FOODVALUEFEELER + " #" + index);
            inOcclusionFeeler.SetName(Creature.NAME_IN_OCCLUSIONFEELER + " #" + index);
            inWaterOnFeeler.SetName(Creature.NAME_IN_WATERONFEELER + " #" + index);
            inGeneticDifference.SetName(Creature.NAME_IN_GENETICDIFFERENCE + " #" + index);

            outFeelerAngle.SetName(Creature.NAME_OUT_FEELERANGLE + " #" + index);
            outAttack.SetName(Creature.NAME_OUT_ATTACK + " #" + index);

            if (!isChild)
            {
                owner.Brain.AddInputNeuron(inFoodValueFeeler);
                owner.Brain.AddInputNeuron(inOcclusionFeeler);
                owner.Brain.AddInputNeuron(inWaterOnFeeler);
                owner.Brain.AddInputNeuron(inGeneticDifference);

                owner.Brain.AddOutputNeuron(outFeelerAngle);
                owner.Brain.AddOutputNeuron(outAttack);
            }


            CalculateFeelerPos(MAXIMUMFEELERDISTANCE);
        }
Beispiel #2
0
        public Creature(Vector2 pos, float viewAngle)
        {
            id = currentId++;

            this.pos       = pos;
            this.viewAngle = viewAngle;
            inBias.SetName(NAME_IN_BIAS);
            inFoodValuePosition.SetName(NAME_IN_FOODVALUEPOSITION);
            inFoodValueFeeler.SetName(NAME_IN_FOODVALUEFEELER);
            inOcclusionFeeler.SetName(NAME_IN_OCCLUSIONFEELER);
            inEnergy.SetName(NAME_IN_ENERGY);
            inAge.SetName(NAME_IN_AGE);
            inGeneticDifference.SetName(NAME_IN_GENETICDIFFERENCE);
            inWasAttacked.SetName(NAME_IN_WASATTACKED);
            inWaterOnFeeler.SetName(NAME_IN_WATERONFEELER);
            inWaterOnCreature.SetName(NAME_IN_WATERONCREATURE);
            inMemory1.SetName(NAME_IN_MEMORY1);

            outBirth.SetName(NAME_OUT_BIRTH);
            outRotate.SetName(NAME_OUT_ROTATE);
            outForward.SetName(NAME_OUT_FORWARD);
            outFeelerAngle.SetName(NAME_OUT_FEELERANGLE);
            outAttack.SetName(NAME_OUT_ATTACK);
            outEat.SetName(NAME_OUT_EAT);
            outMemory1.SetName(NAME_OUT_MEMORY1);

            brain = new NeuronalNetwork();

            brain.AddInputNeuron(inBias);
            brain.AddInputNeuron(inFoodValuePosition);
            brain.AddInputNeuron(inFoodValueFeeler);
            brain.AddInputNeuron(inOcclusionFeeler);
            brain.AddInputNeuron(inEnergy);
            brain.AddInputNeuron(inAge);
            brain.AddInputNeuron(inGeneticDifference);
            brain.AddInputNeuron(inWasAttacked);
            brain.AddInputNeuron(inWaterOnFeeler);
            brain.AddInputNeuron(inWaterOnCreature);
            brain.AddInputNeuron(inMemory1);

            brain.GenerateHiddenNeurons(10);

            brain.AddOutputNeuron(outBirth);
            brain.AddOutputNeuron(outRotate);
            brain.AddOutputNeuron(outForward);
            brain.AddOutputNeuron(outFeelerAngle);
            brain.AddOutputNeuron(outAttack);
            brain.AddOutputNeuron(outEat);
            brain.AddOutputNeuron(outMemory1);

            brain.GenerateFullMesh();

            brain.RandomizeAllWeights();
            CalculateFeelerPos(MAXIMUMFEELERDISTANCE);

            color = new Color(EvoGame.RandomFloat(), EvoGame.RandomFloat(), EvoGame.RandomFloat());
            GenerateColorInv();
            CalculateCollisionGridPos();
        }
Beispiel #3
0
        public Creature(Vector2 pos, float viewAngle)
        {
            if (spriteBatch == null)
            {
                spriteBatch = new SpriteBatch(EvoGame.Instance.GraphicsDevice);
                bodyTex     = EvoGame.Instance.Content.Load <Texture2D>("Map/SandTexture");
                feelerTex   = EvoGame.Instance.Content.Load <Texture2D>("Map/SandTexture");
            }
            this.pos       = pos;
            this.viewAngle = viewAngle;
            inBias.SetName(NAME_IN_BIAS);
            inFoodValuePosition.SetName(NAME_IN_FOODVALUEPOSITION);
            inFoodValueFeeler.SetName(NAME_IN_FOODVALUEFEELER);
            inOcclusionFeeler.SetName(NAME_IN_OCCLUSIONFEELER);
            inEnergy.SetName(NAME_IN_ENERGY);
            inAge.SetName(NAME_IN_AGE);
            inGeneticDifference.SetName(NAME_IN_GENETICDIFFERENCE);
            inWasAttacked.SetName(NAME_IN_WASATTACKED);
            inWaterOnFeeler.SetName(NAME_IN_WATERONFEELER);
            inWaterOnCreature.SetName(NAME_IN_WATERONCREATURE);

            outBirth.SetName(NAME_OUT_BIRTH);
            outRotate.SetName(NAME_OUT_ROTATE);
            outForward.SetName(NAME_OUT_FORWARD);
            outFeelerAngle.SetName(NAME_OUT_FEELERANGLE);
            outAttack.SetName(NAME_OUT_ATTACK);
            outEat.SetName(NAME_OUT_EAT);

            brain = new NeuronalNetwork();

            brain.AddInputNeuron(inBias);
            brain.AddInputNeuron(inFoodValuePosition);
            brain.AddInputNeuron(inFoodValueFeeler);
            brain.AddInputNeuron(inOcclusionFeeler);
            brain.AddInputNeuron(inEnergy);
            brain.AddInputNeuron(inAge);
            brain.AddInputNeuron(inGeneticDifference);
            brain.AddInputNeuron(inWasAttacked);
            brain.AddInputNeuron(inWaterOnFeeler);
            brain.AddInputNeuron(inWaterOnCreature);

            brain.GenerateHiddenNeurons(10);

            brain.AddOutputNeuron(outBirth);
            brain.AddOutputNeuron(outRotate);
            brain.AddOutputNeuron(outForward);
            brain.AddOutputNeuron(outFeelerAngle);
            brain.AddOutputNeuron(outAttack);
            brain.AddOutputNeuron(outEat);

            brain.GenerateFullMesh();

            brain.RandomizeAllWeights();
            CalculateFeelerPos();

            color = new Color((float)EvoGame.GlobalRandom.NextDouble(), (float)EvoGame.GlobalRandom.NextDouble(), (float)EvoGame.GlobalRandom.NextDouble());
        }
Beispiel #4
0
 private void MutateMemory()
 {
     if (Simulation.RandomFloat() > 0.5f && AmountOfMemory > 0)
     {
         //Remove a memory neuron
         InputNeuron   inRemove  = inMemory[AmountOfMemory - 1];
         WorkingNeuron outRemove = outMemory[AmountOfMemory - 1];
         brain.RemoveInputNeuron(inRemove);
         brain.RemoveOutputNeuron(outRemove);
         InputNeuron[]   newInputNeurons  = new InputNeuron[AmountOfMemory - 1];
         WorkingNeuron[] newOutputNeurons = new WorkingNeuron[AmountOfMemory - 1];
         for (int i = 0; i < AmountOfMemory - 1; i++)
         {
             newInputNeurons[i]  = inMemory[i];
             newOutputNeurons[i] = outMemory[i];
         }
         inMemory  = newInputNeurons;
         outMemory = newOutputNeurons;
         AmountOfMemory--;
     }
     else
     {
         //Add a memory neuron
         InputNeuron   newIn  = new InputNeuron();
         WorkingNeuron newOut = new WorkingNeuron();
         newIn.SetName(NAME_IN_MEMORY + (AmountOfMemory + 1));
         newOut.SetName(NAME_OUT_MEMORY + (AmountOfMemory + 1));
         brain.AddInputNeuronAndMesh(newIn);
         brain.AddOutputNeuronAndMesh(newOut);
         InputNeuron[]   newInputNeurons  = new InputNeuron[AmountOfMemory + 1];
         WorkingNeuron[] newOutputNeurons = new WorkingNeuron[AmountOfMemory + 1];
         for (int i = 0; i < AmountOfMemory; i++)
         {
             newInputNeurons[i]  = inMemory[i];
             newOutputNeurons[i] = outMemory[i];
         }
         newInputNeurons[AmountOfMemory]  = newIn;
         newOutputNeurons[AmountOfMemory] = newOut;
         inMemory  = newInputNeurons;
         outMemory = newOutputNeurons;
         AmountOfMemory++;
     }
 }
Beispiel #5
0
        public Creature(Vector2 pos, float viewAngle, CreatureManager manager) :
            this(manager)
        {
            id = currentId++;

            this.pos       = pos;
            this.viewAngle = viewAngle;
            inBias.SetName(NAME_IN_BIAS);
            inFoodValuePosition.SetName(NAME_IN_FOODVALUEPOSITION);
            inFoodValueFeeler.SetName(NAME_IN_FOODVALUEFEELER);
            inOcclusionFeeler.SetName(NAME_IN_OCCLUSIONFEELER);
            inEnergy.SetName(NAME_IN_ENERGY);
            inAge.SetName(NAME_IN_AGE);
            inGeneticDifference.SetName(NAME_IN_GENETICDIFFERENCE);
            inWasAttacked.SetName(NAME_IN_WASATTACKED);
            inWaterOnFeeler.SetName(NAME_IN_WATERONFEELER);
            inWaterOnCreature.SetName(NAME_IN_WATERONCREATURE);
            //inOscilation       .SetName(NAME_IN_OSCILATION);
            inMemory = new InputNeuron[AmountOfMemory];
            for (int i = 0; i < AmountOfMemory; i++)
            {
                inMemory[i] = new InputNeuron();
                inMemory[i].SetName(NAME_IN_MEMORY + (i + 1));
            }

            outBirth.SetName(NAME_OUT_BIRTH);
            outRotate.SetName(NAME_OUT_ROTATE);
            outForward.SetName(NAME_OUT_FORWARD);
            outFeelerAngle.SetName(NAME_OUT_FEELERANGLE);
            outAttack.SetName(NAME_OUT_ATTACK);
            outEat.SetName(NAME_OUT_EAT);
            //outOscilation .SetName(NAME_OUT_OSCILATION);
            outMemory = new WorkingNeuron[AmountOfMemory];
            for (int i = 0; i < AmountOfMemory; i++)
            {
                outMemory[i] = new WorkingNeuron();
                outMemory[i].SetName(NAME_OUT_MEMORY + (i + 1));
            }

            brain = new NeuronalNetwork();

            brain.AddInputNeuron(inBias);
            brain.AddInputNeuron(inFoodValuePosition);
            brain.AddInputNeuron(inFoodValueFeeler);
            brain.AddInputNeuron(inOcclusionFeeler);
            brain.AddInputNeuron(inEnergy);
            brain.AddInputNeuron(inAge);
            brain.AddInputNeuron(inGeneticDifference);
            brain.AddInputNeuron(inWasAttacked);
            brain.AddInputNeuron(inWaterOnFeeler);
            brain.AddInputNeuron(inWaterOnCreature);
            //brain.AddInputNeuron(inOscilation);
            for (int i = 0; i < AmountOfMemory; i++)
            {
                brain.AddInputNeuron(inMemory[i]);
            }

            brain.GenerateHiddenNeurons(10);

            brain.AddOutputNeuron(outBirth);
            brain.AddOutputNeuron(outRotate);
            brain.AddOutputNeuron(outForward);
            brain.AddOutputNeuron(outFeelerAngle);
            brain.AddOutputNeuron(outAttack);
            brain.AddOutputNeuron(outEat);
            //brain.AddOutputNeuron(outOscilation);
            for (int i = 0; i < AmountOfMemory; i++)
            {
                brain.AddOutputNeuron(outMemory[i]);
            }

            brain.GenerateFullMesh();

            brain.RandomizeAllWeights();
            CalculateFeelerPos(MAXIMUMFEELERDISTANCE);

            Color = new Color(Simulation.RandomFloat(), Simulation.RandomFloat(), Simulation.RandomFloat());
            GenerateColorInv();
            CalculateCollisionGridPos();
        }
Beispiel #6
0
        public Creature(Vector2 pos, float viewAngle, CreatureManager manager) :
            this(manager)
        {
            id = currentId++;

            this.pos       = pos;
            this.viewAngle = viewAngle;
            inBias.SetName(NAME_IN_BIAS);
            inFoodValuePosition.SetName(NAME_IN_FOODVALUEPOSITION);
            inEnergy.SetName(NAME_IN_ENERGY);
            inAge.SetName(NAME_IN_AGE);
            inWasAttacked.SetName(NAME_IN_WASATTACKED);
            inWaterOnCreature.SetName(NAME_IN_WATERONCREATURE);
            //inOscilation       .SetName(NAME_IN_OSCILATION);
            inMemory = new InputNeuron[AmountOfMemory];
            for (int i = 0; i < AmountOfMemory; i++)
            {
                inMemory[i] = new InputNeuron();
                inMemory[i].SetName(NAME_IN_MEMORY + (i + 1));
            }

            outBirth.SetName(NAME_OUT_BIRTH);
            outRotate.SetName(NAME_OUT_ROTATE);
            outForward.SetName(NAME_OUT_FORWARD);
            outStrafe.SetName(NAME_OUT_STRAFE);
            outEat.SetName(NAME_OUT_EAT);
            outMate_Age.SetName(NAME_OUT_MATE_AGE);
            outMate_Energy.SetName(NAME_OUT_MATE_ENERGY);
            outMate_Generation.SetName(NAME_OUT_MATE_GENERATION);
            outMate_GeneticDifference.SetName(NAME_OUT_MATE_GENETICDIFFERENCE);
            outMate_Age_Weight.SetName(NAME_OUT_MATE_AGE_WEIGHT);
            outMate_Energy_Weight.SetName(NAME_OUT_MATE_ENERGY_WEIGHT);
            outMate_Generation_Weight.SetName(NAME_OUT_MATE_GENERATION_WEIGHT);
            outMate_GeneticDifference_Weight.SetName(NAME_OUT_MATE_GENETICDIFFERENCE_WEIGHT);
            //outOscilation .SetName(NAME_OUT_OSCILATION);
            outMemory = new WorkingNeuron[AmountOfMemory];
            for (int i = 0; i < AmountOfMemory; i++)
            {
                outMemory[i] = new WorkingNeuron(-1);
                outMemory[i].SetName(NAME_OUT_MEMORY + (i + 1));
            }

            brain = new NeuronalNetwork();

            brain.AddInputNeuron(inBias);
            brain.AddInputNeuron(inFoodValuePosition);
            brain.AddInputNeuron(inEnergy);
            brain.AddInputNeuron(inAge);
            brain.AddInputNeuron(inWasAttacked);
            brain.AddInputNeuron(inWaterOnCreature);
            //brain.AddInputNeuron(inOscilation);
            for (int i = 0; i < AmountOfMemory; i++)
            {
                brain.AddInputNeuron(inMemory[i]);
            }

            brain.GenerateHiddenNeurons(AmountOfHidden, manager.simulation.SimulationConfiguration.NumberOfStartNeuronLayers);

            brain.AddOutputNeuron(outBirth);
            brain.AddOutputNeuron(outRotate);
            brain.AddOutputNeuron(outForward);
            brain.AddOutputNeuron(outStrafe);
            brain.AddOutputNeuron(outEat);
            brain.AddOutputNeuron(outMate_Age);
            brain.AddOutputNeuron(outMate_Energy);
            brain.AddOutputNeuron(outMate_Generation);
            brain.AddOutputNeuron(outMate_GeneticDifference);
            brain.AddOutputNeuron(outMate_Age_Weight);
            brain.AddOutputNeuron(outMate_Energy_Weight);
            brain.AddOutputNeuron(outMate_Generation_Weight);
            brain.AddOutputNeuron(outMate_GeneticDifference_Weight);
            //brain.AddOutputNeuron(outOscilation);
            for (int i = 0; i < AmountOfMemory; i++)
            {
                brain.AddOutputNeuron(outMemory[i]);
            }


            SetupFeelers(false, 1);

            brain.GenerateFullMesh();

            brain.RandomizeAllWeights();

            Color = Color.FromFloat(Simulation.RandomFloat(), Simulation.RandomFloat(), Simulation.RandomFloat());
            GenerateColorInv();
            CalculateCollisionGridPos();
        }