# hs05x-GOAL.mod # AMPL coding by Sven Leyffer, Argonne National Laboratory # # MPEC formulation of multi-objective ex005 problem. # Aim is to find a good description of the Pareto set. # # Formulation GOAL (dfrom GOAL programming) # # A simple multi-objective optimization problem (MOOP) # constructed from Hock-Schittkowsky models hs051-hs053 # of Bob Vanderbei's cute-ampl collection. # ... sets & parameters set I := 1..5; set J := 1..3; # ... number of objectives set J0:= 1..2; # ... number of weights param nK # ... number of efficient points integer, >= 0, default 10; set K := 1..nK; # ... index to efficient points set KxK within K cross K; # ... pairs for cross distances # pay-off matrix # f1 f2 f2 # 0.140496 22.5603 29.0032 # 10.9586 9.26331 28.8794 # 14.2853 160.158 20.8421 param lz{J0}; param uz{J0}; # ... variables var x{I,K}; var y{J,K}; # ... multiliers var z{j in J0,K} >= lz[j], <= uz[j]; # ... multi-objective GOAL var u{J0,K}; # ... multipliers of GOAL constraints var eta; # ... objective functions var f{j in J,k in K} = if (j == 1) then ( x[1,k]-x[2,k])^2 + (x[2,k]+x[3,k]-2)^2 + (2*x[4,k]-1)^2 + ( x[5,k]-1)^2 else if (j==2) then (4*x[1,k]-x[2,k])^2 + (x[2,k]-x[3,k]-2)^2 + ( x[4,k]-1)^2 + (3*x[5,k]-1)^2 else ( x[1,k]+x[2,k])^2 + (x[2,k]+x[3,k]+2)^2 + ( x[4,k]+1)^2 + ( x[5,k]+1)^2; maximize min_dist: eta; subject to # ... definition of eta (all cross distances in objective space) ubd_eta {(k1,k2) in KxK}: eta <= sum{j in J} (f[j,k1] - f[j,k2])^2; # ... feasibility c1{k in K}: x[1,k] + 3*x[2,k] = 4 complements y[1,k]; c2{k in K}: x[3,k] + x[4,k] - 2*x[5,k] = 0 complements y[2,k]; c3{k in K}: x[2,k] - x[5,k] = 0 complements y[3,k]; # ... first order conditions KKT1{k in K}: u[1,k]*(2*(x[1,k]-x[2,k])) + u[2,k]*(8*(4*x[1,k]-x[2,k])) + (2*(x[1,k]+x[2,k])) - y[1,k] complements -10 <= x[1,k] <= 10; KKT2{k in K}: u[1,k]*(-2*(x[1,k]-x[2,k]) + 2*(x[2,k]+x[3,k]-2)) + u[2,k]*(-8*(4*x[1,k]-x[2,k]) + 2*(x[2,k]-x[3,k]-2)) + (2*(x[1,k]+x[2,k]) + 2*(x[2,k]+x[3,k]+2)) - y[1,k]*3 - y[3,k] complements -10 <= x[2,k] <= 10; KKT3{k in K}: u[1,k]*( 2*(x[2,k]+x[3,k]-2)) + u[2,k]*(-2*(x[2,k]-x[3,k]-2)) + ( 2*(x[2,k]+x[3,k]+2)) - y[2,k] complements -10 <= x[3,k] <= 10; KKT4{k in K}: u[1,k]*(8*(2*x[4,k]-1)) + u[2,k]*(2*( x[4,k]-1)) + (2*( x[4,k]+1)) - y[2,k] complements -10 <= x[4,k] <= 10; KKT5{k in K}: u[1,k]*(2*( x[5,k]-1)) + u[2,k]*(6*(3*x[5,k]-1)) + (2*( x[5,k]+1)) - y[2,k]*(-2) - y[3,k]*(-1) complements -10 <= x[5,k] <= 10; GOAL {j in J0, k in K}: 0 <= u[j,k] complements f[j,k] <= z[j,k]; # ... data statement & start points data; # pay-off matrix # f1 f2 f2 # 0.140496 22.5603 29.0032 # 10.9586 9.26331 28.8794 # 14.2853 160.158 20.8421 param : lz, uz := 1 0.140496 14.2853 2 9.26331 160.1580 ; let nK := 10; # ... definition of cross distance indices let KxK := { }; for {k1 in {1..nK}}{ let {k2 in {1..nK}: k1 <> k2} KxK := KxK union { (k1,k2) }; }; display KxK; # ... distribute the payoff levels fix {k in K} z[1,k] := lz[1] + k/nK*(uz[1]-lz[1]) + Uniform01(); fix {k in K} z[2,k] := lz[2] + k/nK*(uz[2]-lz[2]) + Uniform01(); display z; # ... NCP model problem NCP: x, y, u, f, # variables c1, c2, c3, KKT1, KKT2, KKT3, KKT4, KKT5, # constraints GOAL; unfix z; # ... MPCC model problem MPCC: min_dist, # objective x, y, u, f, eta, z, # variables c1, c2, c3, KKT1, KKT2, KKT3, KKT4, KKT5, # constraints GOAL, ubd_eta;