# ABC-comp-GOAL.mod # Original AMPL coding by Sven Leyffer, Argonne Natl. Lab. # # MPEC formualtion of MOOP using GOAL programming # # A simple multi-objective optimization problem (p. 79f): # 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. # # ... model modified to give meaningful MOOP. # # Formulation of MOOP for finding optimal representation of # Pareto surface using MPECs # ... parameters param nK default 10; # ... maximum number of pareto points set K := 1..nK; # ... number of pareto points set KxK within K cross K; # ... pairs for cross distances # pay-off matrix: # f1 f2 # 17.9643 -5 # 65.0969 -11.6932 param lz := -11.6932; param uz := -5; # ... primal variables var x1{K}; # ... product 1 in tons/day var x2{K}; # ... product 2 in tons/day var z{K} >= lz, <= uz; # ... GOALs var u{K}; # ... GOAL constraint multipliers var eta; # ... minimum distance between Pareto points var f1{k in K} # ... objective function # 1 = (x1[k]-4)^2 + x2[k]^2 + 5*x1[k] + 4*x2[k] - x1[k]*x2[k]; var f2{k in K} # ... objective function # 2 = - x1[k] - 2*x2[k]; # ... Lagrange multipliers var prof{K}; var labr{K}; var prod{K}; maximize min_dist: eta; # ... constraints subject to # ... definition of eta (all cross distances in objective space) ubd_eta {(k1,k2) in KxK}: eta <= (f1[k1] - f1[k2])^2 + (f2[k1] - f2[k2])^2 ; # ... original constraints & complementarity profit{k in K} : x1[k]*x2[k] >= 3 complements prof[k] >= 0; labor{k in K} : -5*x1[k] - 4*x2[k] >= -25 complements labr[k] >= 0; product{k in K}: x1[k] + 2*x2[k] >= 5 complements prod[k] >= 0; # ... KKT conditions KKT_x1 {k in K}: 0 <= (2*(x1[k]-4) + 5 - x2[k]) + u[k]*(-1) - prof[k]*x2[k] + labr[k]*5 - prod[k] complements x1[k] >= 0; KKT_x2 {k in K}: 0 <= (2*x2[k] + 4 - x1[k]) + u[k]*(-2) - prof[k]*x1[k] + labr[k]*4 - prod[k]*2 complements x2[k] >= 0; GOAL{k in K}: 0 <= u[k] complements f2[k] <= z[k]; 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; # ... distribute the payoff levels let {k in K} z[k] := lz + (k-1)/(nK-1)*(uz-lz) + (nK-k)*Uniform01(); display z; # ... NCP model problem NCP: x1, x2, prof, labr, prod, u, f1, f2, # variables profit, labor, product, KKT_x1, KKT_x2, GOAL; # constraints # ... MPCC model problem MPCC: min_dist, # objective x1, x2, prof, labr, prod, eta, # variables z, u, f1, f2, profit, labor, product, KKT_x1, KKT_x2, GOAL, # constraints ubd_eta;