【发布时间】:2014-12-10 16:20:20
【问题描述】:
我有一个如下所示的数据集(SAS 9.4):
data opt_test;
input ID GRP $ x1 MIN MAX y z;
cards;
2 F 10 9 11 1.5 100
3 F 10 9 11 1.2 50
4 F 11 9 11 .9 20
8 G 5 4 6 1.2 300
9 G 6 4 6 .9 200
;
run;
我想创建一个新变量 x2,它使基于 x1、x2、y 和 z 的函数最大化。
我有两个主要问题:
我的 proc optmodel 上的语法有一些错误,我无法修复“下标 1 可能不是一个集合”并且约束声明不完整“。更新:我想出了这部分。
我需要相同 GRP 的所有成员的 x2 值相同。因此,id 2,3,4 将具有相同的 x2。 ID 8 和 9 将具有相同的 x2。
以下是我的尝试。这最终将能够与不同数量的 ID 的几个不同 GRP 一起运行。
提前感谢您的帮助。
proc optmodel;
set<num> ID;
var x2{ID} >= 0;
string GRP{ID};
number x1{ID};
number MIN{ID};
number MAX{ID};
number y{ID};
number z{ID};
max sales=sum{i in ID}(x2[i])*(1-(x2[i]-x1[i])*y[i]/x1[i])*z[i];
con floor_METRIC1{i in ID}: x2[i]>=MIN[i];
con ceiling_METRIC1{i in ID}: x2[i]<=MAX[i];
read data opt_test into
ID=[ID]
GRP
x1
MIN
MAX
y
z
;
solve;
print x2;
quit;
【问题讨论】:
标签: optimization sas