2017-02-17 39 views
0

可以jsprit解決VRPSPDvehicle routing problem with simultaneous pickup and delivery)?可以用jsprit解決VRPSPD嗎?

同時提貨和交貨的VRP(VRPSPD)存在以下問題:一組客戶位於交通網絡上;每個客戶我都需要一定數量的貨物(di)或廢物(pi)的交付或提貨操作(或兩者兼而有之),並且必須在 操作中訪問一次。該服務由一組容量爲Q的車輛提供;每輛車離開倉庫運載的貨物數量等於其必須交付的總量,並返回倉庫,運送的廢物量等於其拾取的總量。在旅程中的每一點上,每輛車不能承載大於其容量的總載重量。目標是最小化旅程的總長度。 如果jsprit可以解決VRPSPD,該怎麼辦呢?

+0

能否請您闡述一下這個多一點作爲一個編輯?作爲對答案的評論,你描述了(我認爲)在A地點完成交貨,然後在B,C,D和E等地點進一步交貨之前,在足夠的能力被釋放回A去做之前一個皮卡。除非我誤解了這一點,否則這不是一個合理的解決方案,這意味着您沒有很好地融合解決方案,或者存在違反您的「如果可能」條款的約束條件。 – roganjosh

+0

它與這個問題有關嗎? http://stackoverflow.com/questions/41111292/jsprit-deliver-sooner-rather-than-later-if-at-destination – roganjosh

回答

0

如果我理解了這個問題,我相信它可以。那麼,假設你有兩個商店,第一個在(5,5)和第二個在(3,7)。第一家店有一個皮卡和一個交貨,第二家店只有一個交貨。

因此:

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

謝謝你的答案。我儘可能多地嘗試,但它仍然不能保證在同一間店內同時取貨和送貨。如果有很多店鋪有取貨和送貨,其中一個取件需求遠遠大於送貨需求,我們將其定義爲p1和d1。當車輛容量是不足以拿起p1,jsprit將競爭d1,然後通過其他商店,直到車輛容量足夠,適當的時間返回到完成p1.這種情況不能保證同時完成p1和d1 。 –

+0

我能想到的最簡單的方法就是進行預處理,將同一客戶的取貨和交貨結合起來,這樣當您使用Jsprit解決問題時,每個客戶都只有一份工作。獲得解決方案後,您可以執行後期處理來分割這些組合作業,現在可以確保同一客戶的取貨和交貨同時完成。但是,這種方法可能會導致違反容量限制。 更優雅的方法是應用硬性活動約束,以確保同一客戶的取貨和交貨同時完成。 –

相關問題