【人工智能】—局部搜索算法、爬山法、模拟退火、局部剪枝、遗传算法

article/2025/11/10 10:36:29

Local search algorithms (局部搜索算法)

  • 局部搜索算法
    • 内存限制
    • 局部搜索算法
    • 示例:n-皇后
    • 爬山算法
    • 随机重启爬山
    • 模拟退火算法
    • 局部剪枝搜索
    • 遗传算法
    • 小结

局部搜索算法

  • 在某些规模太大的问题状态空间内,A*往往不够用在这里插入图片描述

    • 问题空间太大了
    • 无法访问 f 小于最优的所有状态
    • 通常,甚至无法储存整个边缘队列
  • 解决方案

    • 设计选择更好的启发式函数
    • Greedy hill-climbing (fringe size = 1)
    • Beam search (limited fringe size)

内存限制

  • 瓶颈:内存不足,无法存储整个边缘队列
  • 爬山搜索:
    • 只有“最佳”节点保留在周围,没有边缘队列
    • 通常按h优先选择继任者(贪婪的爬山)
    • 与贪婪的回溯相比,它仍然有边缘队列
  • 剪枝搜索(有限内存搜索)
    • 介于两者之间:保持边缘中的K个节点
    • 根据需要转储优先级最低的节点
    • 可以单独按h(贪婪剪枝搜索)或h+g(有限内存A*)进行优先级排序

局部搜索算法

  • 在许多优化问题中,通往目标的路径是不相关的;目标状态本身就是解决方案
  • 状态空间=“完整”配置集(完全状态)
    • 查找满足约束的配置,例如n皇后
  • 在这种情况下,我们可以使用本地搜索算法
  • 保持一个单一的“当前”状态,尝试改善它
    • 直到你无法让它变得更好
  • 恒定空间,适合在线和离线搜索
  • 通常效率更高(但不完备)

示例:n-皇后

  • 将n个皇后区放在n×n板上,同一行、同一列或同一对角线上没有两个皇后区#在这里插入图片描述

爬山算法

  • 简单、概括的想法:
    • 从任何地方开始
    • 总是选择最好的邻居
    • 如果没有邻居的分数比当前分数高,退出
  • 这在理论上效果很糟糕,因为他不具有完备性(算法不会陷入死循环,即一定能结束)也不保证得到最优解
  • 问题:根据初始状态,可能会陷入局部最大值在这里插入图片描述
    • 随机重新开始爬山算法一定程度克服了局部最大值
    • 随机侧向移动逃离肩膀
    • 但可能在最大值处循环

随机重启爬山

  • 非常简单的修改:

    1. 当被卡住时,随机选择一个新的启动状态,然后从那里重新运行爬山
    2. 重复此操作k次
    3. 返回k个局部最优值中的最佳值
  • 可以做到非常高效

  • 每当使用爬山时都应该尝试

  • 快速、易于实施;对于解决方案空间表面不太“颠簸”(即不太多局部最大值)的许多应用来说,效果很好

  • 仍然以8皇后问题为例:在这里插入图片描述

    • h=直接或间接相互攻击的成对皇后数量
    • 对于上述状态,h=17
    • 一个局部最优解如下:h=1在这里插入图片描述

模拟退火算法

  • 思想: 通过允许一些“坏”动作,但逐渐降低其频率,来逃避局部最大值在这里插入图片描述

  • 可以证明:如果T下降得足够慢,那么模拟退火搜索将找到概率接近1的全局最优

  • 广泛应用于超大规模集成电路布局、航空公司调度等

局部剪枝搜索

  • 跟踪k个状态,而不仅仅是一个。
  • 从k个随机生成的状态开始。
  • 在每次迭代时,生成所有k个状态的所有后续状态。
  • 如果任何一个是目标状态,则停止;否则,从完整列表中选择k个最佳继任者,然后重复。
  • 像贪婪搜索一样,但始终保持K状态:在这里插入图片描述
  • 多种实用设置中的最佳选择
  • 与并行运行的k个搜索不同!
  • 找到好状态的搜索,会招募其他搜索加入他们
  • 变量:分支大小,鼓励多样性?
  • 问题:通常情况下,所有k个状态最终都在同一个局部山丘上
  • 思想:随机选择k个继任者,偏向于优秀的继任者

