CPLEX Fehler! Tourenplanung zweier Fahrzeuge - Quadratische Nebenbedingungen

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:

/*
  • 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
 
stahsven96 schrieb:
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;

intraDist1<=intraFlugDist1;

(wegFlugDist1+intraFlugDist1+hinFlugDist1)/a<=getrenntZeit1;

getrenntZeit1<=R;
}

Beschreib doch bitte mal in ganz konkreten Worten, was genau Du mit diesen Zeilen beabsichtigst...
 
  • Gefällt mir
Reaktionen: stahsven96
Danke für die Antwort!

Also ich habe mein Modell nochmal überarbeitet. Eine Visualisierung ist anbei. Es lautet wie folgt:

//Data

int start[1..2]=[0,0];

int R=10;
int a=2;

int z1A1[1..2]=[2,8];
int z2A1[1..2]=[7,8];

float intraDist1=sqrt(((z2A1[1]-z1A1[1])^2)+(z2A1[2]-z1A1[2])^2);
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{

kombiniertZeit0>=0;
(((sA1[1]-start[1])^2)+(sA1[2]-start[2])^2)<=kombiniertZeit0^2;

getrenntZeit1>=0;
(((lA1[1]-sA1[1])^2)+(lA1[2]-sA1[2])^2)<=getrenntZeit1^2;

kombiniertZeit1>=0;
(((start[1]-lA1[1])^2)+(start[2]-lA1[2])^2)<=kombiniertZeit1^2;

wegFlugDist1>=0;
(((z1A1[1]-sA1[1])^2)+(z1A1[2]-sA1[2])^2)<=wegFlugDist1^2;

hinFlugDist1>=0;
(((lA1[1]-z2A1[1])^2)+(lA1[2]-z2A1[2])^2)<=hinFlugDist1^2;

intraDist1<=intraFlugDist1;

(wegFlugDist1+intraFlugDist1+hinFlugDist1)/a<=getrenntZeit1;

R>=getrenntZeit1;

}

Die Summe von kombiniertZeit0, getrenntzeit1 und kombiniertZeit 1 soll minimiert werden.
Die Koordinaten sA1 und lA1 sind dabei die Entscheidungsvariablen und sollen optimal bestimmt werden.

Mit einer Nebenbedingung der Form:

kombiniertZeit0>=0;
(((sA1[1]-start[1])^2)+(sA1[2]-start[2])^2)<=kombiniertZeit0^2;

möchte ich darstellen, dass kombiniertZeit0 mindestens so groß ist wie die Länge der Strecke von start bis sA1.
Analog für die anderen Nebenbedingungen.

Durch die Umformungen ist das Problem der quadratischen Nebenbedingungen nicht mehr vorhanden, jedoch erhalte ich solution(infeasible).

Ich hoffe du verstehst das grundlegende Problem.

Danke für jeden Tipp! Sven
Ergänzung ()

Visualization.jpg
 
Zurück
Oben