Optaplanner:同时规划实体和规划变量?

时间:2014-05-22 14:16:57

标签: java constraint-programming optaplanner

使用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;
        }
    }

1 个答案:

答案 0 :(得分:2)

TSP和车辆路径示例已经具有计划实体的计划值,尽管它们都使用chained=true变量。因为chained=true,它意味着没有2个计划实体具有相同的计划变量(并且所有计划实体都直接或间接地连接到锚)。请参阅文档部分&#34;链式规划变量&#34;。

我怀疑在你的情况下,你不想要链,而是树,有向图或无向图。无向图(=允许循环的图形)对于构造启发式而言是有问题的,因为开箱即用它们不能构建具有循环的图形。对于树和有向图:它应该在理论上起作用,但是您可能需要自定义移动(请参阅文档)以使移动有效。在未来,我们希望支持树结构,类似于我们支持链的方式(用于作业车间调度)。

在任何情况下:您目前无法在@PlanningVariable个计划实体上拥有List。你需要将许多2个关系变成许多2和1个关系。