Ramsey Model of Optimal Economic Growth

TomSym implementation of GAMS Example (RAMSEY,SEQ=63)

This formulation is described in GAMS/MINOS: Three examples by Alan S. Manne, Department of Operations Research, Stanford University, May 1986.

Ramsey, F P, A Mathematical Theory of Saving. Economics Journal (1928).

Murtagh, B, and Saunders, M A, A Projected Lagrangian Algorithm and its Implementation for Sparse Nonlinear Constraints. Mathematical Programming Study 16 (1982), 84-117.

The optimal objective value is 2.4875

t: time periods

time   = (1:11)';
tfirst = time(1);
tlast  = time(end);

bet = 0.95; % discount factor
b = 0.25;   % capital's value share
g = 0.03;   % labor growth rate
ac = 0.15;  % absorptive capacity rate
k0 = 3;     % initial capital
i0 = 0.05;  % initial investment
c0 = 0.95;  % initial consumption

% Discount factor
beta = bet.^(1:11)';
beta(end) = beta(end)/(1-bet);

% The last period's utility discount factor, is calculated by summing the
% infinite geometric series from the horizon date onward. Because of the
% logarithmic form of the utility function, the post-horizon consumption
% growth term may be dropped from the maximand.

% Output-labor scaling vector
a     = (c0+i0)/k0^b;
alt   = a*(1+g).^((1-b)*((1:11)'-1));

% Capital stock, consumption and investment
toms 11x1 kt ct it

% Capacity constraint
eq1 = {alt.*kt.^b  ==  ct + it};

% Capital balance
eq2 = {kt(2:end) == kt(1:end-1)+it(1:end-1)};

% Terminal condition (provides for post-terminal growth)
eq3 = {g*kt(end) <= it(end)};

% Objective
obj = sum(beta.*log(ct));

% Bounds
cbnd = {kt >= k0; ct >= c0; it >= i0
    it <= i0*((1+ac).^(time-1))};

cbndinit = {kt(1) == k0};

solution = ezsolve(-obj,{eq1, eq2, eq3, cbnd, cbndinit});
Problem type appears to be: con
===== * * * =================================================================== * * *
TOMLAB - Tomlab Optimization Inc. Development license  999001. Valid to 2010-02-05
=====================================================================================
Problem: ---  1: Problem 1                      f_k      -2.487468640885963200
                                       sum(|constr|)      0.000000002655946463
                              f(x_k) + sum(|constr|)     -2.487468638230016600
                                              f(x_0)      0.974572593363459920

Solver: snopt.  EXIT=0.  INFORM=1.
SNOPT 7.2-5 NLP code
Optimality conditions satisfied

FuncEv   11 GradEv    9 ConstrEv    9 ConJacEv    9 Iter    7 MinorIter   32
CPU time: 0.031250 sec. Elapsed time: 0.031000 sec.