IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 智能优化算法——篇1 -> 正文阅读

[数据结构与算法]智能优化算法——篇1

智能优化算法,也叫启发式算法,元启发式算法等,都差不多。主要包括我们常提到的:粒子群算法PSO,遗传算法GA,模拟退火算法SA,禁忌搜索算法TS,蚁群算法AC,大邻域搜索算法VNS,自适应大邻域搜索ALNS等等。

之所以提到上面几种,是因为它们太经典了。

尽管近些年智能优化算法层出不穷,每隔一阵就有新的算法出现。比如帝国竞争,文化算法,灰狼算法等等。我个人的观点是,算法这么多,没必要都学。除非你是对算法特别感兴趣,或者是计算机相关专业,必须要深究算法,那可以蹭热点或者开发新算法。但对于大多数人来说,之所以用算法,本质原因是为了解决问题,那么好好分析问题本身属性,解好问题更重要。当然行有余力的吸收多种算法的精华于一身,取长补短当然更好。

闲话不多说,开始正题。

接下来分为篇1和篇2,总结下一开始提到的几种经典算法的原理。原理是最最精华的部分,理解了原理,有一个更高层次的把控;也能更好地融合各种算法的优势;当然还可以更好的理解代码。个人感悟是理解了原理,代码debug运行几遍,就可以差不多掌握算法了。

1 算法种类:

开始之前,我们先概览下算法大家族,把算法分门别类下。按照不同的角度,大概可以分为这么几类。

算法按照主要的维度,可以分为:个体寻优和群体寻优两大类。

我个人感觉相同之处都是利用计算机强大的算力,尽可能搜索更多的范围,也就是遍及更多的可行域(这样找到最优解的可能性大一些);但是也不能一味的漫无目的地搜索,所以我们会参照一定的行动指南,比如目标函数下降最快;或是经验等等,让搜索更有效率,不过这样又会带来一个问题,就是容易陷入短视思维,也就是会陷入局部最优解。所以算法最精妙的原理是:在搜索尽可能多的可行域(穷举)和构思出一定的行动指南(贪婪)之间把握平衡点,最终寻得最优。当然,这里的最优,可能不是我们常规意义上的最优。而是,从搜索的方案当中选出最好的,是较好的满意的,不是最好的。我们说的智能优化指的是寻优,不断变优的意思。

2 算法原理总结:

2.1 模拟退火算法SA

模拟退火,Simulated annealing,简称SA,是对贪婪搜索的一种改进算法。

算法的核心在于:以一定的概率接受较差解。我们知道,一般迭代的思路是,每次都期望往更好的方向走,每一步都更好,也就是说接受更好的解,忽略更差解(只能前进,不能后退)。但这样容易陷入局部最优。所以我们有的时候退后一步,毕竟有时弯路反而更近嘛。以上图为例,目的是寻求最小值。贪心算法,会找到局部最优解B;而假如我们以一定的概率接受较差解,那么解空间有可能跑到右边,有可能找到全局最优解C。

现在我们用通俗的语言再来描述下:模拟退火,是仿照固体退火原理,是一种基于概率(“Metropolis接受准则”)的算法。先来复习下固体退火原理——将固体加温至充分高(加温时,固体内部粒子随温升变为无序状,内能增大),再让其徐徐冷却(徐徐冷却时粒子渐趋有序),在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。所以:模拟退火算法的基本思路是从一个较高的温度出发,伴随温度参数的不断下降,在解空间搜寻目标函数的全局最优解,以一定的概率跳出局部最优找到全局最优值。

那么模拟退火的核心是:温度怎么下降?以及以多大的概率接受较差解?以及在温度下降过程中,解空间如何变化?这三点是模拟退火的精髓,也影响着最优解的质量。也就是说,你要使用模拟退火的话,这三点必须设计好或者设计得很巧妙。

一般来说,也就是说模拟退火最基础原始的版本中,温度下降通过一个介于0-1的系数来实现,也就是温度下降系数*当前温度,就是下一时刻的温度;接受的概率是仿照固体退火原理实现的,固体热力学定理中,温度为T时,出现能量差为dE的降温概率是p(dE),可以表示为:p(dE)=exp(-dE/kT),这里k是一个常数,exp是自然指数e,因为温度总是降低的,内能在降低,能量差为正,指数部分是负,因此保证了两点:第一,概率必定是介于0-1之间,即exp(-无穷)-exe(0)之间;第二,温度不断在降低,因此指数部分分母在减小,指数部分在减小,那么接受较差解的概率在不断缩小。这两点保证了接受概率的合理性,以及初始接受较差解的可能性大,后面接受较差解的可能性越来越小,和认知也是一致的,初始想要遍及尽可能多的可行域,后面要保证算法收敛。也就是说,概率影响着解空间的变化。所以又回到一开始的部分,概率设计很重要。其实这种思路在很多改进算法中经常用。

简单来说就是判断当前解是否比原来的解,若新解函数值比原来的解更好,那么以1的概率接受它;若比原来的解,那么以p的概率接受它,p的取值与当前解,新解和控制参数t有关。

公式编辑部分出了点问题,好丑,先不写了。

2.2 禁忌搜索TS

2.3 粒子群算法PSO

2.4 遗传算法GA

2.5 蚁群算法AS

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:35:49  更:2021-11-22 12:37:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 15:56:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码