$ontext A lump-sum redistribution can be modeled by including transfers. We modify the program to introduce an auxiliary variable with a rationing constraint that gives each consumer a transfer that makes their incomes to converge. Note that we changed the value of TX for SC1 from -0.5 to -0.3, because when running the model with TX = -0.5 there is no solution (the model is infeasible). $offtext SCALAR TX Ad-valorem tax rate for X sector inputs /0/; $ONTEXT $MODEL:M1_6AS $SECTORS: X ! Activity level for sector X Y ! Activity level for sector Y WA ! Welfare index for consumer A WB ! Welfare index for consumer B $COMMODITIES: PX ! Price index for commodity X PY ! Price index for commodity Y PL ! Price index for primary factor L PK ! Price index for primary factor K PWA ! Price index for consumer A welfare (expenditure function) PWB ! Price index for consumer B welfare (expenditure function) $CONSUMERS: CONSA ! Income level for consumer A CONSB ! Income level for consumer B * Declare an auxiliary variable to compute automatically the * transfer from CONSA to CONSB $AUXILIARY: TRNATB ! Implied transfer from A to B $PROD:X s:1 O:PX Q:100 I:PL Q: 40 A:CONSA T:TX A:CONSB T:TX I:PK Q: 60 A:CONSA T:TX A:CONSB T:TX $PROD:Y s:1 O:PY Q:100 I:PL Q: 60 I:PK Q: 40 $PROD:WA s:1 O:PWA Q:100 I:PX Q:25 I:PY Q:75 $PROD:WB s:1 O:PWB Q:100 I:PX Q:75 I:PY Q:25 $DEMAND:CONSA D:PWA Q:100 E:PL Q:-1 R:TRNATB E:PL Q: 90 E:PK Q: 10 $DEMAND:CONSB D:PWB Q:100 E:PL Q:1 R:TRNATB E:PL Q: 10 E:PK Q: 90 $CONSTRAINT:TRNATB CONSB =E= CONSA; $OFFTEXT $SYSINCLUDE mpsgeset M1_6AS M1_6AS.ITERLIM = 2000; *------ TX as the sole redistributive instrument: * Fix transfers equal to zero: TRNATB.FX = 0; SET SC Scenarios /SC1*SC5/; PARAMETER TXVALUE(SC) Values of TX by scenario /SC1 -0.3, SC2 -0.1, SC3 0, SC4 0.1, SC5 0.5 /, WELFARE Welfare index by scenario; LOOP(SC, * Install a tax rate for the current scenario: TX = TXVALUE(SC); $INCLUDE M1_6AS.GEN SOLVE M1_6AS USING MCP; * Extract solution values: WELFARE("UPF",SC,"A") = WA.L; WELFARE("UPF",SC,"B") = WB.L; ); *------ LUMP-SUM redistribution: * Include transfers and allow them to be negative (transfers * from B to A) TRNATB.LO = -INF; TRNATB.UP = +INF; LOOP(SC, * Install a tax rate for the current scenario: TX = TXVALUE(SC); $INCLUDE M1_6AS.GEN SOLVE M1_6AS USING MCP; * Extract solution values: WELFARE("UPF_LUMP",SC,"A") = WA.L; WELFARE("UPF_LUMP",SC,"B") = WB.L; ); DISPLAY WELFARE;