```\$title	Applying an Import Quota in a Small Open Economy

scalar	Quota	Import quota (0=no quota) /0/;

\$ontext

Small Open Economy:

Base year SAM:

Columns:
x,y	Production
fd	Final demand

Rows:
px,py	Prices of x and y
w	Wage rate

x	y	t	fd
px	100		-20	-80
py		60	+20	-80
w	-60	-20		80
r	-40	-40		80

Assume Ricardo-Viner structure with fixed sectoral capital stocks.

\$model:soequota

\$sectors:
x	!	X production
y	!	Y production

\$commodities:
px	!	Price of X
py	!	Price of Y
w	!	Wage rate
rx	!	Rental rate in X
ry	!	Rental rate in Y
pq\$quota	!	Quota rent

\$consumers:
ra	!	Representative agent

\$prod:x  s:1
o:px	q:100
i:w	q:60
i:rx	q:40

\$prod:y s:1
o:py	q:60
i:w	q:20
i:ry	q:40

\$prod:t
o:py	q:20
i:px	q:20
i:pq\$quota	q:20

\$demand:ra s:1
d:px	q:80
d:py	q:80
e:pq	q:quota
e:w	q:80
e:rx	q:40
e:ry	q:40

\$report:
v:welfare	w:ra

\$offtext
\$sysinclude mpsgeset soequota

soequota.iterlim = 0;

\$include soequota.gen
solve soequota using mcp;

soequota.iterlim = 8000;

parameter	results		Summary of results;

set	qlvl		/0*10/,
ql(qlvl)	/0 0.0,  5 0.5, 10 1.0/;

\$setglobal domain qlvl
\$setglobal labels ql

results(qlvl,"ev") = na;
results(qlvl,"qrent") = na;

loop(qlvl\$(ord(qlvl) gt 1),

quota = 20 * (ord(qlvl)-1)/(card(qlvl)-1);

\$include soequota.gen
solve soequota using mcp;

results(qlvl,"ev") = 100 * (welfare.l-1);
results(qlvl,"qrent") = pq.l/w.l;
);

*	Terminate if GNUPLOT is not installed:

\$if not exist %gams.sdir%wgnupl32.exe \$exit

*	Plot results to the terminal:

\$libinclude plot results

*	Plot results to a file:

\$setglobal batch yes
\$setglobal gp_opt1 'set term gif'
\$setglobal gp_opt2 "set output 'quota.gif'"
\$setglobal gp_opt3 "set size 0.8,0.8"
\$libinclude plot results

```