MATLAB代码

编程入门 行业动态 更新时间:2024-10-07 21:35:11

MATLAB<a href=https://www.elefans.com/category/jswz/34/1771412.html style=代码"/>

MATLAB代码

%以下代码可直接移入MATLAB编辑窗口运行

clc;

clear all;

c1 = 1.49445;

c2 = 1.49445;%速度学习因子

max_genxin = 100;%最大迭代次数

size_zhongqun = 20;%种群规模

max_geti = 5;%个体(自变量取值)最大值(位置)

min_geti = -5;

v_max = 1;%速度最大值

v_min = -1;%速度最小值

%%种群初始化

var_num = 2;%适应度函数自变量个数

zhongqun = 5*rand(size_zhongqun,var_num);%初始化粒子

v_zhongqun = rand(size_zhongqun,var_num);%初始化粒子速度

for i = 1:size_zhongqun

  fitness(i) = fun_shiyingdu(zhongqun(i,:)); %计算适应度值

end

%%寻找初始极值

[bestfitness_value, bestfitness_weizhi] =min(fitness);

jizhi_zhongqun =zhongqun(bestfitness_weizhi,:);%群体极值位置

jizhi_geti = zhongqun;%个体极值位置

fitnessbest_geti = fitness;%个体极值适应度值

fitnessbest_group = bestfitness_value;%群体极值适应度值

%%迭代寻优

for i = 1:max_genxin

   for j = 1:size_zhongqun

       %速度更新

       v_zhongqun(j,:) = v_zhongqun(j,:)+c1*rand*(jizhi_geti(j,:)-zhongqun(j,:))+c2*rand*(jizhi_zhongqun-zhongqun(j,:));

       v_zhongqun(j,v_zhongqun(j,:)>v_max) = v_max;

       v_zhongqun(j,v_zhongqun(j,:)<v_min) = v_min;

       %粒子更新

       zhongqun(j,:)  =zhongqun(j,:)+0.5*v_zhongqun(j,:);

       zhongqun(j,zhongqun(j,:) >max_geti) = max_geti;

       zhongqun(j,zhongqun(j,:)< min_geti) = min_geti;

       %粒子适应度值

       fitness(j) = fun_shiyingdu(zhongqun(j,:));

   end

   

    %个体极值和群体极值更新

   for j = 1:size_zhongqun

       %个体极值更新

       if fitness(j) < fitnessbest_geti(j)

           jizhi_geti(j,:) = zhongqun(j,:);

           fitnessbest_geti(j) = fitness(j);

       end

       %群体极值更新

       if fitness(j) < fitnessbest_group

           jizhi_zhongqun = zhongqun(j,:);

           fitnessbest_group = fitness(j);

       end

   end

    %没代最优值记录到yy数组

   yy(i) = fitnessbest_group;

end

%%画出每代最优个体适应度值

plot(yy);

title('最优个体适应度值','fontsize',12);

xlabel('进化次数');

ylabel('适应度值');

 

 

%需要在同一个工作区存以下函数文件: fun_shiyingdu.m

function y = fun_shiyingdu(x) %计算适应度值的函数

% x input 粒子的初始位置

% y output

y =-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+exp(1);

 

 

更多推荐

MATLAB代码

本文发布于:2024-03-12 13:27:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1731619.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:代码   MATLAB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!