# ex005-GOAL.mod # Original 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 (motivated from GOAL programming) # # A simple multi-objective optimization problem (p. 281): # C.-L. Hwang & A. S. Md. Masud, Multiple Objective # Decision Making - Methods and Applications, No. 164 in # Lecture Notes in Economics and Mathematical Systems, # Springer, 1979. # ... sets & parameters set I := 1..2; # ... dimension of the problem set J := 1..2; # ... number of objectives 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 # -4 0 # 0 -1 param lz := -4; # ... objective bounds on f1 from pay-off matrix param uz := 0; # ... variables var x{I,K} := 1; # ... original problem variables var z{K} >= lz, <= uz; # ... multi-objective GOALs var u{K}; # ... multipliers of GOAL constraints var eta; var f{j in J,k in K} # ... original problem objectives = if (j == 1) then x[1,k]^2 - x[2,k]^2 else x[1,k] / x[2,k]; 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; # ... first order conditions KKT1{k in K}: 2*u[k]*x[1,k] + x[2,k] complements -1 <= x[1,k] <= 2; KKT2{k in K}: -2*u[k]*x[2,k] - x[1,k]/(x[2,k]^2) complements 1 <= x[2,k] <= 2; GOAL {k in K}: 0 <= u[k] complements f[1,k] <= z[k]; # ... data statement & start points data; # ... 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 let {k in K} z[k] := lz + (k-1)/(nK-1)*(uz-lz) + Uniform01(); display z; # ... NCP model problem NCP: x, u, # variables KKT1, KKT2, GOAL; # constraints # ... MPCC model problem MPCC: min_dist, # objective x, u, f, eta, z, # variables KKT1, KKT2, GOAL, # constraints ubd_eta;