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); }
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(); }
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()); }
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++; } }
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(); }
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(); }