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

Optapy排课开发求助:配置教师与约束后输出无变化

排课系统Optapy运行无输出变化的排查方案
  • 检查求解器执行逻辑
    确认是否正确调用了solver.solve(),必须用求解后的返回值输出,别直接输出初始问题。另外排查终止条件是否设置过严,比如secondsSpentLimit=0会导致求解器直接返回初始状态。
    示例代码自查:

    solver = solver_factory.buildSolver()
    # 必须调用solve并接收返回的求解结果
    solved_problem = solver.solve(initial_problem)
    # 输出solved_problem而非初始的initial_problem
    print(solved_problem)
    
  • 验证约束规则是否生效

    • 硬约束:故意构造违反硬约束的初始解,看求解器是否调整。如果没反应,检查@Constraint注解参数、约束流的实体关联是否有误。
    • 软约束:排查权重是否设置过低,导致求解器认为无需调整。可以临时调高某条软约束权重,重新运行测试。
      约束定义示例检查:
    @Constraint(constraintPackage = "school.scheduling")
    def teacher_conflict(constraint_factory: ConstraintFactory):
        return constraint_factory.for_each(Lesson) \
            .join(Lesson,
                  Joiners.equal(lambda lesson: lesson.teacher),
                  Joiners.overlapping(lambda lesson: lesson.start_time, lambda lesson: lesson.end_time)) \
            .penalize("Teacher conflict", HardSoftScore.ONE_HARD)
    
  • 确认实体与变量注解正确性
    检查课程实体是否添加@PlanningEntity注解,教师分配字段是否标记@PlanningVariable,且valueRangeProviderRefs要指向正确的可选教师集合——要是求解器没有可选值,自然不会产生变化。

  • 排查初始解是否已达最优
    如果初始解满足所有硬约束,且软约束得分已经最高,求解器不会进行调整。手动修改初始解制造约束冲突(比如给同一教师排两门重叠课程),再运行求解器观察是否有优化动作。

  • 开启日志查看求解过程
    开启Optapy调试日志,确认求解器是否在执行约束评估、迭代搜索。添加日志配置:

    import logging
    logging.basicConfig(level=logging.DEBUG)
    

    从日志中可以查看得分变化、求解阶段等信息,判断求解器是否在正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:42:22