param l {1..5};
param u {1..5};

param a {1..21};

var x {j in 1..5} >= l[j], <= u[j];

minimize obj: 
  -a[1] - a[2]*x[1] - a[3]*x[1]*x[2] - a[4]*x[1]*x[3] - a[5]*x[1]*x[4] 
  -a[6]*x[1]*x[5]
  ;

subject to constr1: 
    0 <= a[7]*x[1] + a[8]*x[1]*x[2] + a[9]*x[1]*x[3] + a[10]*x[1]*x[4] 
    + a[11]*x[1]*x[5] <= 294000;

subject to constr2: 
    0 <= a[12]*x[1] + a[13]*x[1]*x[2] + a[14]*x[1]*x[3] + a[15]*x[1]*x[4] 
    + a[16]*x[1]*x[5] <= 294000;

subject to constr3: 
    0 <= a[17]*x[1] + a[18]*x[1]*x[2] + a[19]*x[1]*x[3] + a[20]*x[1]*x[4] 
    + a[21]*x[1]*x[5] <= 277200;

data;

param a :=
  1    -24345
  2  -8720288.849
  3    150512.5253
  4      -156.6950325
  5    476470.3222
  6    729482.8271
  7   -145421.402
  8      2931.1506
  9       -40.427932
 10      5106.192
 11     15711.36
 12   -155011.1084
 13      4360.53352
 14        12.9492344
 15     10236.884
 16     13176.786
 17   -326669.5104
 18      7390.68412
 19       -27.8986976
 20     16643.076
 21     30988.146
  ;

param l :=
  1   0
  2   1.2
  3  20
  4   9
  5   6.5
  ;

param u :=
  1  1000
  2     2.4
  3    60
  4     9.3
  5     7
  ;

let x[1] := 2.52;
let x[2] := 2;
let x[3] := 37.5;
let x[4] := 9.25;
let x[5] := 6.8;

#printf "optimal solution as starting point \n";
#let x[1] := 4.53743097;
#let x[2] := 2.4;
#let x[3] := 37.5;
#let x[4] := 9.25;
#let x[5] := 6.8;

solve;

display x;

display obj;

display obj + 5280335.133;
