【发布时间】:2019-02-14 13:31:24
【问题描述】:
我尝试用两辆车来实现车辆路线问题。
一辆车是载体,另一辆车是可以从载体出发的无人机。
两辆车都从点 (0/0) 开始。然后两辆车移动到无人机应该从载体开始连续访问一些目标位置的点。一开始我只假设两个目标位于 t1(2/8) 和 t2(5/8)。访问目标后,无人机应降落在载体上,两辆车都应返回起点(0/0)。
因此,无人机发射和降落在航母上的点是最佳选择,以最小化航母的行程。
我在这里对问题进行了可视化:visualization
我的代码如下所示:
//Data
int start[1..2]=[0,0]; //start
int R=10; //max drone flight time
int a=2; //speed of drone
int z1A1[1..2]=[2,8]; //target1
int z2A1[1..2]=[7,8]; //target2
float intraDist1=sqrt(((z2A1[1]-z1A1[1])^2)+(z2A1[2]-z1A1[2])^2); //distance between targets
float intraFlugDist1;
float wegFlugDist1;
float hinFlugDist1;
float kombiniertZeit0;
float kombiniertZeit1;
float getrenntZeit1;
//Dvar
dvar int+ sA1[1..2];
dvar int+ lA1[1..2];
//Model
minimize kombiniertZeit0+getrenntZeit1+kombiniertZeit1;
subject to{
E1:
kombiniertZeit0>=0;
(((sA1[1]-start[1])^2)+(sA1[2]-start[2])^2)<=kombiniertZeit0^2;
E2:
getrenntZeit1>=0;
(((lA1[1]-sA1[1])^2)+(lA1[2]-sA1[2])^2)<=getrenntZeit1^2;
E3:
kombiniertZeit1>=0;
(((start[1]-lA1[1])^2)+(start[2]-lA1[2])^2)<=kombiniertZeit1^2;
E4:
wegFlugDist1>=0;
(((z1A1[1]-sA1[1])^2)+(z1A1[2]-sA1[2])^2)<=wegFlugDist1^2;
E5:
hinFlugDist1>=0;
(((lA1[1]-z2A1[1])^2)+(lA1[2]-z2A1[2])^2)<=hinFlugDist1^2;
E6:
intraDist1<=intraFlugDist1;
E7:
(wegFlugDist1+intraFlugDist1+hinFlugDist1)/a<=getrenntZeit1;
E8:
R>=getrenntZeit1;
}
E1 确保 kombiniertZeit0 至少与无人机起点到发射点的距离一样大。
E2 确保 getrenntZeit1 至少与无人机的发射点到着陆点的距离一样大。
E3 确保 kombiniertZeit1 至少与无人机着陆点到起点的距离一样大。
E4 确保 wegFlugDist1 至少与无人机发射点到第一个目标的距离一样大。
E5 确保 hinFlugDist1 至少与最后一个目标到无人机着陆点的距离一样大。
E7 确保 getrenntZeit1 至少与 hinFlugDist1、intraFlugDist1 和 wegFlugDist1 之和除以无人机 a 的速度之和一样大。
E8 确保 getrenntZeit1 不大于无人机 R 的最大飞行时间。
当我调试程序时,我没有得到可行的解决方案,我无法弄清楚原因。
我非常感谢每一个提示!提前致谢!
斯文
【问题讨论】:
-
要关联距离和时间,您必须考虑速度(如约束
E7中所做的那样)。检查其他约束。 -
感谢您的回答!但是当我在 E7 中划分时,我不考虑速度吗?
-
约束
E1、E2和E3怎么样?他们比较距离和时间而没有提及速度。 -
这是因为我假设载体的速度为 1。约束 E1、E2 和 E3 只是载体的距离。速度为1,距离和时间应该是一样的。
-
您的代码与您的草图不完全匹配。不应该是
sA2而不是lA1吗?intraFlugDist1呢?是否缺少约束?
标签: optimization constraints cplex quadratic