cammge.gms : Cameroon General Equilibrium Model Using MPSGE

Description

This is a modified version of gams library model CAMCGE.

This general equilibrium model is widely used as a blueprint
for new model developments. It follows closely the style and type
of model pioneered by devis, de melo and robinson in the late 1970.


Large Model of Types : MPSGE mcp


Category : GAMS Model library


Main file : cammge.gms

$title Cameroon General Equilibrium Model - MPSGE Syntax (CAMMGE,SEQ=140)

$onText
This is a modified version of gams library model CAMCGE.

This general equilibrium model is widely used as a blueprint
for new model developments. It follows closely the style and type
of model pioneered by devis, de melo and robinson in the late 1970.


Condon, T, Dahl, H, and Devarajan, S, Implementing A Computable General
Equilibrium Model on GAMS - the Cameroon Model. Tech. rep., The World
Bank, 1987.

Keywords: mixed complementarity problem, general equilibrium model, GAMS - MPSGE framework,
          economic policy, Cameroonian economy, market equilibrium
$offText

Set
   i     'sectors' / ag_subsist  'food crops'
                     ag_exp_ind  'cash crops'
                     sylvicult   'forestry'
                     ind_alim    'food processing'
                     biens_cons  'consumer goods'
                     biens_int   'intermediate goods'
                     cim_int     'construction materials'
                     biens_cap   'capital goods'
                     construct   'construction'
                     services    'private services'
                     publiques   'public services'        /
   it(i) 'traded sectors'
   lc    'labor categories'  / rural, urban-unsk, urban-skil /;

Alias (i,j);

* -------------------- start benchmark data -------------------------
Parameter wa0(lc) "average wage rates ('79-80 mill cfaf per worker)"
                  / rural 0.11, urban-unsk 0.15678, urban-skil 1.8657 /;

Scalar
   er     "real exchange rate                (unity)" /   0.21  /
   gr0    "government revenue     ('79-80 bill cfaf)" / 179.00  /
   gdtot0 "government consumption ('79-80 bill cfaf)" / 135.03  /
   cdtot0 "private consumption    ('79-80 bill cfaf)" / 947.98  /
   mpsv   "marginal propensity to save       (unity)" / 0.09305 /
   fsav0  "foreign saving      ('79-80 bill dollars)";

Table io(i,j) 'input-output coefficients (unity)'
                ag_subsist  ag_exp_ind  sylvicult   ind_alim  biens_cons
   ag_subsist      0.03046                           0.30266     0.00206
   ag_exp_ind                  0.01518               0.02043     0.01123
   sylvicult                                         0.00243
   ind_alim        0.00341     0.00629               0.03241     0.01234
   biens_cons                                        0.00105     0.05385
   biens_int       0.00676     0.12385    0.02095    0.03794     0.08309
   cim_int         0.00002     0.00025    0.00017    0.11238     0.05095
   biens_cap       0.00041     0.00971    0.02427    0.00931     0.01229
   construct       0.00472     0.00113    0.00318    0.10456     0.01831
   services        0.00375     0.30649    0.26666    0.10100     0.26072
   publiques       0.00022     0.00293    0.00327    0.00536     0.00539

   +             biens_int     cim_int  biens_cap  construct    services
   ag_subsist                                                    0.04120
   ag_exp_ind      0.00669
   sylvicult       0.02106
   ind_alim        0.00503                                       0.00092
   biens_cons      0.00435                                       0.00103
   biens_int       0.23461     0.18289    0.01567    0.14665     0.00929
   cim_int         0.05593     0.27608    0.11722    0.18643     0.00018
   biens_cap       0.05259     0.02053    0.05013    0.02622     0.00389
   construct       0.05302     0.00172    0.00031    0.01457     0.00385
   services        0.23006     0.11793    0.09922    0.13692     0.13728
   publiques       0.00957     0.00486    0.00081    0.00447     0.00219

   +             publiques
   ind_alim        0.01532
   biens_cons      0.00338
   biens_int       0.08466
   construct       0.00394
   services        0.24145;

Table imat(i,j) 'capital composition matrix (unity)'
                 ag_subsist  ag_exp_ind  sylvicult   ind_alim  biens_cons
   ag_subsist       0.23637
   biens_cap        0.59530     0.60608    0.63876    0.60608     0.78723
   construct        0.16833     0.39392    0.36124    0.39392     0.21277

   +              biens_int     cim_int  biens_cap  construct    services
   biens_cap        0.63876     0.63876    0.60608    0.71728     0.17610
   construct        0.36124     0.36124    0.39392    0.28272     0.82390

   +              publiques
   biens_cap        0.17610
   construct        0.82390;

