コード例 #1
0
        public void CruzamientoSimpleTest()
        {
            IOperadorCruzamiento operador = new OperadorCruzamientoMascara(_parametrosCruzamientoSimple);

            var poblacionFinal = operador.Cruzar(this._poblacion);

            Assert.AreEqual(_individuos.Count, poblacionFinal.PoblacionActual.Count);
        }
コード例 #2
0
        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);
        }