CPLEX程序有问题,找不到具体在哪里
/*********************************************
* OPL 12.8.0.0 Model
* Author: jiang
* Creation Date: 2023年3月6日 at 下午2:20:00
*********************************************/
/*********************************************
* OPL 12.8.0.0 Model
* Author: jiang
* Creation Date: 2023年3月5日 at 下午12:51:06
*********************************************/
range T = 1..10;
//int T=...;
{string} P = ...;
{string} H = ...;
//参数
float cpp[i in P][j in P]=...;
float CE[i in P][m in H]=...;
float CS_1[m in H]=...;
float CS_2[i in P]=...;
float CL_1[i in P]=...;
float CL_2[m in H]=...;
int Iq[t in T][i in P][j in P]=...;
int Oq[t in T][i in P][j in P]=...;
//int lamda[i in P][m in H]= [
// [0,1,1,1,0,0,0,0,0],
// [0,0,1,1,1,0,1,1,0],
// [1,1,0,0,0,0,1,0,1],
// [0,0,1,1,0,0,1,0,1]
// ]; //01 变量
int lamda[i in P][m in H]=...;
int QH[t in T][i in P][m in H]=...;
int DH[t in T][m in H]=...;
int IV_1[i in P]=...;
int IV_2[m in H]=...;
int W_1[m in H]=...;
int W_2[i in P]=...;
int F[t in T][i in P][j in P]=...;
//int M_1=max1(0,max(m in H, t in T) ST_1[m][t]);
//int M_2=max1(0, max(i in P, t in T) ST_2[i][t]);
//决策变量(未知)
dvar int+ QP[t in T][i in P][j in P];
dvar int+ QL_1[t in T][i in P];
dvar int+ QL_2[t in T][m in H];
dvar int+ QE[t in T][i in P][m in H];
//衍生变量
dvar float+ ST_1[t in T][m in H];
dvar float+ ST_2[t in T][i in P];
dvar float+ omega_1[t in T][m in H]; //空箱流入流出差
dvar float+ omega_2[t in T][i in P]; //空箱流入流出差
dvar int+ C_1;
dvar int+ C_2;
dvar int+ C_3;
dvar int+ C;
minimize (C_1 + C_2 + C_3);
subject to { //约束
C_1 == sum(t in T, i in P, j in P)(cpp[i][j]*QP[t][i][j]) + sum(t in T, i in P, m in H)(lamda[i][m]*QE[t][i][m]*CE[i][m]);
C_2 == sum(t in T, i in P)CL_1[i]*QL_1[t][i] + sum(t in T, m in H)CL_2[m]*QL_2[t][m];
C_3 == sum(t in T, m in H)ST_1[t][m]*CS_1[m] + sum(t in T, i in P)ST_2[t][i]*CS_2[i];
forall(t in T, m in H ){
omega_1[t][m] == ST_1[t-1][m]+sum(i in P) lamda[i][m]*QH[t-1][i][m] - DH[t][m]; //>0 余箱状态
}
forall(t in T, i in P ){
omega_2[t][i] == ST_2[t-1][i]+sum(j in P) Iq[t-1][j][i] - sum(m in H)lamda[i][m]*QH[t-1][i][m] - sum(j in P)Oq[t][j][i]; // >0 余箱状态
}
forall(t in T, m in H ){ // 约束7
ST_1[1][m]== IV_2[m] - DH[1][m];
}
forall(t in T, m in H ){
omega_1[2..t][m] >=0 =>
ST_1[2..t][m]== omega_1[2..t][m] - sum(i in P)lamda[i][m]*QE[m][i];
}
forall(t in T, m in H ){
omega_1[2..t][m] <= 0 =>
ST_1[2..t][m]== omega_1[2..t][m] + sum(i in P)lamda[i][m]*QE[i][m] + QL[2..t][m];
}
forall(t in T, i in P ){ // 约束8
ST_2[1][i]== IV_1[i] - sum(j in P)Oq[1][i][j];
}
forall(t in T, i in P ){
omega_2[t][i] >= 0 =>
ST_2[2..t][m] == omega_2[2..t][i] - sum(m in H)lamda[i][m]*QE[2..t][i][m] - sum(j in P)QP[2..t][i][j];
}
forall(t in T, i in P ){
omega_2[2..t][i] <= 0 =>
ST_2[1][m] ==omega_2[2..t][i] + sum(m in H)lamda[i][m]*QE[2..t][m][i] + sum(j in P)QP[2..t][j][i] + QL_1[t][i];
}
forall(i in P, t in T ){ // (9)
omega_2[t][i] >= 0 =>
sum(m in H)lamda[i][m]*QE[t][i][m] <= omega_2[t][i] - sum(j in P)QP[t][i][j];
}
forall(i in P, t in T ){ // (10)
omega_2[t][i] <= 0 =>
sum(m in H)lamda[i][m]*QE[t][m][i] == 0; //omega_2<=0 ;
}
forall(m in H, t in T ){ //(11)
omega_1[t][m] >= 0 =>
sum(i in P)lamda[i][m]*QE[t][m][i] <= omega_1[t][m]; //omega_1>0 ;
}
forall(m in H, t in T ){
omega_1[t][m] <= 0 =>
sum(i in P)lamda[i][m]*QE[t][m][i] == 0; //omega_1<=0 ; (12)
}
forall(i in P, t in T ){
omega_2[t][i] >= 0 =>
sum(j in P)QP[t][i][j] <= omega_2[t][i]; //omega_2>0 ; (13)
}
forall(j in P, t in T ){
omega_2[t][j] <= 0 =>
sum(i in P)QP[t][i][j] == 0; //omega_2<=0 ; (14)
}
forall(i in P, t in T ){
omega_2[t][i] <= 0 =>
sum(j in P)QP[t][j][i] + QL_1[t][i] + sum(m in H)lamda[i][m]*QE[t][m][i] >= -omega_2[t][i]; //omega_2<=0 (15)
}
forall(m in H, t in T ){
omega_1[t][m] <= 0 =>
sum(i in P)lamda[i][m]*QE[t][i][m] + QL_2[t][m] >= -omega_1[t][m]; //omega_1<=0 (16) \
}
forall(i in P, t in T ){
omega_2[t][i] <= 0 =>
QL_1[t][i] <= abs(omega_2[t][i]); //omega_2<=0 (17)
}
forall(i in P, t in T ){
omega_2[t][i]>=0 =>
QL_1[t][i] == 0; //omega_2>0 (18)
}
forall(m in H, t in T ){
omega_1[t][m] <= 0 =>
QL_2[t][m] <= abs(omega_1[t][m]); //omega_1<=0 (19)
}
forall(m in H, t in T ){
omega_1[t][m] >= 0 =>
QL_2[t][m] == 0; //omega_1>0 (20)
}
forall(m in H, t in T ){
ST_1[t][m] <= W_1[m];
} // (21)
forall(i in P, t in T ){
ST_2[t][i] <= W_2[i];
} // (22)
forall(i in P, j in P, t in T ){
QP[t][i][j] + Oq[t][i][j] <= F[t][i][j]; // (23)
}
}
模型如下:
对照你的公式,一个一个检查下。