Proc Optmodel SAS变量不唯一

时间:2015-11-12 18:30:04

标签: optimization sas constraints

我正在使用proc optmodel来解决一个问题,其中几个项目必须在同一个位置定价相同(让我们说它们是相同产品的不同颜色,目前价格不同)。我知道根据价格变化的方向,音量会增加/减少,我也有一些MIN / MAX限制。

我遇到的问题是程序只读取一组独特的SKU ......我想是因为它们重复了。如何获得优化SKU / LOCATION所有独特组合的程序?我尝试只更改项目编号,这当然有效,但对我的业务解决方案不实用。感谢。

data input_data;
    input SKU DESC $ LOCATION $ OLD_PRICE MIN MAX LIFT OLD_UNITS;
cards;
111 black NY 12.99 10 15 1.3 100
222 white NY 13.45 11 15 .9 150
333 red NY 13.29 13 15 1.6 200
111 black DC 11.75 10 14 1.2 300
222 white DC 11.75 10 14 1.5 100
333 red DC 11.99 10 14 1.7 140
111 black LA 14.21 12 17 2.0 600
222 white LA 14.79 14 17 1.5 500
333 red LA 15.99 13 17 .3 200
444 orange LA 14.11 12 17 .6 300
;
run;

proc optmodel;

set<num> SKU;
string LOCATION{SKU};
string DESC{SKU};
set LOCATIONS = setof{i in SKU} LOCATION[i];
set SKUperLOCATION{gi in LOCATIONS} = {i in SKU: LOCATION[i] = gi};
number OLD_PRICE{SKU}; 
number MIN{SKU};
number MAX{SKU}; 
var NEW_PRICE{gi in LOCATIONs} >= max{i in SKUperLOCATION[gi]} MIN[i] <= min{i in SKUperLOCATION[gi]} MAX[i];
impvar NEW_PRICEbySKU{i in SKU} = NEW_PRICE[LOCATION[i]];
number LIFT{SKU}; 
number OLD_UNITS{SKU}; 

read data input_data into
    SKU=[SKU]
    DESC
    LOCATION
    OLD_PRICE 
    MIN
    MAX 
    LIFT 
    OLD_UNITS;

max  sales=sum{gi in LOCATIONs}
        sum{i in SKUperLOCATION[gi]}
        (NEW_PRICE[gi])*(1-(NEW_PRICE[gi]-OLD_PRICE[i])*LIFT[i]/OLD_PRICE[i])*OLD_UNITS[i];

expand;
solve;

create data results_FAM_maxsales 
    from [SKU]={SKU} 
            DESC
            LOCATION 
            OLD_PRICE
            NEW_PRICE=NEW_PRICEbySKU
            MIN 
            MAX 
            LIFT 
            OLD_UNITS;

print NEW_PRICE sales;
quit;

1 个答案:

答案 0 :(得分:1)

一种方法是将您的唯一密钥设置为SKU&amp;地点。我暂时没有使用OPTMODEL,但这样的事情应该有用。

set<num,str> SKU_Loc;
num old_price{SKU_Loc};

<code>

read data input_data into SKU_Loc = [SKU Location];

<code>

然后更改代码的其余部分以引用SKU&amp;的独特组合。位置。