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

OptaPlanner启用GIZMO时出现克隆损坏问题求助

OptaPlanner GIZMO域访问下克隆异常排查

环境与问题现象

  • 环境:OptaPlanner 9.44.0 + Java 11 + Windows 11
  • 核心问题:常规域访问时系统运行正常,启用GIZMO域访问后抛出克隆损坏异常:
Exception in thread "main" java.lang.IllegalStateException: Cloning corruption: the same entity (MyInstance) is present in both the original and the clone.
So when a planning variable in the original solution changes, the cloned solution will change too.
  • 已尝试无效操作:调整多种断言级别,仅GIZMO启用时触发异常;给相关类/字段添加@DeepPlanningClone注解无改善

关键场景细节

  • 报错类带有@ShadowVariable注解,变量类型为List
  • 该类在解决方案类中以List集合形式存在,标记有@PlanningEntityCollectionProperty
  • 该类是抽象基类的子类,子类仅新增辅助方法,无额外成员变量
  • 已通过VariableListener正确完成Shadow变量的赋值逻辑

可能原因与排查方向

  1. GIZMO对抽象子类的克隆逻辑遗漏
    GIZMO生成克隆代码时,可能未正确处理抽象基类的子类结构:即便子类无新增变量,GIZMO也可能未继承基类的克隆逻辑,导致Shadow变量(尤其是集合类型)未被深度克隆,直接复用原对象的集合引用,引发克隆冲突。

  2. 集合类型Shadow变量的克隆策略差异
    常规域访问会自动对集合类型Shadow变量做深度复制,但GIZMO生成的克隆代码可能仅做浅拷贝,导致原对象与克隆对象共享同一集合实例,触发OptaPlanner的克隆损坏断言。

  3. @DeepPlanningClone注解未被GIZMO正确识别
    虽然添加了@DeepPlanningClone,但GIZMO可能未正确解析该注解在抽象基类/子类上的配置。建议将注解直接添加到基类的Shadow变量字段上,而非仅标注在类级别。

  4. VariableListener与GIZMO克隆的时序冲突
    GIZMO克隆解决方案时,可能在VariableListener更新Shadow变量前完成克隆,或克隆过程中未同步Shadow变量状态,导致克隆对象的Shadow变量引用原对象实例。可检查VariableListener的触发时机,确保克隆完成后Shadow变量状态独立于原对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:56:09