Прекратить повторные активации
У меня есть правило, которое убирает тысячи фактов, когда выполняется определенное условие. Это правило находится в модуле, который содержит два других правила, которые используют операторы "not". Мои вопросы:
- Пересчитывается ли повторная сеть каждый раз, когда первое правило убирает факт?
- Это из-за "не" утверждений в двух других правилах или это все равно произойдет?
- Есть ли способ остановить повторный расчет активаций до тех пор, пока у первого правила не будет больше фактов, от которых можно отказаться?
Спасибо!
2 ответа
Точные ответы невозможны без знания шаблонов в правилах, которые используют тип отозванных фактов.
Очевидно, что если Fact
этот тип и правила № 2 и № 3 содержат только
not Fact(...constraints...)
ничего страшного не должно произойти до тех пор, пока последний из этих фактов фактов (который соответствует ограничениям, если таковые имеются) не будет удален из рабочей памяти: тогда, возможно, потребуется создать дополнительный узел, в зависимости от того, что еще не является CE); это может продолжаться в зависимости от того, что находится после CE, и приводить к терминальным узлам, то есть к активациям.
Если шаблон как
Fact(...constraints...)
В любом из этих правил удаление Факта (который соответствует этим ограничениям, если таковые имеются) вызывает некоторые немедленные действия при любых ожидающих активациях и удалении узлов в сети, если он был включен ранее.
Вы не можете ничего сделать, чтобы избежать событий в сети Rete.
Тем не менее, необходимость убирать тысячи фактов довольно страшна. Сколько осталось? Это может быть дешевле, чтобы выбрать несколько избранных и начать все заново в совершенно новом Rete. Или используйте шаблон проектирования, который не предоставляет все эти тысячи сразу движку. Или что-то другое.
Мы написали ленивый алгоритм, который позволяет избежать повторного создания частичных совпадений и активаций, пока правило не будет готово к запуску. Будучи ленивым, вы можете использовать значимость, чтобы откладывать оценку правила. http://blog.athico.com/2013/11/rip-rete-time-to-get-phreaky.html