2015-02-10 29 views
1

我正在與Optaplanner合作解決類似於患者入院調度示例的問題。optaplanner不動產計劃實體

我面臨兩個問題。

首先當有人(不是optaplanner)定位其中一個計劃實體(類似於示例中的bedDesignation)時,該計劃實體的計分與其他計分實體相同。 手動放置的計劃實體成爲不可移動的計劃實體,但它仍然像移動計劃實體一樣得分。正因爲如此,它打破了一些硬性約束。其次,當某個計劃實體(類似於bedDesignation)被某人(而不是optaplanner)定位時,該計劃實體在本地搜索階段被移動。 本地搜索階段被配置成這樣的(比實施例相同的結構):

<localSearch> 
    <unionMoveSelector> 
     <moveListFactory> 
     <moveListFactoryClass>org.optaplanner.examples.pas.solver.move.factory.BedDesignationPillarPartSwapMoveFactory</moveListFactoryClass> 
     </moveListFactory> 
    </unionMoveSelector> 
    <acceptor> 
     <entityTabuSize>7</entityTabuSize> 
    </acceptor> 
    <forager> 
     <acceptedCountLimit>1000</acceptedCountLimit> 
    </forager> 
    </localSearch> 

的BedDesignationPillarPartSwapMoveFactory類是從示例不變。 我在文檔中看到,對於不可移動的規劃實體,我們必須確保自定義的moveListFactory不會移動不可移動的實體。但是如何?在config xml文件中還是在類本身中?

謝謝您的幫助。

回答

1

調整BedDesignationPillarPartSwapMoveFactory跳過不可移動的實體(BedDesignations)(例如,如果它們是isLocked() == true)。或者更好:不要使用BedDesignationPillarPartSwapMoveFactory,只需使用通用移動選擇器:changeMove,swapMove,pillarChangeMove和pillarSwapMove。支柱移動現在選擇6.2中的子支柱,但是我還沒有測試過這個例子是否會給出更好的結果(我相信會這樣) - 這可能會使定製工廠過時。

+0

謝謝你的回答。 我已更改配置文件以使用通用移動。不動產計劃實體現在真的是不可動搖的。 但是unionMoveSelector的哪個配置更好(changeMove,swapMove,pillarChangeMove或pillarSwapMove)? 然而,分數的問題仍然存在。不動產計劃實體被評分爲可移動實體。 – Bibou3618 2015-02-10 14:15:42

+0

難道不可移動的實體像可移動實體一樣得分嗎?這是一個固定的成本,在規劃過程中永遠不會改變,所以如果不存在,它不會改變找到的最佳解決方案。此外,考慮沒有2個實體應該衝突的分數約束。如果1是不可移動的而另一個不是,你仍然希望它觸發。 – 2015-02-11 13:24:41

+0

至於哪個配置更好,請參閱關於Benchmarker的章節(以及我最近關於YouTube的視頻)。 – 2015-02-11 13:25:08

相關問題