Table wdist(i,lc) 'wage proportionality factors (unity)'
                   rural  urban-unsk  urban-skil
   ag_subsist    1.01890     0.71491
   ag_exp_ind    0.49556     0.34774     0.29222
   sylvicult     3.26280     2.28900     1.92320
   ind_alim      1.45710     1.02230     0.85902
   biens_cons    1.13350     0.79531     0.66829
   biens_int     3.10740     2.18060     1.83230
   cim_int       6.32240     4.43640     3.72770
   biens_cap     2.50350     1.75520     1.47580
   construct     2.92040     2.04920     1.72200
   services      1.40390     0.98502     0.82776
   publiques                 1.32630     1.11460;

Table xle(i,lc) 'employment by sector and labor category (1000 persons)'
                   rural  urban-unsk  urban-skil
   ag_subsist    1654.43   162.89
   ag_exp_ind     399.93    45.50800     5.05700
   sylvicult     7.66200     1.78900      .59700
   ind_alim     12.98900     9.43400     2.35800
   biens_cons   28.34400    37.46200    12.48800
   biens_int    18.33100    16.55300     8.30000
   cim_int       1.45800     1.31700      .66000
   biens_cap     3.11200     2.82000     1.20800
   construct    22.58400    28.46200     7.11600
   services       121.20   125.8        61.96000
   publiques                83.029      32.77100;

Set zzdata
    / m0, e0, xd0, k0, depr, esub, etrn, eta,tm0, te0, itax0, cles, gles, kio, dst0, id /;

Table zz(zzdata,i) 'miscellaneous parameters and initial data'
           ag_subsist  ag_exp_ind  sylvicult  ind_alim  biens_cons  biens_int
   m0          2.461      8.039       0.023    17.961      37.062     138.57
   e0          4.594      125.07      22.337   23.451      5.864      101.33
   xd0         330.48     131.45      29.503   72.024      118.43     284.38
   k0          495.73     170.89      73.76    140.0       236.87     853.13
   depr        0.0246     0.0472      0.0244   0.0144      0.0212     0.0335
   esub        1.5        0.9         0.4      1.25        1.25       0.5
   etrn        1.5        0.9         0.4      1.25        1.25       0.5
   eta         1.0        1.0         1.0      4.0         4.0        4.0
   tm0         0.2205     0.233       0.278    0.3534      0.3826     0.1768
   itax0       0.002      0.191       0.057    0.038       0.096      0.026
   cles        0.2744     0.00445              0.05599     0.14099    0.17738
   kio         0.11       0.09        0.06     0.01        0.04       0.14
   dst0        4.033      3.509       1.025    3.19        7.101      3.494
   id          6.71

   +          cim_int  biens_cap  construct  services  publiques
   m0          49.616     134.72              74.439
   e0          10.501     3.838               81.626
   xd0         34.169     10.298     174.12   615.79     163.98
   k0          102.51     20.6       435.29   769.73     180.36
   depr        0.0335     0.0111     0.0232   0.0637     0.0637
   esub        0.75       0.4        0.4      0.4        0.4
   etrn        0.75       0.4        0.4      0.4        0.4
   eta         4.0        4.0                 4.0
   tm0         0.2633     0.268
   itax0       0.014      0.029      0.034    0.076
   cles                              0.004    0.31921    0.02358
   gles                                                  1.0
   kio         0.02       0.01       0.08     0.34       0.1
   dst0                   0.433
   id                     113.36     138.13;

* -------------------- end of benchmark data -------------------------

