Matlab遗传算法求函数最大值
主函数函数main.m
global Bitlength%定义3个全局变量
global boundsbegin
global boundsend
boundsbegin=-2;
boundsend=2;
precision=0.0001;%运算精确度
Bitlength=ceil(log2((boundsend-boundsbegin)'./precision));%染色体长度
popsize=50;%初始种群大小
Generationmax=12;%最大进化代数
pcrossover=0.90;%交叉概率
pmutation=0.09;%变异概率
population=round(rand(popsize,Bitlength));%随机生产初始化种群
[Fitvalue,cumsump]=fitness(population); %调用子函数1算个体适应度和选择累积概率
Generation=1;
while Generation<Generationmax+1%总共进化12代for j=1:2:popsize%每一次生成2个个体,经过25次循环生产一个新种群,完成一代进化seln=selection(population,cumsump);%调用子函数2选择操作,返回选中的2个个体的序号scro=crossover(population,seln,pcrossover);%调用子函数3交叉操作,返回2条染色体scnew(j,:)=scro(1,:);%存储交叉操作返回的染色体scnew(j+1,:)=scro(2,:);smnew(j,:)=mutation(scnew(j,:),pmutation);%调用子函数4对交叉操作返回的染色体变异smnew(j+1,:)=mutation(scnew(j+1,:),pmutation); endpopulation=smnew;%更新种群[Fitvalue,cumsump]=fitness(population);%调用子函数1计算新种群的适应度[fmax,nmax]=max(Fitvalue);%记录最佳适应度和其染色序号fmean=mean(Fitvalue);ymax(Generation)=fmax;%记录当代最佳适应度ymean(Generation)=fmean;%记录当代平均适应度x=transform2to10(population(nmax,:));%调用子函数6转化为10进制数xx=boundsbegin+x*(boundsend-boundsbegin)/(power(boundsend,Bitlength)-1);%将x整合到[-2,2]区间中xmax(Generation)=xx;%保存整合后最佳染色体10进制的值Generation=Generation+1;%依次循环进化12代,得到最佳种群个体
end
Generation=Generation-1
Bestpopulation=xx%最佳种群个体,即x的值
Targetmax=targetfun(xx)%调用子函数7要求的函数的最大值
子函数1:计算适应度和累积选择率fitness.m
function [Fitvalue,cumsump]=fitness(population)
global Bitlength
global boundsbegin
global boundsend
popsize=size(population,1);%总共计算多少个个体
for i=1:popsizex=transform2to10(population(i,:));%调用子函数6转化为10进制数xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),Bitlength)-1);Fitvalue(i)=targetfun(xx);
end
Fitvalue=Fitvalue'+230;
fsum=sum(Fitvalue);
everypopulation=Fitvalue/fsum;
cumsump(1)=everypopulation(1);
for i=2:popsizecumsump(i)=cumsump(i-1)+everypopulation(i);
end
cumsump=cumsump';
子函数2:选择操作函数selection.m
function seln=selection(population,cumsump)
%子函数选择操作,从种群中随机选择2个个体
for i=1:2r=rand;j=1;prand=cumsump-r;while prand(j)<0j=j+1;endseln(i)=j;%选择个体的序号
end
子函数3:交叉操作函数crossover.m
function scro=crossover(population,seln,pc)
global Bitlength
pcc=IfcroORmut(pc);%调用子函数5判断是否进行交叉
if pcc==1%进行交叉c=round(rand*(Bitlength-2))+1;%在[1,Bitlength-1]范围内随机产生一个交叉位scro(1,:)=[population(seln(1),1:c) population(seln(2),c+1:Bitlength)];scro(2,:)=[population(seln(2),1:c) population(seln(1),c+1:Bitlength)];
else%不交叉,返回原值scro(1,:)=population(seln(1),:);scro(2,:)=population(seln(2),:);
end
子函数4:变异操作mutation.m
function smnew=mutation(scnew,pmutation)
global Bitlength
smnew=scnew;
paa=IfcroORmut(pmutation);调用子函数5,判断是否进行变异
if paa==1v=round(rand*(Bitlength-1))+1;%在[1,Bitlength]中选择一个变异位smnew(v)=abs(scnew(v)-1);%将smnew中第V个位置变异
end
子函数5:判断是否进行交叉或者变异IfcroORmut.m
function pcc=IfcroORmut(mutORcro)
judge(1:100)=0;
L=round(100*mutORcro);
judge(1:L)=1;
n=round(rand*99)+1;
pcc=judge(n);
子函数6:二进制转化为十进制transform2to10.m
function x=transform2to10(Population)
global Bitlength
x=Population(Bitlength);
for i=1:Bitlength-1x=x+Population(Bitlength-i)*power(2,i);
end
子函数7:目标函数即为适应度函数targetfun.m
function y=targetfun(x)
%适应度函数,即原函数
y=200*exp(-0.05*x).*sin(x);
运行结果:
当进化了12代后,x约等于1.5时取到最大值185。
Matlab遗传算法求函数最大值相关推荐
- 用标准遗传算法求函数最大值
题:用标准遗传算法求函数f(x)=x+10sin(5x)+7cos(4x)的最大值,其中x的取值范围为[0,10].只是一个有多个局部极值的函数 仿真过程: (1)初始化种群数目NP=50,染色体二进 ...
- 遗传算法求函数最大值实验_小知识:什么是遗传算法
1 什么是遗传算法 遗传算法(GeneticAlgorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法. 其主要特点是 ...
- [PHP] 遗传算法求函数最大值一般实现
需求:求解函数 f(x) = x + 10*sin(5*x) + 7*cos(4*x) 在区间[0,9]的最大值. 1 <?php 2 /* 3 需求:求解函数 f(x) = x + 10*si ...
- Python—标准遗传算法求函数最大值代码实现
参考资料<智能优化算法及其matlab实例第二版> 第一次写博客,格式什么的不太清楚,大家见谅. 遗传算法 学习过程中,为了加深自己理解,在matlab源码的基础上采用Python进行改写 ...
- matlab遗传算法求多元函数最小值,matlab遗传算法求函数最小值
function obj=yichuan(lb,ub,px,pm) %lb,ub为自变量的下界与上界,px为杂交概率,pm为变异概率 popsize=40; %设定种群大小为40 maxgen=500 ...
- 采用遗传算法求解最大值c语言,遗传算法求解函数最大值用例
学习遗传算法自己改了一个用例,感谢下面两篇文章的作者: /*********************************************************************** ...
- python 求函数最大值_遗传算法与Python图解
import matplotlib.pyplot as plt import numpy as np import random import pandas as pd 遗传算法求函数最值 遗传算法的 ...
- 遗传算法求函数极值(含MATLAB代码实现)
介绍转载自https://blog.csdn.net/xujinpeng99/article/details/6211597,后面用自己设置的函数进行实验. 引言:遗传算法求函数极值算是遗传算法的一种 ...
- python求函数极值_python 遗传算法求函数极值的实现代码
废话不多说,大家直接看代码吧! """遗传算法实现求函数极大值-Zjh""" import numpy as np import rando ...
最新文章
- .net数据库操作类2
- org.apache.shiro.ini不存在 shiro不能导包
- Flink JAR包上传和运行逻辑
- unity2017.1.0f3与旧的粒子系统不兼容
- android 插桩工具,Android Asm 插桩 教学项目
- 试题 历届试题 幸运数(二分)
- kinmall分析百度亮剑区块链能否险中求胜?
- ACM:回溯,八皇后问题,素数环
- 浏览器中的XML与JavaScript
- .NET6之MiniAPI(二十三):Refit
- linux挑战:历史命令_博客挑战:分享您关于社区运作方式的知识
- 程序员说的demo是什么意思_“黄龄说的什么意思”???
- opencv常用函数整理(二)
- QTP11 5发布,改名UFT
- matlab中做出球面和圆柱面,MATLAB中的柱面与球面
- ATX电源工作原理的学习
- 百万不是梦!盘点2012年六大IT高薪岗位
- 记录一下Unity学习中的一些奇异事件
- 8产权界定_保护与限制
- NYOJ 找球号(二)(哈希表)
热门文章
- mac电脑常用开发软件
- java sfc模拟器_Higan(sfc超精准模拟器)
- linux软件管家——yum
- 计算机网络:HTTP相关知识
- Java 9版本之后Base64Encoder和Base64Decoder无法继续使用解决办法
- Shopfa:有哪些果蔬生鲜电商平台?
- 纯HTML+CSS+Jquery实现的修改密码框(密码强度动态验证,再次确认验证,密码长度动态显示)均实现,可直接运行使用
- Python学习笔记——图形用户界面(2)
- php下载随机api图片_php中直接输出随机图片的API
- oc语言和c语言,OC和C语言的混编注意点和好处