1.搜索问题

  • 搜索问题——对原问题的建模

    • 构成:

      • 状态空间

        • 包含环境中每一个细节
        • 搜索状态:只保留行动需要的细节
      • 后继函数
        • 行动,消耗
      • 初始状态和目标测试
    • 解:
      • 一个行动序列,将初始状态–>目标状态
    • 表示
      • 状态空间图

        • 搜索问题的数学表示
        • 每种状态只出现一次
        • 不在内存中构建(大),但很有用
      • 搜索树
        • 根节点:初始状态
        • 子节点:父节点的后继状态
        • 节点:状态,对应到达这个状态的行动
        • 对大多问题,不会构建整棵树
      • 树中节点对应于图中节点的某条完整路径
      • 大量重复结构:在树中–>无穷大
    • 搜索
      • 扩展出潜在行动
      • 维护所考虑行动的* * 边缘* * (还未处理的节点,叶子)
      • 试图扩展尽可能少的树节点
    • 主要:
      • 边缘
      • 扩展
      • 探索策略–对应于各个搜索算法

2.全局搜索—保留了所有的路径

  • 参数说明

    • b-分支因子
    • m-最大深度
    • d-最浅层的目标节点的深度
    • l-限制下的深度,
    • $C^* /\epsilon :UCS取得最优解时估计深度,:UCS取得最优解时估计深度,:UCS取得最优解时估计深度,\epsilon是最小cost,是最小cost,是最小cost,C^* $是解的cost,
    • 整棵树的深度:
    • 1+b1+...+bm=O(bm)1+b^1+...+b^m=O(b^m)1+b1+...+bm=O(bm)
