遗传算法学习与C语言实现(函数极值)

您所在的位置:网站首页 二次函数极值公式讲解 遗传算法学习与C语言实现(函数极值)

遗传算法学习与C语言实现(函数极值)

2024-07-09 16:15| 来源: 网络整理| 查看: 265

1概念:

遗传算法是进化算法的一种,用来解决最优化的搜索算法。一般用于函数优化,组合优化(NP完全问题如0-1背包问题,最短路径问题等)。其核心思想是达尔文优胜劣汰适者生存的思想,一个种群在自然界中不断繁衍,将适合环境的优良性状保留下来,而因为小概率发生的基因突变而出现的优秀性状也能保留至下一代。

运用在解决问题的时候,便可参照这种思想:首先随机生成若干对解,使用一个符合问题的评价标准来检验这些解,选择适应度高的解,衍生出适应度更高的解,如此反复,直到得到近似最优解。

2算法设计:

遗传算法需要具备,一个基本函数:适度函数;三个基本操作:选择,交叉,突变。其流程具体如下:初始化种群->循环(评价种群中个体的适应度->以比例原则选择产生下一个种群->改变该种群即交叉和变异)->直到停止循环的条件满足。

3遗传算法名词:

群体规模:种群中染色体个体的数目

编码:对问题集进行转化,最常用的编码技术是二进制编码,具有简单易行,符合最小字符集编码原则,便于用模式定理分析的有点。

适应度函数:用来评价个体的优劣,求个体的适应度,需要根据具体问题进行构造。

算子选择:在挑选个体的时候遵循的方法,有“轮盘法”、“竞标赛法”、“线性排序法”。其中“线性排序法”容易只挑选当前群体中分数最高的个体,会使收敛速度太快,造成“早熟”现象,从而得出区域最优解而不是全局最优解。而“轮盘法”和“竞标赛法”属于按比例原则选择下一代的方法,效果较好。

交叉:常用的是单点交叉,即随机选择两个染色体当中某段基因进行交换,形成新的染色体。模拟自然界当中的染色体交叉互换。

交叉率:控制交叉操作的使用频率,交叉操作可以加速收敛,达到最优解区域,因此一般取较大的交叉率,但交叉率太大容易造成过早收敛。

变异:随机选择某条染色体的某个基因进行改变,二进制编码下的方法为0à1,1à0的操作。模拟自然界的基因突变。

变异率:控制变异操作的概率,一般比较低。

终止条件:结束迭代的条件。一般有,进化次数限制、计算耗费的资源限制、一个个体已经满足最优值得条件、不再有新的个体产生等。

简单实例编码实现:

函数为y=x2+5的最大值,0



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3