###################################################################### # EPEC-NLP.mod QLR-AN-LCP-v-v-v # # NLP penalty formulation of random EPEC generated by matlab. # Sven Leyffer, Argonne National Laboratory, December 2004. # # Each leader of the EPEC with random data is of the form # # minimize 0.5*x^T G_L*x + g_L^T x # x_L >= 0 # # subject to A_L x_L <= b_L # 0 <= y _|_ N x + M y + q >= 0 # ###################################################################### # ... dimensions of the problem param l integer; # ... number of leaders param m integer; # ... number of states y param n integer; # ... number of controls x param p integer; # ... number of control constraints # ... sets of indices set LL := 1..l; set MM := 1..m; set NN := 1..n; set PP := 1..p; # ... some useful sets & parameters set NxL := NN cross LL; set NL := 1..(n*l); param imap{i in NN, j in LL} := i + (j-1)*n; # ... maps NxL -> NL # ... random data (initialized to zero for sparse problems) param G{NL,NL,LL} default 0; # ... leaders' objective param g{NL,LL} default 0; param A{PP,NN,LL} default 0; # ... leaders' constraints: A x <= b param b{PP,LL} default 0; param N{MM,NL} default 0; # ... followers' LCP: N x + M y + q >= 0 param M{MM,MM} default 0; param q{MM} default 0; # ... variables var x{NN,LL} := 1; # ... leader l's variables x[:,l] var y{MM} := 0; # ... followers' variables # ... slacks for LCP Lower level constraint var s{MM} := 0; # ... multipliers for KKT conditions of leaders var lambda{PP,LL} >= 0; # ... mult. of A_L x_L <= b_L var mu{NN,LL} >= 0; # ... mult. of x >= 0 var nu{MM,LL} >= 0; # ... mult. of y >= 0 (one for each leader) var omega{MM,LL}; # ... mult. of s = N*x + ... ( sa ) var sigma{MM,LL} >= 0; # ... mult. of s >= 0 ( sa ) var xi{MM,LL} >= 0; # ... mult. of Y*s <= 0 ( sa ) # ... additional slack for complementarity of leaders' constraints var sA{PP,LL} >= 0; # ... leaders' objective minimize l1penalty: sum{k in PP, i in LL} sA[k,i]*lambda[k,i] + sum{j in NN, i in LL} x[j,i]*mu[j,i] + sum{j in MM, i in LL} s[j]*sigma[j,i] + sum{j in MM, i in LL} y[j]*nu[j,i] + sum{j in MM} y[j]*s[j]; subject to # ... FO conds wrt x: G_{LL} x + g_{LL} + A_L^T lambda_L - mu_L - N_L^T omega_L = 0 KKTx{j in NN,i in LL}: sum{(i1,l1) in NxL} G[imap[j,i],imap[i1,l1],i]*x[i1,l1] + g[imap[j,i],i] + sum{k in PP} A[k,j,i]*lambda[k,i] - mu[j,i] - sum{k in MM} N[k,imap[j,i]]*omega[k,i] = 0; # ... FO conditions wrt y: - nu_L - M^T omega_L + S*xi_L = 0 KKTy{j in MM, i in LL}: - nu[j,i] - sum{k in MM} M[k,j]*omega[k,i] + s[j]*xi[j,i] = 0; # ... FO conditions wrt s: omega_L - sigma_L + Y*xi_L = 0 KKTs{j in MM, i in LL}: omega[j,i] - sigma[j,i] + y[j]*xi[j,i] = 0; # ... leaders' constraints cons{k in PP, i in LL}: sA[k,i] = b[k,i] - sum{j in NN} A[k,j,i]*x[j,i]; # ... leaders' lower bounds boundx{j in NN, i in LL}: 0 <= x[j,i]; # ... definition of slacks slack{j in MM, i in LL}: s[j] = sum{(i1,l1) in NxL} N[j,imap[i1,l1]]*x[i1,l1] + sum{k in MM} M[j,k]*y[k] + q[j]; # ... followers' bounds bounds{j in MM, i in LL}: 0 <= s[j]; # ... followers' bounds boundy{j in MM, i in LL}: 0 <= y[j];