算法名称 算法策略 时间复杂度 空间复杂度 完备性 最优性 存储
DFS(深度优先) 深度优先(从左往右,得到最左结果, O(bm)O(b^m)O(bm) O(bm)O(bm)O(bm) (不完备)有限就有解 堆栈
Depth-limited(深度优先) 深度优先,限制最长搜索深度,超过就换一条 O(bl)O(b^l)O(bl) O(bl)O(bl)O(bl) (不完备)m有限就有解 堆栈
Iterative-Depth(深度优先) 逐层限制深度,使用DFS(DFS的空间+BFS的最优) O(bd)O(b^d)O(bd) O(bd)O(bd)O(bd) 有解,s必然有限 堆栈
BFS 宽度优先,会得到最浅层的解 O(bd)O(b^d)O(bd) O(bd)O(b^d)O(bd) 有解,s必然有限(完备) 最优(无权时才最优 队列
UCS(代价一致搜索 优先队列BFS,考虑当前代价(优先级),BFS是UCS的特例,g(x) O(b[C∗/ϵ])O(b^[C^* /\epsilon])O(b[C∗/ϵ]) O(b[C∗/ϵ])O(b^[C^* /\epsilon])O(b[C∗/ϵ]) 完备 最优 优先队列
启发式搜索 使用额外信息(如到终点的长度)–启发函数h(x) - - - - -
贪婪搜索 h(x)最好的先扩展 快速,最坏同DFS(全树扩展) - 有限图时完备 最大问题在于往往找不到最优解 优先队列
A* UCS+贪婪,优先级用f(x)=g(x)+h(x),目标出列时才停止 指数 指数 有限图时完备 实际h>估计h,且目标出列时结束的情况,最优(往好了估计) 花费的话小的优先队列
A* 图搜索 去除树中重复节点(一个状态则不扩展)(保证h(A)<=实际,且h(A)-h©<=弧cost(一致性) 指数 指数 完备(树有的状态他都有) 弧一致时最优 优先队列

BFS/DFS

https://blog.csdn.net/qq_40763929/article/details/81675163

  • 什么情况下DFS比BFS好?

    • 解决连通性问题,用DFS
    • 解决最短路径问题,用BFS
  • 迭代深入搜索存在浪费冗余吗?
    • 通常绝大多数的节点在底层,所以上层的节点生成多次影响不大

2.2 启发式搜索

  • 结束条件

    • 目标出列时才结束
    • 如果目标入列时结束?得不到最优解
  • g(x)前向代价,已经花费的
  • h(x)后向代价,预计还要花费的 —启发函数
  • f(x)
  • A* 最优?
    • 需要实际消耗>估计消耗–往好了估计
    • 若实际消耗<估计消耗:得不到最优解(启发函数设计的不合理)
    • 保证往好了估计—可采纳启发
      • 可采纳启发:0<=h(x)<=h* (x)(实际
      • 获得:
        • 原问题的松弛问题的解(简化原问题)

          • 原,空格移动问题
          • eg:棋子可以从A–>B
          • eg:相邻,则可移动(不论隔壁有无东西)
        • 实际耗散(难算)
        • 好坏:
          • 占优势:ha>=hc if 任意n,ha(n)>=hc(n)

            • a扩展的节点包含于c
          • 若无包含性,则取最大:
            • h(n)=max(ha(n),hb(n))
      • 特点
        • 越接近原问题,需要扩展的节点越少
        • 越接近原问题,计算越多
    • 证明最优(使用了可采纳启发)
      • B-次优,A-最优,h-可采纳的,证明A在B前离开边缘集合(出队列)

        • 假设B和A的祖先n在边缘集合上
        • 那么,n会在B之前被扩展
          1. f(n)<=f(A)(因为还未到达终点,f(A)=g(A)就是实际全程耗散)
          2. f(A)<f(B)(g(A)<g(B),且h(A)=h(B)=0到达终点了)
          3. 所以,n先扩展
        • 所以A的所有祖先都在B之前扩展
        • A在B之前扩展
        • 所以,A* 最优
  • A* 图搜索最优?
    • 前提:一致性–就是可采纳性

      • h(A)<=实际,
      • 且h(A)-h©<=弧cost(一致性)
    • 采用一致的h(启发函数,所以
      1. f单调递增
      2. 对每个状态s,到达s最优的节点,优于次优
      3. 所以是最优的
    • 证明
      • 假定到达G* (最优值)的路径上某个n不能进入队列,因为某个具有相同状态且较差的n’先被扩展了
      • 找到树中最高的这个节点n
      • p是n的祖先,且n’出列时在队列里
      • f§<f(n)(递增
      • f(n)<f(n’)次优
      • p应该在n’之前被扩展
      • 矛盾
      • 得证先到达G*
  • 比较:
算法名称 方向 最优
贪婪 快速地向目标方向扩展, 不一定能够得到最优解
UCS 所有方向等可能扩展 能够得到最优解
A* 朝着最优解方向扩展 能够得到最优解

3.局部搜索—与路径无关

  • 全局搜索

    • 保留了所有的路径
  • 局部搜索

    • 与路径无关
    • 只与最终状态有关
    • 优点
      • 内存要求小
    • 缺点
      • 不完备
      • 不最优
    • 用于纯最优问题
    • 操作:改进单一选项,直至不能改变
    • 新的后继函数:局部改变
  • ΔE=E(next)−E(now):ΔE>0,接受\Delta E=E(next)-E(now):\Delta E>0,接受ΔE=E(next)−E(now):ΔE>0,接受:

算法名称 算法策略 时间复杂度 空间复杂度 完备性 最优性
爬山法(如SGD) 1.任意位置起始,2.移动到最好的相邻位置,3.无最好则结束 - - (不完备)
模拟退火(从爬山法改进) 1.任意位置起始,2.移动到最好的相邻位置,3.不好的状态则以eΔE/Te^{\Delta E/T}eΔE/T概率接受 - - (不完备) 下降够慢,则最优
遗传算法 1.选最好的N个(基于适应度函数),2.这几个配对,并杂交,3.随机变异各串中的一个,重复 - - (不完备)

  • M-左岸传教士数目
  • C-左岸野人数目
  • B-左岸是否有船
  • Pcm-有c个传教士,m个野人从左岸到右岸
  • Qcm-有c个传教士,m个野人从右岸到左岸
  • 问题有解所必须的特性
    • M>=C且(3-M)>=(3-C)<==>M=C
    • 或者M=0,M=3
  • 安全状态(以左岸为例):
    1. 传教士与野人的数目相等;
    2. 传教士都在左岸;
    3. 传教士都不在左岸。
  • 完全状态图:不满足约束的不在图内)
    *
    https://blog.csdn.net/guangheultimate/article/details/51377302

国科大高级人工智能笔记1-搜索相关推荐

  1. 国科大高级人工智能2020-2021年期末试题回顾

    国科大高级人工智能2020-2021年期末试题回顾 题型 选择题 简答题 应用题 附件 题型 题型没有变,仍然为选择题(20道,每道1分),简答题(3道,每道10分),综合应用题(3道,15,15,2 ...

  2. 国科大高级人工智能5-RNN/LSTM/GRU/集束搜索/attention

    文章目录 BPTT BPTT前向传播 长序列循环神经网络 LSTM 序列到序列的模型 集束搜索--近似搜索 改进的集束搜索 集束搜索的误差分析 图到文本 注意力模型 序列数据建模 输入序列–>输 ...

  3. 国科大高级人工智能-总结

    文章目录 1.概论 2. 搜索 A\*最优性 三个传教士与野人 3.神经网络 RBM DBN DBM hopfield比较 结构及特性 逐层贪婪训练与CD BP GAN 4.逻辑 一个永远无法归结结束 ...

  4. 国科大高级人工智能10-强化学习(多臂赌博机、贝尔曼)

    文章目录 多臂赌博机Multi-armed bandit(无状态) 马尔科夫决策过程MDP(markov decision process 1.动态规划 蒙特卡罗方法--不知道环境完整模型情况下 2. ...

  5. 国科大高级人工智能9-模糊数学和遗传算法

    文章目录 1.模糊计算 笛卡尔积.关系 模糊集 连续的隶属度函数 运算 2.evolution 遗传算法 1.模糊计算 why模糊 取得精确数据不可能或很困难 没有必要获取精确数据 模糊性概念:对象从 ...

  6. 国科大高级人工智能6-GAN

    文章目录 生成式模型的基础:极大似然估计 GANs 最终版本 问题 非饱和博弈 DCGAN 不同类型的GAN conditional GAN 无监督条件GAN--cycle GAN 对抗学习 http ...

  7. 国科大.高级人工智能.2022期末考试真题回忆版

    选择 通过图灵测试意味着? 图神经网络 因果中的条件独立性判断 GAN tanh的曲线 哪一个是时序差分? 判断 启发函数的可采纳.一致的含义 广搜是代价一致搜索的特例 贪心搜索是A星算法的特例 爬山 ...

  8. 国科大高级人工智能12-博弈

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

  9. 国科大高级人工智能8-归结原理和horn子句

    只有一条规则的推理 resolution(消解,归结) CNF(conjunction normal form合取范式 (A∨B)∧(B∨C)(A∨B)∧(B∨C)(A∨B)∧(B∨C) 任何逻辑式都 ...

最新文章

  1. SQLServer之ISO游标使用
  2. FlashDevelop Android开发.md
  3. python定义一个dog类 类属性有名字毛色体重_面向对象实践,练习,Python
  4. zookeeper 常用命令示例
  5. 服务器端接华为sdk无响应,sdk未响应
  6. requests源码分析
  7. php 输出可以设置格式文件,php格式输出文件var_export函数实例
  8. 每日小记2017.3.7
  9. 善用工具和网上资源-决定学习的效率
  10. python 获取错误日志,并发送邮件
  11. mysql delphi5_Delphi 7连接MySql 5.5.15
  12. mac 字幕生成工具
  13. 软件发明专利实例_软件系统专利申请案例
  14. 一、Java虚拟机概述与JVM结构
  15. 计算机ppt制作教案,教案幻灯片制作
  16. 微信小程序组件化的解决方案
  17. java多表头导出excel表格_【每日一点】1. Java如何实现导出Excel单表头或多表头
  18. 如何设置IPv4和IPv6报文的DSCP值——网络测试仪实操
  19. 怎么看待大学生就业困难?
  20. zsh 缺少 /usr/local/share/zsh/site-functions/_brew_cask

热门文章

  1. 周五跟大佬喝酒,顺便打了个球
  2. 能运行shell吗_terminal, shell, bash, zsh
  3. vue垂直布局_vue实现长图垂直居上 vue实现短图垂直居中
  4. 【Pytorch神经网络基础理论篇】 07 线性回归 + 基础优化算法
  5. java 格式化 布尔型_这么久才知道Java中的format很强大!
  6. python提取txt中的字符串数据_python 从字符串中提取数值
  7. Web框架——Flask系列之Flask中的特殊变量和方法(十九)
  8. LeetCode 1933. 判断字符串是否可分解为值均等的子串
  9. sql 拆分_实践参考:MySQL架构设计从开发规范、选型、拆分到减压实战指南
  10. python算法入门_GitHub标星2.6万!Python算法新手入门大全