cplex - 自动驾驶车辆共享预订问题CPLEX代码修正
问题描述
我正在尝试破解这篇关于保留共享自动驾驶汽车的论文的 CPLEX 代码。首先,我没有为此使用元组,但后来我意识到我需要这样做。所以我尝试将元组组合到车辆路径问题中,但是 CPLEX 没有给我一个解决方案。附图是论文的参数、目标函数和约束,后面是我的代码。
int n = 5;
range N = 1..n;
int F =3;
range car=1..F;
tuple Arc{
int fromNode; //1 - 5
int toNode; // 1 - 5
float dist; //1-8
int fromTime; //1-4
int toTime; // 1 - 5
int TTime // 1 -3
}
range I=1..5;
range J=1..5;
range L=1..8;
range M=1..4;
range O=1..5;
range P=1..3;
{Arc} Arcs = {<1,4,4,1,2,1>,<2,1,1,1,3,2>,<2,3,1.5,3,4,1>, <2,4,1,2,4,2>,<3,2,7,2,5,3>,<3,4,3,1,3,2>,<3,5,1,1,2,1>,<4,1,2,3,4,1>,<5,2,1,2,3,1>,<5,3,2,4,5,1>,<5,4,5,2,4,2>};
int m[I][J];
dvar boolean x[I][J];
dvar int u[2..n];
minimize sum (i in I, j in J,a in Arcs) a.dist*x[i][j];
subject to{
forall(i in I,j in N)
sum (a in Arcs : a.toNode == i) x[i][j] == sum (a in Arcs : a.fromNode == i) x[i][j];
forall (i in N, j in J)
sum (a in Arcs : a.toNode == i) x[i][j] == 1;
forall(a in Arcs : a.toNode>1 && a.fromNode>1, i in N, j in J)
u[a.toNode] +1 <= u[a.fromNode] + 1000*(1-x[i][j]);
forall (a, b in Arcs, i in N, j in N)
if (a.toTime - b.fromTime<0) x[i][j]==0;
forall (a in Arcs, i in N, j in N)
sum (a in Arcs) x[i][j] <=F;
forall (a in Arcs, i in N, j in N)
x[i][j]<=m[i][j];
forall (i,j in N)
sum(j in N) x[i][j] == sum(j in N) x[j][i];
forall (i,j in N)
if (i==1 && j==5) m[i][j]==F;
else m[i][j]==1;
forall (i,j in N:j!=1)
if (i==1) x[i][j]==F;
forall (i,j in N:j!=5)
if (i==5) x[j][i]==F;
}
解决方案
您的模型中有几个问题:
- 整数米[I][J];意味着所有 m 都将是 0 这看起来很奇怪
F 是 3,x 是布尔值,所以下面看起来也很奇怪
forall (i,j in N:j!=1) if (i==1) x[i][j]==F;
forall (i,j in N:j!=5)if (i==5) x[j][i]==F;
推荐阅读
- go - Go:将 uuid.UUID (satori) 类型的 reflect.Value 再次转换回 uuid.UUID
- python - Python:for循环中的多个条件,在字典中查找任何值
- python - 具有多个标题排列的 Pandas read_csv
- sql - 无法在 CATCH 块 SQL 中引发/引发异常
- python - 按 abc 顺序查找最长的子字符串
- airflow - 气流 - 未知的蓝色任务状态
- redis - 如果我在 redis 中有两个键,例如 X:Y 和 X:Z,我可以通过在 X 上搜索得到它们吗?
- android - Android Room 更新查询卡在自动生成的代码上
- serialization - Janus Graph 远程图 NoSuchFieldError: V3_0 错误
- c - 使用 strlen() 设置 char 数组长度会返回错误的大小