属性依赖于事实值的场景

Scenario where properties have a dependency on the Fact values

需要澄清问题事实 class 被分数约束使用,但在计划期间不会改变(只要问题保持不变)的陈述。

Optaplanner 能否处理问题属性依赖于事实值的场景(和 return 优化解决方案)?

例如:在车辆路径问题中,optaplanner 引擎 return 可以根据 Vehicle_1 比 Vehicle_0 花费更多时间(比如多 1.2 倍)的事实优化解决方案从 Location_A 到 Location_B。

与 Project Job Scheduling 示例类似,Resource_X 需要 1.2 天才能完成一项任务,而 Resource_Y 需要 .9 天才能完成同一任务。

是的,它可以。 有几个例子实际上是这样做的。 design/implement 有几种方法。这是我比较喜欢的:

@PlanningEntity class TaskAssignment {
     Task task;
     @PlanningVariable Employee employee;

     public int getDuration() {
         // Warning: If affinity's or task types would change during planning (except during real-time planning ProblemFactChange of course),
         // we would need to do this through DRL or break incremental score calculation.
         return employee.getAffinityTo(task.getType()).getDuration();
     }

}


rule affinityBasedDuration
when
   TaskAssignment(employee != null, $d : duration)
then
   // addSoft(-$d)
end

你甚至可以传入参数:

when
    $a : TaskAssignment($id : id)
    $b : TaskAssignment($id < id, $d: calculateOverlap($a))
then
   // addSoft(-$d)
end


@PlanningEntity class TaskAssignment {
     ...

     public int calculateOverlap(TaskAssignment other) {
         // calculate overlap with this.startTimestamp vs other.startTimestamp
         // and this.endTimestamp vs other.endTimestamp
     }

}