2014-09-04 53 views
0

難以通過硬Contraint在同一路線上有兩件或多件貨件。jsprit VRP相關職位hard Contraint

如果不是,你知道其他的java庫可以處理這種限制嗎?

謝謝!

+0

你能更精確一點嗎?你想要建模什麼?你想確保貨物A和B在同一條路線上嗎? – 2014-09-05 07:24:51

+0

是的,我的問題是要確保多個裝運A,B,...在相同的路線。謝謝! – 2014-09-05 08:20:37

回答

0

一定要確保出貨量都在同一條路線的最簡單方法是標記這些貨物與技術

shipmentBuilder.addRequiredSkill("tag") 

但你需要標記特定的車輛,以及:

vehicleBuilder.addSkill("tag") 

並確保您使算法考慮技能/這些標籤(請參閱https://github.com/jsprit/jsprit/blob/master/WHATS_NEW.md - 您需要使用1.3.2-SNAPSHOT)。

如果你不想用標籤分配一個特定的車輛,你需要實現一個core.problem.constraint.HardRouteStateLevelConstraint這基本上是這種方法

public boolean fulfilled(JobInsertionContext insertionContext) 

確保insertionContext.getJob() [這是要插入的作業]可以插入到insertionContext.getRoute()中。在這一點上,你需要知道兩件事情:

  • insertionContext.getJob()的相關貨物,需要在相同的路線爲insertionContext.getJob()
  • 即出貨量是否這些相關的工作之一已被分配給路由,如果是,則此路由是否與insertionContext.getRoute()相同

對於後面的信息,您需要定義爲您提供作業路由分配的狀態。我將定義一個problemState其根據更新這樣的:

static class UpdateJobRouteAssignment implements StateUpdater,JobInsertedListener,InsertionStartsListener { 

     StateManager stateManager; 

     UpdateJobRouteAssignment(StateManager stateManager) { 
      this.stateManager = stateManager; 
     } 

     @Override 
     public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { 
      stateManager.putProblemState(stateManager.createStateId(job2insert.getId()), VehicleRoute.class, inRoute); 
     } 

     @Override 
     public void informInsertionStarts(Collection<VehicleRoute> vehicleRoutes, Collection<Job> unassignedJobs) { 
      for(VehicleRoute r : vehicleRoutes){ 
       for(Job j : r.getTourActivities().getJobs()){ 
        informJobInserted(j,r,0.,0.); 
       } 
      } 
     } 
    } 

添加您的狀態更新和您的約束,以您的國家/ ConstraintManager和你做。

+0

路線馴化的優化: 問題是模擬幾個信使,每個信使由幾個任務任務1,任務2 ..組成,它們必須在相同的路線中,並且相對於順序,1 2 ..,我們正在談論駿馬工作。 每個信使的第一個任務有一個時間窗口。 只有兩個任務的信使,我可以通過發貨,皮卡作爲第一任務和交付第二,但超過兩個? 任何想法? 謝謝。 – 2014-09-06 10:36:21

+0

我確信您可以在此處獲得幫助:https://groups.google.com/group/jsprit-mailing-list。只需將其重新發布到那裏,您就可以捕獲已解決類似問題的用戶。 – 2014-09-08 17:47:35