CPLEX模型,数据似乎是正确的,但是当我运行它时,我得到了错误的答案

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

我开始为一个大学项目学习 OPL,对以下模型进行编程,并在给定某些数据的情况下求解它。我已经对其进行了编程以及数据,但我没有得到我应该得到的答案,我不确定出了什么问题。 model data

我已经多次阅读我的数据,并且我确信每个数字都是正确的,所以这与我设置的矩阵有关吗? 我的 .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。

如有任何帮助,我们将不胜感激! 谢谢:)

data-science cplex opl
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)

© www.soinside.com 2019 - 2024. All rights reserved.