当前位置: 首页 > news >正文

搜索策略的基本概念

        搜索是人工智能中的一个基本问题,是推理不可分割的一部分,它直接关系到智能系统的性能与运行效率,因而尼尔逊把它列为人工智能研究中的四个核心问题之一。在过去40多年中,人工智能界已对搜索技术开展了大量研究,取得了丰硕的成果,目前正在为提高搜索效率以及搜索复杂性理论的研究开展进一步的工作。

一、什么是搜索

(一)定义与核心目标

        搜索是人工智能中通过系统地探索问题空间,寻找从初始状态到目标状态的可行路径或解决方案的过程。其核心目标是在有限的计算资源下,高效地找到满足问题约束的最优或可行解。搜索过程可视为在状态空间与/或树中进行路径探索,通过状态转移和条件判断逐步逼近目标。

(二)分类与应用场景

1.按搜索策略分类

(1)盲目搜索(如 BFS、DFS):不利用启发式信息,按固定顺序扩展节点,适用于小规模问题;

(2)启发式搜索(如 A*、AO*):利用领域知识指导搜索方向,显著减少搜索空间,适用于复杂问题。

        显然,启发式搜索优于盲目搜索。但由于启发式搜索需要具有与问题本身特性有关的信息,而这并非对每一类问题都可方便地抽取出来,因此盲目搜索仍不失为一种应用较多的搜索策略。

2.按问题表示分类

(1)状态空间搜索适用于可表示为状态转移的问题(如八数码、路径规划);

(2)与/或树搜索适用于可分解为子问题的问题(如数学证明、任务调度)。

二、状态空间表示法

        状态空间表示法是用“状态”和“算符”来表示问题的一种方法。其中,“状态”用以描述问题求解过程中不同时刻的状况“算符”表示对状态的操作,算符的每一次使用就使问题由一种状态变换为另一种状态。当到达目标状态时,由初始状态到目标状态所用算符的序列就是问题的一个解。

(一)基本思想与定义

1. 核心思想

        将问题抽象为状态空间图,其中节点表示问题状态边表示状态转移的操作(算符)。通过搜索图中的路径,找到从初始状态到目标状态的解。

2. 形式化定义

        状态空间是一个三元组 (S, F, G),其中:

        S:初始状态集合;

        F:算符集合,定义状态转移规则;

        G:目标状态集合。

(二)表示形式与实现过程

1. 状态(State)

        定义:描述问题在某一时刻的完整信息,通常用向量或数据结构表示。当给每一个分量以确定的值时,就得到了一个具体的状态。

        示例:八数码问题的状态可表示为 (x_0, x_1, ..., x_8),其中 x_i 为方格内的数字(0表示空格)。

2. 算符(Operator)

        引起状态中某些分量发生变化,从而使问题由一个状态变为另一个状态的操作称为算符。在产生式系统中,每一条产生式规则就是一个算符。

        定义:将一个状态转换为另一个状态的操作,描述状态间的关系。

        示例:八数码问题的算符包括空格的上、下、左、右移动,每个移动生成一个新状态

3. 状态空间(State Space)

        由问题的全部状态及一切可用算符所构成的集合称为问题的状态空间,一般用一个三元组表示:(S,F,G),其中S是问题的所有初始状态构成的集合;F是算符的集合;G是目标状态的集合。

        定义:所有可能状态及其转移关系的集合,可用有向图表示。

        显式与隐式状态空间:

(1)显式:预先构建所有状态和转移(适用于小规模问题);

(2)隐式:按需动态生成状态(如八数码问题,状态数为 9! = 362880,无法显式存储)。

(三)算法描述

1. 广度优先搜索(BFS)

步骤:

(1)将初始状态加入队列

(2)取出队列首节点,若为目标状态则返回路径;

(3)生成所有合法后继状态,未访问过的加入队列;

(4)重复直至找到目标或队列为空。

复杂度:时间 O(b^d),空间 O(b^d),其中 b 为分支因子,d 为解的深度。

2. 深度优先搜索(DFS)

步骤:

(1)将初始状态压入

(2)弹出栈顶节点,若为目标状态则返回路径;

(3)生成所有合法后继状态,未访问过的压入栈;

(4)重复直至找到目标或栈为空。

复杂度:时间 O(b^m),空间 O(m),其中 m 为搜索深度。

