/// <summary>
        /// Finds Poblacion By Id
        /// </summary>
        /// <param name="id">Injected <see cref="int"/></param>
        /// <returns>Instance of <see cref="Task{Poblacion}"/></returns>
        public async Task <Poblacion> FindPoblacionById(int id)
        {
            Poblacion @poblacion = await Context.Poblacion
                                   .TagWith("FindPoblacionById")
                                   .FirstOrDefaultAsync(x => x.Id == id);

            if (@poblacion == null)
            {
                // Log
                string @logData = @poblacion.GetType().Name
                                  + " with Id "
                                  + id
                                  + " was not found at "
                                  + DateTime.Now.ToShortTimeString();

                Logger.WriteGetItemNotFoundLog(@logData);

                throw new Exception(@poblacion.GetType().Name
                                    + " with Id "
                                    + id
                                    + " does not exist");
            }

            return(@poblacion);
        }
        /// <summary>
        /// Updates Poblacion
        /// </summary>
        /// <param name="viewModel">Injected <see cref="UpdatePoblacion"/></param>
        /// <returns>Instance of <see cref="Task{ViewPoblacion}"/></returns>
        public async Task <ViewPoblacion> UpdatePoblacion(UpdatePoblacion @viewModel)
        {
            await CheckName(@viewModel);

            Poblacion @poblacion = await FindPoblacionById(@viewModel.Id);

            @poblacion.Name      = @viewModel.Name;
            @poblacion.Provincia = await FindProvinciaById(@viewModel.ProvinciaId);

            @poblacion.ImageUri = @viewModel.ImageUri;

            try
            {
                Context.Poblacion.Update(@poblacion);

                await Context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                await CheckName(@viewModel);
            }

            // Log
            string @logData = @poblacion.GetType().Name
                              + " with Id "
                              + @poblacion.Id
                              + " was modified at "
                              + DateTime.Now.ToShortTimeString();

            Logger.WriteUpdateItemLog(@logData);

            return(Mapper.Map <ViewPoblacion>(@poblacion));
        }
        /// <summary>
        /// Checks Name
        /// </summary>
        /// <param name="viewModel">Injected <see cref="AddPoblacion"/></param>
        /// <returns>Instance of <see cref="Task{Poblacion}"/></returns>
        public async Task <Poblacion> CheckName(UpdatePoblacion @viewModel)
        {
            Poblacion @poblacion = await Context.Poblacion
                                   .AsNoTracking()
                                   .TagWith("CheckName")
                                   .FirstOrDefaultAsync(x => x.Name == @viewModel.Name & x.Id != @viewModel.Id);

            if (@poblacion != null)
            {
                // Log
                string @logData = @poblacion.GetType().Name
                                  + " with Name "
                                  + @poblacion.Name
                                  + " was already found at "
                                  + DateTime.Now.ToShortTimeString();

                Logger.WriteGetItemFoundLog(@logData);

                throw new Exception(@poblacion.GetType().Name
                                    + " with Name "
                                    + @viewModel.Name
                                    + " already exists");
            }

            return(@poblacion);
        }
 public void RecorrerPersonajesConBucleFor()
 {
     for (int i = 0; i < Poblacion.Count; i++)
     {
         Personaje elPersonaje = Poblacion[i];
         elPersonaje = Poblacion.ElementAt(i);
     }
 }
Beispiel #5
0
        protected void poblacion()
        {
            population = new Poblacion();


            for (int j = 0; j < constantes.sizePoblacion; j++)
            {
                populaPoblacion.Add(population.obtenerPoblacion()[j].obtenerEntero(), population.obtenerPoblacion()[j].obtenerFitness());
            }
        }
Beispiel #6
0
        static void Main()
        {
            string cadOriginal = "Estoy probando un algoritmo genético";

            Poblacion objPoblacion    = new Poblacion();
            int       TotalIndividuos = 50;
            int       TotalCiclos     = 10000;
            string    MejorIndiv      = objPoblacion.Proceso(cadOriginal, TotalIndividuos, TotalCiclos);

            //Muestra el individuo mejor adaptado
            Console.WriteLine(MejorIndiv);
            Console.ReadKey();
        }
 public void AgregarPersonaje(Personaje personaje)
 {
     /*Personaje[] aux = new Personaje[Poblacion.Length + 1];
      *
      * for(int i = 0; i < Poblacion.Length; i++)
      * {
      *  aux[i] = Poblacion[i];
      * }
      *
      * aux[aux.Length-1] = personaje;
      *
      * Poblacion = aux;*/
     Poblacion.Add(personaje);
 }
