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

基于OptaPlanner的InverseRelationShadowVariable始终为null问题求助

解决InverseRelationShadowVariable未填充的问题

核心问题:Order类错误标注了@PlanningEntity

影子变量所在的Order类不需要添加@PlanningEntity注解——它的machine字段是由OptaPlanner自动维护的影子变量,不属于主动规划的实体。去掉该注解即可解决此问题。

其他需要验证的配置点

  • 确认sourceVariableName匹配正确:InverseRelationShadowVariable的sourceVariableName参数必须与Machine类中PlanningListVariable的属性名完全一致。你的代码中sourceVariableName = "plannedOrders"对应Machine的getPlannedOrders()方法,配置无误。
  • 确保列表变量更新方式合规:Machine类的setPlannedOrders()方法需直接替换整个列表(你的代码中直接赋值m_plannedOrders = orders符合要求),禁止在现有列表上做增删操作,否则OptaPlanner无法触发影子变量更新。
  • Solution类配置无需修改:Order作为问题事实,在MachineOrdersPlanning中通过@ProblemFactCollectionProperty和@ValueRangeProvider声明的方式是正确的。

修改后的Order类代码示例:

// 移除@PlanningEntity注解
public class Order {
    private Machine m_machine;
...
    @InverseRelationShadowVariable(sourceVariableName = "plannedOrders")
    public Machine getMachine() {
        return m_machine;
    }

    public void setMachine(Machine machine) {
        m_machine = machine;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:53:00