如何修复 cplex 中的无解错误?

问题描述 投票:0回答:1

这是我的代码,它运行了,但没有给我任何解决方案(不可行)。我尝试通过将“//”放在前面来删除一些代码以查找冲突的代码,但它仍然没有给出解决方案,我该如何修复它? :

// 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");

这是我的数据文件:https://docs.google.com/spreadsheets/d/1csSYQfu35kJQWC7_3uFJF8NEGgKPvSQi/edit?usp=sharing&ouid=111930526224280279714&rtpof=true&sd=true

cplex
1个回答
0
投票

您多次使用 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)
 }
© www.soinside.com 2019 - 2024. All rights reserved.