使用Optaplanner,是否可以同时将类定义为计划实体和计划变量?
示例:
@PlanningEntity(difficultyComparatorClass = NodeDifficultyComparator.class)
public class Node extends ProcessChain {
// Planning variables: changes during planning, between score calculations.
private List<Node> parents;
private List<Node> childs;
@PlanningVariable(valueRangeProviderRefs = {"nodeRange"})
public List<Node> getParents() {
return parents;
}
@PlanningVariable(valueRangeProviderRefs = {"nodeRange"})
public List<Node> getChilds() {
return childs;
}
public void setParents(List<Node> parents) {
this.parents = parents;
}
public void setChilds(List<Node> childs) {
this.childs = childs;
}
}
答案 0 :(得分:2)
TSP和车辆路径示例已经具有计划实体的计划值,尽管它们都使用chained=true
变量。因为chained=true
,它意味着没有2个计划实体具有相同的计划变量(并且所有计划实体都直接或间接地连接到锚)。请参阅文档部分&#34;链式规划变量&#34;。
我怀疑在你的情况下,你不想要链,而是树,有向图或无向图。无向图(=允许循环的图形)对于构造启发式而言是有问题的,因为开箱即用它们不能构建具有循环的图形。对于树和有向图:它应该在理论上起作用,但是您可能需要自定义移动(请参阅文档)以使移动有效。在未来,我们希望支持树结构,类似于我们支持链的方式(用于作业车间调度)。
在任何情况下:您目前无法在@PlanningVariable
个计划实体上拥有List
。你需要将许多2个关系变成许多2和1个关系。