【发布时间】:2020-01-09 16:45:11
【问题描述】:
所以我有一个类循环:
@PlanningEntity
public class Cycle {
private Integer START = 29;
private Integer END = 42;
private final int SUSTAIN_START = 29;
private final int SUSTAIN_END = 72;
@PlanningVariable(valueRangeProviderRefs = { "startRange" } )
public Integer getStartIndex() {
System.out.println("DEBUG: getStartIndex");
return START;
}
public void setStartIndex(Integer i) {
System.out.println("DEBUG: setStartIndex");
START = i;
END = i+13;
}
@ValueRangeProvider(id = "startRange")
public List<Integer> getStartIndexes () {
ArrayList<Integer> startRange = new ArrayList<Integer>();
for(int i = SUSTAIN_START; i < SUSTAIN_END; i++) {
startRange.add(i);
}
return startRange;
}
}
而且 Optplanner 从来没有调用过这些方法中的任何一个,我也不知道为什么。我尝试在 getStartIndexes 方法上添加“@ProblemFactCollectionProperty”注释,但我在文档中读到该注释只能在 PlanningSolution 中使用。
我也尝试过使用 scanAnnotatedClasses 并在我的求解器配置中明确指定 entityClass,但似乎都没有任何区别。
为什么 Optaplanner 看不到我的变量,为什么 Optaplanner 不更改它?
更多信息:我使用的是 Optaplanner 版本 7.30.0.Final,我有另一个计划实体,其中包含两个计划变量,Optaplanner 可以查看和更改。
【问题讨论】:
-
您的计划实体看起来不错。问题可能出在您的求解器配置或规划解决方案中。确保在求解器配置 XML 中使用
<scanAnnotatedClasses/>或每个实体都有一个<entityClass>元素。在解决方案类中,您应该有两个@PlanningEntityCollectionProperty注释方法,一个返回Cycles 的集合,一个返回其他类型实体的集合。如果这些都没有帮助,请分享更多代码(求解器配置、解决方案)。
标签: optaplanner