I have this problem and its works ok, but it´s possible read paramerts in data statement?
proc optmodel;
var x {1..3};
max z1 = (2*x[1]-3*x[2]+5*x[3])**3/(x[1]+5*x[2]+x[3]**2);
con c1: -1<=x[1]<= 3;
con c2: 1.5<=x[2]<= 2;
con c3: 1.2<=x[3]<= 2.2;
solve with nlp/multistart ;
print x;
quit;
Edit: I want to put in data statement:
-1<=x[1]<= 3;...
data bounds;
input lb ub;
datalines;
-1 3
1.5 2
1.2 2.2
;
proc optmodel;
var x {1..3};
max z1 = (2*x[1]-3*x[2]+5*x[3])**3/(x[1]+5*x[2]+x[3]**2);
read data bounds into [_N_] x.lb=lb x.ub=ub;
solve with nlp/multistart ;
print x;
quit;
data bounds;
input lb ub;
datalines;
-1 3
1.5 2
1.2 2.2
;
proc optmodel;
var x {1..3};
max z1 = (2*x[1]-3*x[2]+5*x[3])**3/(x[1]+5*x[2]+x[3]**2);
read data bounds into [_N_] x.lb=lb x.ub=ub;
solve with nlp/multistart ;
print x;
quit;
if it will be possible to read coeficientes that multiplies x too?
data bounds;
input lb ub a b;
datalines;
-1 3 2 1
1.5 2 -3 5
1.2 2.2 5 1
;
proc optmodel;
var x {1..3};
num a {1..3};
num b {1..3};
max z1 = (sum {j in 1..3} a[j]*x[j])**3/(b[1]*x[1]+b[2]*x[2]+b[3]*x[3]**2);
read data bounds into [_N_] x.lb=lb x.ub=ub a b;
solve with nlp/multistart ;
print x;
quit;
edit: it works too
thanks rob!
data bounds;
input lb ub a b;
datalines;
-1 3 2 1
1.5 2 -3 5
1.2 2.2 5 1
;
proc optmodel;
var x {1..3};
num a {1..3};
num b {1..3};
max z1 = (sum {j in 1..3} a[j]*x[j])**3/ (sum {j in 1..3} b[j]*x[j]);
read data bounds into [_N_] x.lb=lb x.ub=ub a b;
solve with nlp/multistart ;
print x;
quit;
Note that your original objective function had x[3]**2 in the denominator. With your latest change, it is now just x[3]. If that is what you want, here's a way to make the code more data-driven (without hard-coding 1..3):
proc optmodel;
set OBS;
var x {OBS};
num a {OBS};
num b {OBS};
max z1 = (sum {j in OBS} a[j]*x[j])**3/ (sum {j in OBS} b[j]*x[j]);
read data bounds into OBS=[_N_] x.lb=lb x.ub=ub a b;
solve with nlp/multistart ;
print x;
quit;
This way, you can run again with different data without changing the PROC OPTMODEL code. Such separation of model and data is a best practice enabled by the use of an algebraic modeling language.
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.