2016-12-12 58 views
0

我有,我想利用Optaplanners(V6.4)ValueRangeProvider特徵的VRP路由問題的一個變種。不過,我有些困惑,在某些情況下它是如何工作的。我的理解是,如果我選擇一組項目作爲客戶對象的值範圍,則該客戶實例的previousStandStill可能只是該範圍內的一個StandStill。Optaplanner VRP ChainedGraph值範圍在PlanningEntity

在我來說,我有一個可能已經佈置了一些客戶。我想限制搜索空間,使分配旅行不會浪費時間匹配其他車輛。我期待着大量的客戶,所以我希望儘可能提高性能。

我所定義的previousStandStill範圍如下

@PlanningVariable(
     valueRangeProviderRefs = {"possibleVehicles", "possibleCustomersInSameVehicle"}, 
     graphType = PlanningVariableGraphType.CHAINED) 
public Standstill getPreviousStandstill() { 
    return previousStandstill; 
} 
  • 分配客戶 「可能車」將只返回車輛 他們被分配到潛在客戶將是分配給所有 的客戶名單同一車輛+所有未分配的客戶
  • 未分配的客戶將有所有車輛&在其範圍內的所有客戶。

這似乎工作正常,但有幾個有問題的案例發生,給了我幾個問題。

  1. 我修改的數據用於一個已分配的客戶設置爲使得它的負載是非常大的(100)當車輛的容量只有7.我的最終溶液導致的溶液凡分配顧客被分配到一輛不在其ValueRange中的車輛,那是Vehicles NextCustomer。這顯然打破了我爲該分配客戶設置的價值範圍,所以我不知道這是怎麼發生的。我唯一的猜測是未分配的客戶被指定爲車輛中的第一客戶,然後是分配的客戶(未分配的值在範圍內)。未分配後來被轉移到另一輛車上,從而將分配的客戶直接留在車輛後面。我的問題是ValueRange允許這種情況發生,valueRange曾經被忽略過?

  2. 我使用VRP問題的默認值範圍運行相同的問題,但添加了一個規則來處罰分配的客戶在錯誤的車輛中時的處罰。兩種解決方案都得出了相同的答案,但即使搜索空間應該更大,該解決方案似乎也能更快地工作。不知道在我的代碼中是否有bug,或者是否因爲一個小的測試用例而被修改得更快。

  3. 最後的電流值範圍在技術上將允許客戶分配,即使未分配到另一輛汽車的未分配旅行後進行分配。是否有任何方法來模擬問題,使ValueRange位於車輛上。所以我們說這輛車可能只包含來自分配列表的NextCustomers列表+ UnassignedList中的任何人?

  4. 是否託運值範圍是由每個動作之前?它可以在解決時更新嗎?

回答

0

糾正我,如果我'錯了,但OptaPlanner用戶指南6.4.0在「4.3.5.2.3。在規劃實體ValueRangeProvider」到底最終是一個警告「A ValueRangeProvider在計劃實體目前不與鏈接變量兼容。「您應該使用鏈接變量的過濾器來限制搜索空間。