【发布时间】:2019-01-01 23:43:07
【问题描述】:
我想知道值范围提供程序是如何工作的。
我有一个名为Entity 的类,在该类中有多个实例,都映射在Solution 中,如下所示
@PlanningEntityCollectionProperty
public List<Entity> getEntityList() {
return entityList;
}
现在我想为不同的Entity 对象设置不同的范围值。例如。一个会有 0 到 50 个,另一个可能有 20 到 100 个。所以我在Entity 类中实现了@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 在生成结果时也没有考虑范围,但所有的流口水规则都按预期正常工作。我只需要为每个实体对象静态分配范围。
注意:我使用
InvestmentQuantityTransferMove.java进行步进 来自 optaplanner Repo 中的 investments 示例。自从 我的解决方案也类似,所有实体的总和应该是 完全等于特定值。
【问题讨论】:
标签: drools optaplanner