Concat optaplanner 约束流

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

是否可以连接两个具有相同基数和相同类型的约束流?

例如,我有一个包含所有计划团队的约束流:

BiConstraintStream <Team, Long> plannedTeams(ConstraintFactory constraintFactory) {
    return constraintFactory.from(Team.class)
        .ifExists(Planning.class, Joiners.equal(team -> team, Planning::getTeam))
        .groupBy(team -> team, Team::getCountPeople)
}

以及包含所有非计划团队的流。

BiConstraintStream <Team, Long> nonPlannedTeams(ConstraintFactory constraintFactory) {
    return constraintFactory.from(Team.class)
        .ifNotExists(Planning.class, Joiners.equal(team -> team, Planning::getTeam))
        .groupBy(team -> team, team -> team.getCountPeople()/2)
}

现在我想通过对计划团队和未计划团队的计数求和来对总计数设置约束,例如,

Constraint constraintOnCount(ConstraintFactory constraintFactory) {
    return plannedTeams(constraintFactory).concat(nonPlannedTeams(constraintFactory))
        .groupBy(sum((team, count)->count))
        .filter(count -> count > 5)
        .penalize("too many people", HardSoftScore.ONE_HARD, count -> count - 5)

}

有办法做到这一点吗?

java optaplanner
1个回答
0
投票

Timefold 1.3.0 开始,现在有一种连接流的方法。它称为

concat
,它可用于约束流的所有基数。

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