Exemple #1
0
        public void addBestCreatureEvolution(ETTank e, int evolution)
        {
            string bestEvolution;

            bestEvolution  = "Evolucion " + (evolution + 1) + "-";
            bestEvolution += e.PathTravelled.Count + "-";
            bestEvolution += e.InitialPositionMap.Row + "," + e.InitialPositionMap.Column + "-";
            for (int j = 0; j < 256; j++)
            {
                bestEvolution += e.Brain.Situations.ElementAt(j) + ";";
            }
            addEvolution(bestEvolution);
        }
Exemple #2
0
        private bool selectCriatureSelected()
        {
            String value = listBox1.SelectedItem.ToString();

            if (randomCheckBox.Checked)
            {
                creature = new ETTank(value, this.f_BoardBox.Matrix);
            }
            else
            {
                byte row    = Convert.ToByte(rowNumericUpDown.Value);
                byte column = Convert.ToByte(columnNumericUpDown.Value);
                if (row > this.f_BoardBox.Matrix.m_Size.Row || column > this.f_BoardBox.Matrix.m_Size.Column || ETTank.posibleMove(new Kernel.Point(row, column), this.f_BoardBox.Matrix) == false)
                {
                    return(false);
                }
                Labyrinth.Kernel.Point p = new Labyrinth.Kernel.Point(row, column);
                creature = new ETTank(p, value);
            }


            return(true);
        }
Exemple #3
0
        public void evolution(int numberOfCreatures, int numberOfIterations, int numberOfEvolutions, frmMain window, bool positionrandom, Point p)
        {
            List <ETTank> creatures = new List <ETTank>();
            int           n         = 0;
            ETTank        creature;

            // INICIALIZACION
            if (!positionrandom)
            {
                while (n < numberOfCreatures)
                {
                    creature = new ETTank(p);
                    creatures.Add(creature);
                    n++;
                }
            }
            else
            {
                while (n < numberOfCreatures)
                {
                    creature = new ETTank(window.f_BoardBox.Matrix);
                    creatures.Add(creature);
                    n++;
                }
            }

            // EVLUACION
            n = 0;
            while (n < numberOfIterations)
            {
                Parallel.For(0, creatures.Count, i =>
                {
                    string radar  = creatures.ElementAt(i).scanner(this.map.m_Buffer);
                    int direction = creatures.ElementAt(i).Brain.Situations[radar];
                    creatures.ElementAt(i).move(direction, this.map);
                });
                n++;
            }

            creatures = ETVenus.evaluate(creatures, window.f_BoardBox.tileSolutions);
            creatures = ETVenus.order(creatures);
            n         = 0;
            int           n2 = 0;
            List <ETTank> creaturesSelected, offsprings;

            while (n < numberOfEvolutions)
            {
                if (creatures.ElementAt(0).PathTravelled.Count == window.f_BoardBox.tileSolutions.Count)
                {
                    break;
                }
                //RESET CREATURES
                Parallel.For(0, creatures.Count, i =>
                {
                    creatures.ElementAt(i).IndexMapPosition = creatures.ElementAt(i).InitialPositionMap;
                });
                creaturesSelected = ETVenus.select(creatures);
                offsprings        = ETVenus.crossing(creaturesSelected, this.map);
                creatures.AddRange(offsprings);
                creatures = ETVenus.mutation(creatures);
                while (n2 < numberOfIterations)
                {
                    Parallel.For(0, creatures.Count, i =>
                    {
                        string radar  = creatures.ElementAt(i).scanner(this.map.m_Buffer);
                        int direction = creatures.ElementAt(i).Brain.Situations[radar];
                        creatures.ElementAt(i).move(direction, this.map);
                    });
                    n2++;
                }
                n2        = 0;
                creatures = ETVenus.evaluate(creatures, window.f_BoardBox.tileSolutions);
                creatures = ETVenus.order(creatures);
                creatures = ETVenus.killWorst(creatures, (creatures.Count / 3) * 2);
                window.addBestCreatureEvolution(creatures.ElementAt(0), n);

                n++;
                if (n % 100 == 0)
                {
                    System.IO.StreamWriter fileTemp = new System.IO.StreamWriter(@"C:\maps\evoluciones\solucion" + n + ".txt");
                    fileTemp.WriteLine("Distancia recorrida: " + creatures.ElementAt(0).PathTravelled.Count);
                    for (int i = 0; i < 256; i++)
                    {
                        fileTemp.WriteLine(creatures.ElementAt(0).Brain.Situations.ElementAt(i));
                    }
                    fileTemp.Close();
                }
                window.updateChart(creatures.ElementAt(0).PathTravelled.Count);
                Console.WriteLine("Evolucion: " + n);
            }

            //ESCRIBIR LA SOLUCION
            System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\maps\solucion.txt");
            file.WriteLine("Mejores 10 resultados");
            for (int i = 0; i < 10; i++)
            {
                file.WriteLine("Distancia recorrida:" + creatures.ElementAt(i).PathTravelled.Count);
            }

            file.Close();
            System.IO.StreamWriter file2 = new System.IO.StreamWriter(@"C:\maps\solucionMejor.txt");
            for (int i = 0; i < 256; i++)
            {
                file2.WriteLine(creatures.ElementAt(0).Brain.Situations.ElementAt(i));
            }

            file2.Close();
        }