当前位置: 灰狼 >> 灰狼的种类 >> 智能优化算法适用范围简介
所有的优化问题用智能优化算法求解时,其编码方式可归纳为以下5种。
实数编码
01编码
排序编码(或自然数编码,叫法挺多的)
整数编码
复合编码,上面四种编码方式的组合。
一、遗传算法
遗传算法基本可以解决任何优化问题。这是因为遗传算法的编码很自由,而其他智能优化算法在解决具体问题的时候存在一定的局限性(下面介绍)。
遗传算法的编码有多种形式,根据具体问题选择一种合适的编码方式,问题便可迎刃而解。上述的几种编码形式在遗传算法中都是很容易进行操作的。
遗传算法的上述四种编码方式,基本可解决任何问题。具体在使用时就要根据问题(主要是约束条件)来选择编码,也会出现一些编码的等效变化,即可能编码是其他样子,但本质用的时候还是上述四种编码。
不同的编码对应的交叉和变异是不一样的,这个就需要根据具体的编码来进行操作。
二、蚁群算法
说实话蚁群算法的应用范围很窄。
蚁群算法的提出是基于解决旅行商问题(路径最短问题)的,在这个问题中,蚁群算法的信息素的定义以及启发函数的定义都是根据距离进行的,而且是可行的。
而在解决除路径最短问题的其他问题中,我们很难找到一个可行的方法来定义启发函数,即很难给蚂蚁一个启发值,让它应该往最优的方向爬。所以蚁群算法的应用范围很窄。
当然,如果非要用蚁群算法解决某个优化问题,你必须提出一种可行的启发函数,首先应该从原理上讲得通,这样给蚂蚁一个启发,蚂蚁能搜到最优解。然后要编程验证,你这个方法确实能得到最优解。(我一般的验证方法就是:先遗传算法来解决这个问题,然后和蚁群算对比,如果最优解差不多,则可行。如果差太多,证明不可行)
总之:用蚁群算法必须要想方法定义启发函数和信息素。
三、模拟退火算法
模拟退火算法其实和遗传算法差别不大的。二者具体操作基本一样。
四、粒子群、人工蜂群、狼群等等群体类算法
群体类算法很多:粒子群算法、布谷鸟算、萤火虫算、灰狼算法、蝙蝠算法、人工蜂群算法、烟花算法等等真的是太多了。
这些群体类算法最显著的特征就是它们是求解连续函数的最优解和最优值,在用这些算法的时候,可以用标准测试函数来验证程序写的怎么样。
因为这类算法的编码都是实数编码,而且最重要的是它们的原理的实现就是基于实数来操作的。所以这些问题在解决连续性函数的问题,都是很容易实现的。
如果用这些算法解决离散问题,如在遗传算法中介绍的选址问题、分配问题、排序问题中,都是需要将连续性编码进行转换的。
而解决这些问题的效果好不好,取决于这个转换好不好。比如选址问题最终体现的是01,那么只需要用0~1内的实数,然后再四舍五入转换成01,从而实现选址。其他问题都有对应的转换方法。
转换的方法可以分为两种:一种是编码仍然是实数编码然后通过取整或排序的方法来转换;另一种就是编码是离散的,然后在原理上进行等效,就是说算法的实数编码运用的公式原理,我们通过等效变换,换成对离散编码的操作,当然这种等效是很难的,因为你要尝试并证明这个等效是可行的、有效的!
那么这里就要说了。目前这个群体类算法肯定是可以通过第一种转换方法来转成遗传算法的这四种编码方式,也就是说用群体类算法也可以解决任何问题。但是这种转换方法并不是效果很好,与遗传算法比对,差挺多的。
所以,如果你让我用群体类算法来解决某个离散问题,我会和你说并不是很适合求解离散问题,而且我可能会说写不了。
如果你发现别人可以写,那么他应该是用的第一种转换方法,效果肯定不好。如果你又发现别人用第一种转换方法,效果挺好的,那么他这个算法就不很纯粹了。这个纯粹的意思见附言。(为什么我能这么肯定?因为我是做这一块的,我会查很多的文献,查很多的代码,能不能实现,我太了解了)
附:什么是算法的纯粹性?
所有的智能优化算法都有自己的优化原理和算法流程。
1)比如交叉操作是遗传算法所特有的。如果你在粒子群算法中使用了交叉操作,那么这个算法就是遗传算法和粒子群算法的混合,而不能简单的说是粒子群算法。
2)比如粒子群算法的速度更新公式、蚁群算法的概率计算公式,都是算法原理的核心部分,如果你不使用这些公式,那么你不能把它称之为对应的算法。
粒子群速度更新公式:
蚁群算法概率选择公式:
预览时标签不可点收录于合集#个上一篇下一篇