Re: [问题] 基因算法收敛

楼主: ddavid (谎言接线生)   2014-11-02 01:29:54
※ 引述《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)混合遗传算法:
①遗传算法与最速下降法相结合的混合遗传算法;
②遗传算法与模拟退火法相结合的混合遗传算法。

Links booklink

Contact Us: admin [ a t ] ucptt.com