OptaPlanner自定义分数定义已弃用,未来应如何实现?
替代已弃用的
scoreDefinitionClass实现自定义分数 问题场景
此前通过@PlanningScore注解的scoreDefinitionClass字段指定自定义分数定义:
@PlanningScore(scoreDefinitionClass = MyCustomScoreDefinition.class) private MyCustomScore score;
但该字段现已被弃用,需调整实现方式。
解决方案
现在无需在@PlanningScore注解中指定scoreDefinitionClass,按以下步骤操作即可:
确保自定义分数类实现
Score接口:
你的MyCustomScore必须实现OptaPlanner的Score接口,并重写add、subtract、compareTo等核心方法,保证分数的运算与比较逻辑合规。保留并完善
ScoreDefinition实现类:
继续使用MyCustomScoreDefinition,确保它实现ScoreDefinition接口,完成自定义分数的创建、解析、序列化等核心逻辑的封装。让框架自动识别或手动配置分数定义:
如果你的ScoreDefinition类遵循[自定义分数类名]Definition的命名规则(比如MyCustomScore对应MyCustomScoreDefinition),OptaPlanner会自动识别并加载它。
若命名不符合规则,可在Solver配置中手动指定:<solver> <scoreDefinitionClass>com.yourpackage.MyCustomScoreDefinition</scoreDefinitionClass> <!-- 其他Solver配置 --> </solver>或采用编程式配置:
SolverConfig solverConfig = new SolverConfig(); solverConfig.setScoreDefinitionClass(MyCustomScoreDefinition.class);简化
@PlanningScore注解写法:
移除scoreDefinitionClass参数,直接声明分数字段类型:@PlanningScore private MyCustomScore score;
内容的提问来源于stack exchange,提问作者Jon Britton
相关产品推荐
相关产品推荐

