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

如何使用Optaplanner仅对现有有序数据集解决方案评分而不寻找新解

OptaPlanner仅对输入方案评分不求解的实现方法

完全可以实现你要的需求,OptaPlanner原生支持对已有方案做约束校验与评分,不需要启动求解寻优流程。你之前会得到新方案是因为调用了solver.solve()方法,该方法本身就是用来生成优化后的新方案的,换用以下逻辑即可:

操作步骤

  • 首先完成你的原始输入方案构造:确保你的规划类实例中,所有被@PlanningVariable注解的字段都已经赋值为你要校验的初始值,不要留空。
  • 初始化ScoreManager实例:该类是OptaPlanner专门用来做分数计算、约束解释的工具类,不需要启动求解流程。
    普通Java环境初始化示例:
    // 泛型依次替换为你自己的规划类、使用的分数类型(比如常用的HardSoftScore)
    ScoreManager<TspSolution, HardSoftScore> scoreManager = ScoreManager.create(
        SolverFactory.createFromXmlResource("你的solver配置文件路径")
    );
    
    如果你是Spring Boot集成OptaPlanner,直接通过@Autowired注入ScoreManager即可。
  • 调用分数解释方法获取结果:
    ScoreExplanation<TspSolution, HardSoftScore> scoreExplanation = scoreManager.explainScore(你的原始输入方案实例);
    

结果获取说明

你需要的所有约束满足情况都可以从ScoreExplanation对象中提取:

  • 调用getScore()方法可以得到当前方案的总评分
  • 调用getConstraintMatchTotalMap()可以得到所有违反约束的列表,包含每个约束的违反次数、对应的扣分值
  • 调用getIndictmentMap()可以得到每个规划实体对应的约束违反详情,方便定位具体是哪条数据触发了约束

注意事项

如果你的原始输入方案中存在未赋值的规划变量,可能会触发分数计算异常,校验前请确认所有规划变量都已按你预期的数值完成赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:08