【问题标题】:Optaplanner doesn't see my planning variableOptaplanner 没有看到我的计划变量
【发布时间】: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 中使用 &lt;scanAnnotatedClasses/&gt; 或每个实体都有一个 &lt;entityClass&gt; 元素。在解决方案类中,您应该有两个 @PlanningEntityCollectionProperty 注释方法,一个返回 Cycles 的集合,一个返回其他类型实体的集合。如果这些都没有帮助,请分享更多代码(求解器配置、解决方案)。

标签: optaplanner


【解决方案1】:

根据@yurloc 的评论,问题是我在 PlanningSolution 类中缺少 Cycles 的 PlanningEntityCollectionProperty。谢谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多