这是我的代码,它运行了,但没有给我任何解决方案(不可行)。我尝试通过将“//”放在前面来删除一些代码以查找冲突的代码,但它仍然没有给出解决方案,我该如何修复它? :
// INDEX
int I=...;
int R =...;
int T=...;
range items = 1..I; //Index of items in the production system i
range resources = 1..R; //Index of production resources defining capacity r
range times = 1..T; //Index of discrete periods in the planning horizon t
range trucks = 1..3; //Index of item j according to the bill of materials
// DATA & PARAMATER
int lamda=...;
float d[items][times]=...; //Independent (external) demand for item i in period t
float b[items][trucks]=...; //Number of units of item i required per unit of item j according to the bill of materials
int tau[items]=...; //Time to process or purchase a lot of the product i
float f[items][resources]=...; //Fraction of resource r required to process a unit of item i
float w[items][resources]=...; //Fraction of resource r required to set up a unit of item i
float ma[resources][times]=...;//Maximum fraction of resourcer that can be added in period t
float e[items]=...; //Inventory accuracy of item i
float l[items]=...; //Minimum production lot size for item i
float ac[resources][times]=...;//Cost per added capacity fraction to resource r in period t
float wc[items]=...; //Total fixed cost of setting up the production/purchase of item i in a period
float sc[items]=...; //Inventory holding cost per period for one unit of item i
float s0[items]=...; //Initial on-hand inventory for item i
int h[items]=...; // Maximum slack for production or purchase time
float g[items][resources]=...; // Maximum tolerance of capacity for manufacturing
float n[items]=...; // Tolerance for inventory accuracy
//DECISION VARIABLES
dvar int+ p[items][times]; //Production quantity of item i in period t
dvar int+ S[items][times]; //Final inventory of item i in period t
dvar int+ a[resources][times]; //Added fraction of resource r in period t
dvar int+ q[items][times]; //Binary production indicator for product i in period t
// Auxiliary variable
dvar float+ sreal[items][times];
// OBLJECTIVE FUNCTION
minimize sum(t in times, r in resources) a[r][t]*ac[r][t] + sum(t in times, i in items)q[i][t]*wc[i] + sum(t in times, i in items) e[i]*S[i][t]*sc[i] ;
// Flow constraint
subject to {
forall(t in times, r in resources)
sum (i in items)(p[i][t]*f[i][r] + q[i][t]*w[i][r]) <= 1 + a[r][t]; //(1)
forall (i in items, t in times:(t-tau[i]) in times)
sum (j in trucks) p[i][t]*b[i][j] + d[i][t] + e[i]*S[i][t] == e[i]*S[i][t-1] + p[i][t-tau[i]]; //(2)
forall (r in resources, t in times)
a[r][t] <= ma[r][t]; //(3)
forall (i in items, t in times)
p[i][t] >= q[i][t]*l[i]; //(4)
forall(i in items, r in resources, t in times)
sum(j in trucks) (p[i][t] * (f[i][r] + (1 - lamda) * q[i][t] * g[i][r]) + q[i][t] * w[i][r]) <= 1 + a[r][t];//(5)
forall(i in items, t in times:(t - (tau[i] + (1 - lamda) * h[i])) in times)
p[i][t - (tau[i] + (1 - lamda) * h[i])] + ((e[i] + n[i] * (1 - lamda)) * (S[i][t - 1] - S[i][t])) - sum(j in trucks) (p[i][t] * b[i][j]) <= d[i][t]; //(6)
forall(i in items, t in times:(t - (tau[i] + (1 - lamda) * h[i])) in times)
p[i][t - (tau[i] + (1 - lamda) * h[i])] + ((e[i] - n[i] * (1 - lamda)) * (S[i][t - 1] - S[i][t])) - sum(j in trucks) (p[i][t] * b[i][j]) >= d[i][t]; //(7)
forall(i in items, t in times)
(e[i] + n[i] * (1 - lamda)) * S[i][t] <= sreal[i][t]; //(8)
forall(i in items, t in times)
(e[i] - n[i] * (1 - lamda)) * S[i][t] >= sreal[i][t]; //(9)
}
请帮助我,这是我的数据。:
SheetConnection excelsheet("CAPSTONE-DATA.xlsx");
I=193;
R=4;
T=24;
lamda=1;
d from SheetRead(excelsheet, "Sheet1!B2:Y194");
b from SheetRead(excelsheet, "Sheet2!B2:D194");
tau from SheetRead(excelsheet,"Sheet3!B2:B194");
f from SheetRead(excelsheet, "Sheet4!B2:E194");
w from SheetRead(excelsheet, "Sheet5!B2:E194");
ma from SheetRead(excelsheet, "Sheet6!B2:Y5");
e from SheetRead(excelsheet, "Sheet7!B2:B194");
l from SheetRead(excelsheet, "Sheet8!B2:B194");
ac from SheetRead(excelsheet, "Sheet9!B2:Y5");
wc from SheetRead(excelsheet, "Sheet10!B2:B194");
sc from SheetRead(excelsheet, "Sheet11!B2:B194");
s0 from SheetRead(excelsheet, "Sheet12!B2:B194");
h from SheetRead(excelsheet, "Sheet13!B2:B194");
g from SheetRead(excelsheet, "Sheet14!B2:E194");
n from SheetRead(excelsheet, "Sheet15!B2:B194");
您多次使用 t-1,因此您应该确保 t-1 属于时间。 例如,你应该改变
forall(i in items, t in times)
进入
forall(i in items, t in times:(t-1) in times)
以下模型运行良好:
// INDEX
int I=2;
int R =3;
int T=4;
range items = 1..I; //Index of items in the production system i
range resources = 1..R; //Index of production resources defining capacity r
range times = 1..T; //Index of discrete periods in the planning horizon t
range trucks = 1..3; //Index of item j according to the bill of materials
// DATA & PARAMATER
int lamda=1;
float d[items][times]; //Independent (external) demand for item i in period t
float b[items][trucks]; //Number of units of item i required per unit of item j according to the bill of materials
int tau[items]; //Time to process or purchase a lot of the product i
float f[items][resources]; //Fraction of resource r required to process a unit of item i
float w[items][resources]; //Fraction of resource r required to set up a unit of item i
float ma[resources][times];//Maximum fraction of resourcer that can be added in period t
float e[items]; //Inventory accuracy of item i
float l[items]; //Minimum production lot size for item i
float ac[resources][times];//Cost per added capacity fraction to resource r in period t
float wc[items]; //Total fixed cost of setting up the production/purchase of item i in a period
float sc[items]; //Inventory holding cost per period for one unit of item i
float s0[items]; //Initial on-hand inventory for item i
int h[items]; // Maximum slack for production or purchase time
float g[items][resources]; // Maximum tolerance of capacity for manufacturing
float n[items]; // Tolerance for inventory accuracy
//DECISION VARIABLES
dvar int+ p[items][times]; //Production quantity of item i in period t
dvar int+ S[items][times]; //Final inventory of item i in period t
dvar int+ a[resources][times]; //Added fraction of resource r in period t
dvar int+ q[items][times]; //Binary production indicator for product i in period t
// Auxiliary variable
dvar float+ sreal[items][times];
// OBLJECTIVE FUNCTION
minimize sum(t in times, r in resources) a[r][t]*ac[r][t] + sum(t in times, i in items)q[i][t]*wc[i] + sum(t in times, i in items) e[i]*S[i][t]*sc[i] ;
// Flow constraint
subject to {
forall(t in times, r in resources)
sum (i in items)(p[i][t]*f[i][r] + q[i][t]*w[i][r]) <= 1 + a[r][t]; //(1)
forall (i in items, t in times:(t-1) in times)
sum (j in trucks) p[i][t]*b[i][j] + d[i][t] + e[i]*S[i][t] == e[i]*S[i][t-1] + p[i][t-tau[i]]; //(2)
forall (r in resources, t in times)
a[r][t] <= ma[r][t]; //(3)
forall (i in items, t in times)
p[i][t] >= q[i][t]*l[i]; //(4)
forall(i in items, r in resources, t in times)
sum(j in trucks) (p[i][t] * (f[i][r] + (1 - lamda) * q[i][t] * g[i][r]) + q[i][t] * w[i][r]) <= 1 + a[r][t];//(5)
forall(i in items, t in times:(t-1) in times)
p[i][t - (tau[i] + (1 - lamda) * h[i])] + ((e[i] + n[i] * (1 - lamda)) * (S[i][t - 1] - S[i][t])) - sum(j in trucks) (p[i][t] * b[i][j]) <= d[i][t]; //(6)
forall(i in items, t in times:(t-1) in times)
p[i][t - (tau[i] + (1 - lamda) * h[i])] + ((e[i] - n[i] * (1 - lamda)) * (S[i][t - 1] - S[i][t])) - sum(j in trucks) (p[i][t] * b[i][j]) >= d[i][t]; //(7)
forall(i in items, t in times:(t-1) in times)
(e[i] + n[i] * (1 - lamda)) * S[i][t] <= sreal[i][t]; //(8)
forall(i in items, t in times:(t-1) in times)
(e[i] - n[i] * (1 - lamda)) * S[i][t] >= sreal[i][t]; //(9)
}