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

news2024/11/26 2:38:31

文章目录

  • 局部搜索算法
    • 内存限制
    • 局部搜索算法
    • 示例: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://www.coloradmin.cn/o/973506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC入门篇

目录 1.SpringMVC工作流程 2.SpringMVC核心组件 2.1 DispatcherServlet 2.2 HandlerMapping 2.3 Handler 2.4 HandlerAdapter 2.5 ViewResolver 2.6 View 3.SpringMVC的入门 3.1 添加相关依赖 3.2 创建Spring-mvc.xml 3.3 配置web.xml 3.4 效果演示 4.静态资源处…

静态路由——实现两个不相连的网段通信实验

路漫漫其修远兮,吾将上下而求索 今天做一个简单的实现两个不相连的网段通信实验,本实验使用静态路由配置,主要 加强初学者对静态路由的理解。 实际中不可能只使用静态路由,还要使用诸多的其他网络协议,达到安全可靠的…

揭榜!9家行业代表性企业获得软件/智舱/车联细分赛道标杆奖

过去几年,在特斯拉及新势力的带动下,车企的盈利模式正在寻求从“一次售卖”转变为“硬件预埋+软件付费解锁”,背后是驱动汽车软件架构的迭代,即从面向信号的软件架构,过渡至面向服务的SOA架构。 同时&#…

大厂面试 | 百度一面,顶不住

题目来源:https://www.nowcoder.com/feed/main/detail/d39aabc0debd4dba810b4b9671d54348 前文 本期是【捞捞面经】系列文章的第 2 期,持续更新中…。(更多与往期下方仓库直达) 《捞捞面经》系列正式开始连载啦,据说看…

Liunx远程调试

1、Vscode中使用xdebug调试php 2、工具的下载 3、debug的配置 1、Vscode中使用xdebug调试php 1,在phpstudy中启用xdebug扩展 2,打开php.ini,修改配置 [Xdebug] zend_extensionD:/PHP/Extensions/php/php5.6.9nts/ext/php_xdebug.dll xdebug…

不关闭Tamper Protection(篡改保护)下强制卸载Windows Defender和安全中心所有组件

个人博客: xzajyjs.cn 背景介绍 由于微软不再更新arm版本的win10系统,因此只能通过安装insider preview的镜像来使用。而能找到的win10 on arm最新版镜像在安装之后由于内核版本过期,无法打开Windows安全中心面板了,提示如下: 尝…

伯俊ERP与金蝶云星空对接集成表头表体组合查询连通分布式调出单新增(调拨出库对接分布式调出(KD调拨)6月)

伯俊ERP与金蝶云星空对接集成表头表体组合查询连通分布式调出单新增(调拨出库对接分布式调出(KD调拨)6月) 对接系统:伯俊ERP 伯俊科技,依托在企业信息化建设方面的领先技术与实践积累,致力于帮助企业实现全渠道一盘货。…

【数据结构——有向图】有环无环判定、拓扑排序(DFS、BFS)

文章目录 1. 什么是有向图2. 什么是拓扑排序2. 有向图的拓扑排序2. 1 BFS 广度优先2. 2 DFS 深度优先 3. 有向图有环无环判定 1. 什么是有向图 有向图(Directed Graph),也被称为有向图形或方向图,是一种图的类型。在有向图中&…

联发科MTK6765处理器参数_4G安卓核心板主板定制方案

MT6765安卓核心板是一款基于MTK平台的高性能智能模块,是一款工业级的产品。该芯片也被称为Helio P35。MT6765核心板是目前市场上最受欢迎的低成本智能芯片之一,其卓越的性能和创新技术为用户提供了更加顺畅和高效的使用体验。 MTK6765(曦力 …

h5开发网站-css实现页面的背景固定定位

一、需求&#xff1a; 在页面滚动时&#xff0c;背景图片保持不变&#xff0c;而不是跟随滚动。 二、解决方式&#xff1a; 使用背景固定定位&#xff0c;只需要在CSS中增加一个background-attachment: fixed;属性即可。 具体代码&#xff1a; <div class"item_right…

String.format() 格式化字符串的方法, 不同占位符表示的含义及使用方式

学习目标&#xff1a; 目标如下&#xff1a; String.format() 格式化字符串的方法&#xff0c; 不同占位符表示的含义及使用方式 学习内容&#xff1a; 内容&#xff1a; 占位符类型 String.format()方法是一种格式化字符串的方法 字符串&#xff1a;一个占位符"%s&q…

Spring Cloud Alibaba-Feign整合Sentinel

第1步: 引入sentinel的依赖 <!--sentinel客户端--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> 第2步: 在配置文件中开启Feign对Sentinel的…

面试题查漏补缺 i++和 ++ i哪个效率更高

i 和 i 哪个效率更高&#xff1f; 在这里声明&#xff0c;简单地比较前缀自增运算符和后缀自增运算符的效率是片面的&#xff0c;因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用&#xff0c;而是仅仅简单地用于增加一员…

2023-09-05 LeetCode每日一题(从两个数字数组里生成最小数字)

2023-09-05每日一题 一、题目编号 2605. 从两个数字数组里生成最小数字二、题目链接 点击跳转到题目位置 三、题目描述 给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 &#xff0c;每个数组中的元素 互不相同 &#xff0c;请你返回 最小 的数字&#xff0c;两个数…

Python 遍历字典的若干方法

字典是 Python 的基石。这门语言的很多方面都是围绕着字典构建的 模块、类、对象、globals()和 locals() 都是字典与 Python 实现紧密联系的例子 以下是 Python 官方文档定义字典的方式&#xff1a; An associative array, where arbitrary keys are mapped to values. The k…

机器人中的数值优化(十二)——带约束优化问题简介、LP线性规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

移动端App持续集成体系构建实战

这里写目录标题 一、目标1、前言2、优势&#xff1a;3、涉及技术点4、目标 二、测试app构建、打包过程1、安卓打包的环境要求 三、演示安卓源码打包四、演示安卓App部署1、前提条件2、命令控制apk安装与卸载 五、安卓UI自动化测试1、Appium app自动化测试-Python2、实现的验证点…

Vue3+Ts实现父子组件间传值的两种方式

文章目录 写在前面1、v-modelemit传值1.1父向子传递数据1.2子向父传递数据 2、使用v-bindemit2.1父向子传递数据2.2子向父传递数据 总结 写在前面 对于常用的组件间传参最近有了有点小心得总结一下&#xff0c;主要是两种子向父组件传参的方式总结。欢迎评论区讨论 概览&…

Linux的服务器日志分析及性能调优

作为网络安全和数据传输的重要环节&#xff0c;代理服务器在现代互联网中扮演着至关重要的角色。然而&#xff0c;在高负载情况下&#xff0c;代理服务器可能面临性能瓶颈和效率问题。本文将介绍如何利用Linux系统对代理服务器进行日志分析&#xff0c;并提供一些实用技巧来优化…

数组模拟实现环形队列

目录 前言 一、什么是队列? 二、数组模拟非环形队列的实现 三 . 数组模拟环形队列 总结 前言 笔者: 最爱吃兽奶 博文内容: 数据结构队列的模拟实现 这篇博客理解起来或许没有那么简单,我尽力讲的容易理解一点,接下来跟我一起去看看吧! 一、什么是队列? 队列是一种特殊…