冲突解决策略:大小排序/数据排序/最近最少使用的规则有什么区别?

时间:2019-02-09 20:37:56

标签: algorithm artificial-intelligence expert-system knowledge-management

大小排序/数据排序/最近最少使用的规则有什么区别?

我已经做了很多研究,而且大多数书都说:

数据排序:将所有可能的断言排列在一个长优先级列表中。使用具有与列表中最高优先级声明相匹配的条件模式的触发规则。

大小排序:使用具有最严格要求的触发规则,其中最强意味着最长的条件列表。

最近最少使用的规则(最近顺序):使用最近最少使用的规则。

但是,所有这些解释对我来说都太抽象了,我无法很好地理解它们。

有人可以通过以下案例帮助我解释这三种策略吗? (随时使用自己的情况)

  1. 一个快速处理投诉的系统。每当没有真正的答案时,这都会涉及一个通用借口库。
  2. 一种用于检测当前和潜在客户并将他们的电话转发给合适的经理的系统。
  3. 一个处理投诉的同情系统。该系统的目标是使自动语音与呼叫者进行对话,并使其知识渊博并关注投诉。系统希望呼叫者结束通话,感到满意,即已听到投诉并且公司对此采取了适当的行动。系统将根据呼叫者愿意对机器说的内容而变化信息量。系统在收集大量信息时使用特定规则,在不收集信息时使用常规规则。

1 个答案:

答案 0 :(得分:1)

要了解什么是冲突解决策略,让我们模拟一个条件,其中两个规则之间存在冲突。我将介绍第一个和第二个示例,对于规则,我将使用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中看到示例程序的完整副本。