| |
|
开发:
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 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |