智能算法学习笔记 作者.docx
- 文档编号:4688680
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:22
- 大小:42.38KB
智能算法学习笔记 作者.docx
《智能算法学习笔记 作者.docx》由会员分享,可在线阅读,更多相关《智能算法学习笔记 作者.docx(22页珍藏版)》请在冰豆网上搜索。
智能算法学习笔记作者
智能算法学习笔记作者:
hisky(苍竹琴声)--
智能算法学习笔记
作者:
hisky(苍竹琴声)
这是我自己看智能算法的时候的一些笔记,贴出来给大家看一下,如果有理解错误的地方,千万请指出,小生在这里先谢过了^_^
一个比方
在工程实践中,经常会接触到一些比较“新颖”的算法或理论,比如模拟退火,遗传算法,禁忌搜索,神经网络等。
这些算法或理论都有一些共同的特性(比如模拟自然过程),通称为“智能算法”。
它们在解决一些复杂的工程问题时大有用武之地。
这些算法都有什么含义?
首先给出个局部搜索,模拟退火,遗传算法,禁忌搜索的形象比喻:
为了找出地球上最高的山,一群有志气的兔子们开始想办法。
1.兔子朝着比现在高的地方跳去。
他们找到了不远处的最高山峰。
但是这座山不一定是珠穆朗玛峰。
这就是局部搜索,它不能保证局部最优值就是全局最优值。
2.兔子喝醉了。
他随机地跳了很长时间。
这期间,它可能走向高处,也可能踏入平地。
但是,他渐渐清醒了并朝最高方向跳去。
这就是模拟退火。
3.兔子们吃了失忆药片,并被发射到太空,然后随机落到了地球上的某些地方。
他们不知道自己的使命是什么。
但是,如果你过几年就杀死一部分海拔低的兔子,多产的兔子们自己就会找到珠穆朗玛峰。
这就是遗传算法。
4.兔子们知道一个兔的力量是渺小的。
他们互相转告着,哪里的山已经找过,并且找过的每一座山他们都留下一只兔子做记号。
他们制定了下一步去哪里寻找的策略。
这就是禁忌搜索。
智能优化算法的概述
智能优化算法要解决的一般是最优化问题。
最优化问题可以分为
(1)求解一个函数中,使得函数值最小的自变量取值的函数优化问题和
(2)在一个解空间里面,寻找最优解,使目标函数值最小的组合优化问题。
典型的组合优化问题有:
旅行商问题(TravelingSalesmanProblem,TSP),加工调度问题(SchedulingProblem),0-1背包问题(KnapsackProblem),以及装箱问题(BinPackingProblem)等。
优化算法有很多,经典算法包括:
有线性规划,动态规划等;改进型局部搜索算法包括爬山法,最速下降法等,本文介绍的模拟退火、遗传算法以及禁忌搜索称作指导性搜索法。
而神经网络,混沌搜索则属于系统动态演化方法。
优化思想里面经常提到邻域函数,它的作用是指出如何由当前解得到一个(组)新解。
其具体实现方式要根据具体问题分析来定。
一般而言,局部搜索就是基于贪婪思想利用邻域函数进行搜索,若找到一个比现有值更优的解就弃前者而取后者。
但是,它一般只可以得到“局部极小解”,就是说,可能这只兔子登“登泰山而小天下”,但是却没有找到珠穆朗玛峰。
而模拟退火,遗传算法,禁忌搜索,神经网络等从不同的角度和策略实现了改进,取得较好的“全局最小解”。
模拟退火算法(SimulatedAnnealing,SA)
模拟退火算法的依据是固体物质退火过程和组合优化问题之间的相似性。
物质在加热的时候,粒子间的布朗运动增强,到达一定强度后,固体物质转化为液态,这个时候再进行退火,粒子热运动减弱,并逐渐趋于有序,最后达到稳定。
模拟退火的解不再像局部搜索那样最后的结果依赖初始点。
它引入了一个接受概率p。
如果新的点(设为pn)的目标函数f(pn)更好,则p=1,表示选取新点;否则,接受概率p是当前点(设为pc)的目标函数f(pc),新点的目标函数f(pn)以及另一个控制参数“温度”T的函数。
也就是说,模拟退火没有像局部搜索那样每次都贪婪地寻找比现在好的点,目标函数差一点的点也有可能接受进来。
随着算法的执行,系统温度T逐渐降低,最后终止于某个低温,在该温度下,系统不再接受变化。
模拟退火的典型特征是除了接受目标函数的改进外,还接受一个衰减极限,当T较大时,接受较大的衰减,当T逐渐变小时,接受较小的衰减,当T为0时,就不再接受衰减。
这一特征意味着模拟退火与局部搜索相反,它能避开局部极小,并且还保持了局部搜索的通用性和简单性。
在物理上,先加热,让分子间互相碰撞,变成无序状态,内能加大,然后降温,最后的分子次序反而会更有序,内能比没有加热前更小。
就像那只兔子,它喝醉后,对比较近的山峰视而不见,迷迷糊糊地跳一大圈子,反而更有可能找到珠峰。
值得注意的是,当T为0时,模拟退火就成为局部搜索的一个特例。
模拟退火的伪码表达:
proceduresimulatedannealing
begin
t:
=0;
initializetemperatureT
selectacurrentstringvcatrandom;
evaluatevc;
repeat
repeat
selectanewstringvnintheneighborhoodofvc;
(1)
iff(vc) thenvc: =vn; elseifrandom[0,1] (2) thenvc: =vn; until(termination-condition) (3) T: =g(T,t); (4) T: =t+1; until(stop-criterion) (5) end; 上面的程序中,关键的是 (1)新状态产生函数, (2)新状态接受函数,(3)抽样稳定准则,(4)退温函数,(5)退火结束准则(简称三函数两准则)是直接影响优化结果的主要环节。 虽然实验结果证明初始值对于最后的结果没有影响,但是初温越高,得到高质量解的概率越大。 所以,应该尽量选取比较高的初温。 上面关键环节的选取策略: (1)状态产生函数: 候选解由当前解的邻域函数决定,可以取互换,插入,逆序等操作产生,然后根据概率分布方式选取新的解,概率可以取均匀分布、正态分布、高斯分布、柯西分布等。 (2)状态接受函数: 这个环节最关键,但是,实验表明,何种接受函数对于最后结果影响不大。 所以,一般选取min[1,exp((f(vn)-f(vc))/T)]。 (3)抽样稳定准则: 一般常用的有: 检验目标函数的均值是否稳定;连续若干步的目标值变化较小;规定一定的步数; (4)退温函数: 如果要求温度必须按照一定的比率下降,SA算法可以采用,但是温度下降很慢;快速SA中,一般采用。 目前,经常用的是,是一个不断变化的值。 (5)退火结束准则: 一般有: 设置终止温度;设置迭代次数;搜索到的最优值连续多次保持不变;检验系统熵是否稳定。 为了保证有比较优的解,算法往往采取慢降温、多抽样、以及把“终止温度”设的比较低等方式,导致算法运行时间比较长,这也是模拟退火的最大缺点。 人喝醉了酒办起事来都不利索,何况兔子? 遗传算法(GeneticAlgorithm,GA) “物竞天择,适者生存”,是进化论的基本思想。 遗传算法就是模拟自然界想做的事。 遗传算法可以很好地用于优化问题,若把它看作对自然过程高度理想化的模拟,更能显出它本身的优雅——虽然生存竞争是残酷的。 遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。 其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。 作为一种新的全局优化搜索算法,遗传算法以其简单通用、健壮性强、适于并行处理以及高效、实用等显著特点,在各个领域得到了广泛应用,取得了良好效果,并逐渐成为重要的智能算法之一。 遗传算法的伪码: proceduregeneticalgorithm begin initializeagroupandevaluatethefitnessvalue; (1) whilenotconvergent (2) begin select; (3) ifrandom[0,1] crossover; (4) ifrandom(0,1) mutation; (5) end; end 上述程序中有五个重要的环节: (1)编码和初始群体的生成: GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的点。 然后随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个体构成了一个群体。 GA以这N个串结构数据作为初始点开始迭代。 比如,旅行商问题中,可以把商人走过的路径进行编码,也可以对整个图矩阵进行编码。 编码方式依赖于问题怎样描述比较好解决。 初始群体也应该选取适当,如果选取的过小则杂交优势不明显,算法性能很差(数量上占了优势的老鼠进化能力比老虎强),群体选取太大则计算量太大。 (2)检查算法收敛准则是否满足,控制算法是否结束。 可以采用判断与最优解的适配度或者定一个迭代次数来达到。 (3)适应性值评估检测和选择: 适应性函数表明个体或解的优劣性,在程序的开始也应该评价适应性,以便和以后的做比较。 不同的问题,适应性函数的定义方式也不同。 根据适应性的好坏,进行选择。 选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。 遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大。 选择实现了达尔文的适者生存原则。 (4)杂交: 按照杂交概率(pc)进行杂交。 杂交操作是遗传算法中最主要的遗传操作。 通过杂交操作可以得到新一代个体,新个体组合了其父辈个体的特性。 杂交体现了信息交换的思想。 可以选定一个点对染色体串进行互换,插入,逆序等杂交,也可以随机选取几个点杂交。 杂交概率如果太大,种群更新快,但是高适应性的个体很容易被淹没,概率小了搜索会停滞。 (5)变异: 按照变异概率(pm)进行变异。 变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中某个串的值。 同生物界一样,GA中变异发生的概率很低。 变异为新个体的产生提供了机会。 变异可以防止有效基因的缺损造成的进化停滞。 比较低的变异概率就已经可以让基因不断变更,太大了会陷入随机搜索。 想一下,生物界每一代都和上一代差距很大,会是怎样的可怕情形。 就像自然界的变异适和任何物种一样,对变量进行了编码的遗传算法没有考虑函数本身是否可导,是否连续等性质,所以适用性很强;并且,它开始就对一个种群进行操作,隐含了并行性,也容易找到“全局最优解”。 禁忌搜索算法(TabuSearch,TS) 为了找到“全局最优解”,就不应该执着于某一个特定的区域。 局部搜索的缺点就是太贪婪地对某一个局部区域以及其邻域搜索,导致一叶障目,不见泰山。 禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它(但不是完全隔绝),从而获得更多的搜索区间。 兔子们找到了泰山,它们之中的一只就会留守在这里,其他的再去别的地方寻找。 就这样,一大圈后,把找到的几个山峰一比较,珠穆朗玛峰脱颖而出。 当兔子们再寻找的时候,一般地会有意识地避开泰山,因为他们知道,这里已经找过,并且有一只兔子在那里看着了。 这就是禁忌搜索中“禁忌表(tabulist)”的含义。 那只留在泰山的兔子一般不会就安家在那里了,它会在一定时间后重新回到找最高峰的大军,因为这个时候已经有了许多新的消息,泰山毕竟也有一个不错的高度,需要重新考虑,这个归队时间,在禁忌搜索里面叫做“禁忌长度(tabulength)”;如果在搜索的过程中,留守泰山的兔子还没有归队,但是找到的地方全是华北平原等比较低的地方,兔子们就不得不再次考虑选中泰山,也就是说,当一个有兔子留守的地方优越性太突出,超过了“besttofar”的状态,就可以不顾及有没有兔子留守,都把这个地方考虑进来,这就叫“特赦准则(aspirationcriterion)”。 这三个概念是禁忌搜索和一般搜索准则最不同的地方,算法的优化也关键在这里。 伪码表达: proceduretabusearch; begin initializeastringvcatrandom,clearupthetabulist; cur: =vc; repeat selectanewstringvnintheneighborhoodofvc; ifva>best_to_farthen{vaisastringinthetabulist} begin cur: =va; letvatakeplaceoftheoldeststringinthetabulist; best_to_far: =va; endelse begin cur: =vn; letvntakeplaceoftheoldeststringinthetabulist; end; until(termination-condition); end; 以上程序中有关键的几点: (1)禁忌对象: 可以选取当前的值(cur)作为禁忌对象放进tabulist,也可以把和当然值在同一“等高线”上的都放进tabulist。 (2)为了降低计算量,禁忌长度和禁忌表的集合不宜太大,但是禁忌长度太小容易循环搜索,禁忌表太小容易陷入“局部极优解”。 (3)上述程序段中对best_to_far的操作是直接赋值为最优的“解禁候选解”,但是有时候会出现没有大于best_to_far的,候选解也全部被禁的“死锁”状态,这个时候,就应该对候选解中最佳的进行解禁,以能够继续下去。 (4)终止准则: 和模拟退火,遗传算法差不多,常用的有: 给定一个迭代步数;设定与估计的最优解的距离小于某个范围时,就终止搜索;当与最优解的距离连续若干步保持不变时,终止搜索; 禁忌搜索是对人类思维过程本身的一种模拟,它通过对一些局部最优解的禁忌(也可以说是记忆)达到接纳一部分较差解,从而跳出局部搜索的目的。 人工神经网络(ArtificialNeuralNetwork,ANN) 神经网络从名字就知道是对人脑的模拟。 它的神经元结构,它的构成与作用方式都是在模仿人脑,但是也仅仅是粗糙的模仿,远没有达到完美的地步。 和冯·诺依曼机不同,神经网络计算非数字,非精确,高度并行,并且有自学习功能。 生命科学中,神经细胞一般称作神经元,它是整个神经结构的最基本单位。 每个神经细胞就像一条胳膊,其中像手掌的地方含有细胞核,称作细胞体,像手指的称作树突,是信息的输入通路,像手臂的称作轴突,是信息的输出通路;神经元之间错综复杂地连在一起,互相之间传递信号,而传递的信号可以导致神经元电位的变化,一旦电位高出一定值,就会引起神经元的激发,此神经元就会通过轴突传出电信号。 而如果要用计算机模仿生物神经,就需要人工的神经网络有三个要素: (1)形式定义人工神经元; (2)给出人工神经元的连接方式,或者说给出网络结构;(3)给出人工神经元之间信号强度的定义。 历史上第一个人工神经网络模型称作M-P模型,非常简单: 其中,表示神经元i在t时刻的状态,为1表示激发态,为0表示抑制态;是神经元i和j之间的连接强度;表示神经元i的阈值,超过这个值神经元才能激发。 这个模型是最简单的神经元模型。 但是功能已经非常强大: 此模型的发明人McCulloch和Pitts已经证明,不考虑速度和实现的复杂性,它可以完成当前数字计算机的任何工作。 以上这个M-P模型仅仅是一层的网络,如果从对一个平面进行分割的方面来考虑的话,M-P网络只能把一个平面分成个半平面,却不能够选取特定的一部分。 而解决的办法就是“多层前向网路”。 图2 图2是多层前向网络的示意图。 最下面的称作输入层,最上面一层称作输出层,任何一个中间层都接受来自前一层的所有输入,加工后传入后一层。 每一层的神经元之间没有联系,输入输出层之间也没有直接联系,并且仅仅是单向联系,没有反馈。 这样的网络被称作“多层前向网络”。 数据在输入后,经过每一层的加权,最后输出结果。 图3 如图3,用可覆盖面来说明多层网络的功能: 单层网络只能把平面分成两部分,双层网络就可以分割任意凸域,多层网络则可以分割任意区域。 为了让这种网络有合适的权值,必须给网络一定的激励,让它自己学习,调整。 一种方法称作“向后传播算法(BackPropagation,BP)”,其基本思想是考察最后输出解和理想解的差异,调整权值,并把这种调整从输出层开始向后推演,经过中间层,达到输入层。 可见,神经网络是通过学习来达到解决问题的目的,学习没有改变单个神经元的结构和工作方式,单个神经元的特性和要解决的问题之间也没有直接联系,这里学习的作用是根据神经元之间激励与抑制的关系,改变它们的作用强度。 学习样本中的任何样品的信息都包含在网络的每个权值之中。 BP算法中有考察输出解和理想解差异的过程,假设差距为w,则调整权值的目的就是为了使得w最小化。 这就又包含了前文所说的“最小值”问题。 一般的BP算法采用的是局部搜索,比如最速下降法,牛顿法等,当然如果想要得到全局最优解,可以采用模拟退火,遗传算法等。 当前向网络采用模拟退火算法作为学习方法的时候,一般成为“波尔兹曼网络”,属于随机性神经网络。 在学习BP算法学习的过程中,需要已经有一部分确定的值作为理想输出,这就好像中学生在学习的时候,有老师的监督。 如果没有了监督,人工神经网络该怎么学习? 就像没有了宏观调控,自由的市场引入了竞争一样,有一种学习方法称作“无监督有竞争的学习”。 在输入神经元i的若干个神经元之间开展竞争,竞争之后,只有一个神经元为1,其他均为0,而对于失败的神经元,调整使得向对竞争有利的方向移动,则最终也可能在一次竞争中胜利; 人工神经网络还有反馈网络如Hopfield网络,它的神经元的信号传递方向是双向的,并且引入一个能量函数,通过神经元之间不断地相互影响,能量函数值不断下降,最后能给出一个能量比较低的解。 这个思想和模拟退火差不多。 人工神经网络应用到算法上时,其正确率和速度与软件的实现联系不大,关键的是它自身的不断学习。 这种思想已经和冯·诺依曼模型很不一样。 总结 模拟退火,遗传算法,禁忌搜索,神经网络在解决全局最优解的问题上有着独到的优点,并且,它们有一个共同的特点: 都是模拟了自然过程。 模拟退火思路源于物理学中固体物质的退火过程,遗传算法借鉴了自然界优胜劣汰的进化思想,禁忌搜索模拟了人类有记忆过程的智力过程,神经网络更是直接模拟了人脑。 它们之间的联系也非常紧密,比如模拟退火和遗传算法为神经网络提供更优良的学习算法提供了思路。 把它们有机地综合在一起,取长补短,性能将更加优良。 这几种智能算法有别于一般的按照图灵机进行精确计算的程序,尤其是人工神经网络,是对计算机模型的一种新的诠释,跳出了冯·诺依曼机的圈子,按照这种思想来设计的计算机有着广阔的发展前景 [原创]智能算法学习笔记 (1)——前言 2009-04-2811: 30 最近由于做毕业设计的关系,抽出了几天的时间又学习了一些比较热门的智能算法。 发现身边不少朋友在学习这些算法的时候遇到了种种困难,所以想到了记录下自己学习时的一些体会和总结。 一方面是作为一个笔记,以便以后自己翻看。 另一方面,也算是半个教程,希望能够帮到正在各种算法中挣扎的朋友。 今天是第一篇,计划在这篇中对各种算法的应用情况做一个总结(也算是对后面章节要介绍的算法做一个广告吧),预计这个学习笔记系列要介绍的算法包括: 人工神经网络、遗传算法、粒子群算法、蚁群算法、粒子滤波器;另外,我也打算针对几个常见的专题进行一些细节的讨论,这些专题包括: 闭环控制、二维路径规划及地图创建、图像识别的基础方法、基本决策方法等。 虽然感觉内容比较多,但是我还是希望能够每天更新一部分,最终把这份笔记完成。 好了,闲话不多说,下面开始几天要讨论的内容: 首先,今天要对各种算法进行一些整理,将每种算法的可能应用方式和各种算法之间的关系(比如,从实际应用角度考虑,粒子群算法可以认为是一种比遗传算法速度更快,但是性能较差的轻量级算法)进行简单的介绍。 对于我们实际遇到的问题,基本上可以分为以下几种情况(名称是自己起的,主要是为了表示个意思): 1确定模型 这里的确定模型是指遇到的问题是一个用已有知识可以准确建模(指可以列出描述系统所需的所有方程)、且可在期望时间内可以用一般方法求解的问题。 这类问题的解决方法并不在本次学习笔记的讨论范围之内。 需要说明的一点是,如果系统可以用确定模型的方法获得解,那么,除非有特殊原因,否则不应该使用任何所谓的“智能算法”,因为几乎可以肯定的是,无论从计算量还是精度上来讲,准确的方程描叙都要比智能算法以某种随机方式训练来的实际的多。 2有确定的评价函数,求最优解 这类问题是我们遇到最多的问题,无论是数学建模还是机器人,都要考虑大量这类问题,遗传算法、粒子群算法这两种算法是解决复杂问题时候效果很好的两个算法,类似的包括了免疫算法等等的一系列基于人工生命体的算法,此外,还有更为轻量级的搜索算法,比如登山法(好像也叫爬山法)、模拟退火法等等等等。 这类算法之所以存在,其根本原因(我认为的)是因为: 对于一个可能的解集空间,我们面临2个问题,第一,无法直接求得最优解,也就是说,我们只能知道在某个特定解时,这个解是否“好”,而无法通过给出一个期望的“好”的程度,直接获得一个解(区别于确定模型,确定模型可以直接通过求解方程获得这个解),这通常是由于我们无法对系统进行准确描述导致的,所以,我们只能通过不断地“试验”各种可能的解,来找到一个最好的。 而很不幸的,我们面临的第二个问题就是,可能的解如此之多,以至于我们不可能在有限的时间内对所有解进行评估(注意这个前提,如果解集空间的规模允许我们进行穷举,那么使用任何智能算法都是不正确的做法)。 所以,我们需要一种“更聪明”的搜索算法,以使得我们可以通过检验更少的可行解就可以获得最优解——但是,严格的说,除了少数的例外情况外,我们如果没有对系统的所有解集空间进行穷举,那么你获得的解并不能保证一定是最优解,只不过是否是“绝对最优”在一般的情况下,并不重要。 有关此类问题更深入的讨论,计划将在下一章中进行,这里就不再过多叙述了。 3求可行(或最优)方案 与上一类问题不同,这类问题通常并不能简单的用一个向量来代表我们的最优解,而且,在当前解(方案)不可行时,无法进行准确的评价其有多“不可行”。 而且,方案通常是由多个步骤组成的。 这类问题最典型的就是(简单的)博弈问题和基于通道的路径规划问题。 求解此类问题的基本方法是使用树或者图(如果树不能描述问题)。 也就是说,我们按方案的步骤将其按树的方式展开,在其中找到一条可行的分支。 对于树,目前已经有很多成熟的方案可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能算法学习笔记 作者 智能 算法 学习 笔记