3. 启发式搜索(A * 算法)

估价函数:f(n) = g(n) + h(n),其中 g(n) 为当前路径代价,h(n) 为启发式估计值(如曼哈顿距离)。

步骤

(1)将初始状态加入优先队列(按 f(n) 排序);

(2)取出队列首节点,若为目标状态则返回路径;

(3)生成所有合法后继状态,计算 f(n) 并更新队列;

(4)重复直至找到目标或队列为空。

性质:若 h(n) 是可采纳的(不高估实际代价),则 A *算法是最优的210。

(四)具体示例:八数码问题

1. 问题描述

初始状态:

目标状态:

2. 状态空间生成

状态表示使用9维向量 (2,8,3,1,6,4,7,0,5) 表示初始状态

算符空格的4种移动方向,生成新状态

3. BFS 搜索流程

(1)初始队列:[S_0]

(2)扩展 S_0,生成 4 个后继状态(空格上、下、左、右移动);

(3)检查每个后继是否为 S_g,若否,加入队列;

(4)重复直至找到目标状态,记录路径。

4. A * 算法优化

        启发式函数:曼哈顿距离,计算每个数字到目标位置的横向和纵向距离之和。

        效率提升:通过优先扩展 f(n) 最小的节点,减少无效搜索。

具体示例:二阶梵塔问题

        设有三根钢针,在1号钢针上穿有A,B两个金片,A小于B,A位于B的上面。要求把这两个金片全部移到另一根钢针上,而且规定每次只能移动一片,任何时刻都不能使B位于A的上面。

        设用S_k=(S_k0,S_k1)表示问题的状态,S_k0表示金片A所在的钢针号,S_k1表示金片B所在的钢针号,全部可能的状态有九种:

S0 = (1, 1), S1 = (1, 2), S2 = (1,3)

S3 = (2, 1), S4 = (2, 2), S5 = (2,3)

S6 = (3, 1), S7 = (3, 2), S8 = (3,3)

        如图1所示。

图1 二阶梵塔的状态

        问题的初始状态集合为S={S0},目标状态集合为G={S4, S8}。算符分别用A(i, j)及B(i, j)表示。A(i, j)表示把金片A从第i号针移到第j号针上;B(i, j)表示把金片B从第i号针移到第j号针上。共有12个算符,它们分别是:

A(1,2),A(1,3),A(2,1),A(2,3),A(3,1),A(3,2)

B(1,2),B(1,3),B(2,1),B(2,3),B(3,1),B(3,2)

        根据9种可能的状态和12种算符,可构成二阶梵塔问题的状态空间图,如图2所示。

图2 二阶梵塔的状态空间图

        在图2所示的状态空间图中,从初始节点(1, 1)到目标节点(2, 2)及(3, 3)的任何一条通路都是问题的一个解,其中最短的路径长度是3,它由3个算符组成,例如A(1,3),B(1,2),A(3,2)。由此例可以看出:

(1)用状态空间方法表示问题时,首先必须定义状态的描述形式,通过使用这种描述形式可把问题的一切状态都表示出来。其次,还要定义一组算符,通过使用算符可把问题由一种状态转变为另一种状态。

(2)问题的求解过程是一个不断把算符作用于状态的过程。如果在使用某个算符后得到的新状态是目标状态,就得到了问题的一个解。这个解是从初始状态到目标状态所用算符构成的序列。

(3)算符的一次使用,就使问题由一种状态转变为另一种状态。可能有多个算符序列都可使问题从初始状态变到目标状态,这就得到了多个解。其中有的使用算符较少,有的较多,我们把使用算符最少的解称为最优解。例如在上例中,使用3个算符的解是最优解。这只是从解中算符的个数来评价解的优劣,今后将会看到评价解的优劣不仅要看使用算符的数量,还要看使用算符时所付出的代价,只有总代价最小的解才是最优解。

(4)对任何一个状态,可使用的算符可能不止一个,这样由一个状态所生成的后继状态就可能有多个。当对这些后继状态使用算符生成更进一步的状态时,首先应对哪一个状态进行操作呢?这取决于搜索策略,不同搜索策略的操作顺序是不相同的,这正是本问要讨论的问题。

三、与/或树表示法

(一)基本思想与定义

