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

能否同时设置并使用ConstraintProvider与ScoreCalculator?解决方案求助

问题:能否同时设置并使用ConstraintProvider与ScoreCalculator?

在OptaPlanner中同时配置ConstraintProvider和EasyScoreCalculator时抛出异常,代码如下:

ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig();
scoreDirectorFactoryConfig.setConstraintProviderClass(VehicleRoutingConstraintProvider.class);
scoreDirectorFactoryConfig.setInitializingScoreTrend("ONLY_DOWN");
scoreDirectorFactoryConfig.setEasyScoreCalculatorClass(VRPScoreCalculator.class);
solverConfig.setScoreDirectorFactoryConfig(scoreDirectorFactoryConfig);

异常核心信息:

java.lang.IllegalArgumentException: The scoreDirectorFactory cannot have an easyScoreCalculatorClass and a constraintProviderClass together.

解决方案

OptaPlanner中这两种评分实现方式是互斥的,只能选择其一,以下是两种可行处理方式:

  • 将ScoreCalculator逻辑迁移到ConstraintProvider(推荐)
    ConstraintProvider基于ConstraintStream API,是OptaPlanner官方推荐的现代评分方案,支持增量计算,性能远优于全量计算的EasyScoreCalculator。把VRPScoreCalculator中的所有评分规则,用ConstraintStream语法重写到VehicleRoutingConstraintProvider里,之后仅保留ConstraintProvider的配置即可:

    ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig();
    scoreDirectorFactoryConfig.setConstraintProviderClass(VehicleRoutingConstraintProvider.class);
    scoreDirectorFactoryConfig.setInitializingScoreTrend("ONLY_DOWN");
    solverConfig.setScoreDirectorFactoryConfig(scoreDirectorFactoryConfig);
    
  • 保留ScoreCalculator,移除ConstraintProvider配置
    如果暂时无法重构评分逻辑,可以移除setConstraintProviderClass的调用,仅保留EasyScoreCalculator的配置。但注意这种方式在求解大规模问题时,评分计算性能会显著下降:

    ScoreDirectorFactoryConfig scoreDirectorFactoryConfig = new ScoreDirectorFactoryConfig();
    scoreDirectorFactoryConfig.setInitializingScoreTrend("ONLY_DOWN");
    scoreDirectorFactoryConfig.setEasyScoreCalculatorClass(VRPScoreCalculator.class);
    solverConfig.setScoreDirectorFactoryConfig(scoreDirectorFactoryConfig);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:18