【问题标题】:OptaPlanner iterating through custom moves in original orderOptaPlanner 以原始顺序迭代自定义移动
【发布时间】:2023-04-06 18:43:01
【问题描述】:

我有一个基本的计划任务,我试图在时间段列表中安排活动。我正在创建一个初始解决方案,在该解决方案中,我分配的活动非常接近它们最终应该进入的时间段,例如:

activity a -> timeSlot 10  
activity b -> timeSlot 50  
activity c -> timeSlot 100

从这一点开始,我希望 OptaPlanner 将这些活动简单地向后移动,一次一个时间槽,直到我的硬约束或软约束都没有被打破。

我创建了一个自定义更改移动工厂,我正在尝试这样做:

public List<Move> createMoveList(ActivityScheduler activityScheduler) {
    List<Move> moveList = new ArrayList<>();
    List<TimeSlot> timeSlotList = activityScheduler.getTimeSlotList();

    for (Activity activity : activityScheduler.getActivityList()) {
        for (int n = activity.getStartingTimeSlot().getIndex(); n >= 0; n--) {
            moveList.add(new TimeSlotChangeMove(activity, timeSlotList.get(n)));
        }
    }

    return moveList;
}

我已经在我的配置中将我的选择顺序设置为 ORIGINAL:

<localSearch>
    <moveListFactory>
        <selectionOrder>ORIGINAL</selectionOrder>
        <moveListFactoryClass>...TimeSlotChangeMoveFactory</moveListFactoryClass>
    </moveListFactory>
    ...

我希望当它移动时说活动 c,它将移动到 timeSlot 99,然后是 98、97 等,直到没有限制被打破。但这不是正在发生的事情。例如第一步显示:

2014-08-27 13:37:12.382 DEBUG 7401 --- [nio-8080-exec-8] o.o.c.i.l.DefaultLocalSearchSolverPhase  :  
Step index (1), time spend (326), score (-16hard/13soft), new best score (-16hard/13soft),  
accepted/selected move count (1000/2242) for picked step (Do Homework #2 -> Required Slots: 2   Starting TimeSlot: TimeSlot 2035 => TimeSlot 1240).

它将活动向后移动太远(从插槽 2035 到 1240)。如何让 OptaPlanner 仅将活动移到需要的位置而不进一步移动?

【问题讨论】:

    标签: drools optaplanner


    【解决方案1】:

    听起来您想使用&lt;constructionHeuristic&gt;,而不是&lt;localSearch&gt;。查看有关构建启发式的文档章节。

    如果您坚持使用&lt;localSearch&gt;,请配置&lt;pickEarlyType&gt;。请参阅有关本地搜索的文档,pickEarlyType 部分。

    【讨论】:

    • 啊...感谢您的回复,但我仍然需要一些帮助。我使用了一个简单的首次拟合构造启发式(没有本地搜索),但这仍然没有按照我想要的方式安排事情。如果我有一个从插槽 100 开始的活动,我希望它向后移动到插槽 99,而不是插槽 1,这就是正在发生的事情。阅读文档并不能说明我如何做到这一点。你能提供任何进一步的见解吗?
    • 查看文档中的规划值强度和最弱拟合递减。
    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 2020-12-28
    • 2013-07-15
    • 2010-10-14
    • 1970-01-01
    • 2013-01-27
    • 2019-01-15
    • 1970-01-01
    相关资源
    最近更新 更多