public WormList(float fitness, NeuronalNetwork controller, int foodeaten, Color color) { Controller = new NeuronalNetwork(controller); Fitness = fitness; FoodEaten = foodeaten; WormColor = color; }
public void Deserialize(BinaryReader reader) { string magicString = reader.ReadString(); Debug.Assert(magicString == "CreatureBegin"); id = reader.ReadInt64(); pos = reader.ReadVector2(); viewAngle = reader.ReadSingle(); feelerAngle = reader.ReadSingle(); Energy = reader.ReadSingle(); age = reader.ReadSingle(); generation = reader.ReadInt32(); color = reader.ReadColor(); motherId = reader.ReadInt64(); int childrenCount = reader.ReadInt32(); childIds = new List <long>(); for (int childIndex = 0; childIndex < childrenCount; childIndex++) { childIds.Add(reader.ReadInt64()); } brain = new NeuronalNetwork(); brain.Deserialize(reader); SetupVariablesFromBrain(); }
/// <summary> /// Initializes a new instance of the <see cref="NeuronalNetworkTrainPatterns"/> class. /// </summary> /// <param name="neuronalNetwork">The neuronal network.</param> /// <param name="trainingSet">The training set.</param> /// <param name="preferences">The preferences.</param> /// <param name="trainingDataReady">A value indicating whether the training data is ready or not.</param> /// <param name="eventStop">The event stop event.</param> /// <param name="eventStopped">The event stopped event.</param> /// <param name="mainForm">The main form.</param> /// <param name="mutexes">The mutexes.</param> public NeuronalNetworkTrainPatterns( NeuronalNetwork neuronalNetwork, NeuronalNetworkDatabase trainingSet, Preferences preferences, bool trainingDataReady, ManualResetEvent eventStop, ManualResetEvent eventStopped, MainForm mainForm, List <Mutex> mutexes) { this.CurrentPatternIndex = 0; this.DataReady = trainingDataReady; this.NeuronalNetwork = neuronalNetwork; this.database = trainingSet; this.Preferences = preferences; this.mainForm = mainForm; this.eventStop = eventStop; this.eventStopped = eventStopped; this.mutexes = mutexes; this.recognitions = 0; this.nextPattern = 0; this.needHessian = true; this.backProperties = 0; this.dmse = 0; this.neuronalNetworks = 0; this.dmse200 = 0; this.highPerformanceTimer = new HighPerformanceTimer(); this.GetGaussianKernel(this.Preferences.ElasticSigma); }
public Creature(Creature mother, CreatureManager manager) : this(manager) { id = currentId++; motherId = mother.id; generation = mother.generation + 1; if (generation > manager.MaxGeneration) { manager.MaxGeneration = generation; } this.pos = mother.pos; this.viewAngle = Simulation.RandomFloat() * Mathf.PI * 2; this.brain = mother.brain.CloneFullMesh(); AmountOfMemory = mother.AmountOfMemory; AmountOfHidden = mother.AmountOfHidden; inMemory = new InputNeuron[AmountOfMemory]; outMemory = new WorkingNeuron[AmountOfMemory]; SetupFeelers(true, mother.AmountOfFeelers); SetupVariablesFromBrain(); DoMutations(mother); if (manager.SelectedCreature == null || manager.SelectedCreature.Energy < 100) { manager.SelectedCreature = this; } }
public void Initalzie(int poblationNum, int[] neuronalNetworkSize, int dinoStage) { infoLenght = neuronalNetworkSize[0]; poblation = new GameObject[poblationNum]; NeuronalList = new List <NeuronalNetwork>(); InfoDirector.Instance.SetDinos(poblationNum); for (int i = 0; i < poblationNum; i++) { GameObject myDino = Instantiate(dinoPrefab); NeuronalNetwork myIA = new NeuronalNetwork(neuronalNetworkSize); NeuronalList.Add(myIA); myDino.GetComponent <DinoBehaviour>().Reset(myIA, infoLenght); myDino.transform.position = transform.position; GameObject style = Instantiate(dinoStyle); myDino.GetComponent <DinoBehaviour>().Rendering = true; //render all myDino.GetComponent <DinoBehaviour>().DinoID = i; style.GetComponent <AnimationBehaviour>().DinoStage = dinoStage; style.transform.SetParent(myDino.transform); if (dinoStage == 2) { GameObject proyectile = Instantiate(dinoProyectile); proyectile.transform.SetParent(myDino.transform); } poblation[i] = myDino; myDino.transform.SetParent(transform); } TryToLoad(poblationNum, neuronalNetworkSize); }
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()); }
static void SimpleTest() { var neuralNetwork = new NeuronalNetwork(); var network = new SimpleNetwork(neuralNetwork, Sigmoid, Sigmoid); var layers = new int[5]; layers[0] = 2; layers[1] = 3; layers[2] = 5; layers[3] = 4; layers[4] = 3; network.Init(layers); Console.WriteLine($"Created Network with {layers[0]} input neurons and {layers[layers.Length-1]} output neurons."); var consoleInput = string.Empty; var stopWatch = new Stopwatch(); do { Console.WriteLine("Please enter all input values:"); for (var i = 0; i < layers[0]; i++) { Console.Write($"{i}. > "); consoleInput = Console.ReadLine(); if (double.TryParse(consoleInput, out var value)) { network.SetInputValue(i, value); } } Console.WriteLine("Process.."); stopWatch.Reset(); stopWatch.Start(); network.Process(); stopWatch.Stop(); Console.WriteLine($"Finished! Time: {stopWatch.ElapsedTicks} Ticks ({stopWatch.ElapsedMilliseconds} ms)"); Console.WriteLine("Output values:"); for (var i = 0; i < layers[layers.Length - 1]; i++) { Console.WriteLine($"{i}.: {network.GetOutputValue(i)}"); } Console.Write("Enter anything to exit."); consoleInput = Console.ReadLine(); } while (consoleInput == string.Empty); }
public NeuronalNetwork(NeuronalNetwork aSource) { input = new NeuronLayer(aSource.input); output = new NeuronLayer(aSource.output); var last = input; for (int i = 0; i < aSource.layers.Count; i++) { var layer = new NeuronLayer(aSource.layers[i]); layers.Add(layer); layer.InitNeurons(last, aSource.layers[i]); last = layer; } output.InitNeurons(last, aSource.output); }
public Creature(Creature mother) { this.pos = mother.pos; this.viewAngle = (float)EvoGame.GlobalRandom.NextDouble() * Mathf.PI * 2; this.brain = mother.brain.CloneFullMesh(); inBias = brain.GetInputNeuronFromName(NAME_IN_BIAS); inFoodValuePosition = brain.GetInputNeuronFromName(NAME_IN_FOODVALUEPOSITION); inFoodValueFeeler = brain.GetInputNeuronFromName(NAME_IN_FOODVALUEFEELER); inOcclusionFeeler = brain.GetInputNeuronFromName(NAME_IN_OCCLUSIONFEELER); inEnergy = brain.GetInputNeuronFromName(NAME_IN_ENERGY); inAge = brain.GetInputNeuronFromName(NAME_IN_AGE); inGeneticDifference = brain.GetInputNeuronFromName(NAME_IN_GENETICDIFFERENCE); inWasAttacked = brain.GetInputNeuronFromName(NAME_IN_WASATTACKED); inWaterOnFeeler = brain.GetInputNeuronFromName(NAME_IN_WATERONFEELER); inWaterOnCreature = brain.GetInputNeuronFromName(NAME_IN_WATERONCREATURE); outBirth = brain.GetOutputNeuronFromName(NAME_OUT_BIRTH); outRotate = brain.GetOutputNeuronFromName(NAME_OUT_ROTATE); outForward = brain.GetOutputNeuronFromName(NAME_OUT_FORWARD); outFeelerAngle = brain.GetOutputNeuronFromName(NAME_OUT_FEELERANGLE); outAttack = brain.GetOutputNeuronFromName(NAME_OUT_ATTACK); outEat = brain.GetOutputNeuronFromName(NAME_OUT_EAT); CalculateFeelerPos(); for (int i = 0; i < 10; i++) { brain.RandomMutation(0.1f); } float r = mother.color.R / 255f; float g = mother.color.G / 255f; float b = mother.color.B / 255f; r += (float)EvoGame.GlobalRandom.NextDouble() * 0.1f - 0.05f; g += (float)EvoGame.GlobalRandom.NextDouble() * 0.1f - 0.05f; b += (float)EvoGame.GlobalRandom.NextDouble() * 0.1f - 0.05f; r = Mathf.Clamp01(r); g = Mathf.Clamp01(g); b = Mathf.Clamp01(b); color = new Color(r, g, b); }
static void BasicTest() { var inputNeuron = new InputNeuron(); var calcNeuron1 = new FunctionNeuronProcess(ds => ds * 2); var calcNeuron2 = new FunctionNeuronProcess(ds => ds * 2); var outputNeuron = new OutputNeuron(ds => ds * 2); var network = new NeuronalNetwork(); network.AddNeuron(inputNeuron); network.AddNeuron(calcNeuron1); network.AddNeuron(calcNeuron2); network.AddNeuron(outputNeuron); var synapse11 = network.CreateSynapse(inputNeuron, calcNeuron1); var synapse12 = network.CreateSynapse(inputNeuron, calcNeuron2); var synapse21 = network.CreateSynapse(calcNeuron1, outputNeuron); var synapse22 = network.CreateSynapse(calcNeuron2, outputNeuron); synapse11.Weight = 2; synapse12.Weight = 2; synapse21.Weight = 2; synapse22.Weight = 2; Console.WriteLine("Write any Value"); var input = string.Empty; do { network.Reset(); Console.Write("> "); input = Console.ReadLine(); if (double.TryParse(input, out double value)) { inputNeuron.Value = value; Console.Write("Calculating.."); network.FeedForward(); Console.WriteLine("Finished. Result: " + outputNeuron.Value); } } while (input != string.Empty); }
public void NewGeneration() { generation++; for (int i = 0; i < poblation.Length; i++) { poblation[i].GetComponent <DinoBehaviour>().CalculateFitness(); } NeuronalList.Sort(); for (int i = 0; i < poblation.Length / 2; i++) { NeuronalList[poblation.Length - 1 - i] = new NeuronalNetwork(NeuronalList[i]); NeuronalList[i] = new NeuronalNetwork(NeuronalList[i]); NeuronalList[poblation.Length - 1 - i].Mutar(); } for (int i = 0; i < poblation.Length; i++) { poblation[i].GetComponent <DinoBehaviour>().Reset(NeuronalList[i], infoLenght); } }
public Creature(Creature mother) { id = currentId++; //this.mother = mother; generation = mother.generation + 1; if (generation > _maximumGeneration) { _maximumGeneration = generation; } this.pos = mother.pos; this.viewAngle = EvoGame.RandomFloat() * Mathf.PI * 2; this.brain = mother.brain.CloneFullMesh(); SetupVariablesFromBrain(); CalculateFeelerPos(MAXIMUMFEELERDISTANCE); for (int i = 0; i < 10; i++) { brain.RandomMutation(0.1f); } int r = mother.color.R; int g = mother.color.G; int b = mother.color.B; r += EvoGame.RandomInt(-5, 6); g += EvoGame.RandomInt(-5, 6); b += EvoGame.RandomInt(-5, 6); r = Mathf.ClampColorValue(r); g = Mathf.ClampColorValue(g); b = Mathf.ClampColorValue(b); color = new Color(r, g, b); GenerateColorInv(); if (CreatureManager.SelectedCreature == null || CreatureManager.SelectedCreature.Energy < 100) { CreatureManager.SelectedCreature = this; } }
void Start() { poblation = new GameObject[poblationNum]; NeuronalList = new List <NeuronalNetwork>(); for (int i = 0; i < poblationNum; i++) { GameObject myShip = Instantiate(shipPrefab); NeuronalNetwork myIA = new NeuronalNetwork(neuronalNetworkSize); NeuronalList.Add(myIA); myShip.GetComponent <ShipMovement>().ReciveNeuronalNetwork(myIA); myShip.GetComponent <ShipMovement>().SetGoal(goal.transform); myShip.transform.position = transform.position; poblation[i] = myShip; } poblation[0].name = "Pro"; poblation[0].transform.GetChild(0).GetComponent <MeshRenderer>().material.color = Color.cyan; poblation[0].transform.GetChild(1).GetComponent <MeshRenderer>().material.color = Color.white; poblation[0].transform.GetChild(2).GetComponent <MeshRenderer>().material.color = Color.yellow; poblation[0].transform.GetChild(3).GetComponent <MeshRenderer>().material.color = Color.yellow; }
private void NewGeneration() { generation++; for (int i = 0; i < poblationNum; i++) { poblation[i].GetComponent <ShipMovement>().CalculateFitness(); } NeuronalList.Sort(); for (int i = 0; i < poblationNum / 2; i++) { NeuronalList[poblationNum - 1 - i] = new NeuronalNetwork(NeuronalList[i]); NeuronalList[i] = new NeuronalNetwork(NeuronalList[i]); NeuronalList[poblationNum - 1 - i].Mutar(); } for (int i = 0; i < poblationNum; i++) { poblation[i].GetComponent <ShipMovement>().ReciveNeuronalNetwork(NeuronalList[i]); poblation[i].transform.position = transform.position; poblation[i].transform.rotation = transform.rotation; } }
public void Reset(NeuronalNetwork neuNet, int infoLeng) { myNeuronalNetwork = neuNet; infoLentght = infoLeng; alive = true; actionTime = 0; infoInstance.ReviveDino(dinoID); fitness = 0; crouching = false; pos = new Vector3(0, 0, 0); transform.position = pos; if (act != null) { CleanDelegate(); act += Think; } if (rendering) { GetComponentInChildren <AnimationBehaviour>().ReturnToIdle(); } gameObject.SetActive(true); }
public Creature(Creature mother, CreatureManager manager) : this(manager) { id = currentId++; //this.mother = mother; generation = mother.generation + 1; if (generation > _maximumGeneration) { _maximumGeneration = generation; } this.pos = mother.pos; this.viewAngle = Simulation.RandomFloat() * Mathf.PI * 2; this.brain = mother.brain.CloneFullMesh(); AmountOfMemory = mother.AmountOfMemory; inMemory = new InputNeuron[AmountOfMemory]; outMemory = new WorkingNeuron[AmountOfMemory]; SetupVariablesFromBrain(); CalculateFeelerPos(MAXIMUMFEELERDISTANCE); if (Simulation.RandomFloat() > 0.01f) { MutateConnections(); } else { MutateMemory(); } MutateColor(mother); GenerateColorInv(); if (manager.SelectedCreature == null || manager.SelectedCreature.Energy < 100) { manager.SelectedCreature = this; } }
public Creature(Creature mother, Creature father, CreatureManager manager) : this(manager) { id = currentId++; motherId = mother.id; generation = mother.generation + 1; if (generation > manager.MaxGeneration) { manager.MaxGeneration = generation; } pos = mother.pos; viewAngle = Simulation.RandomFloat() * Mathf.PI * 2; if (Simulation.SimulationConfiguration.MateBrainPercentage == 1.0f) { brain = father.brain.CloneFullMesh(); } else { brain = mother.brain.CloneFullMesh(); brain.MixNetwork(father.brain, Simulation.SimulationConfiguration.MateBrainPercentage); } AmountOfMemory = mother.AmountOfMemory; AmountOfHidden = mother.AmountOfHidden; inMemory = new InputNeuron[AmountOfMemory]; outMemory = new WorkingNeuron[AmountOfMemory]; SetupFeelers(true, mother.AmountOfFeelers); SetupVariablesFromBrain(); DoMutations(mother); if (manager.SelectedCreature == null || manager.SelectedCreature.Energy <= 100) { manager.SelectedCreature = this; } }
void Awake() { _brain = new NeuronalNetwork(inputs, outputs, hiddenLayers, neuronsPerLayer, linearGrade, bias); _brain.CreateNet(); _genome = _brain.GetWeights(); }
//Public things public void DyingWormsLastWishes(NeuronalNetwork controller, float Fitness, Worm wormtoremove, int foodeaten, Color wormcolor, bool IsCannibal) { //Add worm controller to best list if (IsCannibal == false) { ListOfBestWormBrains.Add(new WormList(Fitness, controller, foodeaten, wormcolor)); NumberOfAliveWorms--; //Sort list from best to worst if (ListOfBestWormBrains.Count > 2) { ListOfBestWormBrains.Sort(delegate(WormList b1, WormList b2) { return(b1.Fitness.CompareTo(b2.Fitness)); }); ListOfBestWormBrains.Reverse(); } if (ListOfBestWormBrains.Count > 100) { ListOfBestWormBrains.RemoveAt(ListOfBestWormBrains.Count - 1); //Keep 100 best brains in safe; } } //Add best worm eater controller to list containing the best ones if (IsCannibal == true) { ListOfBestWormEaterBrains.Add(new WormList(Fitness, controller, foodeaten, wormcolor)); if (ListOfBestWormEaterBrains.Count > 2) { ListOfBestWormEaterBrains.Sort(delegate(WormList b1, WormList b2) { return(b1.Fitness.CompareTo(b2.Fitness)); }); ListOfBestWormEaterBrains.Reverse(); } if (ListOfBestWormEaterBrains.Count > 100) { ListOfBestWormEaterBrains.RemoveAt(ListOfBestWormEaterBrains.Count - 1); //Keep 100 best brains in safe; } } //Do the things to keep worms alive if (UseGenerations == false && IsCannibal == false) { NumberOfWormsAliveAfterExtinction++; if (foodeaten >= 4) { int NumberToSpawn = foodeaten / 4; //if (NumberToSpawn > 4) NumberToSpawn = 4; //print(NumberToSpawn); if (NumberOfAliveWorms <= AmountOfWorms) { for (int i = 0; i < NumberToSpawn; i++) { NumberOfAliveWorms++; GenerateWorms(1); controller.Mutate(1); ListOfWorms[ListOfWorms.Count - 1].GetComponent <Worm>().SetNeuralNetwork(controller, wormcolor); } } } ListOfWorms.Remove(wormtoremove.gameObject); Destroy(wormtoremove.gameObject); } //Do things to keep wormeaters alive if (UseGenerations == false && IsCannibal == true) { NumberOfWormEatersAliveAfterExtinction++; if (foodeaten >= 2) { int NumberToSpawn = foodeaten / 2; //if (NumberToSpawn > 3) NumberToSpawn = 3; //print(NumberToSpawn); for (int i = 0; i < NumberToSpawn; i++) { //NumberOfAliveWorm GenerateWormEaters(1); controller.Mutate(1); ListOfWormEaters[ListOfWormEaters.Count - 1].GetComponent <Worm>().SetNeuralNetwork(controller, wormcolor); } } ListOfWormEaters.Remove(wormtoremove.gameObject); Destroy(wormtoremove.gameObject); } }
//Install a brain public void SetNeuralNetwork(NeuronalNetwork NewController, Color color) { Controller = new NeuronalNetwork(NewController); IsControllerSet = true; SetColor(color); }
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(); }
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 void ReciveNeuronalNetwork(NeuronalNetwork neuNet) { myNeuronalNetwork = neuNet; }