popdynm.gms : Marine population dynamics COPS 2.0 #6

Description

Given estimates of the abundance of the population of a marine species
at each stage (for example, nauplius, juvenile, adult) as a function
of time, determine stage specific growth and mortality rates.

This model is from the COPS benchmarking suite.
See http://www-unix.mcs.anl.gov/~more/cops/.

The number of discretization points can be specified using the command
line parameter --nh. COPS performance tests have been reported for nh
= 25, 50, 100, 200


Large Model of Type : NLP


Category : GAMS Model library


Main file : popdynm.gms   includes :  copspart.inc

$title Marine Population Dynamics COPS 2.0 #6 (POPDYNM,SEQ=234)

$onText
Given estimates of the abundance of the population of a marine species
at each stage (for example, nauplius, juvenile, adult) as a function
of time, determine stage specific growth and mortality rates.

This model is from the COPS benchmarking suite.
See http://www-unix.mcs.anl.gov/~more/cops/.

The number of discretization points can be specified using the command
line parameter --nh. COPS performance tests have been reported for nh
= 25, 50, 100, 200


Dolan, E D, and More, J J, Benchmarking Optimization
Software with COPS. Tech. rep., Mathematics and Computer
Science Division, 2000.

Rothschild, B J, Sharov, A F, and Bondarenko, A S,
Estimating Growth and Mortality in Stage-Structured
Populations. Journal of Plankton Research 19 (1997),
1913-1928.

Keywords: nonlinear programming, mathematics, population growth rate, population
          mortality rate, marine population, ecosystem dynamics
$offText

$if not set nh $set nh 25

Set
   ne 'differential equations' / ne1*ne8    /
   nc 'collocation points'     / nc1*nc2    /
   nh 'partition intervals'    / nh1*nh%nh% /
   nm 'measurements'           / 1*21       /;

Parameter
   tau(nm) 'times at which observations made'
   bc(ne);

tau(nm) = (ord(nm)-1)/2;

Table z(nm,ne) 'observation'
           ne1     ne2     ne3     ne4     ne5     ne6     ne7     ne8
    1  20000.0 17000.0 10000.0 15000.0 12000.0  9000.0  7000.0  3000.0
    2  12445.0 15411.0 13040.0 13338.0 13484.0  8426.0  6615.0  4022.0
    3   7705.0 13074.0 14623.0 11976.0 12453.0  9272.0  6891.0  5020.0
    4   4664.0  8579.0 12434.0 12603.0 11738.0  9710.0  6821.0  5722.0
    5   2977.0  7053.0 11219.0 11340.0 13665.0  8534.0  6242.0  5695.0
    6   1769.0  5054.0 10065.0 11232.0 12112.0  9600.0  6647.0  7034.0
    7    943.0  3907.0  9473.0 10334.0 11115.0  8826.0  6842.0  7348.0
    8    581.0  2624.0  7421.0 10297.0 12427.0  8747.0  7199.0  7684.0
    9    355.0  1744.0  5369.0  7748.0 10057.0  8698.0  6542.0  7410.0
   10    223.0  1272.0  4713.0  6869.0  9564.0  8766.0  6810.0  6961.0
   11    137.0   821.0  3451.0  6050.0  8671.0  8291.0  6827.0  7525.0
   12     87.0   577.0  2649.0  5454.0  8430.0  7411.0  6423.0  8388.0
   13     49.0   337.0  2058.0  4115.0  7435.0  7627.0  6268.0  7189.0
   14     32.0   228.0  1440.0  3790.0  6474.0  6658.0  5859.0  7467.0
   15     17.0   168.0  1178.0  3087.0  6524.0  5880.0  5562.0  7144.0
   16     11.0    99.0   919.0  2596.0  5360.0  5762.0  4480.0  7256.0
   17      7.0    65.0   647.0  1873.0  4556.0  5058.0  4944.0  7538.0
   18      4.0    44.0   509.0  1571.0  4009.0  4527.0  4233.0  6649.0
   19      2.0    27.0   345.0  1227.0  3677.0  4229.0  3805.0  6378.0
   20      1.0    20.0   231.0   934.0  3197.0  3695.0  3159.0  6454.0
   21      1.0    12.0   198.0   707.0  2562.0  3163.0  3232.0  5566.0;

bc(ne) = z('1',ne);

$batInclude copspart.inc nc2 21

Set nfl(ne) 'all but the first and last element of ne';
nfl(ne) = not sameas(ne,'ne1') and not sameas(ne,'ne8');

display nfl;

Positive Variable
   g(ne) 'growth rates'
   m(ne) 'mortality rates';

Equation
   collocation_eqn1(i,j)
   collocation_eqns(i,j,s)
   collocation_ne(i,j);

collocation_eqn1(i,j)..
   Duc[i,j,'ne1'] =e= -(m['ne1'] + g['ne1'])*uc[i,j,'ne1'];

collocation_eqns(i,j,nfl(s))..
   Duc[i,j,s]     =e= g[s-1]*uc[i,j,s-1] - (m[s] + g[s])*uc[i,j,s];

collocation_ne(i,j)..
   Duc[i,j,'ne8'] =e= g['ne7']*uc[i,j,'ne7'] - m['ne8']*uc[i,j,'ne8'];

Model popdynm / all /;

popdynm.scaleOpt = 1;
obj.scale        = 1000;

$if set workSpace popdynm.workSpace = %workSpace%

solve popdynm minimizing obj using nlp;