# outrata3-MPEC.mod # Original AMPL coding by Sven Leyffer, Argonne National Laboratory, 2004. # # MPEC formulation of ... # # Multi-Leader-Follower Game (MLF)) derived from outrata31-outrata34, # see J. Outrata, SIAM J. Optim. 4(2), pp.340ff, 1994. All Stackelberg # players have the same constraints, but different objectives. # ######################################################################### option presolve 0; #option solver pathampl; #option solver mpec; # ... parameters to give number of leaders param nl integer, default 4; # number of leaders set L := 1..nl; # set of leaders set I := 1..4; # ... useful index set # ... Stackelberg leaders' variables var x{L}; var xa = sum{l in L} x[l] / card(L); # ... Followers' variables var y{I}; var s{I}; # ... multipliers (price consistent) var mu{I,L}; # multipliers of s = F(x,y) constraints var xi{I,L} >= 0; # multipliers of Y s <= 0 var sigma{I,L}; # multipliers of s >= 0 var psi{I,L}; # multipliers of y >= 0 minimize maxmult: sum{i in I, l in L} xi[i,l]; subject to # ... FO conditions of leaders wrt x KKT1x: 0 <= x[1] <= 10 complements 0 - mu[1,1]*( 0.2*y[1] - 1.333 )/card(L) - mu[2,1]*( 0.1*y[2] - 1 )/card(L) - mu[3,1]*(-0.1 )/card(L) - mu[4,1]*0.1/card(L); KKT2x: 0 <= x[2] <= 10 complements 0 - mu[1,2]*( 0.2*y[1] - 1.333 )/card(L) - mu[2,2]*( 0.1*y[2] - 1 )/card(L) - mu[3,2]*(-0.1 )/card(L) - mu[4,2]*0.1/card(L); KKT3x: 0 <= x[3] <= 10 complements 0 - mu[1,3]*( 0.2*y[1] - 1.333 )/card(L) - mu[2,3]*( 0.1*y[2] - 1 )/card(L) - mu[3,3]*(-0.1 )/card(L) - mu[4,3]*0.1/card(L); KKT4x: 0 <= x[4] <= 10 complements 2*x[4] - mu[1,4]*( 0.2*y[1] - 1.333 )/card(L) - mu[2,4]*( 0.1*y[2] - 1 )/card(L) - mu[3,4]*(-0.1 )/card(L) - mu[4,4]*0.1/card(L); # ... FO conditions wrt follower variables KKT_y1{l in L}: psi[1,l] = 2*(y[1]-3) - mu[1,l]*( 1 + 0.2*xa + 2*y[4] ) - mu[3,l]*( 0.333 ) - mu[4,l]*(-2*y[1] ) + xi[1,l]*s[1] ;# complements psi[1,l]; KKT_y2{l in L}: psi[2,l] = 2*(y[2]-4) - mu[2,l]*( 1 + 0.1*xa + 2*y[4] ) - mu[3,l]*(-1 ) - mu[4,l]*(-2*y[2] ) + xi[2,l]*s[2] ;# complements psi[2,l]; KKT1y3: psi[3,1] = 0 - mu[1,1]*( -0.333 ) - mu[2,1] + xi[3,1]*s[3] ;# complements psi[3,1]; KKT2y3: psi[3,2] = 2*(y[3]-1) - mu[1,2]*( -0.333 ) - mu[2,2] + xi[3,2]*s[3] ;# complements psi[3,2]; KKT3y3: psi[3,3] = 0 - mu[1,3]*( -0.333 ) - mu[2,3] + xi[3,3]*s[3] ;# complements psi[3,3]; KKT4y3: psi[3,4] = 2*(y[3]-1) - mu[1,4]*( -0.333 ) - mu[2,4] + xi[3,4]*s[3] ;# complements psi[3,4]; KKT1y4: psi[4,1] = 0 - mu[1,1]*( 2*y[1] ) - mu[2,1]*( 2*y[2] ) + xi[4,1]*s[4] ;# complements psi[4,1]; KKT2y4: psi[4,2] = 0 - mu[1,2]*( 2*y[1] ) - mu[2,2]*( 2*y[2] ) + xi[4,2]*s[4] ;# complements psi[4,2]; KKT3y4: psi[4,3] = 20*y[4] - mu[1,3]*( 2*y[1] ) - mu[2,3]*( 2*y[2] ) + xi[4,3]*s[4] ;# complements psi[4,3]; KKT4y4: psi[4,4] = 2*(y[4]-1) - mu[1,4]*( 2*y[1] ) - mu[2,4]*( 2*y[2] ) + xi[4,4]*s[4] ;# complements psi[4,4]; KKTs{i in I, l in L}: sigma[i,l] = mu[i,l] + xi[i,l]*y[i] ;# complements sigma[i,l]; # ... followers reponse to average of leaders (xa) nlcs1{l in L}: mu[1,l] complements s[1] = (1 + 0.2*xa)*y[1] - (3 + 1.333*xa) - 0.333*y[3] + 2*y[1]*y[4]; nlcs2{l in L}: mu[2,l] complements s[2] = (1 + 0.1*xa)*y[2] - xa + y[3] + 2*y[2]*y[4]; nlcs3{l in L}: mu[3,l] complements s[3] = 0.333*y[1] - y[2] + 1 - 0.1*xa; nlcs4{l in L}: mu[4,l] complements s[4] = 9 + 0.1*xa - y[1]^2 - y[2]^2; # ... complementarity constraints comply{i in I, l in L}: 0 <= y[i] complements psi[i,l] >= 0; compls{i in I, l in L}: 0 <= s[i] complements sigma[i,l] >= 0; complC{i in I}: 0 <= s[i] complements y[i] >= 0; #solve; #display _varname, _var;