【优化求解】改进的人工鱼群算法求解高维问题【Matlab 298期】

一、简介

在这里插入图片描述
在这里插入图片描述

二、源代码

%主程序.m,直接运行主程序就可以得到一次结果,b_value是收敛图线(公告最优值).
%x,y;xa,ya分别代表初始鱼群分布和最终鱼群分布,best_num是当前解域最有人工鱼群数目.
tic;%主程序开始
global afs;%定义人工鱼
global af_total;%初始时的人工鱼总数
global afs_c;%人工鱼的状态
global afs_value;%实际当前最优解
global b_c;%公告牌最优人工鱼的状态
global b_value;%公告牌最优人工鱼处的食物浓度
global iterate_times;%定义公告牌更新次数
global passed_times;%公告牌实际更新次数
global best_af;%
global num;%目标函数调用次数
global N;%根据需求修改N,就可修改寻优函数维数
global fx;%记录最优解
global bafs;%保存每次更新公告牌后的最优人工鱼
num=0;
N=50;
afs=[];
bafs=[];
afs_c={
    
    };
af_total=20;
afs_value=0;
b_value=Inf;
passed_times=0;    
iterate_times=100;
tic;
fprintf('人工鱼的初始位置:\n');
for i=1:1:af_total      %将所有人工鱼初始化,并将所有人工鱼的初始位置保存
    fprintf('Number:%d\n',i);
    afs{
    
    i}=af();
    afs_c{
    
    i}=get(afs{
    
    i},'c');
    X=afs_c{
    
    i};
    fprintf('x=%f\n',X);
end

for j=1:1:iterate_times
    passed_times=passed_times+1;
    %公告牌初始化
    if passed_times>1
        b_value(passed_times)=b_value(passed_times-1);
    else
        b_c=zeros(1,N);
        b_value(1)=Inf;
    end
    %best_af是当前状态最优人工鱼,由它判断当前解域,best_num是当前解域中鱼的数目
    best_af=af();
    best_c=zeros(1,N);
    best_num=0+eps;
    for i=1:1:af_total   
        afs{
    
    i}=evaluate(afs{
    
    i});
        if foodconsistence(afs{
    
    i})<foodconsistence(best_af)%更新当前最优人工鱼
            best_af=afs{
    
    i};
        end
        afs_c{
    
    i}=get(afs{
    
    i},'c');
        if foodconsistence(afs{
    
    i})<b_value(passed_times)%当前有人工鱼优于公告牌人工鱼,公告牌更新
            b_c=get(afs{
    
    i},'c');
            b_value(passed_times)=foodconsistence(afs{
    
    i});
        end
    end
    
    for i=1:1:af_total  %找到最优解域中的合适点
        if dstc(afs{
    
    i},best_af)<0.3%注意!!!!根据不同寻优问题需要改变!!!
            best_c=best_c+get(afs{
    
    i},'c');
            best_num=best_num+1;
        end
    end
    best_c=best_c/best_num;
    afs_value(passed_times)=foo(best_c);%解域中合适点处的浓度
    bafs.c{
    
    passed_times}=best_c;
    bafs.value(passed_times)=afs_value(passed_times);
    fprintf('\n迭代次数:%f\n',passed_times);
    fprintf('\n当前最优解:\n');
    fprintf('X:%f\n',best_c);
    fprintf('\n此处食物浓度:%f\n',afs_value(passed_times));
    for i=1:1:af_total%保存当前所有人工鱼的状态
        afs_c{
    
    i}=get(afs{
    
    i},'c');
        xc{
    
    i}=afs_c{
    
    i};
    end
end
%foo.m欲寻优的函数设置
function [out]=foo(x)
%此处为欲寻优函数的定义,它是一个怎样的函数
global num;
global N;%寻优函数的维数
num=num+1;
N=length(x);