* transfer input data into working arrays:
Parameter
   cles(i)   "private consumption shares                      (unity)"
   depr(i)   "depreciation rates                              (unity)"
   dk0(i)    "investment by sector of destination  ('79-80 bill cfaf)"
   dst0(i)   "inventory investment by sector       ('79-80 bill cfaf)"
   dstr(i)   "inventory investment ratios                     (unity)"
   e0(i)     "exports                              ('79-80 bill cfaf)"
   esub(i)   "Armington elasticity of substitution            (unity)"
   eta(i)    "export demand elasticity                        (unity)"
   etrn(i)   "export elasticity of transformation             (unity)"
   gles(i)   "government consumption shares                   (unity)"
   govsav0   "benchmark government savings         ('79-80 bill cfaf)"
   hhsav0    "benchmark private savings            ('79-80 bill cfaf)"
   totsav0   "benchmark total savings"
   indtax0   "benchmark indirect tax revenue       ('79-80 bill cfaf)"
   duty0     "benchmark export tariff revenue      ('79-80 bill cfaf)"
   tariff0   "benchmark import tariff revenue      ('79-80 bill cfaf)"
   id0(i)    "investment by sector of origin       ('79-80 bill cfaf)"
   itax0(i)  "benchmark indirect tax rates                    (unity)"
   k0(i)     "capital stocks by sector             ('79-80 bill cfaf)"
   kio(i)    "investment shares by sector of destination      (unity)"
   ls0(lc)   "labor supplies by category               (1000 persons)"
   m0(i)     "imports                              ('79-80 bill cfaf)"
   pl0(i,lc) "benchmark wage index                            (unity)"
   pwe0(i)   "world market price of exports                   (unity)"
   pwm0(i)   "world market price of imports                   (unity)"
   rk0(i)    "benchmark return to capital                     (unity)"
   te0(i)    "benchmark export duty rates                     (unity)"
   tm0(i)    "benchmark tariff rates                          (unity)"
   x0(i)     "composite good supply                ('79-80 bill cfaf)"
   xd0(i)    "domestic output by sector            ('79-80 bill cfaf)"
   xxd0(i)   "domestic sales by sector             ('79-80 bill cfaf)"
   y0        "benchmark private gdp                ('79-80 bill cfaf)";

cles(i)  = zz("cles",i);
depr(i)  = zz("depr",i);
dst0(i)  = zz("dst0",i);
e0(i)    = zz("e0",i);
esub(i)  = zz("esub",i);
eta(i)   = zz("eta",i);
etrn(i)  = zz("etrn",i);
gles(i)  = zz("gles",i);
id0(i)   = zz("id",i);
itax0(i) = zz("itax0",i);
k0(i)    = zz("k0",i);
kio(i)   = zz("kio",i);
m0(i)    = zz("m0",i);
te0(i)   = zz("te0",i);
tm0(i)   = zz("tm0",i);
xd0(i)   = zz("xd0",i);

* computed coefficients:
dstr(i)   =  dst0(i)/xd0(i);
it(i)     =  yes$m0(i);
ls0(lc)   =  sum(i, xle(i,lc));
pwe0(i)   =  1/((1 + te0(i))*er);
pwm0(i)   =  1/((1 + tm0(i))*er);
xxd0(i)   =  xd0(i) - e0(i);
x0(i)     =  xxd0(i) + m0(i);
rk0(i)    = (xd0(i)*(1 - itax0(i) - sum(j, io(j,i))) - sum(lc, wa0(lc)*wdist(i,lc)*xle(i,lc)))/k0(i);
pl0(i,lc) =  wdist(i,lc);

Parameter chk, mkt(*);
chk = sum(i, kio(i)) - 1;
abort$(abs(chk) > 1.e-6) " investment shares do not sum to unity", kio, chk;

chk = sum(i, cles(i)) - 1;
abort$(abs(chk) > 1.e-6) " consumption shares do not sum to unity", cles, chk;

chk = sum(i, gles(i)) - 1;
abort$(abs(chk) > 1.e-6) " consumption shares do not sum to unity", gles, chk;

* specify foreign savings for consistency with trade levels:
fsav0 = sum(i, pwm0(i)*m0(i) - pwe0(i)*e0(i));
display fsav0;

* government tax revenue:
duty0   = sum(it, te0(it)*e0(it));
indtax0 = sum(i,  itax0(i)*xd0(i));
tariff0 = sum(it, tm0(it)*m0(it)*pwm0(it))*er;
govsav0 = duty0 + indtax0 + tariff0 - gdtot0;

y0 = sum(i, k0(i)*(rk0(i) - depr(i))) + sum((i,lc), wdist(i,lc)*wa0(lc)*xle(i,lc));

hhsav0  = mpsv*y0;
totsav0 = hhsav0 + govsav0 + sum(i, depr(i)*k0(i)) + fsav0*er;
dk0(i)  = kio(i)*(totsav0  - sum(j, dstr(j)*xd0(j)));
mkt(i)  = x0(i) - sum(j, io(i,j)*xd0(j)) - dstr(i)*xd0(i)
                - sum(j, imat(i,j)*dk0(j)) - cles(i)*(1 - mpsv)*y0
                - gles(i)*gdtot0;