Beispiel #8
0
        public Poblacion CalcularPoblacionInicial(int tamanhoPoblacion, double probabilidadMutacion, List <Rectangulo> listaPiezas, System.Random rnd)
        {
            // Creo una lista de "tamPoblacion" cromosomas aleatorios.
            // El constructor de Cromosoma dentro de la clase Poblacion se encarga de crearlo aleatoriamente
            int       numGenes  = listaPiezas.Count * 2 - 1;
            Poblacion poblacion = new Poblacion(1, tamanhoPoblacion, probabilidadMutacion, numGenes, rnd);

            // Completar la información de cada cromosoma (posición, fitness) y ordenarlo
            foreach (Cromosoma cromosoma in poblacion.ListaCromosomas)
            {
                CalcularCromosoma(cromosoma, listaPiezas);
            }
            poblacion.OrdenarPoblacionPorFitness();
            return(poblacion);
        }
Beispiel #9
0
        public Cromosomas Ruleta(Poblacion _pop)
        {
            double     numSorteado = (constantes.random.NextDouble() * 100);
            Cromosomas cm;

            foreach (Cromosomas crom in _pop.obtenerPoblacion())
            {
                if (numSorteado >= crom.obtenerRangoRuleta()[0] && numSorteado <= crom.obtenerRangoRuleta()[1])
                {
                    return(crom);
                }
            }

            return(null);
        }
Beispiel #10
0
        /// <summary>
        /// Updates Arenal Poblacion
        /// </summary>
        /// <param name="viewModel">Injected <see cref="UpdateArenal"/></param>
        /// <param name="entity">Injected <see cref="Arenal"/></param>
        public void UpdateArenalPoblacion(UpdateArenal @viewModel, Arenal @entity)
        {
            @viewModel.PoblacionesId.AsQueryable().ToList().ForEach(async x =>
            {
                Poblacion @poblacion = await FindPoblacionById(x);

                ArenalPoblacion @arenalPoblacion = new()
                {
                    Arenal    = @entity,
                    Poblacion = @poblacion,
                };

                @entity.ArenalPoblaciones.Add(@arenalPoblacion);
            });
        }
Beispiel #11
0
 public void LanzarGeneraciones(ToolStripStatusLabel lbl)
 {
     if (Poblacion == null)
     {
         IniciarPoblacion();
     }
     for (int generacion = 0; generacion < NumGeneraciones; generacion++)
     {
         Poblacion.RunEpoch();
         Resultados.Add(new CocheResultado()
         {
             BestChromosome = Poblacion.BestChromosome.Clone() as CocheCromosoma, FitnessAvg = Poblacion.FitnessAvg, FitnessMax = Poblacion.FitnessMax
         });
         lbl.Text = string.Format("Generación {0} de {1}", generacion + 1, NumGeneraciones);
     }
 }
Beispiel #12
0
        protected void gvPoblaciones_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            Poblacion p = new Poblacion();

            int     idMunicipio = int.Parse(ddlFMunicipios.SelectedValue.ToString());
            Label   txId        = (Label)gvPoblaciones.Rows[e.RowIndex].FindControl("lbEditClave");
            TextBox txNombre    = (TextBox)gvPoblaciones.Rows[e.RowIndex].FindControl("txEditNombre");
            TextBox txtAmbito   = (TextBox)gvPoblaciones.Rows[e.RowIndex].FindControl("txEditAmbito");

            String Resultado = p.Actualizar(int.Parse(txId.Text), idMunicipio, txNombre.Text.ToUpper(), txtAmbito.Text.ToUpper());


            gvPoblaciones.EditIndex  = -1;
            gvPoblaciones.DataSource = main.Poblaciones.CatalogoPorMunicipio(idMunicipio);
            gvPoblaciones.DataBind();
            if (Resultado.Equals("OK"))
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Datos actualizados Correctamente')", true);
            }
        }
Beispiel #13
0
        protected void gvPoblaciones_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("AGREGAR"))
            {
                Poblacion p = new Poblacion();

                int     idMunicipio  = int.Parse(ddlFMunicipios.SelectedValue.ToString());
                TextBox txtNombrePob = (TextBox)gvPoblaciones.FooterRow.FindControl("txNombrePoblacion");
                TextBox txtAmbito    = (TextBox)gvPoblaciones.FooterRow.FindControl("txAmbito");

                String Resultado = p.GuardarNuevo(idMunicipio, txtNombrePob.Text.ToUpper(), txtAmbito.Text.ToUpper());

                gvPoblaciones.DataSource = main.Poblaciones.CatalogoPorMunicipio(idMunicipio);
                gvPoblaciones.DataBind();
                if (Resultado.Equals("OK"))
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Datos agregados Correctamente')", true);
                }
            }
        }
