遗传算法求函数最小值(多维)2

 目标函数:

 

 代码:

function o=func21(x)
o=sum(x.^2-10*cos(2*pi.*x)+10);
end
%%实值遗传算法求函数极值%%%%
%%%%%初始化参数%%%%%
clear all;      %清除所有变量
close all;      %清图
clc;            %清屏

clear all;
NP=1000;          %染色体数目
Dim=30;           %基因数目
Pc=0.95;         %交叉率,一般取0.25~1
Pm=0.01;         %变异率,一般取0.001~0.1
G=1000;         %最大遗传代数,一般100~1000
Xs=5.21;          %定义域上限
Xx=-5.21;         %定义域下限
f=rand(Dim,NP)*(Xs-Xx)+Xx;  %随机获得初始种群
trace=zeros(1,G);         %预先分配内存
Fit=zeros(1,NP);         %预先分配内存
%%%%%遗传算法循环%%%%%
for gen=1:G
    %%%%%按适应度升序排列%%%%%
    for np=1:NP
        Fit(np)=func21(f(:,np));
    end
    [SortFit,Index]=sort(Fit);
    Sortf=f(:,Index);
    %%%%%采用君主方案进行选择交叉操作%%%%%
    Emper=Sortf(:,1);
    NoPoint=round(Dim*Pc);
    PoPoint=randi([1 Dim],NoPoint,NP/2);
    nf=Sortf;
    for i=1:NP/2
        nf(:,2*i-1)=Emper;
        nf(:,2*i)=Sortf(:,2*i);
        for k=1:NoPoint
            nf(PoPoint(k,i),2*i-1)=nf(PoPoint(k,i),2*i);
            nf(PoPoint(k,i),2*i)=Emper(PoPoint(k,i));
        end
    end
    %%%%%变异操作%%%%%
    for m=1:NP
        for n=1:Dim
            r=rand(1,1);
            if r<Pm
                nf(n,m)=rand(1,1)*(Xs-Xx)+Xx;
            end
        end
    end
    f=nf;
    trace(gen)=SortFit(1);
end
Bestf=Sortf(:,1)
func21(Bestf)
trace(end);
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')

结果展示 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值