public IPoblacion Mutar(IPoblacion poblacionCruzada) { var probabilidad = _generador.Next(0, 100); if (probabilidad >= _parametrosMutacion.ProbabilidadMutarPoblacion) { var individuo = poblacionCruzada.ObtenerIndividuo(); this.MutarIndividuo(individuo); } return poblacionCruzada; }
private void AnalizarPoblacion(IPoblacion poblacionResultante) { analisis.Analizar(poblacionResultante); context.Send(new SendOrPostCallback((s) => { this.txtMejor.Text = analisis.MejorFitnessGlobal.ToString(); this.txtPeor.Text = analisis.PeorFitnessGlobal.ToString(); this.txtMejorReinas.Text = analisis.MejorReinasGlobal.ToString(); this.txtPeorReinas.Text = analisis.PeorReinasGlobal.ToString(); this.txtGeneracion.Text = poblacionResultante.NumeroGeneracion.ToString(); var reinasMejor = analisis.MejorIndividuoGlobal.Cromosoma.Genes; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { var controlReina = tlpTableroMejor.GetControlFromPosition(i, j); controlReina.BackColor = Color.White; ; controlReina.Text = string.Empty ; } } foreach (GenReina genReina in reinasMejor) { var reina = genReina.Valor as Reina; var controlReina = tlpTableroMejor.GetControlFromPosition(reina.Posicion.X, reina.Posicion.Y); if (controlReina.BackColor == Color.White) { controlReina.BackColor = Color.Red; } else { controlReina.BackColor = Color.Orange; } } var row = dgvEstadisticas.Rows.Add(); dgvEstadisticas.Rows[row].Cells["NumeroGeneracion"].Value = poblacionResultante.NumeroGeneracion; dgvEstadisticas.Rows[row].Cells["FitnessGlobalMaximo"].Value = analisis.MejorFitnessGlobal; dgvEstadisticas.Rows[row].Cells["FitnessGlobalMinimo"].Value = analisis.PeorFitnessGlobal; dgvEstadisticas.Rows[row].Cells["FitnessLocalMaximo"].Value = analisis.MejorFitnessVuelta; dgvEstadisticas.Rows[row].Cells["FitnessLocalMinimo"].Value = analisis.PeorFitnessVuelta; dgvEstadisticas.Rows[row].Cells["PorcentajeGlobalExito"].Value = ((analisis.MejorFitnessGlobal * 100) / (decimal)nudUmbralCorte.Value); dgvEstadisticas.Rows[row].Cells["PorcentajeLocalExito"].Value = ((analisis.MejorFitnessVuelta * 100) / (decimal)nudUmbralCorte.Value); }), null); }
public IPoblacion Seleccionar(IPoblacion poblacionInicial) { var poblacionSeleccionada = new Poblacion.Poblacion(poblacionInicial.NumeroGeneracion, new List<IIndividuo>(poblacionInicial.PoblacionActual.Count)); poblacionSeleccionada.CantidadIndividuos = poblacionInicial.CantidadIndividuos; var mejores = poblacionInicial.PoblacionActual.OrderByDescending(p => _parametrosSeleccionPorTorneo.FuncionFitness.Evaluar(p)).Take(_parametrosSeleccionPorTorneo.CantidadIndividuosASeleccionar).ToList(); foreach (var mejor in mejores) { poblacionSeleccionada.PoblacionActual.Add(mejor); } return poblacionSeleccionada; }
public AlgoritmoGenetico(IPoblacion poblacionInicial, IOperadorSeleccion _operadorSeleccion, IOperadorCruzamiento _operadorCruzamiento, IOperadorMutacion _operadorMutacion, IOperadorCorte _operadorCorte, IteracionCanceladaEventHandler IteracionCancelada) { this._poblacion = poblacionInicial; this._operadorSeleccion = _operadorSeleccion; this._operadorCruzamiento = _operadorCruzamiento; this._operadorMutacion = _operadorMutacion; this._operadorCorte = _operadorCorte; IteracionCancelada += AlgoritmoGenetico_IteracionCancelada; }
public bool CortarEjecucion(IPoblacion poblacionMutada) { bool cortar = poblacionMutada.NumeroGeneracion >= _parametrosCorte.LimiteIteraciones; for (int indiceIndividuo = 0; !cortar && indiceIndividuo < poblacionMutada.PoblacionActual.Count; indiceIndividuo++) { var individuo = poblacionMutada.PoblacionActual[indiceIndividuo]; var valorFitness = _parametrosCorte.FuncionFitness.Evaluar(individuo); cortar = valorFitness >= _parametrosCorte.UmbralCorte; } return cortar; }
public IPoblacion Cruzar(IPoblacion poblacionSeleccionada) { var individuos = new List<IIndividuo>(poblacionSeleccionada.PoblacionActual.Count); var poblacionFinal = new Poblacion.Poblacion(poblacionSeleccionada.NumeroGeneracion, individuos); poblacionFinal.CantidadIndividuos = poblacionSeleccionada.CantidadIndividuos; for (int cantidadIndividuos = 0; cantidadIndividuos < poblacionSeleccionada.CantidadIndividuos; cantidadIndividuos+=2) { var individuo1 = poblacionSeleccionada.ObtenerIndividuo(); var individuo2 = poblacionSeleccionada.ObtenerIndividuo(); Tuple<IIndividuo, IIndividuo> hijos = this.CruzarIndividuos(individuo1, individuo2); poblacionFinal.PoblacionActual.Add(hijos.Item1); poblacionFinal.PoblacionActual.Add(hijos.Item2); } return poblacionFinal; }
public void TestInitialize() { this._numeroGeneracion = 0; this._operadorSeleccion = MockRepository.GenerateMock<IOperadorSeleccion>(); this._operadorCruzamiento = MockRepository.GenerateMock<IOperadorCruzamiento>(); this._operadorMutacion = MockRepository.GenerateMock<IOperadorMutacion>(); this._operadorCorte = MockRepository.GenerateMock<IOperadorCorte>(); this._individuos = new List<IIndividuo>(); this._poblacionInicial = MockRepository.GenerateMock<IPoblacion>(); this._poblacionInicial.Expect(e => e.NumeroGeneracion).Repeat.Any().Return(_numeroGeneracion); this._poblacionInicial.Expect(e => e.PoblacionActual).Return(this._individuos).Repeat.Any(); this._algoritmoGenetico = new AlgoritmoGenetico(_poblacionInicial, _operadorSeleccion, _operadorCruzamiento, _operadorMutacion, _operadorCorte); }
public void Analizar(IPoblacion poblacion) { this.MejorIndividuoVuelta = null; this.PeorIndividuoVuelta = null; this.MejorFitnessVuelta = Int32.MinValue; this.PeorFitnessVuelta = Int32.MinValue; foreach (IIndividuo individuo in poblacion.PoblacionActual) { var fitness = this._parametrosAnalisisPoblacion.Funcion.Evaluar(individuo); // Mayores if (MejorIndividuoGlobal == null || fitness > MejorFitnessGlobal) { this.MejorIndividuoGlobal = individuo; this.MejorFitnessGlobal = fitness; this.MejorReinasGlobal = this._parametrosAnalisisPoblacion.FuncionReinas.Evaluar(individuo); ; } if (MejorIndividuoVuelta == null || fitness > MejorFitnessVuelta) { this.MejorIndividuoVuelta = individuo; this.MejorFitnessVuelta = fitness; this.MejorReinasGlobal = this._parametrosAnalisisPoblacion.FuncionReinas.Evaluar(individuo); ; } // Menores if (PeorIndividuoGlobal == null || fitness < PeorFitnessGlobal) { this.PeorIndividuoGlobal = individuo; this.PeorFitnessGlobal = fitness; this.PeorReinasGlobal = this._parametrosAnalisisPoblacion.FuncionReinas.Evaluar(individuo); ; } if (PeorIndividuoVuelta == null || fitness < PeorFitnessVuelta) { this.PeorIndividuoVuelta = individuo; this.PeorFitnessVuelta = fitness; this.PeorReinasGlobal = this._parametrosAnalisisPoblacion.FuncionReinas.Evaluar(individuo); ; } } }
public IPoblacion Ejecutar(IParametros parametros) { do { // Una nueva generación se procesa: this._poblacion.NumeroGeneracion++; this._poblacion = this._operadorSeleccion.Seleccionar(this._poblacion); this._poblacion = this._operadorCruzamiento.Cruzar(this._poblacion); this._poblacion = this._operadorMutacion.Mutar(this._poblacion); // Lanzo el evento si alguien lo está escuchando: if (IteracionTerminada != null) IteracionTerminada(this, new PoblacionEventArgs(_poblacion)); // Esperar para la siguiente vuelta Thread.Sleep(parametros.IntervaloPorVuelta); } while (!_terminar && !this._operadorCorte.CortarEjecucion(this._poblacion)); return this._poblacion; }
private void CargarPoblacionInicial() { var genes1 = Array.CreateInstance(typeof(IGen), 3); var genBasico1A = MockRepository.GenerateMock<IGen>(); var genBasico1B = MockRepository.GenerateMock<IGen>(); var genBasico1C = MockRepository.GenerateMock<IGen>(); genes1.SetValue(genBasico1A, 0); genes1.SetValue(genBasico1A, 1); genes1.SetValue(genBasico1A, 2); this._individuo1h = MockRepository.GenerateMock<IIndividuo>(); this._individuo1h.Expect(e => e.Cromosoma).Return(new Cromosoma(Array.CreateInstance(typeof(IGen), 3))).Repeat.Any(); this._individuo1 = MockRepository.GenerateMock<IIndividuo>(); this._individuo1.Expect(e => e.Cromosoma).Return(new Cromosoma(genes1)).Repeat.Any(); this._individuo1.Expect(e => e.GenerarDescendencia(_individuo1)).Return(_individuo1h); var genes2 = Array.CreateInstance(typeof(IGen), 3); var genBasico2A = MockRepository.GenerateMock<IGen>(); var genBasico2B = MockRepository.GenerateMock<IGen>(); var genBasico2C = MockRepository.GenerateMock<IGen>(); genes2.SetValue(genBasico2A, 0); genes2.SetValue(genBasico2A, 1); genes2.SetValue(genBasico2A, 2); this._individuo2h = MockRepository.GenerateMock<IIndividuo>(); this._individuo2h.Expect(e => e.Cromosoma).Return(new Cromosoma(Array.CreateInstance(typeof(IGen), 3))).Repeat.Any(); this._individuo2 = MockRepository.GenerateMock<IIndividuo>(); this._individuo2.Expect(e => e.Cromosoma).Return(new Cromosoma(genes2)).Repeat.Any(); this._individuo2.Expect(e => e.GenerarDescendencia(_individuo2)).Return(_individuo2h); var genes3 = Array.CreateInstance(typeof(IGen), 3); var genBasico3A = MockRepository.GenerateMock<IGen>(); var genBasico3B = MockRepository.GenerateMock<IGen>(); var genBasico3C = MockRepository.GenerateMock<IGen>(); genes3.SetValue(genBasico3A, 0); genes3.SetValue(genBasico3A, 1); genes3.SetValue(genBasico3A, 2); this._individuo3h = MockRepository.GenerateMock<IIndividuo>(); this._individuo3h.Expect(e => e.Cromosoma).Return(new Cromosoma(Array.CreateInstance(typeof(IGen), 3))).Repeat.Any(); this._individuo3 = MockRepository.GenerateMock<IIndividuo>(); this._individuo3.Expect(e => e.Cromosoma).Return(new Cromosoma(genes3)).Repeat.Any(); this._individuo3.Expect(e => e.GenerarDescendencia(_individuo3)).Return(_individuo3h); var genes4 = Array.CreateInstance(typeof(IGen), 3); var genBasico4A = MockRepository.GenerateMock<IGen>(); var genBasico4B = MockRepository.GenerateMock<IGen>(); var genBasico4C = MockRepository.GenerateMock<IGen>(); genes4.SetValue(genBasico1A, 0); genes4.SetValue(genBasico1A, 1); genes4.SetValue(genBasico1A, 2); this._individuo4h = MockRepository.GenerateMock<IIndividuo>(); this._individuo4h.Expect(e => e.Cromosoma).Return(new Cromosoma(Array.CreateInstance(typeof(IGen), 3))).Repeat.Any(); this._individuo4 = MockRepository.GenerateMock<IIndividuo>(); this._individuo4.Expect(e => e.Cromosoma).Return(new Cromosoma(genes4)).Repeat.Any(); this._individuo4.Expect(e => e.GenerarDescendencia(_individuo4)).Return(_individuo4h); this._individuos = new List<IIndividuo>() { this._individuo1, this._individuo2, this._individuo3, this._individuo4 }; this._poblacion = new Poblacion(_individuos); this._poblacion.CantidadIndividuos = 4; }
public PoblacionEventArgs(IPoblacion poblacion) { this.PoblacionResultante = poblacion; }