我对OptaPlanner和Java还是比较陌生的-但希望这是有道理的。我想做的是将Client
与Associate
进行匹配-我要做的是确保Associate
只能分配给X个客户。我的域现在非常简单,因为它只是Associate
和ClientAssignment
(包含所有客户信息),以及将它们映射在一起的规划解决方案/约束。
问题:我如何推断已经“匹配”的内容以进行计数?
我将假设您正在使用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) -> MAX_ALLOWED_CLIENT_COUNT - assignmentCount)
显然,我对您的数据模型的外观进行了一些假设。具体来说,我假设ClientAssignment
是一个Client
和一个Associate
的唯一对。如果该假设不正确,请在您的问题中更具体,我将修改答案。
此外,您应该以所需的任何HardSoftScore.ONE_HARD
类型,用对您的问题适用的任何罚款替换Score
。>>