Реализация жестких ограничений Drools - PullRequest
0 голосов

Попытка создать Java веб-приложение для учета сотрудников (медсестер) с помощью Optaplanner. Я хочу сделать жесткое ограничение, подобное этому:

// Медсестра может работать только в ночную смену после ночи, т.е. две последовательные смены могут быть NX или NN rule "nightOrOffAfterNightShift" when ShiftAssignment( $employee : employee, employee != null, $shiftDate : shiftDate, $lastShift : shift, $shiftType : shiftType ) ShiftAssignment( employee == $employee, shiftDate.isAfter($shiftDate) == true ) then if(shiftType != $shiftType && shift != null) scoreHolder.addHardConstraintMatch(kcontext, -1); end У меня нет опыта в слюни, это действительный

1 Ответ

0 голосов
/ 29 марта 2020

1-й раз - я не эксперт по правилам (недавно изучал некоторые из этих вещей)

Не думайте, что вам нужен $ lastShift: shift, вы будете использовать правила для связи 2 ShiftAssignment (s)

Я думаю, что вы должны использовать последовательный идентификатор для проверки последовательных смен в настоящее время. Я думаю, что ваше правило будет срабатывать для ВСЕХ смен после $ shiftDate, которые, я думаю, вы не намереваетесь

I не думайте, что вам нужно предложение if в разделе THEN, это должно быть частью проверки вашего состояния в разделе when. Таким образом, раздел Then должен содержать вставку новых знаний в рабочую память правил, изменение / удаление фактов, находящихся в настоящее время в рабочей памяти правил, печать операторы - если они вам нужны (на самом деле не рекомендуется - используйте changeListeners)

if ( shiftType ! = $ shiftType && shift! = null) НЕ понятно, какой из 2 объектов ShiftAssignment вы думаю shiftType от

правило "nightOrOffAfterNightShift" когда sAn: ShiftAssignment ($ idn: I d $ employee_n: Employee, $ employee_n! = null, $ shift: shift, $ shift! = null, $ sTn: ShiftType) sAn_1: ShiftAssignment ($ idn_1: Id $ idn == $ idn_1 + 1, $ employee_n_1: сотрудник, $ employee_n_1! = null, $ employee_n_1 == $ employee_n, $ sTn_1: ShiftType, $ sT! = $ sTn_1) затем ???? Теперь, что вам нужно сделать, здесь end

Можете ли вы поделиться ShiftAssignment класс

Я думаю, что приведенное выше находит смены idn & idn_1, где один и тот же сотрудник с другим shiftType

надеюсь, это близко к тому, что вы после

...