AMPL kullanıyorum ilk defa budur ve ben gerçekten tanıdık değilim. Modelimi optimize etmem gerekiyor ama kodlarımın yanlış olduğunu düşünüyorum ve en uygun çözüm olarak "NOS 5.51: 20 değişkenin bütünlüğünü görmezden geliyorum". Benim modelim Min (atık) için konuya olan I attached a picture of constraintsAMPL optimum çözüm sıfırını bulur, tüm değişkenler sıfır olarak ayarlanır
ve burada benim kodlardır:
`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;
Bu alıyorum budur:
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