1. 核心思想

        将复杂问题分解为子问题,通过 “与” 和 “或” 关系构建树结构。“与节点” 表示子问题需全部解决,“或节点” 表示只需解决一个子问题。

2. 形式化定义

        与 / 或树是一个超图,包含:

(1)与节点(AND 节点):子问题需全部解决;

(2)或节点(OR 节点):子问题只需解决一个;

(3)根节点:初始问题;

(4)叶节点:无需分解的基本问题。

(二)表示形式与实现过程

1. 分解(AND 关系)

        定义:将问题分解为多个子问题,需全部解决

        示例:证明几何定理 P,需同时证明子定理 P_1 和 P_2,则 P 为与节点,P_1、P_2 为其子节点。

        把一个复杂问题分解为若干个较为简单的子问题,每个子问题又可继续分解为若干个更为简单的子问题,重复此过程,直到不需要再分解或者不能再分解为止。然后对每个子问题分别进行求解,最后把各子问题的解复合起来就得到了原问题的解

        问题的这一分解过程可用一个图表示出来。例如,把问题P分解为三个子问题P1,P2,P3,可用图3表示。

        在图3中,P1,P2,P3是问题P的三个子问题,只有当这三个子问题都可解时,问题P才可解,称P1,P2,P3之间存在“与”关系;称节点P为“与”节点;由P,P1,P2,P3所构成的图称为“与”树。在图中,为了标明某个节点是“与”节点,通常用一条弧把各条边连接起来,如图3所示。

图3 “与”树

2. 等价交换(OR 关系)

        定义:将问题转换为多个子问题,只需解决其中一个

        示例:解方程 x^2 = 4,可转换为 x=2 或 x=-2,两个子问题为或节点。

        对于一个复杂问题,除了可用“分解”方法进行求解外,还可利用同构或同态的等价变换,把它变换为若干个较容易求解的新问题。若新问题中有一个可求解,则就得到了原问题的解。

        问题的等价变换过程,也可用一个图表示出来,称为“或”树。例如,问题P被等价变换为新问题P1,P2,P3,可用图4表示。其中,新问题P1,P2,P3中只要有一个可解,则原问题就可解,称P1,P2,P3之间存在“或”关系;节点P称为“或”节点;由P,P1,P2,P3所构成的图是一个“或”树。

图4 “或”树

        上述两种方法也可结合起来使用,此时的图称为“与/或”树。其中既有“与”节点,也有“或”节点,如图5所示。

图5 “与/或”树

(三)算法描述:AO * 算法

1. 核心思想

        通过启发式函数评估节点代价,动态选择最优路径,剪去不必要的分支

2. 步骤

(1)初始化:构建初始节点,设置启发式值 h(n);

(2)扩展节点:选择当前最优路径,扩展节点生成子节点;

(3)更新代价:根据子节点代价重新计算父节点代价;

(4)剪枝:若某路径代价高于当前最优路径,剪去该分支;

(5)重复:直至找到目标节点或无法扩展。

3. 剪枝条件

        β 剪枝MAX节点的当前最优值大于等于先辈节点的 β 值,剪去该分支

        α 剪枝MIN节点的当前最优值小于等于先辈节点的 α 值,剪去该分支

(四)具体示例:数学证明问题

1. 问题描述

        证明命题 P:“三角形内角和为 180 度”。

2. 与 / 或树构建

        根节点:P(或节点);

        子节点

(1)P_1:利用平行线性质证明;

(2)P_2:利用向量法证明;

(3)P_3:利用三角函数证明。

        分解:每个子节点为或节点,只需解决其中一个。

3. AO * 算法应用

(1)初始化 h(P) = 10(假设启发式值);

(2)扩展 P,生成 P_1、P_2、P_3,计算 h(P_i);

(3)选择 h(P_1) = 5 作为最优路径,扩展 P_1;

(4)若 P_1 分解为子问题 P_{11}(与节点)和 P_{12},需全部解决;

(5)递归搜索,若 P_{11} 和 P_{12} 均解决,则 P_1 解决,更新 h(P);

(6)剪去其他分支,返回解路径。

四、正确性维持系统(TMS)

(一)基本功能

        维护搜索过程中的信念集合,处理矛盾时回溯并修正假设,确保推理的一致性

