コード例 #1
0
ファイル: BMB.cs プロジェクト: juliofgx17/Metaheuristicas-UNI
        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;
        }
コード例 #2
0
        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);
                    }
                }
            }
        }