Artificial intelligence 什么是混合推理机?

Artificial intelligence 什么是混合推理机?,artificial-intelligence,rule-engine,inference-engine,rete,Artificial Intelligence,Rule Engine,Inference Engine,Rete,我已经尝试搜索了很多,即使如此,如果有类似的帖子,我道歉 我知道规则引擎基本上有两种推理方法,正向链接和反向链接。我也相信我了解两者是如何各自工作的,但是,一个具有混合推理功能的引擎将如何工作,它将首先执行前向链接,然后执行后向链接,还是反之亦然?或者,引擎是否有可能根据工作记忆中的知识库和事实决定使用哪种推理 另外,如果我想用这两种推理方法构建一个引擎,那么增强正在使用的匹配算法(Rete、Treat等)是开始的方式吗 我知道我问了很多问题,如果有人能回答我或让我参考有关任何部分的文献,我将非

我已经尝试搜索了很多,即使如此,如果有类似的帖子,我道歉

我知道规则引擎基本上有两种推理方法,正向链接和反向链接。我也相信我了解两者是如何各自工作的,但是,一个具有混合推理功能的引擎将如何工作,它将首先执行前向链接,然后执行后向链接,还是反之亦然?或者,引擎是否有可能根据工作记忆中的知识库和事实决定使用哪种推理

另外,如果我想用这两种推理方法构建一个引擎,那么增强正在使用的匹配算法(Rete、Treat等)是开始的方式吗

我知道我问了很多问题,如果有人能回答我或让我参考有关任何部分的文献,我将非常感激


谢谢

我建议你看看杰斯和口水。这两种工具都实现了正向链接和反向链接,因此您可以看看这是如何实际实现的

在正向链接工具中实现反向链接的一种方法是实现自动目标生成,并提供与这些目标匹配的模式。例如,以下是一些规则摘录,摘自以CLIPS(仅支持正向链接)编写的汽车维修程序:

提问规则包含条件中的先决条件信息,这些信息更难维护

通过自动目标生成,规则可以这样重写:

(defrule determine-engine-state ""
   (goal (engine-starts ?))
   =>
   (assert (engine-starts (yes-or-no-p "Does the engine start (yes/no)? "))))

(defrule determine-rotation-state ""
   (goal (engine-rotates ?))
   =>
   (assert (engine-rotates (yes-or-no-p "Does the engine rotate (yes/no)? "))))

(defrule determine-gas-level ""
   (goal (tank-has-gas ?))
   =>
   (assert (tank-has-gas
              (yes-or-no-p "Does the tank have any gas in it (yes/no)? "))))

(defrule tank-out-of-gas ""
   (not (repair ?))
   (engine-starts no)
   (engine-rotates yes)
   (tank-has-gas no)
   =>
   (assert (repair "Add gas.")))
在这种情况下,提问规则被简化,并且更易于维护。每当有特定类型事实的目标时,都会向用户查询其值。没有必要对问题的先决条件信息进行编码。自动目标生成允许油箱缺气规则驱动包含目标的规则。如果尚未确定修复,则(engine starts no)模式会在engine starts事实不存在的情况下自动生成目标(规则引擎可以确定存在另一个与此目标事实匹配的规则determine engine state)。如果用户回答否,则(引擎启动否)模式将匹配,从而为引擎旋转事实生成目标(触发确定旋转状态规则)。如果用户回答是,则(引擎启动否)模式将不匹配,并且由于没有其他适用规则,执行将停止

在这种目标生成方法中,反向链接基本上用于获取正向链接规则所需的数据

(defrule determine-engine-state ""
   (goal (engine-starts ?))
   =>
   (assert (engine-starts (yes-or-no-p "Does the engine start (yes/no)? "))))

(defrule determine-rotation-state ""
   (goal (engine-rotates ?))
   =>
   (assert (engine-rotates (yes-or-no-p "Does the engine rotate (yes/no)? "))))

(defrule determine-gas-level ""
   (goal (tank-has-gas ?))
   =>
   (assert (tank-has-gas
              (yes-or-no-p "Does the tank have any gas in it (yes/no)? "))))

(defrule tank-out-of-gas ""
   (not (repair ?))
   (engine-starts no)
   (engine-rotates yes)
   (tank-has-gas no)
   =>
   (assert (repair "Add gas.")))