Beispiel #14
0
        public Poblacion CalcularSiguienteGeneracion(Poblacion actualPoblacion, int cantElitismo, double probabilidadMutacion, int tamanhoPoblacion, System.Random rnd)
        {
            // Creo una poblacion vacia
            Poblacion nuevaPoblacion = new Poblacion(actualPoblacion.Generacion + 1, tamanhoPoblacion, probabilidadMutacion);

            // Elitismo: Guardo los mejores cromosomas de la población actual
            for (int i = 0; i < cantElitismo; ++i)
            {
                nuevaPoblacion.ListaCromosomas.Add(actualPoblacion.ListaCromosomas[i]);
            }

            // Calculo el fitness de la poblacion actual (para ayudar al método de selección)
            double sumaDelFitness = actualPoblacion.CalcularFitness();

            while (nuevaPoblacion.ListaCromosomas.Count < tamanhoPoblacion)
            {
                //  Seleccionar 2 progenitores con el Método de la ruleta
                List <Cromosoma> listaProgenitores = SeleccionarProgenitores(sumaDelFitness, actualPoblacion, rnd);

                // Una vez que tengamos ambos progenitores seleccionados, los cruzamos, obtenemos dos descendientes y los agregamos a la población
                List <Cromosoma> listaDescendientes = Cruce(listaProgenitores[0], listaProgenitores[1], rnd);

                // Agrego los hijos a la poblacion que se está creando
                nuevaPoblacion.ListaCromosomas.Add(listaDescendientes[0]);
                nuevaPoblacion.ListaCromosomas.Add(listaDescendientes[1]);
            }

            // Mutacion. No olvidarse que esto no afecta a los mejores individuos
            for (int i = cantElitismo + 1; i < nuevaPoblacion.ListaCromosomas.Count; ++i)
            {
                if (rnd.NextDouble() < probabilidadMutacion)
                {
                    while (!Mutacion(nuevaPoblacion.ListaCromosomas[i], rnd))
                    {
                        ;
                    }
                }
            }

            return(nuevaPoblacion);
        }
Beispiel #15
0
        public AlgoritmoGenetico(int numMaxGeneraciones, List <Rectangulo> listaPiezas, double probabilidadMutacion,
                                 int tamanhoPoblacion, double pesoFactorMinimizacion, double pesoFactorCuadratura,
                                 int cantElitismo, List <Stock> listaStocks, BackgroundWorker worker)
        {
            // Iniciar parámetros del algoritmo
            System.Random rnd = new System.Random();
            this.worker = worker;
            this.pesoFactorMinimizacion = pesoFactorMinimizacion;
            this.pesoFactorCuadratura   = pesoFactorCuadratura;
            this.listaStocks            = listaStocks;

            // Crear la poblacion inicial
            Poblacion poblacion = CalcularPoblacionInicial(tamanhoPoblacion, probabilidadMutacion, listaPiezas, rnd);

            this.mejorCromosoma = poblacion.ListaCromosomas[0];

            // Calcular hasta un maximo de generaciones (o agregar condicion de parada de Nilton)
            for (int i = 0; i < numMaxGeneraciones; ++i)
            {
                // Calculo la nueva poblacion a partir de la anterior
                poblacion = CalcularSiguienteGeneracion(poblacion, cantElitismo, probabilidadMutacion, tamanhoPoblacion, rnd);

                // Luego, calculo sus posiciones y area. Esto es netamente cálculo, nada del algoritmo u aleatorio
                foreach (Cromosoma cromosoma in poblacion.ListaCromosomas)
                {
                    CalcularCromosoma(cromosoma, listaPiezas);
                }
                poblacion.OrdenarPoblacionPorFitness();

                // Codigo para indicar el porcentaje de avance en la barra de cargando
                int progreso = (int)(i * 1.0 / (numMaxGeneraciones - 1) * 100);
                worker.ReportProgress(progreso);
            }
            this.mejorCromosoma = poblacion.ListaCromosomas[0];


            //List<String> listaDebug = new List<string>() { "2R", "3R", "6R", "H", "H", "1N", "4N", "10R", "9R", "V", "8N", "H", "5N", "7N", "H", "V", "V", "V", "H" };
            //List<String> listaDebug = new List<string>() { "4N", "6N", "V", "2N", "V", "3N", "V", "1R", "9R", "7R", "H", "10R", "H", "5N", "V", "8N", "V", "H", "H" };
            //List<String> listaDebug = new List<string>() { "8R", "2R", "H", "4N", "V", "10R", "5N", "H", "7N", "6N", "H", "9N", "1N", "3N", "V", "H", "V", "V", "V" };
            //this.mejorCromosoma = CrearCromosoma(listaDebug, listaPiezas);
        }