mkt("total") = sum(i, mkt(i));

display duty0, indtax0, tariff0, y0, govsav0, hhsav0, totsav0, mkt;

* adjust consumer demand shares for consistency:
Parameter cleschk(i,*);
cleschk(i,"original") = cles(i);
cles(i) = (cles(i)*(1 - mpsv)*y0 + mkt(i))/((1 - mpsv)*y0);
cleschk(i,"revised") = cles(i);
display cleschk, k0, rk0;

* declare exogenous parameters used in counterfactual
* simulations:
Parameter
   tm(i)   'import tariff rate'
   te(i)   'export tariff rate'
   itax(i) 'indirect tax rate'
   pwm(i)  'world market import price'
   pwe(i)  'world market export price';

tm(i)   = tm0(i);
te(i)   = te0(i);
itax(i) = itax0(i);
pwm(i)  = pwm0(i);
pwe(i)  = pwe0(i);

$onText
* the following defines the cameroon model using
* mps/ge "vector syntax".

$MODEL:cameroon
* functions are scaled so that all of the variables
* are equal to unity in the benchmark.
* the counter-factual values of activity levels and prices
* should therefore be interpreted as index values relative
* to the benchmark.

$SECTORS:
   xd(i)           ! domestic and export supply
   x(i)            ! armington aggregation
   dk(i)           ! investment by sector of destination
   m(i)$it(i)      ! imports

$COMMODITIES:
   pfx             ! real exchange rate
   pd(i)           ! domestic supply price
   p(i)            ! price index for armington aggregate
   pe(i)$it(i)     ! export price index
   pm(i)$it(i)     ! import price index
   pl(lc)          ! labor price index
   rk(i)           ! price index for existing capital
   pk(i)           ! price index for new capital
   psav            ! price index for savings transfer

$CONSUMERS:
   hh              ! household
   govt            ! government
   investor        ! savings allocation agent

$AUXILIARY:
   e(i)$it(i)      ! export index
   vexport         ! value of exports
   xdl(i)$dstr(i)  ! inventory demand multiplier

* production function for domestic and export supply:
$PROD:xd(i) t:etrn(i) a:1

* separate output coefficients for sales to domestic
* and export markets:
   o:pd(i)    q:xxd0(i)   a:govt    t:itax(i)
   o:pe(i)    q:e0(i)     a:govt    t:itax(i)

* intermediate inputs:
   i:p(j)     q:(io(j,i)*xd0(i))

* primary factor inputs:
   i:pl(lc)   q:(wa0(lc)*xle(i,lc))  p:pl0(i,lc) a: a:hh t:(wdist(i,lc)-1)
   i:rk(i)    q:(rk0(i)*k0(i))       a:

* armington composite function:
$PROD:x(i) s:esub(i)
   o:p(i)     q:x0(i)
   i:pd(i)    q:xxd0(i)
   i:pm(i)    q:m0(i)

* import and export:
$PROD:m(it)
   o:pm(it)   q:(m0(it))
   i:pfx      q:(pwm(it)*m0(it)*er)   a:govt t:tm(it)

* new capital formation:
$PROD:dk(i)
   o:pk(i)    q:dk0(i)
   i:p(j)     q:(imat(j,i)*dk0(i))

* private households:
$DEMAND:hh s:1
   e:pe(it)   q:(-e0(it))             r:e(it)
   e:pe(it)   q:(-e0(it)*te(it))      r:e(it)
   e:pfx      q:1                     r:vexport
   e:rk(i)    q:(rk0(i)*k0(i))
   e:pk(i)    q:(-depr(i)*k0(i))
   e:pl(lc)   q:(wa0(lc)*ls0(lc))
   d:psav     q:(mpsv*y0)
   d:p(i)     q:(cles(i)*(1 - mpsv)*y0)

* government - public goods demands are fixed.  any
* excess of tax
$DEMAND:govt
   e:p(i)     q:(-gdtot0*gles(i))
   e:pe(it)   q:(e0(it)*te(it))       r:e(it)
   d:psav     q:govsav0

