Ejemplo n.º 1
0
        private void AddListaCarateristicas(SolutionTS parSolucion, int parIteracion)
        {
            // 1. Obtener el vector solución
            int[] dimensiones = parSolucion.GetDimensiones();

            // 2. Obtener las características imersas o unos dentro de la solución sus dimensiones???
            for (var i = 0; i < dimensiones.Length; i++)
            {
                if (dimensiones[i] == 1 && !EstaCaracteristica(i))
                {
                    Caracteristica objCaracteristica = new Caracteristica(i, parIteracion);
                    //3. Guardar en la lista Tabú
                    _atrListaTabu.Add(objCaracteristica);
                }
            }
        }
Ejemplo n.º 2
0
        public override void Ejecutar(Knapsack parProblema, Random myRandom)
        {
            //Revisar bien
            RetoqueParametros(parProblema);
            EFOs = 0;
            // Solución inicial
            var s = new SolutionTS(parProblema, this);

            s.RandomInitialization(myRandom);
            // Mejor solución
            BestSolution = new SolutionTS(s);
            // Se agrega la MejorSolucion a la lista Tabú
            _atrListaTabu.Enqueue(BestSolution);

            while (EFOs < MaxEFOs && !BestSolution.IsOptimalKnown())
            {
                if (_atrListaTabu.Count >= MaxLongituLitaTabu)
                {
                    _atrListaTabu.Dequeue();
                }

                var r = new SolutionTS(s);
                r.Tweak(myRandom);
                for (var i = 0; i < AtrNumeroTweaks - 1; i++)
                {
                    var w = new SolutionTS(s);
                    w.Tweak(myRandom);
                    if (!PerteneceListaTabu(w) && (w.Fitness > r.Fitness || PerteneceListaTabu(r)))
                    {
                        r = w;
                    }
                    if (EFOs >= MaxEFOs || r.IsOptimalKnown())
                    {
                        break;
                    }
                }
                if (!PerteneceListaTabu(r) && r.Fitness > s.Fitness)
                {
                    s = r;
                    _atrListaTabu.Enqueue(r);
                }
                if (s.Fitness > BestSolution.Fitness)
                {
                    BestSolution = new SolutionTS(s);
                }
            }
        }
Ejemplo n.º 3
0
        public override void Ejecutar(Knapsack parProblema, Random myRandom)
        {
            RetoqueParametros(parProblema);
            EFOs = 0;
            // Solución inicial
            var s = new SolutionTS(parProblema, this);

            s.RandomInitialization(myRandom);
            BestSolution = new SolutionTS(s);
            // Agrego la Mejor solución a la lista Tabú
            AddListaCarateristicas(s, AtrIteracionActual = 0);
            while (EFOs < MaxEFOs && !BestSolution.IsOptimalKnown())
            {
                AtrIteracionActual++;
                // Remover de la lista Tabú todas las tublas en la iteracion c - d > l
                DeleteListaCaracteristicas();
                var r = new SolutionTS(s);
                //R.Tweak(myRandom, pm, radio, this.atrListaTabu);
                r.Tweak(myRandom, _atrListaTabu);
                for (var i = 0; i < AtrNumeroTweaks - 1; i++)
                {
                    var w = new SolutionTS(s);
                    //W.Tweak(myRandom, pm, radio,atrListaTabu);
                    w.Tweak(myRandom, _atrListaTabu);
                    if (w.Fitness > r.Fitness)
                    {
                        r = w;
                    }
                    if (EFOs >= MaxEFOs || r.IsOptimalKnown())
                    {
                        break;
                    }
                }
                s = r;
                AddListaCarateristicas(s, AtrIteracionActual);
                if (s.Fitness > BestSolution.Fitness)
                {
                    BestSolution = new SolutionTS(s);
                }
            }
        }