遗传算法

  • 遗传算法使用自然选择隐喻
  • 通过组合两个父状态生成后续状态
  • 从k个随机生成的状态开始(总体种群)
  • 状态表示为有限字母表上的字符串(通常是0和1的字符串)
  • 评价函数(适应度函数适应度函数). 值越高,状态越好。
  • 通过选择、交叉和突变产生下一代状态(选择,杂交,变异)
  • 示例:每个状态由8个数字表示,按照概率随机选择两对交叉,适应度就是互不攻击的皇后对数,概率就是适应度的占比在这里插入图片描述在这里插入图片描述在这里插入图片描述

小结

  • 局部搜索算法——通往目标的路径是不相关的;目标状态本身就是解决方案,保持单一的“当前”状态,并尝试改进它
  • 登山搜索
    • 根据初始状态,可能会陷入局部最大值
  • 模拟退火搜索
    • 通过允许一些“坏”的移动来逃避局部最大值,但逐渐降低其频率
  • 局部剪枝搜索
    • 跟踪k个状态,而不仅仅是一个
  • 遗传算法
  • 好的启发式搜索能大大提高搜索性能
  • 但由于启发式搜索需要抽取与问题本身有关的特征信息,而这种特征信息的抽取有时会比较困难,因此盲目搜索仍不失为一种有用的搜索策略
  • 好的搜索策略应该
    • 引起运动—避免原地踏步
    • 系统—避免兜圈
    • 运用启发函数—缓解组合爆炸
  • 搜索树 vs 搜索图
    • 搜索树:结点有重复,但登记过程简单
    • 搜索图:结点无重复,但登记过程复杂(每次都要查重)
    • 省空间,费时间。

http://chatgpt.dhexx.cn/article/HplII3ky.shtml

相关文章

随机优化算法–爬山法VS模拟退火算法

随机优化算法,由于开始和过程都是随机的数值,所以每次产生的结果都不一样。但大致收敛方向是一致的。 爬山法是一种局部最优的算法(本质上属于贪心法),也属于启发式的方法,它一般只能得到局部最优解。采用…

C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

C语言局部算法求解八皇后问题 写在前面八皇后问题及局部搜索算法爬山法(hill-climbing searching)算法介绍代码实现 退火法(simulated annealing)算法介绍代码实现 遗传算法算法介绍代码实现 写在前面 该篇博客改自https://blog.csdn.net/chenxz_/artic…

八皇后问题和八数码问题的最陡上升爬山法、首选爬山法、随机重启爬山法、模拟退火算法的分析和实现

源起 人工智能的第二次作业课后的某题要求对八皇后问题和八数码问题分别用最陡上升爬山法、首选爬山法、随机重启爬山法、模拟退火算法来实现,并且分析他们的性能。 分析 我们发现要求实现的各个算法是有共同点的,比如,八皇后问题相关算法拥有相同的状态空间,每个算法都有…

【人工智能】首选爬山法+随机交换法实现N皇后问题求解(C语言)

1.原理 爬山法(Hill Climbing)是一种局部搜索算法。局部搜索算法不关心求解目标的路径,只要求找到符合要求的解,通常对最优化问题十分有用。爬山法使用启发式函数(或代价评估函数)确定“标高”&#xff0c…

【学习笔记】我命由天不由我之随机化庇佑 —— 爬山法 和 模拟退火法

以下均假设最优解是在最低点。 爬山法 爬山算法是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策。 直白地讲,就是当目前无法直接到达最优解,但是可以判断两个解哪…

人工智能-爬山法解决八数码问题-python源码

问题描述: 在一个3*3的方棋盘上放置着1,2,3,4,5,6,7,8八个数码,每个数码占一格,且有一个空格。这些数码可以在棋盘上移动,其移动规则是:与空格相邻的数码方格可以移入空格。现在的问题是:对于指定的初始棋局和目标棋局&#xff0c…

人工智能-爬山法解决八皇后问题-python源码

问题简述: 八皇后问题,一个古老而著名的问题,是回溯算法的典型案例。该问题由国际西洋棋棋手马克斯贝瑟尔于 1848 年提出:在 88 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一…

树的搜索问题1(深度优先、广度优先,爬山法和best-first)

前言 我们在解决问题中经常使用到的数据结构一定少不了树,在数据结构这一大块中,我们对每一个结构都会讲各种形形色色的操作,比如栈的压栈出栈,树的各种遍历,但其实数据结构最重要的操作其实是搜索。如果我们不知道链…

TSP问题解决:模拟退火、贪心法、爬山法,Python实现

TSP问题解决:模拟退火、贪心法、爬山法,Python实现这里写目录标题 一、TSP问题二、简单介绍:贪心法、爬山法、模拟退火三、python代码实现四、分别用这三种方法得出结果,进行比较 一、TSP问题 1、TSP问题描述 简单来说&#xff0…

