在基于规则的专家系统中,知识库包含大量规则,其形式为" if(模板)然后(动作)"。推理引擎选择与输入事实匹配的规则。这就是那些条件部分与输入数据匹配的规则被列入候选名单并且其中一个被选中。
现在可以使用具有类似条件语句的普通程序以某种方式来达到结果。
我正在努力找到一个声音清晰的描述"这两者之间的区别以及为什么我们无法实现专家系统规则可以用正常的算法编程做什么?
只是一个算法需要完整且众所周知的输入,而专家系统可以接受任何订单的不完整信息吗?
感谢。
答案 0 :(得分:4)
规则更准确地描述为形式"当(模板)然后(动作)"。 "当"的语义与"如果"完全不同。例如,将一组不同的规则最直接地转换为过程式编程语言将如下所示:
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中编写自己的内存管理例程来实现。但由于这很乏味且容易出错,因此有明显的好处使用自动内存管理。
答案 1 :(得分:1)
没有任何基于规则的专家系统&#34;可以做一个正常的算法程序&#34;因为基于规则的专家系统 是正常的算法程序,所以无法做到。编写正常的算法程序以匹配专家系统推理引擎的工作方式不仅可能,这正是编写推理引擎的人所做的。
也许&#34;差异&#34;您所看到的是,在一种情况下,规则是&#34;硬编码&#34;在编程语言中,而在另一种情况下,规则被视为要由程序处理的数据。在这两种情况下都存在相同的逻辑,它只是在一个&#34;程序&#34;特定于一个任务,而另一个任务将复杂性排除在&#34;程序之外。并进入&#34;数据&#34;。
答案 2 :(得分:0)
为了扩展Gary所说的,在硬编码的if-then系统中,规则的触发顺序比大多数专家系统更受限制。在专家系统中,规则可以基于除某些编码顺序之外的标准来触发。例如,某些相关性度量可用于触发规则,例如,触发规则,其成败将排除或排除最多的假设。
同样,在许多系统中,“知识工程师”可以按任何顺序陈述规则。虽然可能需要考虑潜在的解雇顺序,但声明规则的顺序可能并不重要。
在某些类型的系统中,规则只是松散耦合。也就是说,规则的贡献可能不是全部或全部。如果规则触发,它可能会提供证据,如果它无法触发(或不存在),它可能无法提供证据,但如果其他一套规则将其推到一个确定的阈值,则该假设可能会成功。
这使专家能够以更自然的方式提供规则。专家可以考虑一些规则,并且可以对它们进行测试。专家可以添加一些规则,甚至可能在几个月后添加等等,同时提高系统的准确性,而无需重新编写任何早期规则或重新安排任何代码。
完成上述工作的方式是无数的,但Gary描述的制作规则是最常见,易于理解和有效的手段之一,并被许多专家系统使用。