Beispiel #16
0
        public Poblacion exeAG(Poblacion _pob)
        {
            Poblacion         nuevaPoblacion = new Poblacion();
            List <Cromosomas> popBuffer      = new List <Cromosomas>();

            for (int i = 0; i < (constantes.sizePoblacion / 2); i++)
            {
                /* seleccionamos el cromosoma */

                Cromosomas pai = Ruleta(_pob);
                Cromosomas mae = Ruleta(_pob);

                /* se realiza el cruzamiento*/

                Cromosomas[] cross = Crossover(pai, mae);

                /*Mutacion*/

                Cromosomas crossA = Mutacion(cross[0]);
                Cromosomas crossB = Mutacion(cross[1]);

                popBuffer.Add(crossA);
                popBuffer.Add(crossB);
            }

            /* Eliminar cromosomas antiguos e
             *  Insertar los nuevos
             */

            for (int x = 0; x < constantes.sizePoblacion; x++)
            {
                nuevaPoblacion.cromosomas(x, popBuffer[x]);
            }

            popBuffer = null;

            nuevaPoblacion.actualizarValores();

            return(nuevaPoblacion);
        }
Beispiel #17
0
        /// <summary>
        ///
        /// Se ejecuta la funcion donde se pasa el inventario
        /// de productos como parámetro, tambien las generaciones
        /// que se quieren iterar, ademas de la cantidad de
        /// poblacion por generacion, la Probabilidad de mutación
        /// y finalmente el porcentaje de Elitismo en la poblacion.
        ///
        /// </summary>
        /// <param name="Productos"></param>
        /// <param name="generaciones"></param>
        /// <param name="individuos"></param>
        /// <param name="probMutacion"></param>
        /// <param name="porcElitismo"></param>
        /// <returns></returns>
        public static Poblacion Calcular(List <ProductoGen> Productos, int generaciones, int individuos, double probMutacion, double porcElitismo)
        {
            int    n      = Productos.Count;                                   //Se obtiene la cantidad de productos de la lista
            double Nelite = Math.Ceiling((individuos * porcElitismo) / 100.0); //se calcula el numero de individuos
                                                                               //que se considerarán para el elitismo
            List <int> T = Tgenerar(Productos);                                //Se obtiene el arreglo del valor de utilidad que generan los productos

            int[]  HQ      = HQgenerate(Productos);                            //Se obtiene el arreglo de cantidad de veces vendidas
            int    cromTam = T.Count;                                          //Tamaño del cromosoma
            double Cmut    = (HQ.Average() * n) / getPatron(n);

            int[,] PopIni = getPoblInic(new int[individuos, Productos.Count], individuos, cromTam, Cmut); //Se genera la
                                                                                                          //poblacion inicial
            int[,] PopOld = PopIni;                                                                       // Se guarda la poblacion inicial como antigua
            int[] fitness    = fitnes(PopOld, T);                                                         // Se calcula el fitnes
            var   generacion = 0;                                                                         // Contador de generaciones

            Poblacion final = new Poblacion();                                                            //poblacion que será retornada

            while (generacion < generaciones)                                                             // Mientras no se llegue a la generación final
            {
                List <int[]> NewPob = new List <int[]>();                                                 //Nueva poblacion

                cruce(PopOld, NewPob, fitness, individuos, Nelite, cromTam);                              //funcion cruce
                mutacion(PopOld, NewPob, probMutacion, Cmut, individuos, cromTam);                        //funcion mutación

                int[,] aux = convertMatrix(NewPob);
                int[]            fit  = fitnes(PopOld, T); // Se calcula el fitnes de la poblacion antigua
                List <Poblacion> pNew = new List <Poblacion>();
                pNew = getPoblacion(Productos, aux, fit);
                pNew.Sort((x, y) => x.fitness.CompareTo(y.fitness)); //ordena la poblacion por el mejor fitness
                PopOld = aux;
                generacion++;
                if (generacion == generaciones) //generacion que retorna
                {
                    final = pNew[0];
                }
            }
            return(final);
        }
