php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 638|回复: 0

DE算法matlab实现(附带测试函数代码)

[复制链接]

3138

主题

3148

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7946
贡献
0
注册时间
2021-4-14
最后登录
2024-11-21
在线时间
763 小时
QQ
发表于 2022-5-20 15:25:08 | 显示全部楼层 |阅读模式
[mw_shl_code=applescript,true]%根据文章《Differential Evolution Algorithm With Strategy Adaptation for Global Numerical Optimization》的算法
clc;clear;close all
%clear
maxGen=500;%最大迭代次数
Gen=1;%进化代数,或者当前迭代代数
Xmax=30;%搜索上界,可以根据需要改为向量形式
Xmin=-30;%搜索下界
Dim=20;%个体维数
NP=100;%population size,种群规模
F=0.5;%scaling factor 缩放因子
CR=0.3;%crossover rate 交叉概率
index=3;%测试方程索引,不同值对应不同的测试函数
mutationStrategy=3;%变异策略
crossStrategy=1;%交叉策略

%% 初始化
X=(Xmax-Xmin)*rand(NP,Dim)+Xmin; %X行代表个体i,列代表个体i的维度j

%% 迭代循环
for Gen=1:maxGen
    for i=1:NP
        fitnessX(i)=testFun(X(i,,index);%测试函数求值,fitnessX表示X的适应值
    end
    [fitnessbestX,indexbestX]=min(fitnessX);
    bestX=X(indexbestX,;%bestX表示最优值对应的位置
% 变异
    V=mutation(X,bestX,F,mutationStrategy);%调用变异函数
   
% 交叉  
    U=crossover(X,V,CR,crossStrategy);%调用交叉函数
% 选择
    for i=1:NP
        fitnessU(i)=testFun(U(i,,index);
        if fitnessU(i)<=fitnessX(i)
            X(i,=U(i,;
            fitnessX(i)=fitnessU(i);
            if fitnessU(i)<fitnessbestX
                bestX=U(i,;
                fitnessbestX=fitnessU(i);  
            end
        end
    end
% 最优值记录
    fprintf('%d      %f\n',Gen,fitnessbestX);  %输出当代最优解
    bestfitness(Gen)=fitnessbestX;
    optValue=num2str(fitnessbestX);
    Location=num2str(bestX);
    disp(strcat('the optimal value','=',optValue));
    disp(strcat('the best location','=',Location));
end
% 绘图
plot(bestfitness);
xlabel('Gen');
ylabel('bestfitness');




[/mw_shl_code]

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-22 03:04 , Processed in 8.068990 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表