遗传算法小示例
来源:互联网 发布:mac tree 编辑:程序博客网 时间:2024/06/08 01:50
求解函数Y=sin(3*x)+7*x.^(1/2)+1在(0,10)内的最大值,初始种群数为100,精确到6位小数,利用24位二进制编码方式表示个体染色体串,迭代次数为100次。
Initpop:
%初始化群体,规定初始种群的数量与个体长度
%popnumb表示初始种群的数目,individuallength表示个体的长度
functionpop = initpop(popnumb,individuallength)
pop= round(rand(popnumb,individuallength));
binarytodecimal:
%将种群的二进制编码与定义域内的数对应
functionpop2=binarytodecimal(pop)
[px,py]=size(pop);
fori=1:py;
pop1(:,i)=2.^(py-i).*pop(:,i); %将矩阵中的每位二进制乘以权重
end
Dcv=sum(pop1,2);%转化为十进制数表示的一维列向量
pop2=Dcv*10/(2^py);%将十进制数转化为自变量定义域内的数
objectvalue:
function[objvalue] = objectvalue(pop)
%计算适应度函数值
m=binarytodecimal(pop);%调用binarytodecimal将种群中的个体转化为对应的自变量定义域内的数
objvalue=sin(3*m)+7*m.^(1/2)+10;%适应函数采用目标函数
selection:
function[newpop]=selection(pop,fitvalue)
%堵盘算法实现选择操作。
[px,py]=size(pop);
total_fval=sum(fitvalue);%种群的总的适应值
p_fitvalue=fitvalue/total_fval; %个体的选择概率
p_fitvalue=cumsum(p_fitvalue);%求和排序
ms=sort(rand(px,1));
fitin=1;
newin=1;
whilenewin<=px
if(ms(newin))<p_fitvalue(fitin)
newpop(newin,:)=pop(fitin,:);%pop的第fitin行赋值到newpop的mewin行
newin=newin+1;
else fitin=fitin+1;
end
end
crossover:
function[newpop] = crossover(pop,pc)
%以交叉概率pc进行交叉
%产生新的种群
[px,py]=size(pop);
newpop=ones(size(pop));
fori=1:2:px-1;
if(rand<pc)
crpoint=round(rand*py); %依据随机数选择交叉点
newpop(i,:)=[pop(i,1:crpoint),pop(i+1,crpoint+1:py)]; %交叉
newpop(i+1,:)=[pop(i+1,1:crpoint),pop(i,crpoint+1:py)];
else
newpop(i,:)=pop(i,:); %不交叉
newpop(i+1,:)=pop(i+1,:);
end
end
mutation:
%以pm为变异概率,进行变异操作
function[newpop] = mutation( pop,pm )
[px,py]=size(pop);
newpop=ones(size(pop));
fori=1:px;
if(rand<pm)
mupoint=round(rand*py);
if mupoint<=0
mupoint=1;
end
newpop(i,:)=pop(i,:);
if newpop(i,mupoint)==0;
newpop(i,mupoint)=1;
else
newpop(i,mupoint)=0;
end
else
newpop(i,:)=pop(i,:);
end
end
best:
function[bestindividual,bestfit] = best( pop,fitvalue )
%返回最佳个体及其对应的适应值
[px,py]=size(pop);
bestfit=fitvalue(1);
bestindividual=pop(1,:);
fori=2:px;
if fitvalue(i)>bestfit;
bestfit=fitvalue(i);
bestindividual=pop(i,:);
end
end
functionmain()
clear
clc
popnumb=100;
individuallength=24;%精确到6位小数
pc=0.6; %交叉概率
pm=0.001; %选择概率
pop=initpop(popnumb,individuallength); %初始种群
fori=1:100;
[objvalue]=objectvalue(pop);
fitvalue=objvalue; %计算种群的适应度函数
[newpop] = selection(pop,fitvalue); %选择操作
[newpop] = crossover(newpop,pc); %交叉操作
[newpop] = mutation(newpop,pm); %变异操作
pop=newpop; %更新种群
end
[objvalue]=objectvalue(pop);
fitvalue=objvalue;
[bestindividual,bestfit]=best(pop,fitvalue); %得出最佳个体串与其适应值
x2=binarytodecimal(bestindividual); %将最佳个体串映射到自变量定义域内的具体数值
[x1]=binarytodecimal(pop); %将末代种群中的个体映射到定义域内的具体十进制数
[y1]=objectvalue(pop); %得出末代种群中个体的适应值
figure;
fplot('sin(3*x)+7*x.^(1/2)+10',[010]);
holdon;
plot(x1,y1,'*');
fprintf('thebest X is %5.3f\n',x2);
fprintf('thebest Y is %5.3f\n',bestfit);
xlabel('X');
ylabel('Y');
title('y=sin(3*x)+7*x.^(1/2)+10')
end
运行结果:
- 遗传算法小示例
- 遗传算法简单示例
- 遗传算法程序示例
- Java算法---遗传算法示例
- 通俗易懂遗传算法小例子
- 遗传算法的手工模拟计算示例
- 简单遗传算法的小例子
- 遗传算法——小白
- Matlab遗传算法优化问题求解的示例代码
- 【搞搞算法】Matlab遗传算法工具箱gatbx小试
- 遗传算法
- 遗传算法
- 遗传算法
- 遗传算法
- 遗传算法
- 遗传算法
- 遗传算法
- 遗传算法
- websocket 应用实例
- MySql(一、MySQL基础、库操作和表操作)
- 提升语义分割性能的几种方法
- linux下最好用的mplayer播放器使用方法(转)
- SQL学习之--《SQL必知必会》
- 遗传算法小示例
- UVA10282 map容器使用
- WordPress显示评论者IP归属地、浏览器、终端设备、电信运营商
- python基础学习三
- Linux Shell经典面试题(其二)
- 1021. 个位数统计 (15)
- AlphaGo Zero都开始自学了,你今天机器学习了吗
- linux命令--xargs
- 第三次实验