diff --git a/Codigos Xpress/VarepsilonConstraintMaxMCLP.mos b/Codigos Xpress/VarepsilonConstraintMaxMCLP.mos index 9500cf3a30dcd8b7c4eea25fbe8942d3eb4fc931..ed404065eb384b54878499a7247bf20987103ba6 100644 --- a/Codigos Xpress/VarepsilonConstraintMaxMCLP.mos +++ b/Codigos Xpress/VarepsilonConstraintMaxMCLP.mos @@ -8,9 +8,9 @@ uses "mmive" !) declarations m,n, p, r:integer - archivo_datos = "instancesMOFLP/instances/large1.txt" ! formato_datos = 3 + !archivo_datos = "instancesMOFLP/instances/large1.txt" ! formato_datos = 3 !archivo_datos = "municipios/archivo_salida.txt" - !archivo_datos = "municipios/archivo_cyl.txt" + archivo_datos = "municipios/archivo_cyl.txt" !archivo_datos = "municipios/archivo_esp.txt" ! algo más de 800 segundos la primera (es la más importante) formato_datos = 3 end-declarations @@ -42,7 +42,7 @@ declarations dem:array(pdemanda)of real a:array(pdemanda,pservicio)of integer dc=r - tam = 1000 + tam = 50000 Pn : array(1..tam, 1..2) of real y: array(pdemanda) of mpvar u: array(pdemanda) of mpvar @@ -105,8 +105,8 @@ fclose(F_INPUT) Comienzo maximizando el primer criterio (MCLPR) !) !setparam("XPRS_MAXTIME",-100) -obj := sum(j in pdemanda) u(j) -!obj := sum(j in pdemanda) dem(j)*u(j) +!obj := sum(j in pdemanda) u(j) +obj := sum(j in pdemanda) dem(j)*u(j) forall(i in pdemanda) res1(i):= sum(j in pservicio)x(j)*a(i,j) >= 2*u(i) forall(i in pdemanda) res2(i):= sum(j in pservicio)x(j)*a(i,j)>= y(i) @@ -124,9 +124,9 @@ writeln("La solucion optima es\t", varep) n := 1 ! Busco para el otro criterio (MCLP) la solucion optima, si pongo como restriccion que el MCLPR sea el maximo anteiror -obj2 := sum(i in pdemanda) y(i) - -res4 := sum(i in pdemanda) u(i) >= varep +!obj2 := sum(i in pdemanda) y(i) +obj2 := sum(j in pdemanda) dem(j)*y(j) +res4 := sum(i in pdemanda) u(i)*dem(i) >= varep maximize(obj2) @@ -153,7 +153,7 @@ end-do res4 := 0 ! nos aseguramos de no arrastrar una restriccion previa maximize(obj2) -res4:= sum(i in pdemanda) y(i) >= getobjval +res4:= sum(i in pdemanda) y(i)*dem(i) >= getobjval maximize(obj) @@ -170,10 +170,10 @@ while(varepIter <= varep)do n := n+1 ! Encontrar la solucion optima para MCLP imponiendo como restriccion que el MCLPR sea varepIter - obj := sum(j in pdemanda) y(j) - !obj := sum(j in pdemanda) dem(j)*y(j) + !obj := sum(j in pdemanda) y(j) + obj := sum(j in pdemanda) dem(j)*y(j) - res4 := sum(i in pdemanda) u(i) >= varepIter + res4 := sum(i in pdemanda) u(i)*dem(i) >= varepIter forall(i in pdemanda) y(i) is_binary forall(j in pservicio) x(j) is_binary @@ -191,19 +191,21 @@ while(varepIter <= varep)do ! COMIENZO de una cosa nueva para quitar iteraciones de dominados (que no se hagan) maxIterMCLP := getobjval - res4 := sum(i in pdemanda) y(i) >= maxIterMCLP - obj := sum(j in pdemanda) u(j) - + res4 := sum(i in pdemanda) y(i)*dem(i) >= maxIterMCLP + !obj := sum(j in pdemanda) u(j) + obj := sum(j in pdemanda) dem(j)*u(j) maximize(obj) ! FIN de una cosa nueva para quitar iteraciones de dominados (que no se hagan) - - Pn(n,2) := getobjval + if(getobjval > varepIter) then + varepIter := getobjval + end-if + Pn(n,2) := varepIter Pn(n,1) := maxIterMCLP + writeln("MCLP = ", maxIterMCLP, "\tMCLPR = ", varepIter," getobjval ", getobjval) + - varepIter := getobjval - writeln("MCLP = ", maxIterMCLP, "\tMCLPR = ", varepIter) indR := 1 forall(indiceRellenar in pservicio | x(indiceRellenar).sol = 1) do psAbiertos(n, indR) := indiceRellenar