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; }
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._individuo1 = MockRepository.GenerateMock<IIndividuo>(); this._individuo1.Expect(e => e.Cromosoma).Return(new Cromosoma(genes1)).Repeat.Any(); 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._individuo2 = MockRepository.GenerateMock<IIndividuo>(); this._individuo2.Expect(e => e.Cromosoma).Return(new Cromosoma(genes2)).Repeat.Any(); 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._individuo3 = MockRepository.GenerateMock<IIndividuo>(); this._individuo3.Expect(e => e.Cromosoma).Return(new Cromosoma(genes3)).Repeat.Any(); 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._individuo4 = MockRepository.GenerateMock<IIndividuo>(); this._individuo4.Expect(e => e.Cromosoma).Return(new Cromosoma(genes4)).Repeat.Any(); this._individuos = new List<IIndividuo>() { this._individuo1, this._individuo2, this._individuo3, this._individuo4 }; this._poblacion = new Poblacion(_individuos); }
private void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { IPoblacion poblacionInicial = null; poblacionInicial = new Poblacion(this.GenerarPoblacionInicial()); poblacionInicial.CantidadIndividuos = (int)nudCantidadPoblacion.Value; IFuncionFitness funcionFitness = null; if (rdbFitnessCasillerosAmenazados.Checked) funcionFitness = new SumatoriaAmenazasFitness(); if (rdbFitnessCasillerosLibres.Checked) funcionFitness = new CasillerosSinAmenzasFitness(); if (rdbFitnessReinasVivas.Checked) funcionFitness = new TableroFitness(); IOperadorSeleccion operadorSeleccion = null; var parametrosOperadorSeleccion = new ParametrosSeleccion() { CantidadIndividuosASeleccionar = (int)nudCantidadSeleccionada.Value, FuncionFitness = funcionFitness }; if (rdbSeleccionTorneo.Checked) operadorSeleccion = new OperadorSeleccionPorTorneo(parametrosOperadorSeleccion); if (rdbSeleccionRanking.Checked) operadorSeleccion = new OperadorSeleccionRanking(parametrosOperadorSeleccion); IOperadorCruzamiento operadorCruzamiento = null; var parametrosOperadorCruzamiento = new ParametrosCruzamiento() { Mascara = txtMascara.Text, }; if (rdbCruzarAzar.Checked) operadorCruzamiento = new OperadorCruzamientoAzar(parametrosOperadorCruzamiento); if (rdbMascara.Checked) operadorCruzamiento = new OperadorCruzamientoMascara(parametrosOperadorCruzamiento); IOperadorMutacion operadorMutacion = null; var parametrosMutacion = new ParametrosMutacion() { ProbabilidadMutarPoblacion = (int)nudProbabilidadMutacion.Value, IndiceMutacion = (int)nudIndiceMutacion.Value, }; operadorMutacion = new OperadorMutacionConstante(parametrosMutacion); IOperadorCorte operadorCorte = null; var parametrosCorte = new ParametrosCorte() { //OJO! Hago que corte siempre por cantidad de reinas, ya que no se puede mejorar mas... // FuncionFitness = funcionFitness, FuncionFitness = new TableroFitness(), UmbralCorte = (int)nudUmbralCorte.Value, LimiteIteraciones = (int)nudLimiteVueltas.Value }; operadorCorte = new OperadorCorteSimple(parametrosCorte); this.analisis = new OperadorAnalisisPoblacion(new ParametrosAnalisisPoblacion() { Funcion = funcionFitness, FuncionReinas = new TableroFitness()}); IAlgoritmoGenetico algoritmo = new AlgoritmoGenetico(poblacionInicial, operadorSeleccion, operadorCruzamiento, operadorMutacion, operadorCorte, this.IteracionCancelada); IParametros parametros = new Parametros() { IntervaloPorVuelta = (int)nudIntervaloVuelta.Value, }; algoritmo.IteracionTerminada += algoritmo_IteracionTerminada; var poblacionFinal = algoritmo.Ejecutar(parametros); this.AnalizarPoblacion(poblacionFinal); }