不能瞎捣鼓了,没时间也没指望,要静下心来从理论上分析原因,吃透整个过程,找出核心问题,对症下药才有希望~
与“二张”的改进GA算法比较,除了二进制与实数编码的区别外,一个重要的不同是我没有注意“优胜劣汰”的影响。“优胜劣汰”在改进GA中的作用不下于复制操作,尤其在经过多代的优化后,可以大幅提高适应度高的模式的浓度。若不进行“优胜劣汰”操作,则模式个数过多,经延长求到最优解的时间。当然了,较早较高的“优胜劣汰”比率会导致早熟问题,文章采用的是“适度优胜劣汰”的方法,逐步提高比例值,先淘汰掉百分比A适应度最差的模式,对余下的部分再按“按比例淘汰”法进行淘汰。我在实数编码的改进GA算法中重点关心的是如何运用佳点集进行交叉操作,通过对取值范围进行划分,将实数编码问题转换为类似于二进制编码的问题,而且随着进化过程的进行不断细化划分的范围,这样可能会更快更好的得到最佳值。但现在我还没有实现动态细化,同时由于采用默认的GA优化过程,没有对复制、交叉、变异操作后的染色体种群进行“优胜劣汰”的操作。从目前运行的效果来看,收敛速度过慢,平均浓度低的问题比较严重。
前面做过仿真,用适应度值1.69的模型,结果很不理想(现在适应度值的计算方式有所改变)。而现在的适应度值还达不到1.69,这就很难让人满意了。
由前面的分析,得出以下进一步改进的方向:
- 优胜劣汰操作。在进行完复制、交叉和变异操作后,对染色体种群进行优胜劣汰操作,采用适度优胜劣汰方法。
- 在一次交叉操作后得出的佳点集中选取最好的p个染色体,目前p值固定取为2,可以考虑改变p值,看看效果是否会有变化。
- 实现划分范围的动态细化。随着进化过程的进行,不断细化范围,本质上就是先把整个取值空间粗略划分,找到较好的区域,再在这个区域内进行划分,找到最好的子区域,通过这个过程找到最优值。目前这种固定依取值范围一分为二的方法或是依现有值范围一分为二的方法都难以进一步找到最优值。
1 条评论:
逃避了好几天了,几天前加入了优胜劣汰操作,效果不明显。也许是潜意识里害怕下面的两条路走不通该怎么办,一直没动手实现。今天帮着师弟解决了几个问题后,感觉自信心又起来了,怕个球!!要是我解决不了,估计就没几个人可以解决了,为了自己也为了大家,怎么也要咬牙坚持下来!!嘿嘿:)
发表评论