[英]How can I fix "No solution" error in Cplex
我有一個關於多產品、多層次供應鏈網絡的 model 網絡包括以下數量:1. 固定地點的制造地點,2. 未知地點的倉庫和配送中心(從一組潛在地點中選擇),3 .固定位置的客戶區。 這是一個混合整數線性規划優化問題。 需要確定的決策包括要建立的倉庫和配送中心的數量、位置和容量,需要在網絡中建立的運輸鏈路,以及物料的流量和生產率。 目標是總成本最小化。 model 仍然運行,但它只顯示我插入的數據,沒有解決方案 這是我的數據的鏈接: https://drive.google.com/drive/folders/1-hHGvR0j2y6ojsBQIi?ussharing .mod
int bigM=100000000;
range M=1..6; // number of warehouse
range K=1..15; // number of DC
range KSS=1..3;
range notKSS=4..15;
range L=1..18; // number of customer zone
range J=1..3; // number of plant
range I=1..14; // number different type of product
range E=1..6; // number of resources
range R=1..4; //
range place=1..3; // 1 UK, 2 ES, 3 IT
int m;
int k;
int l;
int j;
int i;
int e;
int r;
//table 3
float p_ije0[1..6, 1..3*14] = ...;
float p_ije[i in I, j in J, e in E] = p_ije0[e,i+14*(j-1)];
float r_je[J][E]=...;
float p_max[I][J]=...; // max capacity production of product i by plant j (table 2)
float cp[J][I]=...; //unit production cost (table 4)
float c_wm[M]=...; //establish cost of warehouse at position m (table 5)
float c_dk[K]=...; //establish cost of DC at position k (table 5)
float c_wh[I][M]=...;//handling cost wh m handle product i (table 5)
float c_dh[I][K]=...;//handling cost dc k handle product i (table 5)
//table 7
float c_ijm0[1..3,1..14*6]=...;
float c_ijm[i in 1..14,j in 1..3,m in 1..6]=c_ijm0[j,i+6*(m-1)];//
//table 8
float c_imk0[1..6,1..14*15]=...;
float c_imk[i in 1..14,m in 1..6,k in 1..15]=c_imk0[m,i+14*(k-1)];//unit transportation cost from wh m to dc k of product family f (table 8)
//table 9
float c_ikl0[1..15,1..14*18]=...;
float c_ikl[i in 1..14,k in 1..15, l in 1..18]=c_ikl0[k,i+14*(l-1)]; //unit transportation cost from dc k to customer zone l of product family f (table 9)
float c_r[R]=...; //transportation cost relative to the flow range (table 10)
float d_li[I][L]=...;// product demand of product i in zone l(table 11)
int w_max=14000; // max wh capa
int w_min=10; //
float ca_j[place]=...; // production capacity of plant j (table 12)
float c_j[place]=...;// manufaturing cost of plant j (table 12)
//table 13
float c_w[place]=...;// infrastructure cost of wh m
float c_wt[place]=...;//warehouse throughput
float c_hw[place]=...; // wh handling cost
//table 14
float c_d[place]=...;// infrastructure cost of dc k
float c_dt[place]=...;// dc throughput
float c_hd[place]=...; // dc handling cost
//table 14
int d_max=7000;//max dc capa
int d_min=10;
int a=1;
int b=1;
int q_bound[R]=...;
int q_lower[R]=...;
float cost_upper[R]=...;
float cost_lower[R]=...;
dvar boolean y1[M]; // 1 if warehouse at position m is established, otherwise 0
dvar boolean y2[K]; // 1 if dc at position k is establish, otherwise 0
dvar boolean x1[M][K]; // 1 if warehouse m supply DC k
dvar boolean x2[K][L]; // 1 if DC k supply customer zone l
dvar float w[M]; // capacity of warehouse m
dvar float d[K]; // capacity of DC k
dvar float p[I][J]; // production rate of product i by plant j
dvar float q1[I][J][M]; // rate of flow of product i from plant j to warehouse m
dvar float q2[I][M][K]; // rate of flow of product i from warehouse m to DC k
dvar float q3[I][K][L]; // rate of flow of product i from DC k to customer zone l
dvar boolean z1[I][J][M][R];
dvar boolean z2[I][M][K][R];
dvar boolean z3[I][K][L][R];
dvar float Q_1[I][J][M][R];
dvar float Q_2[I][M][K][R];
dvar float Q_3[I][K][L][R];
minimize (sum(m in M) c_wm[m]*y1[m] + sum(k in K) c_dk[k]*y2[k] +sum(i in I, j in J) cp[j][i]*p[i][j] + sum(i in I, m in M) c_wh[i][m]*(sum(j in J)q1[i][j][m])+sum(i in I, k in K)c_dh[i][k]*(sum( m in M)q2[i][m][k]))+ sum( i in I, j in J, m in M)c_ijm[i][j][m]+sum(i in I, m in M, k in K)c_imk[i][m][k]+sum(i in I, k in K, l in L)c_ikl[i][k][l]);
subject to {
forall(m in M, k in K)
x1[m][k] <= y1[m]; // (1)
forall (k in KSS)
sum(m in M) x1[m][k]==y2[k]; //(2)
forall (m in M,k in notKSS)
x1[m][k]<=y2[k]; //(3)
forall (k in K,l in L)
x2[k][l]<=y2[k]; //(4)
forall(l in L)
sum(k in K) x2[k][l]==1; //(5)
forall (i in I, j in J, m in M)
q1[i][j][m] <= 40*y1[m]; //(6)
forall (i in I, m in M, k in K)
q2[i][m][k] <= 40*x1[m][k]; //(7)
forall (i in I, l in L, k in K)
q3[i][k][l] <= 40*x2[k][l]; //(8)
forall ( m in M, k in K)
sum(i in I)q2[i][m][k]>=2*x1[m][k]; //(9)
forall ( k in K, l in L)
sum(i in I)q3[i][k][l]>=2*x2[k][l]; //(10)
forall( i in I,j in J)
p[i][j]==sum(m in M) q1[i][j][m]; //(11)
forall(i in I, m in M)
sum(j in J) q1[i][j][m]== sum(k in K) q2[i][m][k]; //(12)
forall(i in I, k in K)
sum(m in M) q2[i][m][k]==sum(l in L) q3[i][k][l]; //(13)
forall(i in I, l in L)
sum(k in K) q3[i][k][l]== d_li[i][l]; //(14)
forall(i in I, j in J)
5<=p[i][j] && p[i][j]<=p_max[i][j]; //(15)
forall(j in J, e in E)
sum(i in I)p_ije[i][j][e]*p[i][j]<= r_je[j][e] ; //(16)
forall(m in M)
w[m]<=w_max*y1[m] && w[m]>=w_min*y1[m] ; //(17)
forall (k in K) //18
d[k]<=d_max*y2[k] && d[k]>=d_min*y2[k];
forall(m in M)
w[m]>=sum(i in I, k in K)a*q2[i][m][k]; //(19)
forall (k in K)
d[k]>=sum(i in I, l in L)b*q3[i][k][l]; //(20)
forall(i in I, j in J) //(21)
p[i][j]>=0;
forall(i in I, j in J, m in M) //(22)
q1[i][j][m]>=0;
forall(i in I, m in M,k in K)
q2[i][m][k]>=0; //(23)
forall(i in I, k in K, l in L)
q3[i][k][l]>=0; //(24)
forall(i in I, j in J, m in M)
sum(r in R) z1[i][j][m][r]==1; //(29)
forall(i in I, j in J, m in M, r in R)
q_bound[r]*z1[i][j][m][r]>=Q_1[i][j][m][r] && q_lower[r]*z1[i][j][m][r]<=Q_1[i][j][m][r]; //(30)
forall(i in I, j in J, m in M)
sum(i in I)q1[i][j][m]== sum(r in R)q_bound[r]; //(31)
forall(i in I, j in J, m in M) //(32)
c_ijm[i][j][m]==sum(r in R) (cost_lower[r]*z1[i][j][m][r]+(q_bound[r]-q_lower[r]*z1[i][j][m][r])*(cost_upper[r]-cost_lower[r])/(q_bound[r]-q_lower[r]));
forall(i in I, m in M, k in K) //(33)
sum(r in R)z2[i][m][k][r]==1;
forall(i in I, m in M, k in K, r in R) //(34)
q_bound[r]*z2[i][m][k][r]>=Q_2[i][m][k][r] && q_lower[r]*z2[i][m][k][r]<=Q_2[i][m][k][r];
forall(i in I, m in M, k in K) //(35)
sum(i in I)q2[i][m][k]==sum(r in R)q_bound[r];
forall(i in 1..3, m in 1..6, k in 1..15) //(36)
c_imk[m][i][k]==sum(r in R) (cost_lower[r]*z2[i][m][k][r]+(q_bound[r]-q_lower[r]*z2[i][m][k][r])*(cost_upper[r]-cost_lower[r])/(q_bound[r]-q_lower[r]));
forall(i in I, k in K, l in L) //(37)
sum(r in R)z3[i][k][l][r]==1;
forall(i in I, k in K, l in L, r in R) //(38)
q_bound[r]*z3[i][k][l][r]>=Q_3[i][k][l][r] && q_lower[r]*z3[i][k][l][r]<=Q_3[i][k][l][r];
forall(i in I, k in K, l in L) //(39)
sum(i in I)q3[i][k][l]==sum(r in R)q_bound[r];
forall(i in I, k in K, l in L) //(40)
c_ikl[i][k][l]==sum(r in R) (cost_lower[r]*z3[i][k][l][r]+(q_bound[r]-q_lower[r]*z3[i][k][l][r])*(cost_upper[r]-cost_lower[r])/(q_bound[r]-q_lower[r]));
}
這是 my.dat 文件:
SheetConnection Edata("data.xlsx");
p_max from SheetRead(Edata ,"p_max");
cp from SheetRead(Edata ,"cp");
c_wm from SheetRead(Edata ,"c_wm");
c_dk from SheetRead(Edata ,"c_dk");
c_wh from SheetRead(Edata ,"c_wh1");
c_dh from SheetRead(Edata ,"c_dh");
c_r from SheetRead(Edata ,"c_r");
d_li from SheetRead(Edata ,"d_li");
ca_j from SheetRead(Edata ,"ca_j");
c_j from SheetRead(Edata ,"c_j");
c_w from SheetRead(Edata ,"c_w");
c_wt from SheetRead(Edata ,"c_wt");
c_hw from SheetRead(Edata ,"c_hw");
c_d from SheetRead(Edata ,"c_d");
c_dt from SheetRead(Edata ,"c_dt");
c_hd from SheetRead(Edata ,"c_hd");
p_ije0 from SheetRead(Edata ,"p_ije0");
c_ijm0 from SheetRead(Edata ,"c_ijm");
c_imk0 from SheetRead(Edata ,"c_imk");
c_ikl0 from SheetRead(Edata,"c_ikl");
r_je from SheetRead(Edata ,"r_ej");
q_bound from SheetRead(Edata,"q_bound");
q_lower from SheetRead(Edata,"q_lower");
cost_upper from SheetRead(Edata,"cost_upper");
cost_lower from SheetRead(Edata,"cost_lower");
如果您將約束命名為“使決策優化變得簡單”中的沖突和放松,您將能夠更好地理解問題所在。
以您的 model 為例,如果我們只保留
//minimize (sum(m in M) c_wm[m]*y1[m] + sum(k in K) c_dk[k]*y2[k] +sum(i in I, j in J) cp[j][i]*p[i][j] + sum(i in I, m in M) c_wh[i][m]*(sum(j in J)q1[i][j][m])+sum(i in I, k in K)c_dh[i][k]*(sum( m in M)q2[i][m][k]))+ sum( i in I, j in J, m in M)c_ijm[i][j][m]+sum(i in I, m in M, k in K)c_imk[i][m][k]+sum(i in I, k in K, l in L)c_ikl[i][k][l];
subject to {
forall(i in I, j in J)
{
ct15a:5<=p[i][j] ;
ct15b:p[i][j]<=p_max[i][j]; //(15)
}
}
那么我們將在 IDE 中看到 ct15a 和 ct15b 之間的沖突
87 [-Infinity,0] [-Infinity,5] ct15b[1][2]
87 [-Infinity,0] [-Infinity,5] ct15b[5][1]
87 [-Infinity,0] [-Infinity,5] ct15b[5][3]
87 [-Infinity,0] [-Infinity,5] ct15b[6][3]
87 [-Infinity,0] [-Infinity,5] ct15b[8][2]
87 [-Infinity,0] [-Infinity,5] ct15b[9][2]
87 [-Infinity,0] [-Infinity,5] ct15b[10][2]
87 [-Infinity,0] [-Infinity,5] ct15b[11][1]
87 [-Infinity,0] [-Infinity,5] ct15b[12][3]
87 [-Infinity,0] [-Infinity,5] ct15b[14][2]
87 [-Infinity,0] [-Infinity,5] ct15b[14][3]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.