Получение информации из более чем одного класса в потоке ограниченийJAVA

Программисты JAVA общаются здесь
Anonymous
Получение информации из более чем одного класса в потоке ограничений

Сообщение Anonymous »

Итак, я создаю приложение, которое будет планировать работу помощников для заранее заданных еженедельных услуг. Для этого я использую Optaplanner 9.44.0.Final. В настоящее время у меня возникли некоторые проблемы, создающие одно из моих ограничений, и мне интересно, знает ли кто-нибудь об их решении.
У меня есть список помощников, которые готовы работать волонтерами во время служб. У меня также есть список служб, которым нужны помощники. Помощники назначаются службе с помощью 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");
}
Это, очевидно, не работает, поскольку поток ограничений uni не может быть собран в такой список, а приведение не работает в поставщиках ограничений. По сути, мне нужно сделать что-то вроде этого:

Код: Выделить всё

private Constraint utilizedAssistantsConstraint(ConstraintFactory constraintFactory) {
return constraintFactory.forEach(Assistant.class)
.filter(assistant -> !isAssistantInServiceAssignments)
.penalize(HardMediumSoftScore.ONE_SOFT)
.asConstraint("Utilized All Assistants Constraint");
}
Где isAssistantInServiceAssignments — это псевдокод, позволяющий проверить, появляется ли помощник где-нибудь в ServiceAssignment. Я изо всех сил пытаюсь найти способ доступа к объектам ServiceAssignment, созданным приложением, поскольку мне также нужен класс Assistant.

Подробнее здесь: https://stackoverflow.com/questions/784 ... int-stream

Вернуться в «JAVA»