遗传算法优缺点
Ⅰ 遗传算法的优缺点
优点:
1、遗传算法是以决策变量的编码作为运算对象,可以直接对集合、序列、矩阵、树、图等结构对象进行操作。这样的方式一方面有助于模拟生物的基因、染色体和遗传进化的过程,方便遗传操作算子的运用。
另一方面也使得遗传算法具有广泛的应用领域,如函数优化、生产调度、自动控制、图像处理、机器学习、数据挖掘等领域。
2、遗传算法直接以目标函数值作为搜索信息。它仅仅使用适应度函数值来度量个体的优良程度,不涉及目标函数值求导求微分的过程。因为在现实中很多目标函数是很难求导的,甚至是不存在导数的,所以这一点也使得遗传算法显示出高度的优越性。
3、遗传算法具有群体搜索的特性。它的搜索过程是从一个具有多个个体的初始群体P(0)开始的,一方面可以有效地避免搜索一些不必搜索的点。
另一方面由于传统的单点搜索方法在对多峰分布的搜索空间进行搜索时很容易陷入局部某个单峰的极值点,而遗传算法的群体搜索特性却可以避免这样的问题,因而可以体现出遗传算法的并行化和较好的全局搜索性。
4、遗传算法基于概率规则,而不是确定性规则。这使得搜索更为灵活,参数对其搜索效果的影响也尽可能的小。
5、遗传算法具有可扩展性,易于与其他技术混合使用。以上几点便是遗传算法作为优化算法所具备的优点。
缺点:
1、遗传算法在进行编码时容易出现不规范不准确的问题。
2、由于单一的遗传算法编码不能全面将优化问题的约束表示出来,因此需要考虑对不可行解采用阈值,进而增加了工作量和求解时间。
3、遗传算法效率通常低于其他传统的优化方法。
4、遗传算法容易出现过早收敛的问题。
(1)遗传算法优缺点扩展阅读
遗传算法的机理相对复杂,在Matlab中已经由封装好的工具箱命令,通过调用就能够十分方便的使用遗传算法。
函数ga:[x, fval,reason]= ga(@fitnessfun, nvars, options)x是最优解,fval是最优值,@fitnessness是目标函数,nvars是自变量个数,options是其他属性设置。系统默认求最小值,所以在求最大值时应在写函数文档时加负号。
为了设置options,需要用到下面这个函数:options=gaoptimset('PropertyName1', 'PropertyValue1', 'PropertyName2', 'PropertyValue2','PropertyName3', 'PropertyValue3', ...)通过这个函数就能够实现对部分遗传算法的参数的设置。
Ⅱ 遗传算法、粒子群、模拟退火相比于普通的蒙特卡洛算法有什么优势他们相互的优缺点都是什么
他们有类似之处,但差别也不小。
蒙特卡洛算法是数值计算方法,原理是利用随机数来解决计算问题。与它对应的是确定性算法。也就是说该种算法属于随机算法,得到的解是近似解。
而遗传算法、粒子群、模拟退火虽然也是随机近似算法,但这三种都是仿生智能算法,且比蒙特卡洛算法要复杂,应用的领域也不太相同。
显然,蒙特卡洛算法很轻巧,求解问题更快速。
Ⅲ 遗传算法、数值算法、爬山算法、模拟退火 各自的优缺点
遗传算法:其优点是能很好地处理约束,跳出局部最优,最终得到全局最优解。缺点是收敛速度慢,局部搜索能力弱,运行时间长,容易受到参数的影响。
模拟退火:具有局部搜索能力强、运行时间短的优点。缺点是全局搜索能力差,容易受到参数的影响。
爬山算法:显然爬山算法简单、效率高,但在处理多约束大规模问题时,往往不能得到较好的解决方案。
数值算法:这个数值算法的含义太宽泛了,指的是哪种数值算法,阵列算法与爬山算法一样,各有优缺点。
(3)遗传算法优缺点扩展阅读:
注意事项:
遗传算法的机制比较复杂,在Matlab中已经用工具箱中的命令进行了打包,通过调用可以非常方便的使用遗传算法。
函数GA:[x,Fval,reason]=GA(@fitnessfun,Nvars,options)x为最优解,Fval为最优值,@Fitnessness为目标函数,Nvars为自变量个数,options为其他属性设置。系统的默认值是最小值,所以函数文档中应该加上一个减号。
要设置选项,您需要以下函数:options=GaOptimset('PropertyName1','PropertyValue1','PropertyName2','PropertyName3','PropertyValue3'…)通过该函数,可以确定一些遗传算法的参数。
Ⅳ 遗传算法、数值算法、爬山算法、模拟退火 各自的优缺点
遗传算法:优点是能很好的处理约束,能很好的跳出局部最优,最终得到全局最优解,全局搜索能力强;缺点是收敛较慢,局部搜索能力较弱,运行时间长,且容易受参数的影响。
模拟退火:优点是局部搜索能力强,运行时间较短;缺点是全局搜索能力差,容易受参数的影响。
爬山算法:显然爬山算法较简单,效率高,但是处理多约束大规模问题时力不从心,往往不能得到较好的解。
数值算法:这个数值算法的含义太广,你说的是哪一种数值算法?多数数组算法与爬山算法的有优缺点类似。
PS:望采纳!
Ⅳ 遗传算法的迭代次数是怎么确定的,与什么有关
1. 遗传算法简介
遗传算法是用于解决最优化问题的一种搜索算法,算法的整体思路是建立在达尔文生物进化论“优胜劣汰”规律的基础上。它将生物学中的基因编码、染色体交叉、基因变异以及自然选择等概念引入最优化问题的求解过程中,通过不断的“种群进化”,最终得到问题的最优解。
2. 遗传算法实现步骤
在讲下面几个基于生物学提出的概念之前,首先我们需要理解为什么需要在最优化问题的求解中引入生物学中的各种概念。
假设我们需要求一个函数的最大值,但这个函数异常复杂以至于无法套用一般化的公式,那么就会想到:如果可以将所有可能的解代入方程,那么函数最大值所对应的那个解就是问题的最优解。但是,对于较复杂的函数来说,其可能的解的个数的数量级是我们所无法想象的。因此,我们只好退而求其次,只代入部分解并在其中找到最优解。那么这样做的核心就在于如何设定算法确定部分解并去逼近函数的最优解或者较好的局部最优解。
遗传算法就是为了解决上述问题而诞生的。假设函数值所对应的所有解是一个容量超级大的种群,而种群中的个体就是一个个解,接下去遗传算法的工作就是让这个种群中的部分个体去不断繁衍,在繁衍的过程中一方面会发生染色体交叉而产生新的个体。另一方面,基因变异也会有概率会发生并产生新的个体。接下去,只需要通过自然选择的方式,淘汰质量差的个体,保留质量好的个体,并且让这个繁衍的过程持续下去,那么最后就有可能进化出最优或者较优的个体。这么看来原来最优化问题居然和遗传变异是相通的,而且大自然早已掌握了这样的机制,这着实令人兴奋。为了将这种机制引入最优化问题并利用计算机求解,我们需要将上述提到的生物学概念转化为计算机能够理解的算法机制。
下面介绍在计算机中这种遗传变异的机制是如何实现的:
基因编码与解码:
在生物学中,交叉与变异能够实现是得益于染色体上的基因,可以想象每个个体都是一串超级长的基因编码,当两个个体发生交叉时,两条基因编码就会发生交换,产生的新基因同时包含父亲和母亲的基因编码。在交叉过程中或者完成后,某些基因点位又会因为各种因素发生突变,由此产生新的基因编码。当然,发生交叉和变异之后的个体并不一定优于原个体,但这给了进化(产生更加优秀的个体)发生的可能。
因此,为了在计算机里实现交叉和变异,就需要对十进制的解进行编码。对于计算机来说其最底层的语言是由二进制0、1构成的,而0、1就能够被用来表示每个基因点位,大量的0、1就能够表示一串基因编码,因此我们可以用二进制对十进制数进行编码,即将十进制的数映射到二进制上。但是我们并不关心如何将十进制转换为二进制的数,因为计算机可以随机生成大量的二进制串,我们只需要将办法将二进制转化为十进制就可以了。
二进制转换为十进制实现方式:
假设,我们需要将二进制映射到以下范围:
首先,将二进制串展开并通过计算式转化为[0,1]范围内的数字:
将[0,1]范围内的数字映射到我们所需要的区间内:
交叉与变异:
在能够用二进制串表示十进制数的基础上,我们需要将交叉与变异引入算法中。假设我们已经获得两条二进制串(基因编码),一条作为父亲,一条作为母亲,那么交叉指的就是用父方一半的二进制编码与母方一半的二进制编码组合成为一条新的二进制串(即新的基因)。变异则指的是在交叉完成产生子代的过程中,二进制串上某个数字发生了变异,由此产生新的二进制串。当然,交叉与变异并不是必然发生的,其需要满足一定的概率条件。一般来说,交叉发生的概率较大,变异发生的概率较小。交叉是为了让算法朝着收敛的方向发展,而变异则是为了让算法有几率跳出某种局部最优解。
自然选择:
在成功将基因编码和解码以及交叉与变异引入算法后,我们已经实现了让算法自动产生部分解并优化的机制。接下去,我们需要解决如何在算法中实现自然选择并将优秀的个体保留下来进而进化出更优秀的个体。
首先我们需要确定个体是否优秀,考虑先将其二进制串转化为十进制数并代入最初定义的目标函数中,将函数值定义为适应度。在这里,假设我们要求的是最大值,则定义函数值越大,则其适应度越大。那是否在每一轮迭代过程中只需要按照适应度对个体进行排序并选出更加优秀的个体就可以了呢?事实上,自然选择的过程中存在一个现象,并没有说优秀的个体一定会被保留,而差劲的个体就一定被会被淘汰。自然选择是一个概率事件,越适应环境则生存下去的概率越高,反之越低。为了遵循这样的思想,我们可以根据之前定义的适应度的大小给定每个个体一定的生存概率,其适应度越高,则在筛选时被保留下来的概率也越高,反之越低。
那么问题就来了,如何定义这种生存概率,一般来说,我们可以将个体适应度与全部个体适应度之和的比率作为生存概率。但我们在定义适应度时使用函数值进行定义的,但函数值是有可能为负的,但概率不能为负。因此,我们需要对函数值进行正数化处理,其处理方式如下:
定义适应度函数:
定义生存概率函数:
注:最后一项之所以加上0.0001是因为不能让某个个体的生存概率变为0,这不符合自然选择中包含的概率思想。
3. 遗传算例
在这里以一个比较简单的函数为例,可以直接判断出函数的最小值为0,最优解为(0,0)
若利用遗传算法进行求解,设定交叉概率为0.8,变异概率为0.005,种群内个体数为2000,十进制数基因编码长度为24,迭代次数为500次。
从遗传算法收敛的动态图中可以发现,遗传算法现实生成了大量的解,并对这些解进行试错,最终收敛到最大值,可以发现遗传算法的结果大致上与最优解无异,结果图如下:
4. 遗传算法优缺点
优点:
1、 通过变异机制避免算法陷入局部最优,搜索能力强
2、 引入自然选择中的概率思想,个体的选择具有随机性
3、 可拓展性强,易于与其他算法进行结合使用
缺点:
1、 遗传算法编程较为复杂,涉及到基因编码与解码
2、 算法内包含的交叉率、变异率等参数的设定需要依靠经验确定
3、 对于初始种群的优劣依赖性较强
Ⅵ 请问蚁群算法和遗传算法的优缺点比较(不要一大段一大段的,简洁概括即可)
遗传算法有比较强的全局搜索能力,特别是当交叉概率比较大时,能产生大量的新个体,提高了全局搜索范围,遗传算法适合求解离散问题,具备数学理论支持,但是存在着汉明悬崖等问题。
蚁群算法适合在图上搜索路径问题,计算开销会大。
两者都是随机算法,只不过遗传算法是仿生学的算法;蚁群算法是数学算法,是应用目前最广的算法 。针对不同的研究方向,它所体现出来的优缺点是不一样的,将这两个算法混合,优势互补,提高优化性能,并且分别来求解离散空间的和连续空间的优化问题。
希望可以帮到您,望采纳!
Ⅶ 遗传算法的优缺点
1、早熟。这是最大的缺点,即算法对新空间的探索能力是有限的,也容易收敛到局部最优解。
2、大量计算。涉及到大量个体的计算,当问题复杂时,计算时间是个问题。
3、处理规模小。目前对于维数较高的问题,还是很难处理和优化的。
4、难于处理非线性约束。对非线性约束的处理,大部分算法都是添加惩罚因子,这是一笔不小的开支。
5、稳定性差。因为算法属于随机类算法,需要多次运算,结果的可靠性差,不能稳定的得到解。
大致这些,lz可查阅相关专业书籍!