(二)核心组件

        节点:表示信念,状态为 IN(相信)或 OUT(不相信);

        理由:支持信念的依据,分为支持列表(SL)条件证明(CP)

        冲突检测发现矛盾时触发回溯,调整假设。

(三)与搜索策略的结合

1. 冲突处理流程

(1)证据输入:将观测结果作为节点状态(如 “路径可行” 为 IN);

(2)理由检查:递归验证节点的支持理由,若冲突则标记为 OUT;

(3)回溯修正:撤销冲突节点的假设,尝试其他路径。

2. 示例:迷宫搜索

(1)初始信念:路径 A 可行(IN),路径 B 不可行(OUT);

(2)新证据:路径 A 遇到障碍物,标记为 OUT;

(3)TMS 触发:回溯到父节点,将路径 B 标记为 IN,继续搜索。

五、核心挑战与前沿方向

(一)挑战

(1)状态空间爆炸:复杂问题的状态数呈指数级增长(如围棋状态数约 10^{170});

(2)启发式函数设计:需领域知识支持,且需满足可采纳性(如 A * 算法的 h(n));

(3)动态环境适应:实时更新状态空间,处理不确定性(如机器人路径规划)。

(二)前沿方向

(1)神经启发式搜索:结合神经网络自动学习启发式函数(如AlphaGo的蒙特卡洛树搜索);

(2)分布式搜索:利用并行计算加速大规模问题求解(如 MapReduce 框架);

(3)可解释性增强:通过可视化路径和理由链,解释 AI 决策逻辑(如医疗诊断系统)。

六、总结与实践指南

(一)核心价值

        搜索策略是人工智能问题求解的基础,其核心价值在于:

(1)问题建模:通过状态空间或与 / 或树将现实问题抽象为可计算形式;

(2)效率优化:启发式搜索和剪枝策略显著减少计算资源消耗;

(3)通用性:适用于逻辑推理、规划、学习等多种任务。

(二)实施步骤

1.问题分析:确定问题类型(状态空间 / 与/或树)、约束条件和目标;

2.表示选择

(1)状态空间:适合状态转移明确的问题(如八数码);

(2)与 / 或树:适合可分解的问题(如数学证明)。

3.算法选择

(1)盲目搜索:BFS 用于最短路径,DFS 用于内存受限场景;

(2)启发式搜索:A用于最优解,AO用于问题分解。

4.优化与验证

(1)调整启发式函数提升效率;

(2)通过案例测试验证正确性(如八数码问题的可解性检查)。

(三)典型应用

(1)路径规划:机器人导航中使用 A * 算法搜索最短路径;

(2)游戏 AI:AlphaGo 结合蒙特卡洛树搜索和深度神经网络;

(3)自动定理证明:通过与 / 或树分解数学问题,应用 AO * 算法搜索证明路径。

        通过状态空间表示法、与 / 或树搜索和正确性维持系统的协同,搜索策略构建了一套完整的问题求解体系。尽管面临状态空间爆炸和启发式设计的挑战,其在知识表示与推理中的核心地位不可替代。未来,随着与机器学习和分布式计算的深度融合,搜索策略将在通用人工智能中发挥更关键的作用。

相关文章:

搜索策略的基本概念

搜索是人工智能中的一个基本问题,是推理不可分割的一部分,它直接关系到智能系统的性能与运行效率,因而尼尔逊把它列为人工智能研究中的四个核心问题之一。在过去40多年中,人工智能界已对搜索技术开展了大量研究,取得了…...

云原生--CNCF-1-云原生计算基金会介绍(云原生生态的发展目标和未来)

1、CNCF定义与背景 云原生计算基金会(Cloud Native Computing Foundation,CNCF)是由Linux基金会于2015年12月发起成立的非营利组织,旨在推动云原生技术的标准化、开源生态建设和行业协作。其核心目标是通过开源项目和社区协作&am…...

【Chrome插件开发】某视频网站的m4s视频/音频下载方案,及其Chrome插件实现-v250415

文章目录 引言效果v1.0.0 TODO让AI写初稿两条路:在content.js里,还是popup.js里发请求?World in content.js新建项目如何打包background.js:在鼠标右键菜单添加一个选项,点击后通知content.js第一次创建弹窗eslint 9如…...

Nginx:前后端分离配置(静态资源+反向代理)

