$title H-MED sets i nodes of demand /1*25/ k(i) nodes that can be HUB /2,5,6,7,10,15,17,19,21,22,25/ xp(k)/2,7,15,22,25/ ; alias(i,j) ; alias(k,m) ; parameter alfa discount factor /0.6/ c(i,j) transporttion cost w(i,j) total flow p number of leader hubs /2/ r number of follower hubs /2/ ebs ebsilon /0.0000000000001/ bigM bigM /9999999999999/ ; table c(i,j) $call =xls2gms r=a1:f6 i=c.xls o=sett.inc $include sett.inc ; table w(i,j) $call =xls2gms r=a1:f6 i=w.xls o=sett.inc $include sett.inc ; variable fh(k) follower hub nodes for follower fu(i,j,k) if flow from i to j visit hub k as the first hub for follower fv(i,j,k) if flow from i to j visit hub k as the second hub for follower lh(k) leader hub nodes for leader lu(i,j,k) if flow from i to j visit hub k as the first hub for leader lv(i,j,k) if flow from i to j visit hub k as the second hub for leader a(i,j) if flow from i to j is captured by follower b(i,j) the servise level provide by leader y(i,j) the servise level provide by follower zf objective function of follower zl objective function of leader ; binary variable fh(k) ; binary variable fu(i,j,k) ; binary variable fv(i,j,k) ; binary variable lh(k) ; binary variable lu(i,j,k) ; binary variable lv(i,j,k) ; binary variable a(i,j) ; equations four five six(i,j) seven(i,j) eight(i,j,k) nine(i,j,m) ten(i,j,k) twelve thirteen forteen fifteen sixteen seventeen eighteen nineteen twenty ; four.. zf =e= sum((i,j,k) , w(i,j)* fv(i,j,k)) ; five.. sum(k , fh(k)) =e= r ; six(i,j).. sum(k , fu(i,j,k)) =e= 1 ; seven(i,j).. sum(m , fv(i,j,m)) =l= 1 ; eight(i,j,k).. fu(i,j,k) =l= fh(k) ; nine(i,j,m).. fv(i,j,m) =l= fh(m) ; ten(i,j,m).. sum(k , fu(i,j,k)*(c(i,k) + alfa*c(k,m)) + c(m,j)) - b(i,j) + ebs =l= (1 - fv(i,j,m)) * bigM ; twelve .. zl =e= sum((i,j) , w(i,j)* a(i,j)) ; thirteen .. sum(k , lh(k)) =e= p ; forteen(i,j) .. sum(k , lu(i,j,k)) =e= 1 ; fifteen(i,j).. sum(m , lv(i,j,m)) =e= 1 ; sixteen(i,j,k).. lu(i,j,k) =l= lh(k) ; seventeen(i,j,m).. lv(i,j,m) =l= lh(m) ; eighteen(i,j,m).. b(i,j) =g= sum(k , lu(i,j,k)*(c(i,k) + alfa*c(k,m))) + lv(i,j,m)*c(m,j) ; nineteen(i,j).. b(i,j) - y(i,j) =l= a(i,j) * bigM ; twenty(i,j).. y(i,j) =e= sum((k,m) , fu(i,j,k)*c(i,k) + fu(i,j,k)*fv(i,j,m)*alfa*c(k,m) + fv(i,j,m)*c(k,j)) ; model H_CEN /all/ ; $onecho > "%emp.info%" bilevel lu lv lh a b max zf fu fv fh y four five six seven eight nine ten twenty $offecho solve H_CEN using emp minimizing zl ; display zl.l , lh.l , lv.l , lu.l ;