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

在Timefold自定义阶段中能否访问分数计算功能?

在Timefold自定义初始阶段中访问分数计算的简便方法
  • 更新分数的正确姿势
    你碰到scoreDirector.getWorkingSolution().getScore()不更新的问题,核心是修改工作解后没触发分数重算。每次手动修改解的内容后,必须调用scoreDirector.calculateScore(),之后拿到的分数就是最新的。代码示例:

    // 修改工作解的逻辑
    scoreDirector.calculateScore();
    Score latestScore = scoreDirector.getWorkingSolution().getScore();
    

    要是你用scoreDirector.doMove(Move)来执行移动操作,ScoreDirector会自动帮你算分,不用手动调用上面的方法。

  • 别用ConstraintVerifier做运行时评分
    ConstraintVerifier是给单元测试用的,它会单独创建解的副本和评分环境,没法复用当前阶段的ScoreDirector状态,所以拿不到和当前工作解匹配的实际分数,完全不适合在自定义阶段里用。

  • 更高效的复用内置机制
    如果你是在做自定义构造启发式阶段,直接用Timefold提供的扩展点更省心:

    1. 继承AbstractConstructionHeuristicPhase,通过getScoreDirector()拿到当前的ScoreDirector实例。
    2. 执行移动优先用scoreDirector.doMove(Move),它会自动处理解修改、分数更新,还支持撤销。
    3. 要随机选最优移动的话,可以先收集候选移动,对每个移动执行后调用scoreDirector.calculateScore()拿到分数,再给高分移动设置更高的选中概率就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:58:15