* investor allocates savings among new capital goods
* with fixed budget shares:
$DEMAND:investor  s:1
   e:psav     q:(govsav0 + mpsv*y0)
   e:pfx      q:(fsav0*er)
   e:pk(i)    q:(depr(i)*k0(i))
   e:p(i)     q:(-dstr(i)*xd0(i))     r:xdl(i)
   d:pk(i)    q:dk0(i)

* export demand function (constant elasticity):
$CONSTRAINT:e(i)$it(i)
   e(i) =e= (pfx/pe(i))**eta(i);

* aggregate value of exports:
$CONSTRAINT:vexport
   vexport*pfx =e= er*sum(it, pwe0(it)*e0(it)*e(it)*pe(it));

* store xd level value in auxiliary variable xdl:
$CONSTRAINT:xdl(i)$dstr(i)
   xdl(i) =e= xd(i);

$offText
$hidden     $$$$$$$$ $$$$$$$$  case important under UNIX
$sysInclude mpsgeset CAMEROON

* replicate the benchmark:
e.l(it)   = 1;
vexport.l = sum(it, pwe0(it)*e0(it)*er);
xdl.l(i)  = 1;

* normalize prices using the real exchange rate for comparability
* with test problems camcge and cammcp:
pfx.fx = 1;

* check the benchmark:
cameroon.iterLim = 0;
$hidden  $$$$$$$$$$$$ case important under unix
$include CAMEROON.GEN
solve cameroon using mcp;
cameroon.iterLim = 1000;

* define the same model using gams algebra.
Parameter alpha, lvs, kvs, beta;

Alias (lc, llc);

alpha(i)$(xxd0(i) + e0(i)) = xxd0(i)/(xxd0(i) + e0(i));
lvs(lc,i)$(xd0(i)*(1 - sum(j,io(j,i)))) =  pl0(i,lc)*wa0(lc)*xle(i,lc)
                                        / (xd0(i)*(1 - itax0(i) - sum(j,io(j,i))));
kvs(i)$(xd0(i)*(1 - sum(j,io(j,i)))) = rk0(i)*k0(i)/(xd0(i)*(1 - itax0(i) - sum(j,io(j,i))));
beta(i)$x0(i) = xxd0(i)/x0(i);

Equation
   prf_xd(i)  'zero profit for xd'
   prf_x(i)   'zero profit for x'
   prf_m(i)   'zero profit for m'
   prf_dk(i)  'zero profit for dk'
   income_hh  'income balance for hh'
   income_gov 'income balance for govt'
   income_inv 'income balance for inv'
   mkt_pfx    'supply-demand balance for pfx'
   mkt_pd(i)  'supply-demand balance for pd'
   mkt_p(i)   'supply-demand balance for p'
   mkt_pe(i)  'supply-demand balance for pe'
   mkt_pm(i)  'supply-demand balance for pm'
   mkt_pl(lc) 'supply-demand balance for pl'
   mkt_rk(i)  'supply-demand balance for rk'
   mkt_pk(i)  'supply-demand balance for pk';

prf_xd(i)..
        sum(j, p(j)*io(j,i)) + (1 - sum(j,io(j,i)))
    *  (prod(lc$lvs(lc,i),(pl(lc)*wdist(i,lc)/pl0(i,lc))**lvs(lc,i))*rk(i)**kvs(i))
   =g= (    alpha(i) *(pd(i)*(1 - itax(i))/(1 - itax0(i)))**(1 + etrn(i))
    +  (1 - alpha(i))*(pe(i)*(1 - itax(i))/(1 - itax0(i)))**(1 + etrn(i)))**(1/(1 + etrn(i)));

prf_x(i)..
  (beta(i)*pd(i)**(1 - esub(i)) + (1 - beta(i))*pm(i)**(1 - esub(i)))**(1/(1 - esub(i))) =g= p(i);

prf_m(it)..
   pfx*pwm(it)*er*(1 + tm(it)) =g= pm(it);

prf_dk(i)..
   sum(j, p(j)*imat(j,i)) =g= pk(i);

income_hh..
   hh =e= sum((lc,i)$xle(i,lc),
              (wdist(i,lc) - 1)*xd(i)*wa0(lc)*xle(i,lc)*
              (prod(llc$lvs(llc,i),
              (pl(llc)*wdist(i,llc)/pl0(i,llc))**lvs(llc,i))*
               rk(i)**kvs(i)/(pl(lc)*wdist(i,lc)/pl0(i,lc))))
       +  sum(i,  rk(i)*rk0(i)*k0(i))
       -  sum(i,  pk(i)*depr(i)*k0(i))
       +  sum(lc, pl(lc)*wa0(lc)*ls0(lc));

