![](/img/trans.png)
[英]How to perform an as fair as possible load balancing based on specific resource paths
[英]Get average after groupby for a fair balancing
我想測試計數(按技術員分組后,numberOfTasksByTechnician)是否高於平均水平以實現技術人員任務的良好平衡(每個技術人員必須執行相同數量的任務),我如何獲得平均值(硬編碼值 4)
Constraint technicianCharge(ConstraintFactory constraintFactory) {
return constraintFactory.from(Task.class)
.groupBy(
Task::getTechnician, ConstraintCollectors.countDistinct()
)
.filter((technician, count)-> {
return count > 4; // return count > (?average)
})
.penalize("technicianCharge", HardSoftScore.ONE_SOFT);
}
目前,要收集平均值,您需要編寫一個自定義約束收集器。 做起來並不難,查看count() 實現以獲取靈感。 當您擁有約束收集器時,您的約束流將如下所示:
Constraint technicianCharge(ConstraintFactory constraintFactory) {
return constraintFactory.from(Task.class)
.groupBy(
Task::getTechnician,
ConstraintCollectors.countDistinct(),
MyConstraintCollectors.average(task -> ...)
)
.filter((technician, count, average)-> {
return count > average;
})
.penalize("technicianCharge",
HardSoftScore.ONE_SOFT,
(technician, count, average) -> count - average);
}
將來,我們可能會提供開箱即用的平均約束收集器。
作為腳注,既然您提到了公平性,您可能希望查看我們關於OptaPlanner 負載平衡和公平性的博客。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.