遗传算法小示例

该博客演示了如何运用遗传算法寻找函数Y=sin(3*x)+7*x.^(1/2)+1在0到10区间内的最大值。通过初始化100个个体的种群,24位二进制编码,经过100次迭代,实现了从二进制到十进制的转换,以及交叉、变异和选择等遗传操作。最终找出最优解并用图形展示。
摘要由CSDN通过智能技术生成

求解函数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:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值