sample.gms : Stratified Sample Design

**Description**

The problem is to find a sampling plan that minimizes cost and yields variances of the population less than an upper bound. Table 10.1 in the book is not consistent with the equation statements and the objective function value must be a misprint.

**Reference**

- Bracken, J, and McCormick, G P, Chapter 10.2. In Selected Applications of Nonlinear Programming. John Wiley and Sons, New York, 1968.

**Small Model of Type :** NLP

**Category :** GAMS Model library

**Main file :** sample.gms

```
$Title Stratified Sample Design (SAMPLE,SEQ=27)
$Ontext
The problem is to find a sampling plan that minimizes cost
and yields variances of the population less than an upper bound.
Table 10.1 in the book is not consistent with the equation
statements and the objective function value must be a misprint.
Bracken, J, and McCormick, G P, Chapter 10.2. In Selected Applications
of Nonlinear Programming. John Wiley and Sons, New York, 1968.
$Offtext
Sets h stratum / 1*4 /, j variate / a,b /
Table data(h,*)
pop a b cost
1 400000 25 1 1
2 300000 25 4 1
3 200000 25 16 1
4 100000 25 64 1
Parameter vmax(j) maximum variance / a .04, b .01 /
w(h) stratum weight
tpop total population
k1(h,j) constant one
k2(j) constant two;
tpop = sum(h, data(h,"pop"));
w(h) = data(h,"pop")/tpop;
k1(h,j) = sqr(w(h))*data(h,j);
k2(j) = sum(h, w(h)*data(h,j)/data(h,"pop"));
Display tpop, w, k1,k2;
Variables n(h) sample - original formulation
nr(h) reciprocal of sample size
c cost
Equations vbal(j) variance balance - original formulation
vbalr(j) reciprocal variance balance
cbal cost balance - original formulation
cbalr reciprocal formulation of cost balance;
vbal(j).. sum(h, k1(h,j)/n(h)) - k2(j) =l= vmax(j);
vbalr(j).. sum(h, k1(h,j)*nr(h)) - k2(j) =l= vmax(j);
cbal.. c =e= sum(h, data(h,"cost")*n(h));
cbalr.. c =e= sum(h, data(h,"cost")/nr(h));
Models sample original formulation / vbal,cbal /
sampler reciprocal formulation / vbalr,cbalr / ;
n.lo(h) = 100; n.up(h) = data(h,"pop");
n.l(h) = 200; c.l = sum(h, data(h,"cost")*n.l(h));
Solve sample minimizing c using nlp;
nr.lo(h) = 1/data(h,"pop"); nr.up(h) = 1/100; nr.l(h) = 1/n.l(h);
Solve sampler minimizing c using nlp;
```