Слюни RETE алгоритм путаницы
У меня возникли проблемы с пониманием алгоритма RETE бета-узла JoinNode, а не узла?
Документация гласит:
Есть два узла с двумя входами, JoinNode и NotNode, и оба являются типами BetaNodes. BetaNodes используются для сравнения 2 объектов и их полей друг с другом. Объекты могут быть одинаковыми или разными. По соглашению, мы называем два входа слева и справа. Левый вход для BetaNode, как правило, представляет собой список объектов; в Drools это кортеж Правильный ввод - это один объект. Два узла могут использоваться для реализации проверок "существует". Бета-узлы также имеют память. Левый вход называется бета-памятью и запоминает все входящие кортежи. Правильный вход называется альфа-памятью и запоминает все входящие объекты.
Я понял, Alpha Node: различные буквальные условия для правил drl, но приведенная выше документация для BetaNodes меня немного смущает.
скажем ниже условие drl для приведенной выше диаграммы:
$ person: Person (favouriteCheese == $ чеддер)
Запрос: 1) каковы эти левый и правый входы для бета-узлов с двумя входами в точности так, как описано в документации выше? Я полагаю, что это относится к фактам и правилам, когда я считаю, что кортежи будут фактами?
2) notNode будет в основном условием drl, соответствующим буквальному условию not?
Обновленный вопрос по 6Sep17:
3) Я полагаю, что вышеприведенная диаграмма представляет joinNode, как не будет представлен Node, если вышеуказанный рабочий процесс будет изменен в соответствии с notNode?
1 ответ
Условие, соответствующее диаграмме, будет
Cheese( $name: name == "Cheddar" )
Person( favouriteCheese == $name )
После совпадения создается новый кортеж, состоящий из совпадающих Сыра и Человека, который может выступать в качестве нового кортежа для дальнейших совпадений, если в условии есть третий шаблон.
Неузел был бы тем, который утверждает несуществование некоторого факта. Это будет стрелять только один раз.
Вы можете найти гораздо лучшее описание "rete" в Интернете.