Чтобы понять, какова стратегия разрешения конфликтов, давайте смоделируем условие, в котором у нас есть конфликт между двумя правилами.Я расскажу о первом и втором приведенном примере, и для правил я буду использовать язык CLIPS .
Первое правило - ответы на жалобы с быстрым ответом.Идеально, если у нас нет никакой дополнительной информации о том, как обращаться с жалобой.
Второе правило активируется, если клиент, подающий жалобу, назначен менеджеру, и направляет жалобу менеджеру.
(defrule generic-excuse
; Provide a generic excuse to complaining customers
?complaint <- (complaint (customer ?customer))
=>
(respond-to-customer ?customer "We are sorry for the inconvenience.")
(retract ?complaint))
(defrule forward-complaint-to-manager
; Forward a complaint to the assigned manager
?complaint <- (complaint (customer ?customer))
?manager <- (manager (assigned-customers $?customers)) ; managers have a list of assigned customers
(test (member$ ?customer ?customers)) ; test if the customer among the ones assigned to the manager
=>
(forward-to-manager ?manager ?complaint)
(retract ?complaint))
Эти два правила, кажется, удобно охватывают оба случая.Оба правила удаляют (убирают) жалобу из рабочей памяти двигателя, как только они запускаются, поскольку сама жалоба обрабатывается.
Тем не менее, они конфликтуют друг с другом, если у них обоих есть все условия для стрельбы.В идеале, если для данного клиента назначен менеджер, жалоба должна быть направлена ему / ей.Тем не менее, в этом случае первое правило может вступить во владение, и клиент получит общее извинение вместо того, чтобы быть перенаправленным руководителю.
Обычно разработчики правил контролируют порядок выполнения правил с помощью существенного механизма.Если кажется, что правила имеют одинаковую значимость, разрешение конфликта вступает во владение и решает, в каком порядке будут применяться правила.
Первая упомянутая вами стратегия разрешения (упорядочение данных) предполагает, что расстановка приоритетов будет определяться на основе порядкафакты утверждаются в.
Вторая стратегия (упорядочение по размеру) в CLIPS называется стратегией сложности.Это устанавливает приоритеты правил с большим количеством ограничений.В приведенном выше примере это правильная стратегия для принятия, поскольку правило менеджера является более конкретным и, следовательно, более сложным.Если вы структурируете свою базу правил так, что более общие правила должны срабатывать над общими, чем ваша стратегия выбора.
Третья стратегия довольно проста для понимания.Правила, которые сработали меньше всего, будут иметь приоритет в первую очередь.
В заключение, конфликты правил чрезвычайно распространены в экспертных системах.Стратегии разрешения влияют на то, как будет расти ваша база правил и как возрастут затраты на ее обслуживание.Очень важно сделать правильный выбор в начале вашего проекта, так как позднее его изменение может принести много неприятного рефакторинга.
Вы можете увидеть полную копию примера программы в следующем gist .