stahsven96
Newbie
- Registriert
- Feb. 2019
- Beiträge
- 2
Hallo zusammen,
ich bin neu hier im Forum und benötige Hilfe bei der Implementierung einer Tourenplanung zweier Fahrzeuge in CPLEX.
Zur Erklärung:
Die Planung beinhaltet zwei Fahrzeuge. Das eine Fahrzeug ist ein Trägerfahrzeug des Anderen. Es existieren mehrere Zielpositionen. Das getragene Fahrzeug soll an zu wählenden Orten vom Trägerfahrzeug starten, die Zielpositionen besuchen und an einem zu wählenden Ort wieder auf dem Trägerfahrzeug landen. Die Start- und Landepunkte sind also so zu wählen, dass die gesamte Tour minimiert wird. Eine Visualisierung ist im Anhang.
Dabei bin ich von zwei beispielhaften Zielpositionen Z1(2/8) und Z2(8/7) ausgegangen.
[IMG]https://www.coding-board.de/attachments/visualization-jpg.3764/[/IMG]
Mein formuliertes Programm sieht wie folgt aus:
/*
//Data
int xstart=0; //x Coordinate Start- and End of Tour
int ystart=0; //y Coordinate Start- and End of Tour
int xA1[1..2]=[2,8]; //x Coordinates of Targets
int yA1[1..2]=[8,7]; //y Coordinates of Targets
int R=20; //max Flight Time of Drone
int a=2; //max Speed of Drone
//Help Data
float intraDist1=sqrt(((xA1[2]-xA1[1])^2)+((yA1[2]-yA1[2])^2)); //Distance between Targets
float intraFlugDist1; //Flight Distance of Drone between Targets
float wegFlugDist1; //Flight Distance from launch point of Drone to first Target
float hinFlugDist1; //Flight Distance of Drone from last Target to land point of Drone
float kombiniertZeit0; //Distance from Start to launch Point of Drone
float kombiniertZeit1; //Distance from land Point to End
float getrenntZeit1; //Distance from launch Point to land Point of Drone
//DVar
dvar int xsA1; //x Coordinate launch Point
dvar int ysA1; //y Coordinate launch Point
dvar int xlA1; //x Coordinate land Point
dvar int ylA1; //y Coordinate land Point
minimize kombiniertZeit0+getrenntZeit1+kombiniertZeit1;
subject to{
sqrt(((xsA1-xstart)^2)+((ysA1-ystart)^2))<=kombiniertZeit0;
sqrt(((xlA1-xsA1)^2)+((ylA1-ysA1)^2))<=getrenntZeit1;
sqrt(((xlA1-xstart)^2)+((ylA1-ystart)^2))<=kombiniertZeit1;
sqrt(((xA1[1]-xsA1)^2)+((yA1[1]-ysA1)^2))<=wegFlugDist1;
sqrt(((xlA1-xA1[2])^2)+((ylA1-yA1[2])^2))<=hinFlugDist1;
intraDist1<=intraFlugDist1;
(wegFlugDist1+intraFlugDist1+hinFlugDist1)/a<=getrenntZeit1;
getrenntZeit1<=R;
}
Bei Ausführung erhalte ich die Fehlermeldung: CPLEX(default) kann den Ausdruck nicht extrahieren für die quadratischen Nebenbedingungen.
Wo liegt der Fehler in diesem Programm? Ich hoffe, dass jemand weiterhelfen kann. Ich bin für jeden Tipp dankbar!
Vielen Dank im Voraus,
Sven
ich bin neu hier im Forum und benötige Hilfe bei der Implementierung einer Tourenplanung zweier Fahrzeuge in CPLEX.
Zur Erklärung:
Die Planung beinhaltet zwei Fahrzeuge. Das eine Fahrzeug ist ein Trägerfahrzeug des Anderen. Es existieren mehrere Zielpositionen. Das getragene Fahrzeug soll an zu wählenden Orten vom Trägerfahrzeug starten, die Zielpositionen besuchen und an einem zu wählenden Ort wieder auf dem Trägerfahrzeug landen. Die Start- und Landepunkte sind also so zu wählen, dass die gesamte Tour minimiert wird. Eine Visualisierung ist im Anhang.
Dabei bin ich von zwei beispielhaften Zielpositionen Z1(2/8) und Z2(8/7) ausgegangen.
[IMG]https://www.coding-board.de/attachments/visualization-jpg.3764/[/IMG]
Mein formuliertes Programm sieht wie folgt aus:
/*
- OPL 12.7.1.0 Model
- Author: Sven
- Creation Date: 10.02.2019 at 12:50:30
//Data
int xstart=0; //x Coordinate Start- and End of Tour
int ystart=0; //y Coordinate Start- and End of Tour
int xA1[1..2]=[2,8]; //x Coordinates of Targets
int yA1[1..2]=[8,7]; //y Coordinates of Targets
int R=20; //max Flight Time of Drone
int a=2; //max Speed of Drone
//Help Data
float intraDist1=sqrt(((xA1[2]-xA1[1])^2)+((yA1[2]-yA1[2])^2)); //Distance between Targets
float intraFlugDist1; //Flight Distance of Drone between Targets
float wegFlugDist1; //Flight Distance from launch point of Drone to first Target
float hinFlugDist1; //Flight Distance of Drone from last Target to land point of Drone
float kombiniertZeit0; //Distance from Start to launch Point of Drone
float kombiniertZeit1; //Distance from land Point to End
float getrenntZeit1; //Distance from launch Point to land Point of Drone
//DVar
dvar int xsA1; //x Coordinate launch Point
dvar int ysA1; //y Coordinate launch Point
dvar int xlA1; //x Coordinate land Point
dvar int ylA1; //y Coordinate land Point
minimize kombiniertZeit0+getrenntZeit1+kombiniertZeit1;
subject to{
sqrt(((xsA1-xstart)^2)+((ysA1-ystart)^2))<=kombiniertZeit0;
sqrt(((xlA1-xsA1)^2)+((ylA1-ysA1)^2))<=getrenntZeit1;
sqrt(((xlA1-xstart)^2)+((ylA1-ystart)^2))<=kombiniertZeit1;
sqrt(((xA1[1]-xsA1)^2)+((yA1[1]-ysA1)^2))<=wegFlugDist1;
sqrt(((xlA1-xA1[2])^2)+((ylA1-yA1[2])^2))<=hinFlugDist1;
intraDist1<=intraFlugDist1;
(wegFlugDist1+intraFlugDist1+hinFlugDist1)/a<=getrenntZeit1;
getrenntZeit1<=R;
}
Bei Ausführung erhalte ich die Fehlermeldung: CPLEX(default) kann den Ausdruck nicht extrahieren für die quadratischen Nebenbedingungen.
Wo liegt der Fehler in diesem Programm? Ich hoffe, dass jemand weiterhelfen kann. Ich bin für jeden Tipp dankbar!
Vielen Dank im Voraus,
Sven