コード例 #1
0
 public WormList(float fitness, NeuronalNetwork controller, int foodeaten, Color color)
 {
     Controller = new NeuronalNetwork(controller);
     Fitness    = fitness;
     FoodEaten  = foodeaten;
     WormColor  = color;
 }
コード例 #2
0
ファイル: Creature.cs プロジェクト: pkupper/EvoNet
        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();
        }
コード例 #3
0
 /// <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);
 }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
 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);
 }
コード例 #6
0
ファイル: Creature.cs プロジェクト: pkupper/EvoNet
        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();
        }
コード例 #7
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());
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: thetoeb/MathTest
        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);
        }
コード例 #9
0
    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);
    }
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: Program.cs プロジェクト: thetoeb/MathTest
        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);
        }
コード例 #12
0
 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);
     }
 }
コード例 #13
0
ファイル: Creature.cs プロジェクト: pkupper/EvoNet
        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;
            }
        }
コード例 #14
0
 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;
 }
コード例 #15
0
 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;
     }
 }
コード例 #16
0
 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);
 }
コード例 #17
0
        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;
            }
        }
コード例 #18
0
        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;
            }
        }
コード例 #19
0
 void Awake()
 {
     _brain = new NeuronalNetwork(inputs, outputs, hiddenLayers, neuronsPerLayer, linearGrade, bias);
     _brain.CreateNet();
     _genome = _brain.GetWeights();
 }
コード例 #20
0
    //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);
        }
    }
コード例 #21
0
ファイル: Worm.cs プロジェクト: z-nous/NeuralNetworkWorms
 //Install a brain
 public void SetNeuralNetwork(NeuronalNetwork NewController, Color color)
 {
     Controller      = new NeuronalNetwork(NewController);
     IsControllerSet = true;
     SetColor(color);
 }
コード例 #22
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();
        }
コード例 #23
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();
        }
コード例 #24
0
 public void ReciveNeuronalNetwork(NeuronalNetwork neuNet)
 {
     myNeuronalNetwork = neuNet;
 }