首先,問題與時間表問題有關。我有要求說,在調度步驟之後,不管算法運行了多長時間,所有預定的課程都必須滿足嚴格的約束條件。而一個問題是,我怎麼能做到這一點?我的求解器的配置看起來像這樣OptaPlanner算法對硬約束的影響
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<solutionClass>com.krakfin.praca.mgr.cp.algorytm.solver.TimetableSolution</solutionClass>
<entityClass>com.krakfin.praca.mgr.cp.algorytm.domain.Lesson</entityClass>
<scoreDirectorFactory>
<scoreDefinitionType>HARD_MEDIUM_SOFT</scoreDefinitionType>
<scoreDrl>com/krakfin/praca/mgr/cp/algorytm/solver/algorytmScoreRules.drl</scoreDrl>
<initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
</scoreDirectorFactory>
<environmentMode>FAST_ASSERT</environmentMode>
<constructionHeuristic>
<constructionHeuristicType>FIRST_FIT_DECREASING</constructionHeuristicType>
</constructionHeuristic>
<localSearch>
<unionMoveSelector>
<changeMoveSelector>
<valueSelector>
<variableName>dzienNrLekcji</variableName>
</valueSelector>
</changeMoveSelector>
<changeMoveSelector>
<valueSelector>
<variableName>sala</variableName>
</valueSelector>
</changeMoveSelector>
</unionMoveSelector>
<termination>
<!--Default value if not set-->
<secondsSpentLimit>180</secondsSpentLimit>
<bestScoreLimit>0hard/0medium/0soft</bestScoreLimit>
</termination>
<acceptor>
<moveTabuSize>7</moveTabuSize>
</acceptor>
<forager>
<acceptedCountLimit>100</acceptedCountLimit>
</forager>
</localSearch>
</solver>
但舉例來說,如果我1分分鐘的結果運行算法看起來像(-6hard/-24medium/365soft)。有沒有辦法讓求解器不能安排儘可能多的課程,而是要滿足所有嚴格的約束條件?
註釋掉FAST_ASSERT以在一分鐘內解決更快。 –
對於禁忌搜索,已接受的計數限制爲100。使用基準測試人員嘗試使用禁忌搜索嘗試更高的值,或嘗試使用低值(通常爲1)的延遲接受。如果不存在過度約束的規劃,它可以解決這個問題並不會感到驚訝。 –
另見終止,檢查是否可行。瞭解AND和OR終止合成的區別。 –