交替构造启发式和本地搜索阶段
Alternate Construction heuristic and Local Search phases
我有一个基于 MeetingScheduling 示例的案例。
结果很好。
调度从构造启发式阶段开始。
然后是本地搜索阶段。
CH 阶段减少了硬约束和中等约束惩罚,而 LS 似乎减少了软约束惩罚。
我发现当我重新运行调度时,CH阶段再次减少了硬约束和中约束惩罚。
那么,我们能否将求解器配置为多次交替 CH 和 LS 阶段?
当前求解器配置:
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<solutionClass>org.optaplanner.examples.meetings.domain.MeetingSchedule</solutionClass>
<entityClass>org.optaplanner.examples.meetings.domain.Meeting</entityClass>
<scoreDirectorFactory>
<scoreDrl>org/optaplanner/examples/meetings/solver/meetingsScoreRules.drl</scoreDrl>
</scoreDirectorFactory>
<termination>
<minutesSpentLimit>20</minutesSpentLimit>
</termination>
</solver>
这应该有效:
<solver>
...
<constructionHeuristic/>
<localSearch>
<termination>...stepCountLimit or calculateCountLimit?...</termination>
</localSearch>
<constructionHeuristic/>
<localSearch>
<termination>...stepCountLimit or calculateCountLimit?...</termination>
</localSearch>
<constructionHeuristic/>
<localSearch>
<termination>...stepCountLimit or calculateCountLimit?...</termination>
</localSearch>
</solver>
并且通过编程 API 您可以将其动态化为 n。
话虽如此,这可能不是最佳解决方案。正确的解决方案是重新加热(尚不支持)。
我有一个基于 MeetingScheduling 示例的案例。 结果很好。 调度从构造启发式阶段开始。 然后是本地搜索阶段。 CH 阶段减少了硬约束和中等约束惩罚,而 LS 似乎减少了软约束惩罚。
我发现当我重新运行调度时,CH阶段再次减少了硬约束和中约束惩罚。 那么,我们能否将求解器配置为多次交替 CH 和 LS 阶段?
当前求解器配置:
<?xml version="1.0" encoding="UTF-8"?>
<solver>
<solutionClass>org.optaplanner.examples.meetings.domain.MeetingSchedule</solutionClass>
<entityClass>org.optaplanner.examples.meetings.domain.Meeting</entityClass>
<scoreDirectorFactory>
<scoreDrl>org/optaplanner/examples/meetings/solver/meetingsScoreRules.drl</scoreDrl>
</scoreDirectorFactory>
<termination>
<minutesSpentLimit>20</minutesSpentLimit>
</termination>
</solver>
这应该有效:
<solver>
...
<constructionHeuristic/>
<localSearch>
<termination>...stepCountLimit or calculateCountLimit?...</termination>
</localSearch>
<constructionHeuristic/>
<localSearch>
<termination>...stepCountLimit or calculateCountLimit?...</termination>
</localSearch>
<constructionHeuristic/>
<localSearch>
<termination>...stepCountLimit or calculateCountLimit?...</termination>
</localSearch>
</solver>
并且通过编程 API 您可以将其动态化为 n。
话虽如此,这可能不是最佳解决方案。正确的解决方案是重新加热(尚不支持)。