public Evolution(Cart cart)
        {
            this.cart = cart;
            evolutionManager = new GestoreRN_NEAT(5, 1, Const.INITIAL_POPULATION);

            int j=0;
            vectorGenotipo=new GenotipoRN[evolutionManager.population.Count];
            foreach (GenotipoRN g in evolutionManager.population)
            {
                vectorGenotipo[j] = g;
                j++;
            }

            ReadyFenotipo += new SetFenotipo(cart.SetFenotipo);
            cart.ReturnFitnessEvent += new Cart.ReturnFitness(finishedSimulation);

            genotipoInTest = evolutionManager.GetGenotipo();
            ReadyFenotipo(new FenotipoRN(genotipoInTest));
        }
        private void perceptronButton_Click(object sender, RoutedEventArgs e)
        {
            GenotipoRN g;
            genotipi.Clear();

            dialogBox.Text = string.Empty;
            visualizzaButton.IsEnabled = false;
            addNeuroneButton.IsEnabled = false;
            addAssoneButton.IsEnabled = false;
            modPesoButton.IsEnabled = false;

            gestore = new GestoreRN_NEAT(Convert.ToInt32(inputBox.Text), Convert.ToInt32(outputBox.Text));
            g = gestore.getPerceptron();
            genotipi.Add(g.firma(), g);

            aggiornaLista();
        }
        static void Main(string[] args)
        {
            GenotipoRN gen1, gen2;
            GestoreRN_NEAT gestore = new GestoreRN_NEAT(3, 2);
            ClientNEAT client;

            gen1 = new GenotipoRN();
            gen1.addNeuroneInput(new GenotipoRN.NeuroneG(1, TipoNeurone.NSensor));
            gen1.addNeuroneInput(new GenotipoRN.NeuroneG(2, TipoNeurone.NSensor));
            gen1.addNeuroneInput(new GenotipoRN.NeuroneG(3, TipoNeurone.NSensor));
            gen1.addNeuroneOutput(new GenotipoRN.NeuroneG(4, TipoNeurone.NActuator));
            gen1.addNeuroneOutput(new GenotipoRN.NeuroneG(5, TipoNeurone.NActuator));
            gen1.addNeurone(new GenotipoRN.NeuroneG(6, TipoNeurone.NHide));
            gen1.addAssone(new GenotipoRN.AssoneG(1, 1, 4, 1));
            gen1.addAssone(new GenotipoRN.AssoneG(2, 2, 6, 1));
            gen1.addAssone(new GenotipoRN.AssoneG(3, 6, 4, 1));
            gen1.addAssone(new GenotipoRN.AssoneG(4, 2, 5, 1));
            gen1.addAssone(new GenotipoRN.AssoneG(5, 3, 5, 1));

            gen2 = new GenotipoRN();
            gen2.addNeuroneInput(new GenotipoRN.NeuroneG(1, TipoNeurone.NSensor));
            gen2.addNeuroneInput(new GenotipoRN.NeuroneG(2, TipoNeurone.NSensor));
            gen2.addNeuroneInput(new GenotipoRN.NeuroneG(3, TipoNeurone.NSensor));
            gen2.addNeuroneOutput(new GenotipoRN.NeuroneG(4, TipoNeurone.NActuator));
            gen2.addNeuroneOutput(new GenotipoRN.NeuroneG(5, TipoNeurone.NActuator));
            gen2.addNeurone(new GenotipoRN.NeuroneG(7, TipoNeurone.NHide));
            gen2.addNeurone(new GenotipoRN.NeuroneG(6, TipoNeurone.NHide));
            gen2.addAssone(new GenotipoRN.AssoneG(1, 1, 4, -1));
            gen2.addAssone(new GenotipoRN.AssoneG(2, 2, 6, -1));
            gen2.addAssone(new GenotipoRN.AssoneG(4, 2, 5, -1));
            gen2.addAssone(new GenotipoRN.AssoneG(5, 3, 5, -1));
            gen2.addAssone(new GenotipoRN.AssoneG(6, 3, 7, -1));
            gen2.addAssone(new GenotipoRN.AssoneG(7, 6, 5, -1));
            gen2.addAssone(new GenotipoRN.AssoneG(8, 7, 5, -1));

            //GenotipoRN gen_tmp1 = gestore.getPerceptron();
            //gen1 = gestore.mutazioneAggiungiNeurone(gen_tmp1);
            //GenotipoRN gen_tmp2 = gestore.mutazioneAggiungiNeurone(gen_tmp1);
            //GenotipoRN gen_tmp3 = gestore.mutazioneModificaPesoUniformemente(gen_tmp2);
            //gen2 = gestore.mutazioneAggiungiNeurone(gen_tmp3);

            double d = AlgGenRN.distanza(gen1, gen2);
            GenotipoRN gen3 = new GenotipoRN(gen1, 1, gen2, 2);

            client = new ClientNEAT("127.0.0.1", 13001);
            if (client.connect())
            {
                client.writeConsole("Client connesso\n");
                client.writeConsole("Premi un tasto per inviare il genitore 1");
                Console.ReadKey();
                client.send("IRN");
                gen1.sendNetwork(client.getStream());
                client.receive();
                client.writeConsole("Premi un tasto per inviare il genitore 2");
                Console.ReadKey();
                client.send("IRN");
                gen2.sendNetwork(client.getStream());
                client.receive();
                Console.WriteLine("Distanza tra le reti: " + AlgGenRN.distanza(gen1, gen2));
                client.writeConsole("Premi un tasto per inviare il figlio");
                Console.ReadKey();
                client.send("IRN");
                gen3.sendNetwork(client.getStream());
                client.receive();
                client.writeConsole("Premi un tasto per uscire");
                Console.ReadKey();
                client.disconnect();
            }
            else
            {
                client.writeConsole("Errore di connessione\n");
                Console.ReadKey();
            }
        }
 public SpeciesManager(GestoreRN_NEAT gestore)
 {
     this.gestore = gestore;
     speciesList = new List<Species>();
 }
        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            rectTexture = DrawingHelper.GenerateRectangularTexture(graphics.GraphicsDevice, 1000, 1000, Color.White);
            IsMouseVisible = true;
            IsFixedTimeStep = true;
            GestoreRN_NEAT gestore = new GestoreRN_NEAT(3, 2);
            GenotipoRN genotipo = gestore.getPerceptron();
            GenotipoRN g_mutato = gestore.mutazioneAggiungiNeurone(genotipo);
            g_mutato = gestore.mutazioneAggiungiNeurone(g_mutato);
            g_mutato = gestore.mutazioneAggiungiAssone(g_mutato);
            grafo = new GrafoDisegno(g_mutato);
            fenotipo = new FenotipoRN(g_mutato);
            input = new double[fenotipo.numNeuroniSensori];

            input[0] = -1;
            for (int i = 1; i < fenotipo.numNeuroniSensori; i++)
                input[i] = input[i-1] + 2/(double)(fenotipo.numNeuroniSensori-1);
            grafo.AttachFenotipo(fenotipo);

            base.Initialize();
        }