作者ddavid (谎言接线生)
看板Programming
标题Re: [问题] 基因演算法收敛
时间Sun Nov 2 01:29:54 2014
※ 引述《KJFC (KJFC)》之铭言:
: 基因演算法收敛的时候
: 如果收敛在局部最佳解
: 那要怎麽跳脱比较好
: 我有试过调高突变率
: 但是效果不太好
: 在收敛前上下震荡
: 但是又不知道如何判断是否接近收敛
: 如果在收敛後才震荡
: 有时又会收敛回局部解
: 请问这个问题应该怎麽解决?
首先你要知道,这不是一个可以100%解决的问题,我们做的事顶多是「尝试」提
升它掉到最佳解的机会,可是这只是机率上的,运气不好或解的分布很奇特的话,会
掉到局部解就是会掉下去,没法完全避免。
回到你的问题,其实你的描述不太精确,你的说法意思是你过程中「曾经」碰到
那个最佳解,但是後来又跳走?既然如此你的评估函式看到它的话应该会把它留下来
才对呀?或者说是因为你的评估函式为了加速或某些特定原因所以并非100%准确,因
此最佳解不一定得到最高分,所以有可能放走?如果是这样,除了修正评估函式以外
,顶多就是留下更多组让最佳解留下来的机会更大吧。
如果你的问题其实不是这样,而是跳来跳去都不会跳到最佳解,一直在局部解跳
,那就是调高突变让它有机会跳出来跳到最佳解去,然後你可以尝试使用如模拟退火
(Simulated annealing)的方式慢慢把突变机率降下来,让它慢慢地不乱跳。但这
只是增加一些可能性而已,如你的描述,可能问题一开始就很容易落入局部解,不管
大跳多少次孔明都挖好洞,你只能像曹操一样每笑一次就逃一次,这样的情况也没什
麽办法。
以下引用中文wiki,你提到的也正在基因演算法的最大问题之中,而我讲的可能
解法在最後一行:
尽管遗传演算法有许多优点,也有许多专家学者对遗传演算法进行不断研究,但目前存
在的问题依然很多,如:
(1)适应度值标定方式多种多样,没有一个简洁、通用的方法,不利於对遗传演算法的
使用。
(2)
遗传演算法的早熟现象(即很快收敛到局部最优解而不是全局最优解)是迄今为止最
难处理的关键问题,但可考虑自适应跟踪成熟度[1]。
(3)
快要接近最优解时在最优解附近左右摆动,收敛较慢。
遗传演算法通常需要解决以下问题,如确定编码方案,适应度函数标定,选择遗传操作
方式及相关控制参数,停止准则确定等。相应地,为改进简单遗传演算法的实际计算性
能,很多学者的改进工作也是分别从参数编码、初始群体设定、适应度函数标定、遗传
操作算子、控制参数的选择以及遗传演算法的结构等方面提出的。其基本途径概括起来
主要有下面几个方面:
(1)改进遗传演算法的组成成分或使用技术,如选用优化控制参数、适合问题特性的编
码技术等。
(2)采用混合遗传演算法(Hybrid Genetic Alogrithm),比如混用简单明了的粒子群演
算法[2]。
(3)采用动态自适应技术,在进化过程中调整演算法控制参数和编码精度,比如使用模
糊自适应法[1]。
(4)采用非标准的遗传操作算子。
(5)采用并行演算法。
几种常见的改进遗传演算法:
(1)分层遗传演算法(Hierachic Genetic Alogrithm);
(2)CHC演算法;
(3)Messy遗传演算法;
(4)自适应遗传演算法(Adaptive Genetic Alogrithm);
(5)基於小生境技术的遗传演算法(Niched Genetic Alorithm);
(6)并行遗传演算法(Parallel Genetic Algorithm);
(7)混合遗传演算法:
①遗传演算法与最速下降法相结合的混合遗传演算法;
②
遗传演算法与模拟退火法相结合的混合遗传演算法。
--
「如果你没法给我个解释的话,死一万次也不能弥补你的过错!」
「我没办法死一万次赔你啊。」
「可是你有办法半死两万次,知道吗,嗯?」
--莲.席斯塔
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.36.175.125
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Programming/M.1414862996.A.35A.html
1F:推 KJFC: 了解 我会用模拟退火试试看 175.96.137.129 11/02 10:21