/// <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); } }
protected void poblacion() { population = new Poblacion(); for (int j = 0; j < constantes.sizePoblacion; j++) { populaPoblacion.Add(population.obtenerPoblacion()[j].obtenerEntero(), population.obtenerPoblacion()[j].obtenerFitness()); } }
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); }
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); }
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); }
/// <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); }); }
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); } }
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); } }
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); } } }
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); }
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); }
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); }
/// <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); }
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); }
void Awake() { PeopleEnemy = new ListEnemy(); foo = new Poblacion(); }
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; }