``` MODEL: ! General Equilibrium Model of an economy in LINGO, (GENEQLBM); ! Data based on Kehoe, Math Prog, Study 23(1985); ! Find clearing prices for commodities/goods and equilibrium production levels for processes in an economy; ! Keywords: Equilibrium, General equilibrium, Complementarity constraints; SETS: GOOD: PRICE, H; SECTOR; GXS( GOOD, SECTOR): ALPHA, W; PROCESS: LEVEL, RC; GXP( GOOD, PROCESS): MAKE; ENDSETS DATA: ! There are 4 goods, 4 sectors. In general need not be same; GOOD = 1..4; SECTOR = 1..4; ! Demand curve parameter for each good i & sector j; ALPHA = .5200 .8600 .5000 .0600 .4000 .1 .2 .25 .04 .02 .2975 .0025 .04 .02 .0025 .6875; ! Initial wealth of good i held by sector j; W = 50 0 0 0 0 50 0 0 0 0 400 0 0 0 0 400; PROCESS= 1 2; ! There are two processes to make goods; ! The processes are linear, with amount produced of good i per unit of process j; MAKE = 6 -1 -1 3 -4 -1 -1 -1; ! Weights for price normalization constraint; H = .25 .25 .25 .25; ! Make simple average = 1; ENDDATA !-----------------------; ! Variables: LEVEL(p) = level or amount at which we operate process p. PRICE(g) = equilibrium price for good g. RC(p) = reduced cost of process p = cost of inputs to process p - revenues from outputs of process p, per unit; ! The objective function is optional. Arbitrarily maximize some price; MAX = PRICE(1); ! For each good G must have supply = demand, i.e., initial amount + production = sum over sectors, S, of amount demanded of G at given prices; @FOR( GOOD( G): @SUM( SECTOR( M): W( G, M)) + @SUM( PROCESS( P): MAKE( G, P) * LEVEL( P)) = @SUM( SECTOR( S): ALPHA( G, S) * @SUM( GOOD( I): PRICE( I) * W( I, S))/ PRICE( G)); ); ! Each process at best breaks even, RC is constrained >= 0; @FOR( PROCESS( P): RC(P) = @SUM( GOOD( G): - MAKE( G, P) * PRICE( G)); ! Complementarity constraint to enforce that if process does not break even(RC > 0), then do not use it. Also, if use it, then RC = 0; RC(P)*LEVEL(P) = 0; ); ! Prices scale to 1. otherwise there is an infinity of solutions; @SUM( GOOD( G): H( G) * PRICE( G)) = 1; END ```