OptaPlanner-将匹配项限制为x数量

问题描述 投票:0回答:1

我对OptaPlanner和Java还是比较陌生的-但希望这是有道理的。我想做的是将ClientAssociate进行匹配-我要做的是确保Associate只能分配给X个客户。我的域现在非常简单,因为它只是AssociateClientAssignment(包含所有客户信息),以及将它们映射在一起的规划解决方案/约束。

问题:我如何推断已经“匹配”的内容以进行计数?

java optaplanner
1个回答
0
投票

我将假设您正在使用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。>>

© www.soinside.com 2019 - 2024. All rights reserved.