爬山法实现 八皇后问题 (Python 实现)

本文主要简单阐述爬山法的基本算法思想,并给出用此算法实现八皇后问题详细过程 最基本的爬上搜索算法表示:(节选自《人工智能》第二版): function HILL-CLIMBING(problem) return a state thate is a locak maximum inputs: problem …

爬山法求解八皇后问题的全部解法

爬山法求解八皇后问题的全部解法 程序的概要设计思想初始状态冲突函数寻找邻居状态寻找全部解集 程序主要函数的作用运行结果截图Python源代码 程序的概要设计思想 爬山算法是一种局部贪婪算法,每次更新一次状态,都对相邻状态的冲突状态进行排序&#x…

Python启发式算法中爬山法的讲解及解方程问题实战(超详细 附源码)

一、启发式算法 还有一类重要的迭代法,它的迭代关系式不依赖问题的数学性能,而是受某种自然现象的启发而得到,称为启发式算法(Heuristic Algorithm),如爬山法、遗传算法、模拟退火算法、蚁群算法等。 启发…

人工智能:爬山法、随机重启爬山法、模拟退火算法、遗传算法、启发式搜索方法解决八数码和八皇后问题

摘要 本文主要分为两个部分,分别采用实验对比对不同的方法进行分析。第一,以八数码问题和八皇后问题为例,对比爬山法,随机重启爬山法,模拟退火算法,遗传算法的搜索性能。第二,以八数码问题为例…

进化优化算法--第二章:爬山法

算法2.1&#xff1a; 最快上升爬山法 x0 <- 随机生成的个体 while not ( 终止准则)计算x0的适应度f(x0)For 每一个解的特征 q1,2,,...nxq <- x0 用一个随机变异替换xq的第q个特征计算xq的适应度f(xq)获取下一个更优的解:寻找使f(xq)最大的xq, 令其等于x, x <- argma…

Python:爬山法/随机重启爬山法/允许侧移的爬山法解决八皇后问题

文章目录 1 八皇后问题2 程序代码2.1 程序12.2 程序22.3 程序32.3.1 爬山法2.3.2 随机重启爬山法2.3.3 允许皇后侧移的爬山法 3 评价 1 八皇后问题 有一个8乘8的棋盘&#xff0c;现在要将八个皇后放到棋盘上&#xff0c;满足&#xff1a;对于每一个皇后&#xff0c;在自己所在…

爬山法和模拟退火

文章目录 前言一、爬山法1.算法步骤2.算法局限性 二、模拟退火1.算法步骤2.注意点3.例题求费马点保龄球均分数据 总结 前言 爬山法和模拟退火都为随机化算法&#xff0c;考场想不到正解时可用来骗分&#xff0c;通常效果较好。模拟退火是基于爬山法的优化。 一、爬山法 爬山法是…

搜索算法——爬山法

不断更新中...... 一、 爬山算法&#xff1a;爬山算法是一种简单的贪心搜索算法&#xff0c;该算法每次从当前位置的临近空间中选择一个最优解作为当前解&#xff0c;直到达到一个局部最优解。爬山算法可以类比成一个有失忆的人在浓雾中爬山。这里就揭示了爬山算法的两个问题…

搜索 —— 启发式搜索 —— 爬山法

【概述】 爬山法&#xff08;Hill Climbing&#xff0c;HC&#xff09;是一种局部择优的贪心搜索算法&#xff0c;其本质上是梯度下降法。 该算法每次从当前的节点开始&#xff0c;与周围的邻接点进行比较&#xff1a; 若当前节点是最大的&#xff0c;那么返回当前节点&…

Linux:快速查看IP地址及修改IP地址

导读Linux下如何快速查看IP地址及修改IP地址&#xff0c;有一个方法供参考 查ip 方法/步骤1: 打开linux操作系统在进入到界面 方法/步骤2: 在桌面右击打开终端。 方法/步骤3: 终端里输入ifconfig -a命令在回车键 方法/步骤4: 如下图可以看到了ip地址。 修改ip 方法/…

Linux Ubuntu查看IP信息的两种方式Ubuntu中检查你的 IP 地址

论使用什么系统&#xff0c;都有用到ip地址的时候&#xff0c;习惯了windows系统的人很容易就能查找出系统的ip&#xff0c;但是在linux系统如何查看ip呢&#xff1f;作为Linux新手&#xff0c;以Ubuntu的使用经验&#xff0c;我知道Ubuntu查看IP有两种方式。 第一种是在终端中…