OptaPlanner - 将匹配限制为 x 数量

OptaPlanner - restricting matches to x amount

我对 OptaPlanner 比较陌生,Java 总的来说 - 但希望这是有道理的。我想做的是匹配 ClientAssociate - 我想做的是确保所说的 Associate 只能有 X 数量的客户分配给他们。我的域现在非常简单,因为它只是 AssociateClientAssignment(其中包含所有客户信息)以及将它们映射在一起的计划 solution/constraints。

问题:
我如何推断已经 'matched' 的内容以获得计数?

我假设您正在使用 Constraint Streams API 来实现您的评分功能。如果是这样,下面的代码应该可以让您了解如何实现您的需要:

.from(ClientAssignment.class)
.groupBy(ClientAssignment::getAssociate, 
    ConstraintCollectors.count())
.filter((associate, assignmentCount) -> assignmentCount > MAX_ALLOWED_CLIENT_COUNT)
.penalize("Overloaded associate", 
    HardSoftScore.ONE_HARD, 
    (associate, assignmentCount) -> assignmentCount - MAX_ALLOWED_CLIENT_COUNT)

显然,我对您的数据模型的外观做了一些假设。具体来说,我假设 ClientAssignment 是一对独特的 ClientAssociate。如果该假设不正确,请在您的问题中更具体,我将编辑我的答案。

此外,您应该将 HardSoftScore.ONE_HARD 替换为您认为适用于您的问题的任何惩罚,在您需要的任何 Score 类型中。