OptaPlanner约束使用HardMediumSoftScore抛出类型不匹配异常如何解决?
OptaPlanner HardMediumSoftScore 异常解决方案
问题根因
该异常是项目全局评分类型配置与约束权重类型不匹配导致,和OptaPlanner版本无关,HardMediumSoftScore本身可正常使用。
异常提示已经明确说明冲突点:当前项目全局注册的评分类是 org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore,但你为对应约束配置的权重是 org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore 类型,OptaPlanner要求所有和评分相关的配置必须使用完全相同的评分类型,不允许混用。
解决步骤
你可以按照以下顺序排查修改配置,统一评分类型即可解决问题:
- 首先检查标注了
@PlanningSolution的规划解决方案类,查看标注了@PlanningScore的分数字段类型:如果字段定义为HardSoftScore,将其修改为HardMediumSoftScore - 如果你使用了独立的约束权重配置文件(通常为XML格式),检查文件头的
scoreClass配置,确认值为org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore - 排查所有约束的权重配置,不管是在约束流代码里硬编码的权重,还是DRL文件里定义的权重,都要统一使用
HardMediumSoftScore类型,不要混合使用HardSoftScore - 如果你使用Spring Boot/Quarkus的OptaPlanner集成starter,检查配置文件(application.properties/application.yml)中的
optaplanner.score-class配置项,确保值为HardMediumSoftScore的全类名
后续注意事项
修改完成后需要同步调整所有涉及分数操作的业务代码,比如分数初始化、自定义分数比较、日志输出分数的逻辑,全部替换为HardMediumSoftScore的对应API,避免后续出现类型转换异常。
内容的提问来源于stack exchange,提问作者Justin Phillips
相关产品推荐
相关产品推荐

