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

调用solver_manager_create时Optapy抛出IllegalArgumentException求助

问题:Optapy调用solver_manager_create报IllegalArgumentException错误

我参照Optapy官方员工排班快速启动示例编写代码,尝试调用solver_manager_create方法时触发错误,代码如下:

SINGLETON_ID = 1
solver_config = optapy.config.solver.SolverConfig()
solver_config\
    .withSolutionClass(EmployeeSchedule)\
    .withEntityClasses(Shift)\
    .withConstraintProviderClass(employee_scheduling_constraints)\
    .withTerminationSpentLimit(Duration.ofSeconds(60))

# 错误发生在此行
solver_manager = solver_manager_create(solver_config)

执行时报错java.lang.IllegalArgumentException,完整错误信息:

java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Cannot use class (org.optaplanner.optapy.generated.class6.domain.Shift.GeneratedClass) in a constraint stream as it is neither the same as, nor a superclass or superinterface of one of planning entities or problem facts.
Ensure that all from(), join(), ifExists() and ifNotExists() building blocks only reference classes assignable from planning entities or problem facts ([org.optaplanner.optapy.generated.class0.shift_planning.domain.Employee.GeneratedClass, org.optaplanner.optapy.generated.class1.shift_planning.domain.ConstraintForTag.GeneratedClass, org.optaplanner.optapy.generated.class2.shift_planning.domain.Shift.GeneratedClass]) annotated on the planning solution (org.optaplanner.optapy.generated.class3.shift_planning.domain.EmployeeSchedule.GeneratedClass).

请问我遗漏了什么配置或步骤?


解决方案

这个错误的核心是约束流中使用的Shift类,和你在solver_config里注册的规划实体Shift不是同一个类实例(从错误信息的包路径能看出:约束里用的是class6.domain.Shift,而注册的是class2.shift_planning.domain.Shift),通常由以下情况导致:

  • 重复定义Shift类:代码中在不同模块或文件重复创建了同名的Shift类,导致加载了两个独立的类对象。
  • 导入路径不一致:约束提供者employee_scheduling_constraints中导入的Shift,和传给withEntityClasses的Shift路径不匹配。
  • 动态类生成冲突:Optapy的动态类生成机制因缓存或模块加载问题,生成了重复的类实例。

对应解决步骤:

  1. 全局排查代码,确保只有一处带@planning_entity注解的Shift规划实体类定义。
  2. 检查约束提供者的导入语句,保证Shift的导入路径和EmployeeSchedule中引用的Shift完全一致。
  3. 清理Optapy的生成类缓存:重启Python解释器,或删除临时生成的类文件。
  4. 确认EmployeeSchedule(规划解决方案类)中,所有集合字段都正确标注了@problem_fact_collection_property或@planning_entity_collection_property注解,且引用的是正确的类。

内容的提问来源于stack exchange,提问作者Kerem Tatlıcı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:11:16