Java教程

遗传算法介绍

本文主要是介绍遗传算法介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

博主之前学习了遗传算法的原理内容,为了防止忘记,写了这篇博客,也可供初学者参考一二,如有不正确的地方,还望指正,希望和各位共同进步。      

遗传算法是一种经典的优化算法,说白了就是找最值,基本的原理就是通过在规定的区间内不断地搜索解方案,比较挑选出其中的最值。

0 绪论

        首先说明遗传算法的一些专业名词:

        以解决h=x2+y2-lgz为例来进行说明,求最大或最小的h值

        1、个体:个体是用式子中的变量来表示的,例如可以用[x,y,z]来表示某个个体,x,y,z这三个变量可以用二进制或者是实数编码。

        2、种群:许多个个体组成的群体,比如[1,2,3],[2,1,3],[2,4,3]这三个个体就组成一个种群。

        3、适应度:也就是说某个个体对于最优解的适应程度,一般是用函数值来表达就行,比如此处的h就可以作为适应度。

        4、编码、解码:针对个体而言,比如在使用二进制编码时,对x,y,z编成二进制,或者从二进制解码成实数再来计算目标函数值,即适应度。

1 步骤简介

(1)选择

选择操作模仿自然界中的“优胜劣汰”法则,若个体的适应度高则其有更大概率被遗传到下一代,反之则概率较小。进行选择操作的方法有许多,比如轮盘赌选择、排序选择、最优个体保存、随机联赛选择等。

a. 轮盘赌选择:将种群中所有个体的适应度值加和,并把每个个体的适应度值与和的比值作为该个体选择的选择概率,从而个体适应度越高被选中概率越高。

b. 排序选择:按照适应度值大小对所有个体进行排序,并根据排序确定个体被选中的概率。

c. 最优个体保存:会将父代群体中的最优的个体直接保存入子代个体中,保证了优秀个体能够遗传到下一代。

d. 随机联赛选择:设置固定值k,每次随机取k个个体,将其中适应度最高的个体遗传入下一代。

这些选择方法各有优缺点,应根据不同场景、不同要求进行选择,本研究采用随机联赛选择方法。(2)交叉

交叉操作模拟自然界中染色体的交叉换位现象,用于生成新个体,决定了算法的全局搜索能力。

一般用的交叉操作有:单点交叉、多点交叉、均匀交叉、算数交叉等等

(3)变异

变异和交叉都是生成新的个体的重要办法,从而达到在规定的区间内进行搜索的目的。

对于二进制编码,就是在编码中随机改变几位的内容,例如:01011变异最后一位就变成了01010,实现了变异。

对于实数编码,可以每次改变小步长来变异,同样还有二项式变异、高斯变异等一系列变异方法。

2 整体框图

 

 

 

 该框图借鉴的是详解遗传算法(含MATLAB代码)_小草莓的魔法笔记-CSDN博客_遗传算法matlab程序这篇文章。

其中,GEN为遗传代数,M为种群中个体的数量。

1、首先随机初始化种群,计算每个个体的适应度

2、分别对种群中的个体进行选择、交叉、变异操作,直到每个个体都进行了相应的操作,则此时完成了一代种群的计算,代数GEN+1

3、当GEN等于给定的最大迭代代数时,遗传完毕,选出最新的种群个体中适应度最高的个体作为最终解。

注:对于是不是每个个体都要执行一遍交叉和变异的问题,并不一定,可以执行交叉但并不执行变异,或者反过来,当然也有两者都进行的,视情况而定。

3、程序

遗传算法程序.zip-深度学习文档类资源-CSDN下载

 亲测可用的遗传算法程序。

 

这篇关于遗传算法介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!