income_gov..
   govt =e= sum(i, xd(i)*itax(i)*
               (pd(i)**etrn(i)*pd(i)*xxd0(i) + pe(i)**etrn(i)*pe(i)*e0(i))/
               (    alpha(i) *(pd(i)*(1 - itax(i))/(1 - itax0(i)))**(1 + etrn(i)) +
               (1 - alpha(i))*(pe(i)*(1 - itax(i))/(1 - itax0(i)))**(1 + etrn(i)))**
               (etrn(i)/(1 + etrn(i))))
         +  sum(it,  m(it)*pfx*pwm(it)*m0(it)*er*tm(it))
         -  sum(i,   p(i)*gdtot0*gles(i))
         +  sum(it, (pfx/pe(it))**eta(it)*pe(it)*e0(it)*te(it));

income_inv..
   investor =e= govt + mpsv*hh + pfx*fsav0*er
             +  sum(i, pk(i)*depr(i)*k0(i))
             -  sum(i, xd(i)*p(i)*dstr(i)*xd0(i));

mkt_pfx..
       fsav0 + sum(it, pwe0(it)*e0(it)*(pfx/pe(it))**eta(it)*pe(it))/pfx
   =g= sum(it, m(it)*m0(it)*pwm(it));

mkt_pd(i)..
        xd(i)*xxd0(i)*pd(i)**etrn(i)
    /  (     alpha(i) *pd(i)**(1 + etrn(i))
    +  (1  - alpha(i))*pe(i)**(1 + etrn(i)))**(etrn(i)/(1 + etrn(i)))
   =g=  x(i)*xxd0(i)*(p(i)/pd(i))**esub(i);

mkt_p(i)..
   x(i)*x0(i) =g= hh*cles(i)*(1 - mpsv)/p(i) + gdtot0*gles(i)
               +  dstr(i) * xd0(i)*xd(i)
               +  sum(j, io(i,j)  *xd0(j)*xd(j))
               +  sum(j, imat(i,j)*dk0(j)*dk(j));

mkt_pe(it)..
        xd(it)*e0(it)*pe(it)**etrn(it)
    /  (    alpha(it) *pd(it)**(1 + etrn(it))
    +  (1 - alpha(it))*pe(it)**(1 + etrn(it)))**(etrn(it)/(1 + etrn(it)))
   =g=  e0(it)*(pfx/pe(it))**eta(it);

mkt_pm(it)..
   m(it)*m0(it) =g= x(it)*m0(it)*(p(it)/pm(it))**esub(it);

mkt_pl(lc)..
   wa0(lc)*ls0(lc) =g= sum(i$xle(i,lc), xd(i)*wa0(lc)*xle(i,lc)*
                          (prod(llc$lvs(llc,i),
                               (pl(llc)*wdist(i,llc)/pl0(i,llc))**lvs(llc,i))*
                           rk(i)**kvs(i)/(pl(lc)*wdist(i,lc)/pl0(i,lc))));

mkt_rk(i)..
   rk0(i)*k0(i) =g=  xd(i)*rk0(i)*k0(i)
                 *  (prod(llc$lvs(llc,i), (pl(llc)*wdist(i,llc)/pl0(i,llc))**lvs(llc,i))
                                        *  rk(i)**kvs(i)/rk(i));

mkt_pk(i)..
   dk(i)*dk0(i) =g= investor*(dk0(i)/sum(j, dk0(j)))/pk(i);

Model algebraic / prf_xd.xd,    prf_x.x,         prf_m.m, prf_dk.dk,
                  income_hh.hh, income_gov.govt, income_inv.investor,
                  mkt_pfx.pfx,  mkt_pd.pd,       mkt_p.p, mkt_pe.pe, mkt_pm.pm,
                  mkt_pl.pl,    mkt_rk.rk,       mkt_pk.pk /;

* check the mpsge solution using the algebraic formulation:
algebraic.iterLim = 0;
solve algebraic using mcp;
algebraic.iterLim = 2000;

* solve a counterfactual with uniform tariff rates:
tm(i) = 0.15;
$hidden  $$$$$$$$$$$$ case important under unix
$include CAMEROON.GEN
solve cameroon using mcp;

* once more check the mpsge solution using the algebraic formulation:
algebraic.iterLim = 0;
solve algebraic using mcp;