1

在基于规则的专家系统中,知识库包含大量“如果(模板)则(动作)”形式的规则。推理引擎选择与输入事实匹配的规则。也就是说,它们的条件部分与输入数据匹配的那些规则被列入候选名单,并选择其中之一。

现在可以以某种方式使用具有类似条件语句的普通程序来达到结果。

  • 我试图找到一个关于两者之间差异的“合理而清晰的描述”,以及为什么我们无法实现专家系统规则可以用普通算法编程做的事情?

  • 仅仅是算法需要完整且众所周知的输入,而专家系统可以接受任何顺序的不完整信息吗?

谢谢。

4

3 回答 3

5

规则更准确地描述为“when (template) then (action)”的形式。“when”的语义与“if”的语义完全不同。例如,将一组不同的规则最直接地转换为过程编程语言应该是这样的:

if <rule-1 conditions>
then <rule-1 actions>

if <rule-2 conditions>
then <rule-2 actions>

   .
   .
   .

if <rule-n conditions>
then <rule-n actions>

由于一个规则的动作会影响另一个规则的条件,因此每次应用任何规则动作时,都需要重新检查规则条件。这可能是非常低效的。

基于规则的系统提供的好处是允许您将规则表达为离散的逻辑单元,同时有效地为您处理匹配过程。通常,这将涉及检测和共享规则之间的共同条件,因此不需要多次检查它们以及数据驱动的方法,其中系统预先确定哪些规则将受到特定数据更改的影响,因此不需要规则条件当不相关的数据发生变化时要重新检查。

这种好处类似于 Java 等语言中的垃圾收集所提供的好处。Java 中的自动内存管理提供的任何东西都不能通过在 C 中编写自己的内存管理例程来实现。但是由于这很乏味且容易出错,因此使用自动内存管理有一个明显的好处。

于 2014-11-01T22:10:45.050 回答
1

“基于规则的专家系统”没有什么是“普通算法程序”无法做到的,因为基于规则的专家系统普通的算法程序。不仅可以编写一个正常的算法程序来匹配专家系统推理引擎的工作方式,这正是编写推理引擎的人所做的。

也许您看到的“区别”是,在一种情况下,规则是在编程语言中“硬编码”的,而在另一种情况下,规则被视为要由程序处理的数据。两种情况下都存在相同的逻辑,只是其中一种“程序”特定于一项任务,而另一种则将复杂性从“程序”中转移到“数据”中。

于 2014-10-14T23:43:56.427 回答
0

为了扩展 Gary 所说的内容,在硬编码的 if-then 系统中,规则的触发顺序比大多数专家系统更受限制。在专家系统中,规则可以根据某些编码顺序以外的标准触发。例如,可以使用某种相关性度量来触发规则,例如触发规则,其成功或失败将排除或排除最多的假设。

类似地,在许多系统中,“知识工程师”可以按任何顺序陈述规则。尽管可能需要考虑潜在的触发顺序,但声明规则的顺序可能并不重要。

在某些类型的系统中,规则只是松散耦合的。也就是说,规则的贡献可能不是全部或全部。如果一条规则触发,它可能会提供证据,如果它未能触发(或不存在),它可能不会提供证据,但是如果其他一些规则将其推到确定性阈值之上,则该假设可能会成功。

这允许专家以更自然的方式贡献规则。专家可以想出一些规则,并且可以对其进行测试。专家可以添加更多规则,甚至可能在几个月后等等,同时提高系统的准确性,而无需重新编写任何早期规则或重新安排任何代码。

上述实现的方法有很多种,但 Gary 描述的产生式规则是最常见、易于理解和有效的方法之一,并且被许多专家系统使用。

于 2014-11-11T02:44:18.357 回答