2017-02-17 4 views
0

Kann jsprit die VRPSPD (vehicle routing problem with simultaneous pickup and delivery) lösen?kann Jsprit das VRPSPD lösen?

Das VRP mit gleichzeitiger Aufnahme und Zustellung (VRPSPD) ist das folgende Problem: eine Gruppe von Kunden befindet sich in einem Transportnetzwerk; Jeder Kunde benötigt entweder eine Lieferung oder eine Abholung (oder beides) einer bestimmten Menge an Waren (di) oder Abfall (pi) und muss einmal für beide Betriebe besucht werden. Der Service wird von einer Reihe von Fahrzeugen mit begrenzter Kapazität Q zur Verfügung gestellt; Jedes Fahrzeug verlässt das Depot mit einer Warenmenge, die der Gesamtmenge entspricht, die es liefern muss, und es wird mit einer Abfallmenge in Höhe des Gesamtbetrags, die es abholte, in das Depot zurückgeschickt. In jedem Punkt seiner Tour kann jedes Fahrzeug eine Gesamtlast von mehr als seiner Kapazität nicht tragen. Ziel ist es, die Gesamtlänge der Touren zu minimieren. Wenn Jsprit das VRPSPD lösen kann, wie geht das?

+0

Können Sie bitte etwas mehr als bearbeiten näher darauf eingehen? Als Kommentar zu der Antwort beschreibst du (denke ich) eine Situation, in der eine Lieferung am Standort A erfolgt, dann weitere Lieferungen an, sagen wir B, C, D und E, bevor genügend Kapazität frei ist, um nach A zurückzukehren Ein Pick-Up. Dies ist keine logische Lösung in einem eingeschränkten Problem, es sei denn, ich missverstehe, was bedeutet, dass Sie entweder bei einer Lösung nicht gut konvergiert sind oder Einschränkungen vorhanden sind, die gegen Ihre "wenn möglich" -Klausel verstoßen. – roganjosh

+0

Ist es mit dieser Frage verbunden? http://stackoverflow.com/questions/41111292/jsprit-deliver-sooner-rather-than-later-if-at-destination – roganjosh

Antwort

0

Wenn ich das Problem verstanden hätte, glaube ich, dass es kann. Nehmen wir an, Sie haben zwei Geschäfte, die erste in (5, 5) und die zweite in (3, 7). Der erste Shop hat eine Abholung und auch eine Lieferung, der zweite Shop hat nur eine Lieferung.

Deshalb:

Pickup pck_shop1 = Pickup.Builder.newInstance("pck").addSizeDimension(0, 1).setLocation(5, 5)).build(); 
Delivery dlv_shop1 = Delivery.Builder.newInstance("dlv_1").addSizeDimension(0, 1).setLocation(5, 5)).build(); 
Delivery dlv_shop2 = Delivery.Builder.newInstance("dlv_2").addSizeDimension(0, 1).setLocation(3, 7)).build(); 
+0

Danke für Sie answer.I versuchte so viel wie Sie, aber es kann immer noch nicht garantieren, dass im selben Geschäft, um Abholung und Lieferung zur gleichen Zeit zu nehmen. Wenn es viele Geschäfte gibt, die Abholung und Lieferung haben, und einer von ihnen, dass Abholbedarf viel mehr als Liefernachfrage ist, haben wir es als p1 und d1 definiert. Wenn die Fahrzeugkapazität ist nicht genug, um p1 abzuholen, jsprit wird d1 konkurrieren und dann durch andere Geschäfte gehen, bis die Fahrzeugkapazität genug ist, die passende Zeit, um zurückzukehren, um die p1 abzuschließen. Diese Situation kann nicht die Vervollständigung von p1 und d1 zur gleichen Zeit garantieren . –

+0

Der einfachste Weg, den ich mir vorstellen kann, ist eine Vorverarbeitung, um Abholung und Lieferung bei demselben Kunden zu kombinieren, so dass jeder Kunde genau einen Job hat, wenn Sie Jsprit verwenden, um das Problem zu lösen. Nachdem Sie die Lösung erhalten haben, können Sie eine Nachbearbeitung durchführen, um diese kombinierten Jobs aufzuteilen, und jetzt ist sichergestellt, dass die Abholung und Lieferung bei demselben Kunden gleichzeitig erfolgt. Diese Methode kann jedoch zu einer Verletzung der Kapazitätsbeschränkung führen. Eine elegantere Methode besteht darin, eine Einschränkung für harte Aktivitäten anzuwenden, um sicherzustellen, dass Abholung und Zustellung bei demselben Kunden gleichzeitig erfolgen. –

Verwandte Themen