public BMB(int numMultiarranque, string ruta) { QAP qap = new QAP(ruta); BusquedaLocal bl = new BusquedaLocal(qap); QAP best = bl.ResolverBL(); for (int i = 1; i < numMultiarranque; i++) { qap = new QAP(ruta); bl = new BusquedaLocal(qap); qap = bl.ResolverBL(); if (qap.GetCoste() < best.GetCoste()) { best.SetQAP(qap); } } solucion = best; }
public GRASP(string ruta) { for (int x = 0; x < 25; x++) { potencialDistanciaLocalizaciones.Clear(); potencialFlujoUnidades.Clear(); LCl.Clear(); LCu.Clear(); LRCl.Clear(); LRCu.Clear(); Costes.Clear(); S.Clear(); QAP qap = new QAP(ruta); tamProblema = qap.GetTamProblema(); flujosUnidades = qap.GetFlujosUnidades(); distanciasLocalizaciones = qap.GetDistanciasLocalizaciones(); ResolverPotenciales(potencialFlujoUnidades, potencialDistanciaLocalizaciones); for (int i = 0; i < tamProblema; i++) { LCu.Add(item: new Tuple <int, int>(i, potencialFlujoUnidades[i])); LCl.Add(item: new Tuple <int, int>(i, potencialDistanciaLocalizaciones[i])); } for (int i = 0; i < tamProblema; i++) { localizacionesEnUnidades.Add(-1); } Etapa1(); Etapa2(); localizacionesEnUnidades.Clear(); for (int i = 0; i < tamProblema; i++) { localizacionesEnUnidades.Add(-1); } foreach (Tuple <int, int> s in S) { localizacionesEnUnidades[s.Item1] = s.Item2; } bool error = false; if (localizacionesEnUnidades.Contains(-1)) { error = true; } OptimizacionBL(); if (x == 0) { bestSolution = new QAP(solucion); } else { if (bestSolution.CalcularCoste() > solucion.CalcularCoste()) { bestSolution.SetQAP(solucion); } } } }