Я пытаюсь реализовать проблему маршрутизации транспортных средств с двумя транспортными средствами.
Один автомобиль - перевозчик, другой - дрон, который может стартовать с носителя.
Оба транспортных средства стартуют в точке (0/0).Затем оба транспортных средства движутся к точке, где беспилотник должен начать с авианосца, чтобы последовательно посетить некоторые целевые местоположения.В начале я предполагаю только две цели, расположенные в t1 (2/8) и t2 (5/8).После посещения целей дрон должен приземлиться на авианосец, и оба транспортного средства должны вернуться к начальной точке (0/0).
Таким образом, точки, где дрон запускается и приземляется на авианосце, должны быть оптимально выбраны, чтобы минимизировать обход авианосца.
У меня есть визуализация проблемы здесь: визуализация
Мой код выглядит следующим образом:
//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.
КогдаЯ отлаживаю программу, но не могу найти решение, и не могу понять, почему.
Я очень благодарен за каждую подсказку!Заранее спасибо!
Свен