Backward Chaining(后向链推理)

Backward Chaining

这张图介绍了 Backward Chaining(后向链推理) 的基本概念和步骤。

后向链推理的基本思路:

后向链推理的目标是从查询目标 ( q ) 开始,向后推导前提条件,验证该查询是否成立。

证明目标 ( q ) 的步骤:

  1. 检查 ( q ) 是否已知为真:如果 ( q ) 已经在已知事实中,证明完成。
  2. 通过后向链推理证明:如果 ( q ) 不是已知事实,寻找以 ( q ) 为结论的规则,并尝试证明所有前提条件为真。

避免循环:

  • 在推理过程中,需要检查新产生的子目标是否已经在目标栈中,以避免重复推理和陷入无限循环。

避免重复工作:

  • 检查新的子目标是否已经被证明为真,或者之前尝试证明该子目标时已经失败了。如果是其中任一情况,就不需要再次证明该子目标。

通过这些步骤,后向链推理能够逐步从目标向前推导出相应的前提条件,最终确定目标是否能够被证明。

这张图解释了 Backward Chaining(后向链推理) 其实本质上是 And-Or 搜索(与或搜索)。下面对图中的各要素进行详细解释:

Backward Chaining as And-Or Search

Backward Chaining as And-Or Search

后向链推理可以看作是一种与或搜索,通过推理过程找到目标是否能够被证明。

  • Initial state (初始状态) = Query (查询):推理的起点是我们想要验证的命题 ( q ),即查询。

  • Goal state (目标状态) = KB (知识库):推理的最终目的是要找到 ( q ) 是否能通过知识库 ( KB ) 中的事实和规则推导出来。

  • Actions (动作) = Clauses (子句):在推理过程中,动作相当于应用知识库中的子句(规则)来推导新的事实或结论。

  • States (状态) = Models of KB (知识库的模型):每个状态都代表了知识库中的某种解释或模型,表示已知的事实。

  • If a plan exists (如果有一个推理计划),( q ) is true (则 ( q ) 为真):如果存在一条从查询 ( q ) 到达目标状态的推理路径(推理计划),那么 ( q ) 就是真的。这条路径中的每一步都包含了具体的推理步骤。

简而言之,后向链推理可以通过一种搜索方法从查询开始,依次应用规则直到达到目标,即证明查询是否能够从知识库中推导出来。

在这里插入图片描述

这张图展示了 AND-OR Graph Search 算法的伪代码,主要用于在解决问题时进行与或搜索。下面是对代码中每个部分的解释:

1. And-Or-Graph-Search(problem)

  • 这个函数是整个算法的入口点。它调用了 Or-Search,开始从问题的初始状态(problem.Initial-State)进行搜索,并且传递一个空路径([]),表示当前还没有走过任何路径。

2. Or-Search(state, problem, path)

  • 输入: 当前状态(state)、问题(problem)以及当前已经走过的路径(path)。
  • Goal Test: 首先检查当前状态是否是目标状态(problem.Goal-Test(state)),如果是,则返回一个空计划([]),表示已经到达目标,不需要再进一步规划。
  • 环检测(Cycle Check): 如果当前状态已经在路径中(意味着出现了环),返回失败(failure),防止陷入死循环。
  • 动作循环: 对于每个可能的动作(action):
    • 使用 And-Search 对应用该动作后的结果状态进行递归搜索。
    • 如果 And-Search 返回一个非失败的计划,则将该动作与返回的计划组合成一个新的计划并返回。
    • 如果没有找到成功的计划,则返回失败。

3. And-Search(states, problem, path)

  • 输入: 一组可能的状态(states)、问题(problem)、和路径(path)。
  • 状态循环: 对于每个状态 s_i
    • 调用 Or-Search 来对这个状态进行搜索。
    • 如果 Or-Search 返回失败,则 And-Search 也会返回失败。
  • 成功计划构建: 如果所有的状态都成功找到计划,则返回一个组合的计划,形如 if s_1 then plan_1 else ... if s_n then plan_n。也就是说,对于每个状态都生成相应的计划。

