2015-06-19 38 views
2

強大的文本你好Optaplanner專家,返回多個解決方案來調度問題與optaplanner

我非常新的OptaPlanner,所以請原諒任何初始或基本問題。我用它來安排:

set of jobs, A, B and C, which can be completed by 5 resources, say Will, Jane, Roy, Tom, Jeff. 

所有這些工作都可以由任何資源5來完成。會有一些算法根據軟約束來計算誰是最合適的,但我還沒有。現在,我只需要拿出多種解決方案,說

1. Will - A, Roy - B and Jeff - C 
2. Roy - B, Tom - B and Jane - C 
... and so on 

有沒有辦法做到這一點在OptaPlanner 6.2.0 Final版?我只看到一種獲得最佳解決方案的方法。我相信我錯過了一些東西,只是不確定是什麼。任何指針將不勝感激。

謝謝您的時間,

愛麗絲

回答

1

有可能是一個更好的解決方案,但我建議通過增加一個SolverEventListener到您的求解:

solver.addEventListener(new SolverEventListener<Solution>() { 
    @Override 
    public void bestSolutionChanged(BestSolutionChangedEvent<Solution> event) { 
     // TODO Auto-generated method stub 
    } 
}); 

的bestSolutionChanged方法都會被調用一次找到更好的解決方案。在這裏,您將需要克隆(我想,傑弗裏就知道更好)的解決方案,並將其保存到列表(也許保留最後5個最好的解決方案,還是什麼?我會檢查的克隆過程需要多長時間,因爲該方法應該返回,而很快,

+0

這確實是推薦的方式:)在過去,人們也砍死'BestSolutionRecaller'提供這種行爲,但不這樣做。 在未來,我想也完全支持帕累託優化的開箱即用,它會給你*有趣*的列表(如在足夠的多樣性)最佳的解決方案(見文檔「二八」)。 –

+0

謝謝code4dc和@Geoffrey De Smet。我試過了,但我在bestSolutionChanged方法中沒有超過1次。今天我沒有花費太多時間,但我會做更多的調試,看看究竟是什麼問題。 – Alice

+0

是啊......現在我還記得他們爲什麼黑客'BestSolutionRecaller':因爲在監聽的方式,'bestSolutionChanged()'只調用時,解決方案改善(這樣嚴格的更高的分數),而不是當以同樣的比分被發現。 .. –