OptaPlanner:具有多个规划变量的 Sequal 构造启发式,这些变量要么全为空,要么全为非空
OptaPlanner: Sequal construction heuristic with multiple planning variables that are either all null or all non-null
根据文档,对于我的实体上的多个规划变量,我需要在我的构造启发式方法中使用顺序方式,这样它就不会失控。但是根据文档,
Sequential: One variable is assigned at a time....
这对我来说是个问题,因为我有一个 硬性 约束,它说讲座不能有时间表,但没有房间,反之亦然,但如果没有分配也没关系(过度约束)。发生的事情是没有分配任何东西,因为这不会破坏任何硬约束,只有中等约束。任何way/pattern解决这个问题?
啊,我明白了:因为sequential先分配一个周期,然后在尝试分配房间之前进行score calc,所以它会选择不分配那个周期,因为它在period != null && room == null
时打破了一个硬约束.
有意思。我能想到的一个解决方法是在该顺序配置中为周期选择器(第一个)的计划值添加一个过滤器。该过滤器过滤掉 "null" 值,这会强制 CH 将周期分配给 non-null 值。
另一种方法是在自定义阶段使用自定义 CH。在示例中查找 "Initializer" 类。一些较旧的示例可能仍在使用一个。
根据文档,对于我的实体上的多个规划变量,我需要在我的构造启发式方法中使用顺序方式,这样它就不会失控。但是根据文档,
Sequential: One variable is assigned at a time....
这对我来说是个问题,因为我有一个 硬性 约束,它说讲座不能有时间表,但没有房间,反之亦然,但如果没有分配也没关系(过度约束)。发生的事情是没有分配任何东西,因为这不会破坏任何硬约束,只有中等约束。任何way/pattern解决这个问题?
啊,我明白了:因为sequential先分配一个周期,然后在尝试分配房间之前进行score calc,所以它会选择不分配那个周期,因为它在period != null && room == null
时打破了一个硬约束.
有意思。我能想到的一个解决方法是在该顺序配置中为周期选择器(第一个)的计划值添加一个过滤器。该过滤器过滤掉 "null" 值,这会强制 CH 将周期分配给 non-null 值。
另一种方法是在自定义阶段使用自定义 CH。在示例中查找 "Initializer" 类。一些较旧的示例可能仍在使用一个。