总结

  • Or-Search 负责处理 OR 节点的情况,也就是只要有一个动作能成功,就可以返回成功。
  • And-Search 负责处理 AND 节点的情况,也就是所有状态都需要成功才能返回成功。
  • 整个搜索算法通过递归方式,处理了复杂的与或图中的决策问题。

这段伪代码实现的是一个 递归的与或搜索算法,在人工智能问题求解中非常常见,特别是当问题包含多个并行的子问题时。

在这里插入图片描述
这张图展示了一个**Backward Chaining(逆向推理)**的示例,通过从目标开始,沿着规则链向后推导,直至找到已知的事实为止。

逻辑规则

左边的逻辑表达式描述了推理规则:

  1. P ⇒ Q (如果 P 为真,那么 Q 为真)
  2. L ∧ M ⇒ P (如果 L 和 M 都为真,那么 P 为真)
  3. B ∧ L ⇒ M (如果 B 和 L 为真,那么 M 为真)
  4. A ∧ P ⇒ L (如果 A 和 P 都为真,那么 L 为真)
  5. A ∧ B ⇒ L (如果 A 和 B 为真,那么 L 为真)
  6. A 和 B 是已知的事实(它们为真)。

图的解释

  • 目标: 我们的目标是证明 Q 为真(标记为绿色的圆圈)。
  • 推理过程:
    1. 从 Q 开始,根据规则 P ⇒ Q ,我们需要 P 为真才能使 Q 为真。
    2. 根据 L ∧ M ⇒ P ,我们需要 L 和 M 都为真才能使 P 为真。
    3. 接着,根据 B ∧ L ⇒ M ,要证明 M ,我们需要 B 和 L 为真。
    4. 现在,我们需要证明 L 。根据 A ∧ P ⇒ L 和 A ∧ B ⇒ L ,两条路径可以证明 L 。但我们知道 A 和 B 是已知的事实,因此 L 为真。

结论

根据上述推理链条:

  • A 和 B 都为真;
  • L 为真;
  • M 为真;
  • 最终 P 为真,进而 Q 为真。

这个过程展示了如何通过逆向推理从目标 Q 出发,沿着逻辑规则的路径找到可以证明的已知事实,从而证明目标的真实性。这就是 Backward Chaining 的核心思想。

在这里插入图片描述
这张幻灯片讨论了前向推理(Forward Chaining, FC)后向推理(Backward Chaining, BC),它们是人工智能中常用的两种推理技术,尤其是在基于规则的系统中。

  1. 前向推理 (FC)

    • 数据驱动方式:从已有的数据开始,应用推理规则以提取更多数据或得出结论,从事实逐步推向目标。这种过程类似于自动或无意识的处理,常见于物体识别或日常决策等任务中。
    • 潜在缺点:可能效率较低,因为它可能会生成与目标无关的结果,无法提前知道具体目标。
  2. 后向推理 (BC)

    • 目标驱动方式:从目标开始,向后推理,检查哪些数据或事实可以实现该目标。适用于问题解决,例如“我的钥匙在哪里?”或者“如何进入博士项目?”
    • 效率:BC通常更高效,因为它只探索与特定目标相关的路径。相对于知识库(KB)的大小,BC的复杂性可能远小于线性增长,这使得它在效率要求较高的系统中非常有用。

总的来说,FC 更为通用且数据驱动,但在针对性问题解决上可能效率较低,而 BC 以目标为导向,通常在解决特定问题时更加高效。

