timefold.ai 部分固定

问题描述 投票:0回答:1

我目前正在使用 timefold.ai 优化 java 框架进行一些测试。

我有以下场景:我有需要在特定时间执行的任务。然而,它们是可选的,不必进行安排。但如果有安排,他们必须在特定时间开始。

此外,还有其他任务(相同类型的任务,因此它们位于同一集合中)并由相同的

PlanningEntity
表示,它们在开始时间以及是否已安排上都完全灵活。

据我所知,常规固定不起作用,因为它固定了整个规划实体。我的简化设置看起来像这样(不包括其他不相关的约束)。

@PlanningEntity
public class Task {

    @PlanningVariable(valueRangeProviderRefs = ["myValueRangeProvider"], nullable = true)
    private BigDecimal start;
  
    @PlanningPin
    private boolean pinned;

}
@PlanningSolution
class PlanningProblem {

    @ValueRangeProvider(id = "myValueRangeProvider")
    private CountableValueRange<BigDecimal> possibleStarts;

    @PlanningEntityCollectionProperty
    private List<Task> tasks;

}

有人知道如何很好地建模吗?有没有办法部分固定变量?我还考虑过有两个规划变量,一个

isScheduled
和另一个
start
,并以某种方式为每个实体使用特定的值范围提供程序,但我只能为我假设的每个实体类型提供一个?

谢谢!

java optaplanner timefold
1个回答
0
投票

我会使用硬约束。

在任务分配和车辆路由中,常见到 minStart 和 maxStart:

class Task {
    LocalDateTime minStart;
    LocalDateTime maxStart;
    
    @PlanningVariable(allowsUnassigned=true)
    LocalDateTime start; // 15 minute granularity (time grain pattern)
}

如果 minStart 和 maxStart 均非空且相等,则它会有效地将任务固定到该时间,或者不将其全部分配

© www.soinside.com 2019 - 2024. All rights reserved.