【发布时间】:2014-12-30 18:33:23
【问题描述】:
我对 proc optmodel 比较陌生,并且一直在为语法/结构而苦苦挣扎。我之前能够获得帮助,然后又被卡住了。
这是我的数据集:
data have;
input NAME $ TEAM $ LEAD GRADE XXX MIN MAX YYY RATE;
cards;
HAL A 1 1 50 45 55 100 1.1
SAL A 0 2 55 0 9999 200 1
KIM A 0 3 70 0 9999 50 1.4
JIM B 1 2 100 90 110 300 .95
GIO B 0 3 120 0 9999 50 1
CAL B 0 4 130 0 9999 20 .9
TOM C 1 1 2 1 5 20 .7
SUE C 0 3 5 0 9999 10 .5
VAL D 1 7 20 15 25 100 .6
WHO D 0 4 10 0 9999 10 .9
;
run;
以下是具体内容: 1. 只有“团队负责人”有任何有意义的约束。 2.但是,团队的其他成员会做相应的调整。 XXX 的值将相对于与团队领导者的成绩差低或高 10%。因此,如果 HAL 的 NEW_XXX 为 50(保持不变),则 SAL 将比 HAL 的 55(2 比 1 大 1 个单位)高 10%。KIM 的 NEW_XXX 为 60,因为这比 HAL(3 是2 个单位大于 1。同样,WHO 的 NEW_XXX 将比 VAL 的低 30%。
这有意义吗?
以下是我目前所拥有的,这是来自类似项目的骨架。
proc optmodel;
*set variables and inputs;
set<string>NAME;
string TEAM{NAME};
number LEAD{NAME};
number GRADE{NAME};
number XXX{NAME};
number MIN{NAME};
number MAX{NAME};
number YYY{NAME};
number RATE{NAME};
set TEAMS = setof{i in NAME} TEAM[i];
set NAMEperTEAM{gi in TEAMS} = {i in NAME: TEAM[i] = gi};
var NEW_XXX{i in NAME}>=MIN[i]<=MAX[i];
*read data into procedure;
read data have into
NAME=[NAME]
TEAM
LEAD
GRADE
XXX
MIN
MAX
YYY
RATE;
*state function to optimize;
max metric=sum{gi in TEAMS}
sum{i in NAMEperTEAM[gi]}
(NEW_XXX[i])*(1-(NEW_XXX[i]-XXX[i])*RATE[i]/XXX[i])*YYY[i];
expand;
solve;
*write output dataset;
create data results
from [NAME]={NAME}
TEAM
LEAD
GRADE
XXX
NEW_XXX
MIN
MAX
RATE
YYY;
*write results to window;
print NEW_XXX metric;
quit;
【问题讨论】:
-
好问题。答案即将到来。
标签: optimization sas