# hs05x-SUM1.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 SUM (find convex sum representation) # with one weight == 1 # # 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 # ... variables var x{I,K}; var y{J,K}; # multiliers var w{J0,K} >= 0; # ... multi-objective weights #var eta{J}; 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}: w[1,k]*(2*(x[1,k]-x[2,k])) + w[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}: w[1,k]*(-2*(x[1,k]-x[2,k]) + 2*(x[2,k]+x[3,k]-2)) + w[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}: w[1,k]*( 2*(x[2,k]+x[3,k]-2)) + w[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}: w[1,k]*(8*(2*x[4,k]-1)) + w[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}: w[1,k]*(2*( x[5,k]-1)) + w[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; # ... data statement & start points data; 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; # ... generate uniform distribution of weights fix {k in K} w[1,k] := Uniform01()*3; fix {k in K} w[2,k] := Uniform01()*5; display w; # ... NCP model problem NCP: x, y, # variables c1, c2, c3, KKT1, KKT2, KKT3, KKT4, KKT5; # constraints unfix {k in K} w[1,k]; unfix {k in K} w[2,k]; # ... MPCC model problem MPCC: min_dist, # objective x, y, f, eta, w, # variables c1, c2, c3, KKT1, KKT2, KKT3, KKT4, KKT5, # constraints ubd_eta;