冲突解决策略:大小排序/数据排序/最近最少使用规则之间有什么区别?
Conflict resolution strategy: What's the difference between size ordering/ data ordering/ least recently used rule?
大小排序/数据排序/最近最少使用规则有什么区别?
我已经做了很多研究,大多数书都说:
数据排序:将所有可能的断言排列在一个长的优先列表中。使用具有匹配列表中最高优先级断言的条件模式的触发规则。
尺寸排序:使用具有最严格要求的触发规则,其中最严格意味着最长的条件列表。
最近最少使用的规则(Recency Ordering):使用最近最少使用的规则。
但是,所有这些解释对我来说都太抽象了,我不能很好地理解它们。
谁能帮我用下面的案例来解释一下这三种策略? (随意使用自己的案例)
- 快速处理投诉的系统。当无法获得真正的答案时,这涉及到一个通用借口库。
- 一个检测当前和潜在客户并将他们的电话转给适当经理的系统。
- 处理投诉的同情系统。该系统的目标是让自动语音与来电者进行对话,并表现出对投诉的了解和关注。系统希望来电者在结束对话时感到满意,因为投诉已被听到并且公司正在采取适当的行动。系统将具有不同数量的信息,这取决于呼叫者愿意对机器说什么。系统在收集大量信息时使用特定规则,在不收集大量信息时使用通用规则。
要了解什么是冲突解决策略,让我们模拟两个规则之间存在冲突的情况。我将介绍第一个和第二个提供的示例,对于规则,我将使用 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))
这两条规则似乎很方便地涵盖了这两种情况。一旦投诉本身得到管理,这两条规则就会从引擎的工作记忆中删除(收回)投诉。
然而,如果他们都满足开火的所有条件,他们就会相互冲突。理想情况下,如果给定客户分配了经理,则应将投诉转发给 him/her。然而在这种情况下,第一条规则可能会接管,客户将收到一般性的道歉,而不是被重定向到经理。
通常,规则开发者通过显着性机制来控制规则的执行顺序。如果规则看起来具有相同的显着性,冲突解决将接管并决定规则的触发顺序。
您提到的第一个解决策略(数据排序)表明将根据断言事实的顺序进行优先级排序。
CLIPS 中的第二种策略(大小排序)称为复杂性策略。它优先考虑具有更多约束的规则。在上面的示例中,这是应采用的正确策略,因为经理规则更具体,因此也更复杂。如果您构建您的规则库,以便更具体的规则应该触发通用规则,那么这就是您选择的策略。
第三个策略很容易理解。最近触发最少的规则将优先考虑。
总而言之,规则冲突在专家系统中极为常见。解决策略会影响规则库的增长方式及其维护成本的增加方式。在设计之初明智地选择是非常重要的,因为以后更改它可能会带来很多不愉快的重构。
您可以在下面的 gist.
中查看示例程序的完整副本
大小排序/数据排序/最近最少使用规则有什么区别?
我已经做了很多研究,大多数书都说:
数据排序:将所有可能的断言排列在一个长的优先列表中。使用具有匹配列表中最高优先级断言的条件模式的触发规则。
尺寸排序:使用具有最严格要求的触发规则,其中最严格意味着最长的条件列表。
最近最少使用的规则(Recency Ordering):使用最近最少使用的规则。
但是,所有这些解释对我来说都太抽象了,我不能很好地理解它们。
谁能帮我用下面的案例来解释一下这三种策略? (随意使用自己的案例)
- 快速处理投诉的系统。当无法获得真正的答案时,这涉及到一个通用借口库。
- 一个检测当前和潜在客户并将他们的电话转给适当经理的系统。
- 处理投诉的同情系统。该系统的目标是让自动语音与来电者进行对话,并表现出对投诉的了解和关注。系统希望来电者在结束对话时感到满意,因为投诉已被听到并且公司正在采取适当的行动。系统将具有不同数量的信息,这取决于呼叫者愿意对机器说什么。系统在收集大量信息时使用特定规则,在不收集大量信息时使用通用规则。
要了解什么是冲突解决策略,让我们模拟两个规则之间存在冲突的情况。我将介绍第一个和第二个提供的示例,对于规则,我将使用 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))
这两条规则似乎很方便地涵盖了这两种情况。一旦投诉本身得到管理,这两条规则就会从引擎的工作记忆中删除(收回)投诉。
然而,如果他们都满足开火的所有条件,他们就会相互冲突。理想情况下,如果给定客户分配了经理,则应将投诉转发给 him/her。然而在这种情况下,第一条规则可能会接管,客户将收到一般性的道歉,而不是被重定向到经理。
通常,规则开发者通过显着性机制来控制规则的执行顺序。如果规则看起来具有相同的显着性,冲突解决将接管并决定规则的触发顺序。
您提到的第一个解决策略(数据排序)表明将根据断言事实的顺序进行优先级排序。
CLIPS 中的第二种策略(大小排序)称为复杂性策略。它优先考虑具有更多约束的规则。在上面的示例中,这是应采用的正确策略,因为经理规则更具体,因此也更复杂。如果您构建您的规则库,以便更具体的规则应该触发通用规则,那么这就是您选择的策略。
第三个策略很容易理解。最近触发最少的规则将优先考虑。
总而言之,规则冲突在专家系统中极为常见。解决策略会影响规则库的增长方式及其维护成本的增加方式。在设计之初明智地选择是非常重要的,因为以后更改它可能会带来很多不愉快的重构。
您可以在下面的 gist.
中查看示例程序的完整副本