二进制遗传算法与MATLAB

二进制遗传算法与MATLAB

(一)简单示例:
在这里插入图片描述
程序:x=-1:0.001:2; y=x.*sin(10*pi*x)+2; plot(x,y)
在这里插入图片描述
(二)MATLAB的实现
1)主函数

dim=22;%维度
N=50;%50个
Pc=0.75;
pm=0.03;
Po=round(rand(N,dim));%随机产生N行dim列
for it=1:100
    %%解码
    for i=1:N;
        x(i)=Gjz(Po(i,:),dim);%%解码
        y(i)=Gmb(x(i))%%适应函数的计算
    end
    %%目标函数图像
    xx=-1:0.001:2;
    yy=xx.*sin(10*pi*xx)+2;
    figure(1)
    set(gca,'nextplot','replace');
    plot(xx,yy)
    hold on
    plot(x,y,'r*')
    %%选择操作
    p=y/sum(y);%%比例概率
    Lp(1)=p(1);
    for i=2:N
        Lp(i)=Lp(i-1)+p(i)%%%计算累计概率
    end
    for i=1:N
        ind=find((Lp-rand)>0);%%%找出轮盘指标
        Co(i)=ind(1);%%%%%%%%计数器
        nPo(i,:)=Po(ind(1),:);%%将对应指标的染色体取出来,并赋值给新的种群
    end
    %%%%%交叉选择
    for i=1:2:N
        [a,b]=Gjc(nPo(i,:),nPo(i+1,:),dim,Pc)
        Npo(i,:)=a;
        Npo(i+1,:)=b;
    end
    %%%%%%-Npo(行,列)
    %%%%%%变异操作
    for i=1:N
        NNPo(i,:)=Gby(Npo(i,:),dim,pm);
    end
    Po=NNPo;
end

2)Gjz函数(二进制转换过程)

function [sum1]=Gjz(a,dim)
sum1=0;
for i=1:dim
    sum1=sum1+a(i)*2^(dim-i);
end
sum1=-1+sum1*(2-(-1))/(2^dim-1);
end

3)Gmb函数(目标函数)

function y=Gmb(x)
y=x*sin(10*pi*x)+2;
end

4)Gjc函数(交叉选择)

function [a,b]=Gjc(a,b,dim,Pc)%%%交叉函数
if rand<Pc
m=round(rand*(dim-1))+1;
temp=a(m:dim);
a(m:dim)=b(m:dim);
b(m:dim)=temp;
end

5)Gby函数(变异)

function [a]=Gby(a,dim,pm)
if rand<pm
    m=round(rand*(dim-1))+1;
    a(m)=abs(a(m)-1);
end

6)结果图例

在这里插入图片描述
这里参数因子没选取好,第一次得到的结果不是很理想

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值