在这里插入图片描述
这张幻灯片介绍了命题逻辑Propositional Logic的几个关键特点:

  1. 命题逻辑是声明式的(declarative)

    • 命题逻辑的语法片段对应于事实。也就是说,命题逻辑通过使用声明性的语句来表达某些事物为真或假。
  2. 命题逻辑允许部分、析取(或)、否定的信息

    • 命题逻辑可以处理部分信息、带有“或”的不确定信息、以及否定信息。这是与大多数数据结构和数据库不同的特点,因为很多传统数据结构只处理确定的、正面的信息。
  3. 命题逻辑是组合性的

    • 命题逻辑的组合性意味着复合命题的意义来自于各个组成部分的意义。例如,命题 ( B_{1,1} \land P_{1,2} )("与"的表达式)是由 ( B_{1,1} ) 和 ( P_{1,2} ) 各自的意义组合而来的。
  4. 命题逻辑的含义是上下文无关的

    • 与自然语言不同,命题逻辑中的意义与上下文无关。自然语言的意思往往依赖于上下文,而命题逻辑不需要上下文来理解句子的含义。
  5. 命题逻辑的表达能力非常有限

    • 与自然语言相比,命题逻辑的表达能力相对较弱。例如,在命题逻辑中,无法直接表达“坑洞会导致相邻方格出现微风”这样的复杂关系,必须为每个方格单独写一个句子来描述这种情况。

总结来说,命题逻辑是一种声明式的逻辑体系,允许处理部分和否定信息,但它在表达复杂关系时能力有限,且其含义在上下文中是独立的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447253.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中 turncate、drop和delete的区别

MySQL中 turncate、drop和delete区别 turncate 执行速度快,删除所有数据,但是保留表结构不记录日志事务不安全,不能回滚可重置自增主键计数器 drop 执行速度较快,删除整张表数据和结构不记录日志事务不安全,不能回…

源码编译llama.cpp for windows on arm

源码编译llama.cpp for windows on arm 这里有编译好的,直接下载使用 https://github.com/turingevo/llama.cpp-build/releases 1 先编译openblas for windows on arm 查看我的文章 《源码编译 openblas for windows on arm》 2 启用OpenBlas加速 上一步openb…

基于yolov8、yolov5的鸟类检测系统(含UI界面、数据集、训练好的模型、Python代码)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 , 直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有 GPU&#xff0…

FastApi SQLAlchemy SQLite

FastApi fastapi是一个用于构建API 的现代、快速(高性能)的web框架,它是建立在Starlette和Pydantic基础上的。 Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库,Starlette是一种轻量级的ASGI框架/工具包&…

流程图 LogicFlow

流程图 LogicFlow 官方文档&#xff1a;https://site.logic-flow.cn/tutorial/get-started <script setup> import { onMounted, ref } from vue import { forEach, map, has } from lodash-es import LogicFlow, { ElementState, LogicFlowUtil } from logicflow/core …

Vue Data UI——Vue 3 数据可视化组件库

文章目录 1、Vue Data UI2、核心特点2.1.Vue 3 的深度集成2.2 丰富的可视化组件2.3 灵活的定制性2.4 易于集成2.5 文件导出功能2.6 多主题支持3、如何在项目中使用 Vue Data UI?3.1 安装 Vue Data UI3.2 全局注册组件3.3 局部引入组件3.4 使用通用组件3.5 TypeScript 集成4、总…

新年好——Dijkstra+Permutation

题目 代码 #include <bits/stdc.h> using namespace std; #define x first #define y second typedef pair<int, int> PII; const int N 5e410, M 2e510; const int inf 0x3f3f3f3f; int n, m; int a[6]; int h[N], e[M], ne[M], idx, w[M]; int dist[6][N];…

倾斜的角标 android倾斜角标实现

android倾斜角标实现_android 图片角标如何制作-CSDN博客 import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint;…

企业资产安全之数据防泄密要领

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据价值的增加&#xff0c;数据泄露的风险也随之上升。从内部员工的无意泄露到外部黑客的恶意攻击&#xff0c;企业数据安全面临着前所未有的挑战。SDC沙盒数据防泄密解决方案&#xff0c;正是为…

几种常用大模型工具生成基于hi3861的OpenHarmony代码的尝试

