# ex002-SUM.mod # Original AMPL coding by Sven Leyffer, Argonne National Laboratory # # MPEC formulation of MOOP ex002.mod # Convex combination SUM formulation # # Solve |nK| NLPs of the form # # minimize sum w_p f_p(x) # subject to c(x) <= 0 # # for weights w_p >= 0, sum w_p = 1. Aim is to find |nK| # points whose min distance (eta) is maximized (in objective space). # ... definition of sets param nK integer, >= 0, default 10; # ... number of efficient points set I := 1..3; # ... index to variables set J := 1..2; # ... index to different objectives set K := 1..nK; # ... index to efficient points set KxK within K cross K; # ... pairs for cross distances # ... definition of parameters param xl{I} default 0.0; # ... lower bounds param xu{I} default 10.0; # ... upper bounds # ... control or upper level variables var w {J, K} >= 0; # ... multi-objective weights var eta >= 0; # ... minimum dist between efficient points # ... variables (in orginal problem, 1 set per eff_point) var x {I, K}; var y12 {K}; var y21 {K}; # ... objective values var f {j in J, k in K} = if (j==1) then x[2,k]^2 + x[3,k] + y12[k] else - y21[k]; # ... multipliers for MPEC formulation var l_y12 {K}; # .. mult. for def_y12 var l_y21 {K}; # .. mult. for def_y21 # ... objective function maximize min_dist: eta; subject to # ... convex combination constraint of weights conv_comb {k in K}: sum{j in J} w[j,k] = 1; # ... order constraints: avoid coalescing weights order {k in K diff {nK}}: w[1,k] <= w[1,k+1]; # ... 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; # ... equality constraints def_y12 {k in K}: y12[k] = x[1,k]^2 + x[2,k] + x[3,k] - 0.2*y21[k] complements l_y12[k]; def_y21 {k in K}: y21[k] = x[1,k] + x[3,k] + sqrt( y12[k] ) complements l_y21[k]; # ... first order optimality conditions KKT_x1 {k in K}: - l_y12[k]*2*x[1,k] - l_y21[k] complements xl[1] <= x[1,k] <= xu[1]; KKT_x2 {k in K}: w[1,k]*2*x[2,k] - l_y12[k] complements xl[2] <= x[2,k] <= xu[2]; KKT_x3 {k in K}: w[1,k] - l_y12[k] - l_y21[k] complements xl[3] <= x[3,k] <= xu[3]; KKT_y12 {k in K}: 0 <= w[1,k] + l_y12[k] - l_y21[k]*0.5/sqrt(y12[k]) complements y12[k] >= 8; KKT_y21 {k in K}: 0 >= -w[2,k] + l_y12[k]*0.2 + l_y21[k] complements 10 - y21[k] >= 0; # ... data statement & start points data; let xl[1] := -10.0; let nK := 10; # ... definition of cross distance indices let KxK := { }; for {k1 in {2..nK}}{ let {k2 in {1..k1-1}} KxK := KxK union { (k1,k2) }; }; #display KxK; # ... generate uniform distribution of weights let {k in K} w[1,k] := 0.55 + k/nK*0.45; let {k in K} w[2,k] := 1-w[1,k]; display w; # ... NCP model problem NCP: x, y12, y21, l_y12, l_y21, # variables def_y12, def_y21, # constraints KKT_x1, KKT_x2, KKT_x3, KKT_y12, KKT_y21; # ... MPCC model problem MPCC: min_dist, # objective x, y12, y21, l_y12, l_y21, w, f, eta, # variables def_y12, def_y21, # constraints KKT_x1, KKT_x2, KKT_x3, KKT_y12, KKT_y21, conv_comb, ubd_eta, order;