2016-04-10 1 views
1

これは初めてAMPLを使用していて、私はそれに精通していません。 私のモデルを最適化する必要がありますが、私のコードは間違っていると思います。最適なソリューションと「NOS 5.51:20変数の統合性を無視して」続けています。 私のモデルは 分(廃棄物) へ 対象にあるI attached a picture of constraintsAMPLが最適解を見つけました。すべての変数がゼロに設定されています。

、ここでは私のコードは次のとおりです。

`set DAY;  #the day we buy ingredient 
set INGRED; #fresh ingredients 
set TIME;  #day that keeps track of the inventory 
param M default 0; 
param cost{INGRED} > 0; #cost for each ingredient (per pound) 
param demand{TIME, INGRED} >= 0; #the expected demand for each ingredient fo each day t 
param min_pur_req > 0; #minimum total cost of order required to get a delivery 
param expiry{INGRED} ; #shelf life of each ingredient 
var amount{t in TIME, i in DAY, j in INGRED} >=0; #is defined only for t = i 
var is_bought {t in TIME,i in DAY,j in INGRED : i <= t }binary; #only for t =i 
var inventory {t in TIME,i in DAY, j in INGRED : i<=t <= i+expiry[j] } >= 0; # t >= i 
var used{t in TIME,i in DAY, j in INGRED : i <= t <= i+expiry[j]} >= 0; 
var waste{t in TIME,i in DAY, j in INGRED : t <= i+expiry[j] } >= 0;` 
minimize Total_waste: 
     sum{t in TIME,i in DAY, j in INGRED : i <= t <= i+expiry[j]} waste[t,i,j]; 
subject to invalid_amount{t in TIME, i in DAY, j in INGRED: i <= t <= i+expiry[j]}: 
     if t != i then amount[t,i,j] = 0; 
subject to invalid_binary{t in TIME, i in DAY, j in INGRED: i <= t <= i+expiry[j]}: 
    if t != i then is_bought[t,i,j] = 0; 
subject to usage{t in TIME, j in INGRED}: 
    sum {i in DAY: i <= t <= i + expiry[j]} used[t,i,j] = demand[t, j]; 
subject to inventory_formula {t in TIME, i in DAY, j in INGRED: i+1 <= t <= i+expiry[j]}: 
    waste[t,i,j] = amount[t,i,j] + inventory[t-1,i,j] - used[t,i,j] - inventory[t,i,j] ; 
subject to cost_check {t in TIME, i in DAY: t = i}: 
    sum {j in INGRED} cost[j]*amount[t,i,j] >= sum{j in INGRED: t <= i+expiry[j]} min_pur_req*is_bought[t,i,j]; 
subject to blah{t in TIME,i in DAY, j in INGRED: i <= t <= i+expiry[j]}: 
     amount[t,i,j] <= M*is_bought[t,i,j]; 
subject to invalid_inventory{t in TIME, i in DAY, j in INGRED: i+1 <= t <= i+expiry[j]}: 
#i+1 because for i = 1 i get error in invetory[0,1,j] 
     if t=i then inventory[t-1,i,j] = 0; 

これは私が取得していますものです:

ampl: model waste.mod; 
ampl: data waste.dat; 
ampl: solve; 
MINOS 5.51: ignoring integrality of 20 variables 
MINOS 5.51: optimal solution found. 
23 iterations, objective 0 

答えて

0

MINOSソルバーのdoesnバイナリ変数をサポートしません。それで、それは完全性を無視し(リラックスして)、「20変数の統合性を無視する」というメッセージとともに警告します。整数解を得るには、CPLEXまたはGurobiのような混合整数プログラミングAMPLソルバを使用する必要があります。

関連する問題