Nginx 前后端分离配置 [!IMPORTANT] 前端静态资源位置:/www/wwwroot/dist后端部署端口:9999 server {listen 80;server_name www.0ll1.com;location / {root /www/wwwroot/dist;try_files $uri $uri/ /index.html;index index.html index.htm;…...

go中map和slice非线程安全

参考视频:百度 Go二面: map与切片哪个是线程安全的_哔哩哔哩_bilibili go中的map和slice是非线程安全类型的。 非线程安全类型的表现为: 并发调用时会报错并发调用后结果不可预测 go中三种线程安全类型: channel,底…...

第T9周:猫狗识别2

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 第T9周:猫狗识别2 tf.config.list_physical_devices(“GPU”),用于检测当前系统是否有可用的 GPU,并将结果存入 gpus 变量…...

AlmaLinux 9.5 调整home和根分区大小

在使用linux的过程中, 有时会出现因为安装系统时分区不当导致有的分区空间不足,而有的分区空间过剩的情况.下面本文将讲述解决linux系统AlmaLinux 下调整home和根分区大小的方法。 1、查看现有分区 df -Th2、备份/home中的用户数据 mkdir /backup && mv /home/* /ba…...

[Vue3]绑定props 默认值

前言 使用TS、Vue3组织组件中传入props的通用方式 步骤 步骤1:使用 defineProps 定义 Props 使用interface定义props中各项的类型: // 组件List.vue// 定义 Props 类型和接口 interface ListItem {name: string;time: string;content: {status: numbe…...

【android bluetooth 协议分析 11】【AVDTP详解 1】【宏观感受一下avdtp是个啥东东】

我们先从宏观感受一下avdtp协议是个啥东东, 和 a2dp 是啥关系。 在蓝牙协议中的层次。以及他是如何和 例如l2cap 、sdp、a2dp 配合的。先从宏观把握,我们在逐步展开对 avdtp 的源码分析。 我们先从生活中的小例子感性的认识一下 avdtp 在 蓝牙协议中的作…...

【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型(敏感性分析方法)

【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型(敏感性分析方法) 引言 该文章实现了一个可解释的回归模型,使用NBRO-XGBoost(方法可以替换,但是需要有一定的编程基础)来预测特征输出。该…...

【Spring】静态代理、动态代理

Java中,代理模式是一种设计模式,用于通过代理对象控制对目标对象的访问。代理可以分为静态代理和动态代理,其中动态代理又包括JDK动态代理和CGLIB动态代理。这些机制在Spring框架中广泛用于AOP(面向切面编程)、事务管理…...

关于el-table可展开行实现懒加载的方案

场景: 一个流程记录,以表格的形式展示。点击展开表格的某一行,可以看到该流程的详细记录。但是,详细记录数据独立于表格数据,在还没有展开这一行的时候就不去请求这一行的详细数据,以便加快网络请求的速度。…...

AutoJs相关学习

一、控件点击、模拟点击 如果一个控件的 clickablefalse,但它的父级控件是 clickabletrue,我们可以通过 向上查找父级控件 的方式找到可点击的父级,然后执行点击操作。以下是几种实现方法: 方法 1:使用 parent() 查找可…...

ISO15189认证有什么要求?ISO15189认证流程

ISO 15189 认证要求及流程详解 ISO 15189 是国际标准化组织(ISO)针对 医学实验室质量和能力 的认证标准,适用于医院检验科、第三方医学实验室、血站等机构。该认证确保实验室的技术能力和管理体系符合国际标准,提高检测结果的准确…...

【每天一个知识点】大模型的幻觉问题

“大模型的幻觉问题”是指大语言模型(如GPT系列、BERT衍生模型等)在生成内容时,产生不符合事实或逻辑的虚假信息,即所谓的“幻觉”(hallucination)。这在诸如问答、摘要、翻译、代码生成等任务中尤其常见。…...

光谱相机在肤质检测中的应用

光谱相机在肤质检测中具有独特优势,能够通过多波段光谱分析皮肤深层成分及生理状态,实现‌非侵入式、高精度、多维度的皮肤健康评估‌。以下是其核心应用与技术细节: ‌一、工作原理‌ ‌光谱反射与吸收特性‌: ‌血红蛋白‌&a…...

【c语言】指针和数组笔试题解析

一维数组: //数组名a如果既不单独放在sizeof()中,也不与&结合,那么就表示数组首元素的大小 //a一般表示数组首元素地址,只有两种情况表示整个数组,sizeof(arr)表示整个数组的大小,&arr表示数组的地址 int a[]…...

【Spring】AutoConfigureOrder与Order注解的区别与使用方式

@AutoConfigureOrder与@Order都是Spring框架中用于控制组件优先级的注解,但它们有不同的应用场景和作用范围。 一、基本区别 1. 包和位置 @Order: 位于org.springframework.core.annotation包,是Spring核心包的一部分@AutoConfigureOrder: 位于org.springframework.boot.au…...

基于SpringBoot的校园赛事直播管理系统-项目分享

基于SpringBoot的校园赛事直播管理系统-项目分享 项目介绍项目摘要管理员功能图用户功能图项目预览首页总览个人中心礼物管理主播管理 最后 项目介绍 使用者:管理员、用户 开发技术:MySQLJavaSpringBootVue 项目摘要 随着互联网和移动技术的持续进步&…...

科研小白可以做哪些准备

断更五个月啦,这段时间一直忙于自己的研究课题。今天给大家分享我在这段时间对科研的一些认识和积累的经验,希望对大家有所帮助。 一、学术研究的认识与思考 什么是科研 什么是好的研究 首先,就是要回答“什么是科研?什么是好研…...

2025.4.22学习日记 JavaScript的常用事件

在 JavaScript 里,事件是在文档或者浏览器窗口中发生的特定交互瞬间,例如点击按钮、页面加载完成等等。下面是一些常用的事件以及案例: 1. click 事件 当用户点击元素时触发 const button document.createElement(button); button.textCo…...

TikTok X-Gnarly纯算分享

TK核心签名校验:X-Bougs 比较简单 X-Gnarly已经替代了_signature参数(不好校验数据) 主要围绕query body ua进行加密验证 伴随着时间戳 浏览器指纹 随机值 特征值 秘钥转换 自写算法 魔改base64编码 与X-bougs 长a-Bougs流程一致。 视频…...

CentOS7 环境配置

CentOS 7 环境配置 我的基础环境: Windows11 CentOS版本:CentOS Linux release 7.7.1908 (Core) Vmware版本:VMware Workstation 17 Pro 17.5.0 build-22583795 使用工具:MobaXterm 注意: 所有有关防火墙的操作都可以…...

缓存,内存,本地缓存等辨析

快速辨析缓存,内存,本地缓存,memcache,redis等 (个人临时记录) 缓存 泛指所有用于暂存数据以提升访问速度的技术,包括本地缓存、分布式缓存、CPU缓存等。核心目标是减少对慢速存储&#xff08…...

C++模板学习(进阶)

目录 一.非类型模板参数 二.模板的特化 一).函数模板特化 二).类模板特化 1.全特化 2.偏特化 三.模板分离编译 一).什么是分离编译 1. 问题描述 2. 模板的实例化机制 3. 分离编译的困境 二).解决方法 1. 头文件包含…...

【Git】fork 和 branch 的区别

在 Git 中,“fork” 和 “branch” 是两个不同的概念,它们用于不同的场景并且服务于不同的目的。理解这两者的区别对于有效地使用 Git 进行版本控制非常重要。 1. Fork(分叉) 定义 Fork 是指在 GitHub、GitLab 等代码托管平台上…...

STM32单片机入门学习——第45节: [13-2] 修改频主睡眠模式停止模式待机模式

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.22 STM32开发板学习——第45节: [13-2] 修改主频&睡眠模式&停止模式&待…...

Java中常见API的分类概述及示例

1. 集合框架&#xff08;java.util 包&#xff09; 核心接口与实现类 接口实现类特点示例代码ListArrayList, LinkedList有序、可重复List<String> list new ArrayList<>(); list.add("Java");SetHashSet, TreeSet无序、唯一Set<Integer> set …...

IOT项目——物联网 GPS

GeoLinker - 物联网 GPS 可视化工具 项目来源制作引导 项目来源 [视频链接] https://youtu.be/vi_cIuxDpcA?sigMaOKv681bAirQF8 想要在任何地方追踪任何东西吗&#xff1f;在本视频中&#xff0c;我们将向您展示如何使用 ESP32 和 Neo-6M GPS 模块构建 GPS 跟踪器——这是一…...

开源状态机引擎,在实战中可以放心使用

### Squirrel-Foundation 状态机开源项目介绍 **Squirrel-Foundation** 是一个轻量级、灵活、可扩展、易于使用且类型安全的 Java 状态机实现&#xff0c;适用于企业级应用。它提供了多种方式来定义状态机&#xff0c;包括注解声明和 Fluent API&#xff0c;并且支持状态转换、…...

TockOS,一种新安全软件架构的RTOS介绍

文章目录 1. TockOS介绍详细总结 2. TockOS开源项目的目录结构3. 胶囊&#xff08;Capsules&#xff09;胶囊的本质胶囊的特点胶囊的应用场景 4. 胶囊的实现模块化设计安全隔离事件驱动可复用性 1. TockOS介绍 Tock 是一款面向 Cortex-M 和 RISC-V 微控制器的安全嵌入式操作系…...

AGI大模型(12):向量检索之关键字搜索

1 检索的方式有那些 列举两种: 关键字搜索:通过用户输入的关键字来查找文本数据。语义搜索:不仅考虑关键词的匹配,还考虑词汇之间的语义关系,以提供更准确的搜索结果。2 关键字搜索 先看一个最基础的实现 安装模块 pip install redis 不会redis的去看我的redis专题 首…...

数据库MySQL学习——day1(创建表与数据类型)

文章目录 1. 创建表&#xff08;CREATE TABLE&#xff09;1.1. 创建表的基本语法&#xff1a;1.2. 示例&#xff1a;创建学生信息表 2. 数据类型2.1. 常用的数据类型&#xff1a; 3. 表约束3.1. 常见约束类型&#xff1a;3.2. 示例&#xff1a;添加约束条件3.3. 修改表添加约束…...

基于Transformer与随机森林的多变量时间序列预测

哈喽&#xff0c;我不是小upper&#xff0c;今天和大家聊聊基于Transformer与随机森林的多变量时间序列预测。 不懂Transformer的小伙伴可以看我上篇文章:一文带你彻底搞懂&#xff01;Transformer &#xff01;&#xff01;https://blog.csdn.net/qq_70350287/article/detail…...

【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)

&#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 希望用我的经验&#xff0c;让“程序猿”的AI学习之路走的更容易些&#xff0c;若我的经验能为你前行的道路增添一丝轻松&#xff0c;我将倍感荣幸&#xff01;共勉~ 【程序员 NLP 入门】词…...

MATLAB Coder 应用:转换 MATLAB 代码至 C/C++ | 实践步骤与问题解决

注&#xff1a;本文为 “ MATLAB 代码至 C/C 应用” 相关文章合辑。 未整理去重。 如有内容异常&#xff0c;请看原文。 MATLAB 代码转换为 C/C 代码的详细指南 随心 390 zhihu 发布于 2020-07-12 12:39 在实际项目中&#xff0c;我们常常遇到需要将 MATLAB 代码转换为 C/C …...

BLE 6.0 六大核心特性全解析

写在前面: 2025年1月15日,Bluetooth SIG发布了备受期待的 Bluetooth Core Specification 6.0。相比5.x系列,6.0在测距精度、能耗优化、扫描过滤、音频体验和协议灵活性等方面实现了重大突破。本文将以浅显易懂的语言、丰富的图示和真实案例,带你全面深入了解BLE 6.0的六大核…...

网络应用程序体系结构

本文来源 &#xff1a; 《计算机网络 自顶向下方法》 应用程序体系结构&#xff08;application architecture&#xff09;由应用程序研发者设计&#xff0c;规定了如何在各种端系统上组织该应用程序。 现代网络应用程序中使用的两种主流体系结构&#xff1a; (1)客户-服务器…...

Filename too long 错误

Filename too long 错误表明文件名超出了文件系统或版本控制系统允许的最大长度。 可能的原因 文件系统限制 不同的文件系统对文件名长度有不同的限制。例如&#xff0c;FAT32 文件名最长为 255 个字符&#xff0c;而 NTFS 虽然支持较长的文件名&#xff0c;但在某些情况下也…...

Linux学习——UDP

编程的整体框架 bind&#xff1a;绑定服务器&#xff1a;TCP地址和端口号 receivefrom()&#xff1a;阻塞等待客户端数据 sendto():指定服务器的IP地址和端口号&#xff0c;要发送的数据 无连接尽力传输&#xff0c;UDP:是不可靠传输 实时的音视频传输&#x…...

C++:继承

目录 一&#xff1a;继承的概念 1.1 继承的定义 1.2 继承方式 1.3 可见性区别 公有方式 私有方式 保护方式 1.4 一般规则 二、继承中的隐藏规则 三、基类和派生类间的转换 四、派生类的默认成员函数 实现一个不能被继承的类 继承与友元 五、继承与静态成员 六、多…...

RSGISLib:一款功能强大的GIS与RS数据处理Python工具包

今天为大家介绍的软件是RSGISLib&#xff1a;一款功能丰富的遥感与GIS数据的python库。下面&#xff0c;我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 RSGISLib官网网址为&#xff1a;http://rsgislib.org/&#xff0c;它提供了一个丰富的工具集&…...

Git管理

1.创建git仓库 git init 2.让文件添加到暂存区 git add. 3.给暂存区文件添加说明&#xff0c;并提交到本地仓库 git commit -m 说明 4.查看历史记录 git log /git log --oneline 查看状态&#xff1a;git status 5. 引用旧版 git reset --hard commitid 6.创建分支 …...

Java中内部类

1.静态类与非静态类是内部类的区分&#xff0c;外部类不可以被static修饰。 2.类的加载过程&#xff1a;类只有被使用才会被类加载器加载&#xff0c;加载后类的信息放在元空间&#xff08;方法区&#xff09;中。类的使用包括初始化对象、静态方法的调用。 3.静态内部类与普…...

[U-Net-Dual]DEU-Net

论文题目:DEU-Net: Dual-Encoder U-Net for Automated Skin Lesion Segmentation 中文题目:DEU-Net:用于自动皮肤病变分割的双编码器U-Net 0摘要 皮肤病的计算机辅助诊断(CAD)在很大程度上依赖于皮肤病变的自动分割,尽管由于病变在形状、大小、颜色和纹理上的多样性以及…...

【数据结构】第五弹——Stack 和 Queue

文章目录 一. 栈(Stack)1.1 概念1.2 栈的使用1.3 栈的模拟实现1.3.1 顺序表结构1.3.2 进栈 压栈1.3.3 删除栈顶元素1.3.4 获取栈顶元素1.3.5 自定义异常 1.4 栈的应用场景1.改变元素序列2. 将递归转化为循环3. 四道习题 1.5 概念分区 二. 队列(Queue)2.1 概念2.2 队列的使用2.3…...

LSTM如何解决梯度消失问题

LSTM如何解决梯度消失问题 一、传统RNN的梯度消失困境 在标准RNN中&#xff0c;隐藏状态更新公式为&#xff1a; h t tanh ⁡ ( W h h h t − 1 W x h x t b h ) h_t \tanh(W_{hh}h_{t-1} W_{xh}x_t b_h) ht​tanh(Whh​ht−1​Wxh​xt​bh​) 梯度计算通过链式法则展…...

什么是管理思维?

管理思维是指在管理活动中形成的系统性、战略性和创造性的思考方式&#xff0c;帮助个人或团队更高效地达成目标。它不仅适用于企业管理&#xff0c;也适用于个人成长、项目执行和复杂问题解决。以下是关于管理思维的核心内容&#xff1a; 一、管理思维的核心特征 1. 系统性思…...

缓存与内存;缺页中断;缓存映射:组相联

文章目录 内存&#xff08;RAM&#xff09;与缓存&#xff08;Cache&#xff09;Memory Management Unit缺页中断 多级缓存缓存替换策略缓存的映射方式 内存&#xff08;RAM&#xff09;与缓存&#xff08;Cache&#xff09; 缓存&#xff1a; CPU 内部或非常靠近的高速存储&a…...

12.5/Q1,GBD高分文章解读

文章题目&#xff1a;Global, regional, and national burdens of early onset pancreatic cancer in adolescents and adults aged 15-49 years from 1990 to 2019 based on the Global Burden of Disease Study 2019: a cross-sectional stud DOI&#xff1a;10.1097/JS9.000…...