引言 最近在上智能物联网的课程&#xff0c;讲授基于hi3861的OpenHarmony编程&#xff0c;所以尝试一下使用大模型工具生成相关的代码&#xff0c;看看效果如何。提问的方式比较简单粗暴&#xff1a; 在OpenHarmony的hi3861平台上&#xff0c;如何编程访问https的网站&#xf…

进程和线程

目录 进程 线程 进程和线程的区别 进程 什么是进程&#xff1f; 每个应用程序运行在操作系统上时&#xff0c; 操作系统会提供一种抽象&#xff0c;好像系统上只有这个程序在运行&#xff0c;所有的硬件资源都被这个程序在使用。 这种假象是通过抽象了一个进程的概念来完成…

什么是编译器?

我们平时所说的程序&#xff0c;是指双击后就可以直接运行的程序&#xff0c;这样的程序被称为可执行程序&#xff08;Executable Program&#xff09;。在 Windows 下&#xff0c;可执行程序的后缀有 .exe 和 .com&#xff08;其中 .exe 比较常见&#xff09;&#xff1b;在类…

决战Linux操作系统

前言&#xff1a; 你是否也曾经为Linux所困扰过&#xff0c;在网上找的资料零零散散&#xff0c;是否学完Linux后还是懵懵懂懂&#xff0c;别怕&#xff0c;这篇博客是博主精心为你准备的&#xff0c;现在&#xff0c;就让我们一起来走进Linux的世界&#xff0c;决战Linux&…

C语言 sizeof 的介绍,以及sizeof计算数组名、 数组首地址、数组的元素之间的区别

一、sizeof 介绍 sizeof 是 C 语言中的一个运算符&#xff0c;用于计算数据类型或变量在内存中占用的字节数。用于计算数据类型或变量所占的内存大小&#xff0c;以字节为单位。它可以在编译时计算其操作数的大小&#xff0c;并返回一个 size_t 类型的值。它可以帮助了解不同类…

WebGL 小白入门学习

1. WebGL是什么&#xff1f; WebGL&#xff08;Web Graphics Library&#xff09;是一种JavaScript API&#xff0c;它允许你在不需要安装任何额外插件的情况下&#xff0c;直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元&#xff08;GPU&#xff09;来…

统信桌面专业版【手动分区安装UOS系统】介绍

统信桌面专业版【手动分区安装UOS系统】介绍 全文导读功能概述准备环境安装步骤注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 全文导读 本文旨在详细介绍在安装UOS系统时采用手动分区的方法。虽然全盘安装通常是推荐的安装方式&…

实战篇:(四)Vue2 + Three.js 创建可交互的360度全景视图,可控制旋转、缩放完整代码

Vue2 Three.js 创建可交互的360度全景视图&#xff0c;可控制旋转、缩放 引言 在现代网页开发中&#xff0c;三维图形技术已经成为提升用户体验的重要工具。本文将展示如何使用 Three.js 创建一个简单的可交互360度全景视图。通过这一项目&#xff0c;你将能够学习到基本的场…

hadoop集群搭建-安装虚拟机

2.1 安装虚拟机 在本地搭建集群就需要这么几个事 装虚拟机 安装环境 配置集群 启动 这篇博客主要就是讲的装虚拟机这一个环节的 装虚拟机就是和组装一台现实中的电脑一样&#xff0c;首先来说就是要有硬件&#xff0c;就是组装硬件&#xff0c;然后就是装系统&#xff…

Kind部署的K8s证书过期后的解决方案

证书通常有效期为1年&#xff0c;一年后服务将不可用解决方案就是更新证书 1. 找到 Kind 集群的控制平面容器名称,容器名称不一定是这个 docker ps --filter "namekind-control-plane"2. 进入 Kind 控制平面的容器&#xff1a; docker exec -it kind-control-plane…

javascript object

用const去define一个constant 用let (如果要reassign的话) 一个变量。