遗传算法(Genetic Algorithm,GA)实例详解
遗传算法是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法,他能有效求解NP问题以及非线性、多峰函数优化和多目标优化问题。
1.理论基础
1.1生物学基础
遗传算法的生物学基础是借鉴了达尔文的进化论和孟德尔的遗传学说,一个种群通过不断地繁衍和淘汰,一方面父代不断把优秀的基因遗传给子代,另一方面差的子代会逐渐被环境所淘汰,最终子代逐渐增强得到进化。
1.2理论依据
遗传算法有效性的理论依据为模式定理和积木块假设。
1.2.1模式定理
在遗传算子选择、交叉和变异的作用下,具有低阶、短定义距、平均适应度高于群体平均适应度的模式在子代中将以指数级增长。
统计学的研究表明:在随机搜索中,要获得最优的可行解,则必须保证较优解的样本呈指数级增长,而模式定理保证了较优的模式的样本呈指数级增长,从而给出了遗传算法的理论基础。另外,由于遗传算法总能以一定的概率遍历到解空间的每一个部分,因此在选择算子的条件下总能得到问题的全局最优解。
1.2.2积木块假设
积木块定义:具有低阶、短定义距、高平均适应度的模式称作积木块。
积木块假设:个体的积木块通过选择、交叉、变异等遗传算子的作用,能够相互结合在一起,形成高阶、长距、高平均适应度的个体编码串。
2.基本概念
群体和个体
可行解集和可行解
染色体和基因
可行解编码和可行解编码的分量
遗传编码
二进制编码、实数编码
适应度
目标函数映射成适应度函数、基于序的适应度函数
遗传操作
选择算子、交叉算子、变异算子
3.主要特点
以决策变量的编码作为运算对象;
直接以目标函数值作为搜索信息;
同时使用多个搜索点的搜索信息;
是一种基于概率的搜索技术;
具有自组织性、自适应和自学习等特性。
4.算法流程
初始化参数
适应度计算
选择运算
交叉运算
变异运算
终止条件判断
5.实例展示
5.1问题描述
对于函数f(x) = x + 10 * sin(5x) + 7 * cos(4x),求x=[0, 10]处的最大值
5.2代码实现
画图
x = 0:0.01:10;
y = x + 10 * sin(5 * x) + 7 * cos(4 * x);
plot(x,y,'-');
xlabel('x');
ylabel('f(x)');
title('f(x) = x + 10sin(5x) + 7cos(4x)');
结果
问题代码
初始化参数
%%%%%初始化参数
NP=50;
L=20;
G=100;
Pc=0.8;
Pm=0.1;
xs=10;
xx=0;
f=randi([0 1],NP,L);%randint不可用时,可用randi
适应度计算
%%%%%循环算法
for k=1:G%%%%%计算每个个体的适应度for i=1:NPU=f(i,:);m=0;%第i个个体的二进制值for j=1:Lm=U(j)*2^(j-1)+m;endx(i)=xx+m*(xs-xx)/(2^L-1);FIT(i)=x(i) + 10 * sin(5 * x(i)) + 7 * cos(4 * x(i));endmaxfit=max(FIT);minfit=min(FIT);rr=find(FIT==maxfit);fbest=f(rr(1,1),:);xbest=x(rr(1,1));FIT=(FIT-minfit)./(maxfit-minfit);%归一化
选择操作
%%%%%选择sum_fit=sum(FIT);fitvalue=FIT./sum_fit;fitvalue=cumsum(fitvalue);ms=sort(rand(NP,1));fiti=1;newi=1;while newi <= NPif ms(newi) < fitvalue(fiti)nf(newi,:)=f(fiti,:);newi = newi + 1;elsefiti = fiti + 1;endend%选择出来的新种群存在重复的个体
交叉操作
%%%%%交叉for i=1:2:NPp=rand;if p < Pcq=randi([0 1],1,L);for j=1:Lif q(j)==1temp=nf(i+1,j);nf(i+1,j)=nf(i,j);nf(i,j)=temp;endendendend
变异操作
%%%%%变异for i=1:round(NP*Pm)h=randi(NP);for j=1:round(L*Pm)g=randi(L);nf(h,g)=~nf(h,g);endendf=nf;f(1,:)=fbest;trace(k)=maxfit;
end
作图
xbest;
figure;
plot(trace);
xlabel('迭代次数');
ylabel('目标函数值');
title('适应度进化曲线');
结果
xbest = 7.8584,trace(end) = 24.8549
遗传算法(Genetic Algorithm,GA)实例详解相关推荐
- 路径算法:遗传算法 (Genetic Algorithm, GA)
遗传算法简介 遗传算法是受自然进化理论启发的一系列搜索算法.通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索,优化和学习的各种问题提供高质量的解决方案.同时,它们类似于自然进化,因此可以克服传统搜 ...
- 遗传算法(Genetic Algorithm,GA)实现数据排序,python
遗传算法(Genetic Algorithm,GA)实现数据排序,python 遗传算法是一种比较广泛.通用的算法体系,为了说明遗传算法的原理和实现,现在用GA解决一个计算机科学最基本.最古老的问题: ...
- 遗传算法 python 简书_遗传算法(Genetic Algorithm ,GA)学习笔记
1 遗传算法的概念 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA) 是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程 ...
- uniform crossover(均匀交叉),遗传算法(Genetic Algorithm,GA),python
uniform crossover(均匀交叉),遗传算法(Genetic Algorithm,GA),python 假设有双亲p1和p2的二进制基因染色体表达,子代的基因以等概率(50%)来自双亲中之 ...
- 优化算法之遗传算法(Genetic Algorithm, GA)
目录 概述 相关术语 遗传算法的实现过程 遗传算法的一般步骤 代码描述 解码 相关问题 适应度函数 选择函数 小问题: 交叉.变异 相关问题 完整代码 疑惑点(感谢大佬解答) 个人修改代码(类形式) ...
- 遗传算法 python 简书_【算法】超详细的遗传算法(Genetic Algorithm)解析
00 目录 遗传算法定义 生物学术语 问题导入 大体实现 具体细节 代码实现 01 什么是遗传算法? 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物 ...
- 遗传算法(Genetic Algorithm)从了解到实例运用(上)(python)
前言 本文主要介绍了数学建模常用模型遗传算法,从原理出发到编程实现再到实例运用.笔者参与过大大小小五次数学建模,个人觉得该优化算法值得一学. 提示:以下是本篇文章正文内容 一.遗传算法由来 遗传算法的 ...
- 遗传算法(GA)详解
遗传算法(GA)详解 遗传算法主要作用是求解最优解,例如求函数极值,或是飞机巡航问题中的最短巡航路线的求解等,其作用与模拟退火算法的作用较为相似.本文将从GA算法的原理,结构与两个实践应用进行比较详细 ...
- (二)遗传算法(Genetic Algorithm, GA)流程
(二)遗传算法(Genetic Algorithm, GA)流程 1. 遗传算法流程 2. 关键参数说明 1. 遗传算法流程 一点说明: 在遗传算法中,将nnn维决策向量X\bf{X}X=[x ...
- 遗传算法(Genetic Algorithm)的学习及简单实现(java)
一.遗传算法 1.1 遗传算法的定义 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的 ...
最新文章
- Oracle 表分区删除操作
- 1小时学会:最简单的iOS直播推流(四)如何使用GPUImage,如何美颜
- 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
- 爬虫学习笔记(十二)—— scrapy-redis(一):基本使用、介绍
- asp前端日历_asp显示日历效果
- 一次利用位图索引进行SQL优化的案例
- SON_EXAM考试php,通用全国少儿英语等级考试:三星笔试真题
- sql server 2000的数据库还原
- php项目邮件连接无效,完美解决wordpress邮件链接无效的问题
- rootfs文件系统的制作(一)
- (转)Silverlight 巧用文件生成时间强制客户端载入最新xap文件
- 杭州车牌摇号规则详细内容
- 考取RHCE认证的历程,总结的经验
- 淘宝直播API接口协议
- java 假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?
- 活期利率是怎么计算的?
- JRebel has expired Jrebel过期解决!!
- web前端之城市级联
- 晶晨半导体---软开
- 社区举办“杀戮游戏”,你是幸存的那个吗?