我的计划问题类似于员工排班。
我的计划实体看起来像这样
public class Menu {
@PlanningVariable(valueRangeProviderRefs = "productRange")
private String productId = null;
private String packId;
private String date;
}
现在,我有一个条件,如果两个packId是“相似的”,那么在相同数据上的两个packId的productId也必须是“相似的”,其中相似是由某些业务逻辑定义的。
我为此添加了一个严格的约束,但是产品数量大约为3000,并且要花所有的时间才能完成所有组合。有没有一种方法可以限制值范围提供者来实现这一目标(以使其仅迭代相似的产品)?
答案 0 :(得分:0)
根据OptaPlanner手册:实体的值范围必须独立于计划变量的状态。任何此类依赖都必须通过(严格)约束来处理。
话说回来,通常有更有效的模型来处理您所描述的复杂性。我从未见过1万个实例以下的任何东西,而这些实例没有有效的方法在5分钟左右的时间内解决它们。典型的缩放技巧包括预计算(有效组合,哈希等),规则/评分效率,附近选择,...以及多线程求解以解决问题。这要视情况而定,需要进行深入的审查。