У меня есть список помощников, которые готовы работать волонтерами во время служб. У меня также есть список служб, которым нужны помощники. Помощники назначаются службе с помощью ServiceAssignment, который отслеживает службу, помощника и должность помощника для этого конкретного назначения. У меня есть ряд ограничений, которые помогают диктовать, какие должности назначаются людям, когда они назначаются и все такое прочее. К сожалению, похоже, что происходит то, что, если нет ограничений, запрещающих этого, помощник будет назначаться снова и снова, без исключения новых помощников из списка. Вместо этого я хочу создать мягкое наказание для каждого помощника, не включенного в расписание, надеясь, что это немного изменит задания (к сожалению, я не могу просто сказать: не назначайте кого-либо более x раз, потому что иногда мы для этого не хватает добровольцев).
Пока что это макет ограничения, который я написал:
Код: Выделить всё
private Constraint utilizedAssistantsConstraint(ConstraintFactory constraintFactory) {
return constraintFactory.forEach(Assistant.class)
.filter(assistant -> constraintFactory.forEach(ServiceAssignment.class).map(ServiceAssignment::getAssistant).collect(Collector.toList()).contains(assistant))
.penalize(HardMediumSoftScore.ONE_SOFT)
.asConstraint("Utilized All Assistants Constraint");
}
Код: Выделить всё
private Constraint utilizedAssistantsConstraint(ConstraintFactory constraintFactory) {
return constraintFactory.forEach(Assistant.class)
.filter(assistant -> !isAssistantInServiceAssignments)
.penalize(HardMediumSoftScore.ONE_SOFT)
.asConstraint("Utilized All Assistants Constraint");
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... int-stream