Busquemos el comienzo de varepIter para no hacer calculo redundante:
Esto lo hacemos sacando el maximo para MCLP y su correspondiente optimo de Pareto en MCLPR
!)
res4:=0! nos aseguramos de no arrastrar una restriccion previa
maximize(obj2)
res4:=sum(iinpdemanda)y(i)>=getobjval
maximize(obj)
varepIter:=getobjval
(!
Fin Busquemos el comienzo de varepIter
!)
(!
Recorremos todo el espectro de entre varepIter y varep para obtener todas las soluciones de la frontera de pareto
!)
while(varepIter<=varep)do
n:=n+1
! Encontrar la solucion optima para MCLP imponiendo como restriccion que el MCLPR sea varepIter
obj:=sum(jinpdemanda)y(j)
!obj := sum(j in pdemanda) dem(j)*y(j)
res4:=sum(iinpdemanda)u(i)>=varepIter
forall(iinpdemanda)y(i)is_binary
forall(jinpservicio)x(j)is_binary
forall(iinpdemanda)u(i)is_binary
maximize(obj)
! no queremos quedarnos con los puntos dominados
if(getobjval>=Pn(n-1,1)-0.1)then! el menos una decima es necesario por culpa de que getobjval puede que sea un numero mal menos 10 a la menos el limite de XPRESS
n:=n-1
writeln("los datos del de anterior corresponden a un dominado")