基于另一个实体的Optaplanner极限valueRangeProvider

时间:2018-12-20 11:58:44

标签: optaplanner

我的计划问题类似于员工排班。

我的计划实体看起来像这样

public class Menu {
    @PlanningVariable(valueRangeProviderRefs = "productRange")
    private String productId = null;
    private String packId;
    private String date;
}

现在,我有一个条件,如果两个packId是“相似的”,那么在相同数据上的两个packId的productId也必须是“相似的”,其中相似是由某些业务逻辑定义的。

我为此添加了一个严格的约束,但是产品数量大约为3000,并且要花所有的时间才能完成所有组合。有没有一种方法可以限制值范围提供者来实现这一目标(以使其仅迭代相似的产品)?

1 个答案:

答案 0 :(得分:0)

根据OptaPlanner手册:实体的值范围必须独立于计划变量的状态。任何此类依赖都必须通过(严格)约束来处理。

话说回来,通常有更有效的模型来处理您所描述的复杂性。我从未见过1万个实例以下的任何东西,而这些实例没有有效的方法在5分钟左右的时间内解决它们。典型的缩放技巧包括预计算(有效组合,哈希等),规则/评分效率,附近选择,...以及多线程求解以解决问题。这要视情况而定,需要进行深入的审查。