You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换至BAVET时含可空规划变量实体的异常行为咨询

OptaPlanner 8.36.0.Final中DROOLS与BAVET约束流实现的行为差异问题

场景背景

  • 使用OptaPlanner 8.36.0.Final版本
  • Ewe是带有可空规划变量Ram的PlanningEntity,现有100只Ewe,需求是为其中50至75只分配Ram

约束代码

return constraintFactory
    .forEach(Ewe.class)
    .groupBy(ConstraintCollectors.count())
    .penalize(level, 
        (count) -> {
            return activeRange.check(count);
        }
    )
    .asConstraint(name);

该约束用于对分配Ram的Ewe数量不足50或超过75的情况施加惩罚。

不同约束流实现的表现

DROOLS实现(ConstraintStreamImplType.DROOLS)

表现符合预期:约束会正常评估分配数量是否在50-75范围内,对不符合条件的情况施加惩罚。

BAVET实现(ConstraintStreamImplType.BAVET)

行为异常:求解器结束时无任何Ewe被分配Ram,得分为零(即选择了无分配的解决方案),且该约束未被评估。

疑问

仅切换两种ConstraintStream实现类型、未做其他变更的情况下,验证出以下差异:

  • DROOLS会在匹配实体数量为零时评估约束
  • BAVET在匹配实体数量为零时不会评估约束

最终需求是即使计数为零也要统计条目,请问该差异是否为预期行为?

内容的提问来源于stack exchange,提问作者Steven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:20:16