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); } } }
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); } } }