我开始为一个大学项目学习 OPL,对以下模型进行编程,并在给定某些数据的情况下求解它。我已经对其进行了编程以及数据,但我没有得到我应该得到的答案,我不确定出了什么问题。
我已经多次阅读我的数据,并且我确信每个数字都是正确的,所以这与我设置的矩阵有关吗? 我的 .mod 文件如下:
int n=...; //set of terminals
range N=1..n;
int t=...; //set of time periods
range T=1..t;
int v=...; //set of vehicles
range V=1..v;
range Np=1..n; range Vp=1..v;
float p[Vp][Np][Np] =...; //p_vij
range Nc=1..n; range Vc=1..v;
float c[Vc][Nc][Nc] =...; //c_vij
range Nd=1..n; range Td=1..t;
float d[Td][Nd][Nd] =...; //d_tij
range Nm=1..n; range Tm=1..t; range Vm=1..v;
int m[Vm][Nm][Tm] =...; //m_vit
range NA=1..n; range VA=1..v;
int A[VA][NA][NA] =...; //A_vij
range Ntau=1..n;;
int tau[Ntau][Ntau] =...; //
dvar boolean x[N][N][T][V]; //x_ijtv
dvar boolean y[N][N][T][V]; //y_ijtv
dexpr float f=sum(i in N,j in N:i!=j,t in T, v in V)(p[v][i][j]*x[i][j][t][v] - c[v][i][j]*y[i][j][t][v]);
maximize f;
subject to {
forall(i in N, t in T, v in V:(t-1) in T)sum(j in N)(x[i][j][t][v] + y[i][j][t][v])- sum(k in N: k != i, t in T: t > tau[k][i])(x[k][i][t-tau[k][i]][v] + y[k][i][t-tau[k][i]][v])- y[i][i][t-1][v] == m[v][i][t]; // (2)
forall(i in N, j in N, t in T)
sum(v in V) x[i][j][t][v] <= d[t][i][j]; //(3)
forall(i in N, j in N, t in T, v in V)
A[v][i][j] == 0 => x[i][j][t][v] == 0 && y[i][j][t][v] == 0; //(4)
}
我的 .dat 文件是:
n = 6;
t = 6;
v = 2;
c = \[\[ \[0 1 2 2 2 2\]
\[1 0 2 2 2 2\]
\[2 2 0 2 1 1\]
\[2 2 2 0 1 1\]
\[2 2 1 1 0 1\]
\[2 2 1 1 1 0\]\]
\[ \[0 3 3 2 2 2\]
\[3 0 3 3 2 2\]
\[3 3 0 1 2 2\]
\[2 3 1 0 3 3\]
\[2 2 2 3 0 3\]
\[2 2 2 3 3 0\]\]
\];
p = \[\[ \[0 1.8 3.6 3.6 3.6 3.6\]
\[1.8 0 3.6 3.6 3.6 3.6\]
\[3.6 3.6 0 3.6 1.8 1.8\]
\[3.6 3.6 3.6 0 3.6 3.6\]
\[3.6 3.6 1.8 3.6 0 1.8\]
\[3.6 3.6 1.8 3.6 1.8 0\]\]
\[ \[0 4.2 4.2 3.6 3.6 3.6\]
\[4.2 0 4.2 4.2 3.6 3.6\]
\[4.2 4.2 0 4.5 3.6 3.6\]
\[3.6 4.2 4.5 0 4.2 4.2\]
\[3.6 3.6 3.6 4.2 0 4.2\]
\[3.6 3.6 3.6 4.2 4.2 0\]\]
\];
d = \[\[\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]\]
\[\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 3 0 0 0 0\]
\[0 0 0 0 0 1\]
\[0 0 0 0 0 0\]\]
\[\[0 0 0 0 0 0\]
\[0 0 3 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]\]
\[\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]\]
\[\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[2 0 0 0 0 0\]
\[0 0 0 0 0 0\]\]
\[\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]\]
\];
m = \[\[ \[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[1 0 0 0 0 0\]\]
\[ \[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 1 0 0 0 0\]
\[0 0 0 0 0 0\]
\[0 0 0 0 0 0\]\]
\];
A = \[\[ \[1 0 1 1 1 1\]
\[0 1 1 1 1 1\]
\[1 1 1 1 1 1\]
\[1 1 1 1 1 1\]
\[1 1 1 1 1 1\]
\[1 1 1 1 1 1\]\]
\[\[1 0 1 1 1 1\]
\[0 1 1 1 1 1\]
\[1 1 1 1 1 1\]
\[1 1 1 1 1 1\]
\[1 1 1 1 1 1\]
\[1 1 1 1 1 1\]\]
\];
tau =
\[\[1 2 1 1 1 2\]
\[2 1 2 1 2 3\]
\[1 2 1 1 3 2\]
\[1 1 1 1 1 3\]
\[1 2 3 1 1 1\]
\[2 3 2 3 1 1\]\];
当我运行它时,所有 x 值都是 0,一些 y 值是 1。鉴于该数据,我应该得到 x5612=x5151=y6511=y6531=y1161=y5541=1, x4222=x2332=y3352= y3362=1,其余均为0。
如有任何帮助,我们将不胜感激! 谢谢:)
你有尝试过改变吗
forall(i in N, t in T, v in V:(t-1) in T)sum(j in N)(x[i][j][t][v] + y[i][j][t][v])-
sum(k in N: k != i, t in T: t > tau[k][i])(x[k][i][t-tau[k][i]][v] + y[k][i][t-tau[k][i]][v])-
y[i][i][t-1][v] == m[v][i][t]; // (2)
进入
forall(i in N, t in T, v in V:(t-1) in T)sum(j in N)(x[i][j][t][v] + y[i][j][t][v])-
sum(k in N: k != i, t in T: t > tau[k][i])(x[k][t-tau[k][i]][i][v] + y[k][t-tau[k][i]][i][v])-
y[i][i][t-1][v] == m[v][i][t]; // (2)
?