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

为员工调度添加班次间最小间隔时长约束参数遇问题

员工调度约束参数不生效的问题排查与修复
  • 核心问题:你的代码里用join(ConstraintParameters.class)关联全局参数是错误的。ConstraintParameters是全局单例配置,不需要和Shift做笛卡尔积关联,应该用from(ConstraintParameters.class)来获取这个单例对象。

  • 修正后的代码:

Constraint atLeast10HoursBetweenTwoShifts(ConstraintFactory constraintFactory) {
    return constraintFactory.forEach(Shift.class)
            .join(Shift.class, equal(Shift::getEmployee), lessThanOrEqual(Shift::getEnd, Shift::getStart))
            .from(ConstraintParameters.class) // 替换join为from
            .filter((firstShift, secondShift, constraintParameters) -> 
                Duration.between(firstShift.getEnd(), secondShift.getStart()).toHours() < constraintParameters.minRestHours()
            )
            .penalize(HardSoftBigDecimalScore.ONE_HARD,
                    (firstShift, secondShift, constraintParameters) -> {
                        int breakLength = (int) Duration.between(firstShift.getEnd(), secondShift.getStart()).toMinutes();
                        return (constraintParameters.minRestHours() * 60) - breakLength;
                    })
            .asConstraint("At least X hours between 2 shifts");
}
  • 额外检查点:
    • 确保ConstraintParameters类添加了@ConstraintParameters注解:
      @ConstraintParameters
      public class ConstraintParameters {
          private int minRestHours;
          // 对应的getter、setter或构造方法
      }
      
    • 确保Solver配置中正确加载参数,比如通过代码设置:
      ConstraintParameters params = new ConstraintParameters();
      params.setMinRestHours(10);
      solverFactory.getSolverConfig().setConstraintParameters(params);
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:22:07