out=0;
sum=0;
%%%%%%%%%%%%%%fitness1%%%%%%%%%%%%可以找到最优解
%for i=1:N
%    sum=sum+x(i)*x(i);
%end
%out=sum;
%%%%%%%%%%%%fitness2%%%%%%%%%%%%可以找到最优解
%f1=0;
%f2=1;
%for i=1:N
%    f1=f1+abs(x(i));
%    f2=f2*abs(x(i));
%end
%out=f1+f2;
%%%%%%%%%%%%fitness3%%%%%%%%%可以找到最优解
%f1=0;
%f2=0;
%for i=1:N
%    for j=1:i
%        f1=f1+x(i);
%    end
%    f2=f2+f1^2;
%end
%out=f2;
%%%%%%%fitness4%%%%%%有误差
%out=max(abs(x));
%%%%%%%%fitness5%%%%%%%%有误差
%for i=1:N-1
%    sum=sum+100*(x(i+1)-x(i)^2)^2+(1-x(i))^2;
%end
%out=sum;
%%%%%%fitness7%%%%%%%%%寻优效果很好,存在一定小的误差
for i=1:N
    sum=sum+i*x(i)^4;
end

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ912100926
往期回顾>>>>>>
【优化求解】粒子群算法之充电站最优布局【Matlab 061期】
【优化求解】遗传算法之多旅行商问题【Matlab 062期】
【优化求解】遗传和模拟退火之三维装箱问题【Matlab 063期】
【优化求解】遗传算法之求最短路径【Matlab 064期】
【优化求解】粒子群之优化灰狼算法【Matlab 065期】
【优化求解】多目标之灰狼优化算法MOGWO 【Matlab 066期】
【优化求解】遗传算法之求解优化车辆发车间隔【Matlab 067期】
【优化求解】磷虾群算法简介【Matlab 068期】
【优化求解】差分进化算法简介【Matlab 069期】
【优化求解】约束优化之惩罚函数法简介【Matlab 070期】
【优化求解】改进灰狼算法之求解重油热解模型【Matlab 072期】
【优化求解】蚁群算法之配电网故障定位【Matlab 073期】
【优化求解】遗传算法之求解岛屿物资补给优化问题【Matlab 137期】
【优化求解】基于matlab冠状病毒群体免疫优化算法(CHIO)【Matlab 138期】
【优化求解】基于matlab之金鹰优化求解算法(GEO)【Matlab 139期】
【优化求解】基于GUI界面之BP神经网络优化求解【Matlab 179期】
【优化求解】基于GUI界面之遗传算法优化求解【Matlab 180期】
【优化求解】基于GUI界面之蚁群算法优化求解【Matlab 181期】
【优化求解】 免疫算法之数值逼近优化分析【Matlab 182期】
【优化求解】 启发式算法之函数优化分析【Matlab 183期】
【优化求解】改进的遗传算法(GA+IGA)之城市交通信号优化【Matlab 184期】
【优化求解】改进的遗传算法GA之城市交通信号优化【Matlab 185期】
【优化求解】改进的遗传算法IGA之城市交通信号优化【Matlab 186期】
【优化求解】罚函数的粒子群算法之函数寻优【Matlab 187期】
【优化求解】细菌觅食算法之函数优化分析【Matlab 188期】
【优化求解】引力搜索算法之函数优化分析【Matlab 189期】
【优化求解】蚁群算法之函数优化分析【Matlab 190期】
【优化求解】多元宇宙优化算法【Matlab 191期】
【优化求解】飞蛾扑火算法(MFO)【Matlab 192期】
【优化求解】实现电动汽车有序充电【Matlab 294期】
【优化求解】粒子群的智能微电网多目标优化算法【Matlab 295期】
【优化求解】PSO货物配装问题最优化【Matlab 296期】
【优化求解】人工鱼群算法求解梯级水库优化调度【Matlab 297期】

猜你喜欢

转载自blog.csdn.net/m0_54742769/article/details/114364348