qabel.gms : Linear Quadratic Control Problem

**Description**

This is a QCP formulation of the original ABEL model. Note that this model is convex and should be very easy to solve. The Linear Quadratic Riccati Equations are solved as a QCP. Nonlinear Programming Problem instead of the usual Matrix QMax can be easily extended to 1000, that allows to pass larger QPs to the solver.

**Reference**

- Kendrick, D, Caution and Probing in a Macroeconomic Model. Journal of Economic Dynamics and Control 4, 1 (1982), 149-170.

**Small Model of Type :** QCP

**Category :** GAMS Model library

**Main file :** qabel.gms

```
$Title Linear Quadratic Control Problem as QCP (QABEL,SEQ=293)
$Ontext
This is a QCP formulation of the original ABEL model. Note
that this model is convex and should be very easy to solve.
The Linear Quadratic Riccati Equations are solved as a QCP.
Nonlinear Programming Problem instead of the usual Matrix
QMax can be easily extended to 1000, that allows to pass
larger QPs to the solver.
Kendrick, D, Caution and Probing in a Macroeconomic Model. Journal of
Economic Dynamics and Control 4, 2 (1982).
$Offtext
$if not set qmax $set qmax 75
Sets n states / consumpt, invest /
m controls / gov-expend, money /
k quarters / q1*q%qmax% /
ku(k) control horizon
ki(k) initial period
kt(k) terminal period ;
Alias (n,np), (m,mp) ;
ku(k) = ord(k) < card(k);
ki(k) = ord(k) = 1;
kt(k) = not ku(k);
Table a(n,np) state vector matrix
consumpt invest
consumpt .914 -.016
invest .097 .424
Table b(n,m) control vector matrix
gov-expend money
consumpt .305 .424
invest -.101 1.459
Table wk(n,np) penalty matrix for states - input
consumpt invest
consumpt .0625
invest 1
Table lambda(m,mp) penalty matrix for controls
gov-expend money
gov-expend 1
money .444
Parameter c(n) constant term / consumpt -59.4, invest -184.7 /
xinit(n) initial value / consumpt 387.9, invest 85.3 /
uinit(m) initial controls / gov-expend 110.5, money 147.1 /
xtilde(n,k) desired path for x
utilde(m,k) desired path for u
w(n,np,k) penalty matrix on states ;
w(n,np,ku) = wk(n,np);
w(n,np,kt) = 100*wk(n,np);
xtilde(n,k) = xinit(n)*power(1.0075,ord(k)-1);
utilde(m,k) = uinit(m)*power(1.0075,ord(k)-1);
* Display w, xtilde, utilde;
Variables x(n,k) state variable
u(m,k) control variable
j criterion
Equations criterion criterion definition
stateq(n,k) state equation ;
criterion..
j =e= .5*sum((k,n,np), (x(n,k)-xtilde(n,k))*w(n,np,k)*(x(np,k)-xtilde(np,k)))
+ .5*sum((ku,m,mp),(u(m,ku)-utilde(m,ku))*lambda(m,mp)*(u(mp,ku)-utilde(mp,ku)));
stateq(n,k+1).. x(n,k+1) =e= sum(np, a(n,np)*x(np,k)) + sum(m, b(n,m)*u(m,k)) + c(n);
Model abel /all/;
x.l(n,k) = xinit(n); u.l(m,k) = uinit(m);
x.fx(n,ki) = xinit(n);
option limcol=0,limrow=0, solprint=off;
Solve abel minimizing j using qcp;
Display x.l, u.l;
```