0

我已将我的计划变量设置为可为空。但是使用这个构造启发式将变量初始化为空值,我认为这是计算最佳解决方案的浪费时间。从文档中,您可以使用 uninitializedEntityFilter 覆盖它。但它没有显示实际的 UninitializedTaskFilter.class。这节课的内容是什么?谢谢!

4

1 回答 1

0

如果nullable=true,您可能希望有得分约束,从而造成惩罚,因此 OptaPlanner 避免将变量设置为null

唯一的区别nullable=false是它不是内置的硬约束,因为在某些情况下 - 例如过度约束的计划 - 最好将其保留为空而不是在与另一个分配冲突的地方对其进行初始化。

在 null 上有变量的另一个用例是,如果您有多个变量,并且某些变量在某些情况下不适用。但一般来说,子类化是一种更好的方法(现在在 6 中支持)

回答你的问题:SelectionFilter。注意:uninitializedEntityFilterreinitializeVariableEntityFilter在 6.0.0.Alpha7 中重命名为以更好地反映它的用法(并且文档也已澄清)。我强烈建议更新到最新和最好的版本 6.0.0.CR5(只需按照升级配方),因为它有许多与nullable等相关的改进/错误修复。

从它的javadoc:

/**
 * Construction heuristics only change reinitializable planning variables.
 * Non reinitializable planning variable is ignored by construction heuristics.
 * This is especially useful in repeated planning use cases,
 * in which starting from scratch would waste previous results and time.
 * <p/>
 * If no {@link #reinitializeVariableEntityFilter} is specified,
 * the default considers an entity uninitialized for a variable if its value is null
 * (even if {@link #nullable()} is true).
 * <p/>
 * The method {@link SelectionFilter#accept(ScoreDirector, Object)}
 * returns false if the selection entity should be reinitialized for this variable
 * and it returns true if the selection entity should not be reinitialized for this variable
 * @return {@link NullReinitializeVariableEntityFilter} when it is null (workaround for annotation limitation)
 */
Class<? extends SelectionFilter> reinitializeVariableEntityFilter()
        default NullReinitializeVariableEntityFilter.class;
于 2013-10-21T09:24:29.343 回答