Beispiel #18
0
        public List <Cromosoma> SeleccionarProgenitores(double sumaDelFitness, Poblacion actualPoblacion, System.Random rnd)
        {
            List <Cromosoma> listaProgenitores = new List <Cromosoma>();

            // Generar un número aleatorio en el intervalo [0, SumaFitness]
            double random = Utilitarios.ObtenerAleatorioEntre(0, sumaDelFitness, rnd);
            double s      = 0;

            // Recorre todas las poblaciones cuya suma de fitness sea [0 - suma_fitness].
            // Cuando la suma sea mayor que random, para y devuelve el cromosoma donde estas
            foreach (Cromosoma cromosoma in actualPoblacion.ListaCromosomas)
            {
                s += cromosoma.Fitness;
                if (s > random)
                {
                    listaProgenitores.Add(cromosoma); // progenitor 1
                    break;
                }
            }

            // Hacer lo mismo para el progenitor2
            random = Utilitarios.ObtenerAleatorioEntre(0, sumaDelFitness, rnd);
            s      = 0;
            // Anda a través de todas las poblaciones cuya suma de fitness sea [0 - suma_fitness].
            // Cuando la suma sea mayor que random, para y devuelve el cromosoma donde estas
            foreach (Cromosoma cromosoma in actualPoblacion.ListaCromosomas)
            {
                s += cromosoma.Fitness;
                if (s > random)
                {
                    listaProgenitores.Add(cromosoma); // progenitor 2
                    break;
                }
            }

            return(listaProgenitores);
        }
        /// <summary>
        /// Removes Poblacion By Id
        /// </summary>
        /// <param name="id">Injected <see cref="int"/></param>
        /// <returns>Instance of <see cref="Task"/></returns>
        public async Task RemovePoblacionById(int @id)
        {
            try
            {
                Poblacion @poblacion = await FindPoblacionById(@id);

                Context.Poblacion.Remove(@poblacion);

                await Context.SaveChangesAsync();

                // Log
                string @logData = @poblacion.GetType().Name
                                  + " with Id "
                                  + @poblacion.Id
                                  + " was removed at "
                                  + DateTime.Now.ToShortTimeString();

                Logger.WriteDeleteItemLog(@logData);
            }
            catch (DbUpdateConcurrencyException)
            {
                await FindPoblacionById(@id);
            }
        }
 public void AgregarPersonaje(List <Personaje> personajes)
 {
     Poblacion.AddRange(personajes);
 }
Beispiel #21
0
 void Awake()
 {
     PeopleEnemy = new ListEnemy();
     foo         = new Poblacion();
 }
Beispiel #22
0
        private void _btnAG_Click(object sender, EventArgs e)
        {
            /* Inicia el proceso de generacion de la poblacion */
            poblacion();

            double _PM      = Convert.ToDouble(_txtPM.Text);
            double _PC      = Convert.ToDouble(_txtPC.Text);
            int    iterevol = Convert.ToInt32(_txtEvol.Text);

            Console.Write(_PM.ToString() + "\n");
            Console.Write(_PC.ToString() + "\n");
            Console.Write(iterevol.ToString() + "\n");


            algortimoGenetico AG = new algortimoGenetico(_PC, _PM);


            //Establecemos las propiedades del ListView
            listView1.View          = View.Details;
            listView1.GridLines     = true;
            listView1.FullRowSelect = true;

            //Añadimos las columnas al ListView
            listView1.Columns.Add("Numero", 500);
            listView1.Columns.Add("Fitness", 70);


            //Añadimos los elementos (filas) al ListView
            string[]     elementosFila = new string[2];
            ListViewItem elementoListView;


            for (int i = 0; i < iterevol; i++)
            {
                population      = AG.exeAG(population);
                populaPoblacion = new PointPairList();

                for (int j = 0; j < constantes.sizePoblacion; j++)
                {
                    populaPoblacion.Add(population.obtenerPoblacion()[j].obtenerEntero(), population.obtenerPoblacion()[j].obtenerFitness());
                }
            }

            population.ordenarPoblacion();

            string badcromosomas = string.Empty;

            for (int i = 0; i < 10; i++)
            {
                badcromosomas += population.obtenerPoblacion()[i].mostrarCromosomas() + "\n";
            }

            string bestcromosomas = string.Empty;

            for (int j = constantes.sizePoblacion - 1; j > (constantes.sizePoblacion - 1) - 10; j--)
            {
                bestcromosomas += population.obtenerPoblacion()[j].mostrarCromosomas() + "\n";
            }

            _txtBestCrom.Text  = bestcromosomas;
            _txtWorstCrom.Text = badcromosomas;
        }
 public void Reiniciar()
 {
     Poblacion.Clear();
     Estado = EstadoJuego.Iniciado;
 }