Алгоритмы распознавания образов - PullRequest
8 голосов
/ 28 августа 2008

В прошлом мне приходилось разрабатывать программу, которая выполняла роль оценщика правил. У вас был антецедент и несколько последователей (действий), поэтому, если антецедент уклонился от истинного действия, которые были выполнены.

В то время я использовал модифицированную версию алгоритма RETE (существует три версии RETE, только первая из которых является общедоступной) для сопоставления предшествующего образца. Мы говорим о большой системе с миллионом операций на правило, а некоторые операторы «повторяются» в нескольких правилах.

Возможно, мне придется снова и снова реализовать это на другом языке, и, хотя у меня есть опыт работы с RETE, кто-нибудь знает другие алгоритмы сопоставления с образцом? Любые предложения или я должен продолжать использовать RETE?

1 Ответ

4 голосов
/ 29 августа 2008

Алгоритм TREAT похож на RETE, но не записывает частичные совпадения. В результате в определенных ситуациях он может использовать меньше памяти, чем RETE. Кроме того, если вы измените значительное количество известных фактов, то TREAT может быть намного быстрее, потому что вам не нужно тратить время на отводы.

Существует также RETE *, который балансирует между RETE и TREAT путем сохранения некоторого состояния узла соединения в зависимости от того, сколько памяти вы хотите использовать. Таким образом, вы по-прежнему экономите некоторое время утверждения, но также получаете экономию памяти и времени отвода в зависимости от того, как вы настраиваете свою систему.

Вы также можете проверить LEAPS , который использует ленивую схему оценки и включает элементы как RETE, так и TREAT.

У меня есть только личный опыт работы с RETE, но кажется, что RETE * или LEAPS - лучший, более гибкий выбор.

...