代码之家  ›  专栏  ›  技术社区  ›  Vibeeshan Mahadeva

Optaplanner值范围提供程序未被调用

  •  0
  • Vibeeshan Mahadeva  · 技术社区  · 6 年前

    我想知道值范围提供者是如何工作的。

    我有一门课叫 Entity ,在该类中有多个实例,都映射在 Solution 就像下面一样

    @PlanningEntityCollectionProperty
    public List<Entity> getEntityList() {
        return entityList;
    }
    

    实体 物体 @ValueRangeProvider 实体 班级。

    @PlanningEntity()
    public class Entity {
    
    @PlanningVariable(valueRangeProviderRefs = {"quantityRange"})
    public Long getAllocatedWeight() {
        return allocatedWeight;
    }
    
    @ValueRangeProvider(id = "quantityRange")
    public CountableValueRange<Long> getQuantityRange() {
        return ValueRangeFactory.createLongValueRange(minWeights, maxWeights);
    }
    
    }
    

    getQuantityRange 永远不会被调用,Optaplanner在生成结果时也不会考虑范围,但所有drools规则都按预期工作良好。我所需要的就是,静态地为每个实体对象分配范围。

    注意:我正在使用 InvestmentQuantityTransferMove.java 投资 我的解决方案也是类似的,所有实体的总和应该是 完全等于一个特定的值。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Geoffrey De Smet    6 年前

    您的实体可能没有被OptaPlanner解析,或者您会得到一个明显的异常-或者断点将被击中。所以这两个条件之一不符合:

    • 您的实体需要有@PlanningEntity注释。这显然得到了满足。
    • 您的实体需要在 solverConfig.xml (或java API等价物)具有 <entityClass> . 这可能就是问题所在。

    (如果这两个条件都满足,并且没有达到断点,那么这就是一个bug。用一个复制者创造一个jira。)

    推荐文章