我是新來的路線優化,並希望你的幫助,在使用jsprit解決以下業務需求。我從StefanSchröder那裏得到了一些反饋,他幫助我學習了一些關於jsprit的基礎知識。我將首先解釋業務需求,然後提出幾個問題。具有多個倉庫,作業類型和目的地的路線優化
目標是安排需要在一個月內完成的維護工作列表。每個月的日程安排都需要準備好。這裏的目標是每天執行最多的工作。
- 有4個倉庫每一個的區域中
- 每個區域具有大約70的倉庫,總共300個倉庫
- 那個區域內的每個儲庫和倉庫之間的距離是已知的
- 有每個區域3-4輛不同類型的車輛共計12輛車
- 區域內的車輛只能在該區域內提供倉庫
- 區域內的車輛具有相同的起點^ h恰好是終點
- 車輛沒有任何能力,皮卡或交付要求
- 車輛僅用於運輸工人誰將會執行維護作業
- 每輛車的平均速度是已知的
- 大概有80維護作業類型
- 各種作業類型需要在已知的時間以分鐘
- 維護作業沒有在特定的時間
- 按月計算開始,有醃肉第二是需要進行
- 這些作業200個維修工作可以在任何倉庫
- 一個以上的工作可以在在同一天或不同天的同一倉庫發生
- 境內有3個8小時班一天。 6 AM-2PM,2 PM-10PM和晚上10時到早上6點
- 的車輛將離開倉庫倉庫在輪班開始和八個小時輪班內參觀儘可能多的倉庫
- 的車輛必須等待,而倉庫被移動到下一個倉庫或返回車廠倉庫之前執行工作
我基本的理解是,維修工作可以被定義爲在jsprit服務和開始/返回時間可以爲每個被設置車輛。此外,成本矩陣可用於增加車輛和倉庫之間關係的時間和距離。我有的問題是:
- 每個維護作業都需要定義爲一個服務,因此會有200個服務對象傳遞給VRP求解器,是否正確? VehicleTypeImpl具有addCapacityDimension(),setCostPerDistance()和setCostPerTime()方法。究竟是什麼以及他們如何應用上述案例?
- Service.Builder具有addSizeDimension()方法。它有什麼作用?
- costMatrixBuilder具有添加TransportDistance和TransportTime的方法。這些方法使用哪些單位,我如何使用它們?
- 對於每個車廠,需要定義一個座標並將其傳遞給每個VehicleImpl的setStartLocationCoordinate()方法。這是正確的嗎?
- vehicleBuilder有setLatestArrival(double maxDuration);哪個單位在這裏使用?
我很感謝任何幫助解決上述案件。
感謝, 亞當
EDIT1:
幾個問題
答setEarliestStart()和setLatestArrival()方法接受雙重價值,我怎麼可以指定最早出發和最新到貨的實際日期到這些方法?例如,開始時間是2014年11月28日下午2點,結束時間是當天晚上10點。
B.有沒有辦法指定幾分鐘內的服務時間?
C. VehicleTypeImpl.Builder.setMaxVelocity(double inMeterPerSeconds)方法需要最大速度,有沒有辦法指定車輛的平均速度? D.所有的車輛必須在三班制中工作;這是否意味着我將不得不定義同一輛車三次,每個班次有不同的最早出發時間和最晚到達時間?由於作業可以在本月的任何時候執行,每個作業的時間窗口是否會以月份開始和月末的形式傳遞給Service.Builder.setTimeWindow()方法?
非常感謝Stefan。我非常感謝你的幫助。你能否詳細說明這些單位是如何定義的? jsprit如何知道距離以km,時間以分鐘爲單位,平均速度以km/h爲單位?我已經看過源代碼,並有幾個問題(上面提出的原始問題) – Adam 2014-11-27 11:10:19
我假設你使用這個https://github.com/jsprit/jsprit/blob/master/jsprit-core/src/main/ java/jsprit/core/util/VehicleRoutingTransportCostsMatrix.java來定義您的傳輸時間和距離。然後,你必須知道你投入矩陣的距離單位。如果使用km,則每個距離參數的成本也應使用km,例如10€/ km因此.setCostPerDistance(10)。如果你使用m,你的成本參數應該定義每米的成本,例如0.01歐元/米因此.setCostPerDistance(0.01)。 – 2014-11-27 11:41:42
是的,你是對的。我使用VehicleRoutingTransportCostsMatrix來定義運輸時間和距離。有沒有辦法用實際的日期值來指定車輛的最早出發和最晚到達以及作業的時間窗口?我打算使用只接受double值的setEarliestStart(),setLatestArrival()和setTimeWindow()方法。再次感謝Stefan,我非常感謝你的幫助:) – Adam 2014-11-30 07:01:22