多种群粒子群 MATLAB,多种群粒子群算法怎么编码啊,楼主小白求大神指导
本帖最后由 scylle718 于 2017-4-25 00:43 编辑
function PSOstandard_benchmarks_Test
clear all;
close all;
c1=1.49445;c2=1.49445;%
global dimension Size
dimension=40;Size=40;
%种群维数 dimension、规模 Size
Tmax=1000;%%最大迭代次数 Tmax
%%选择不同测试函数的速度和位置限制范围%%
F_n=1;
switch F_n
case 1 %% f1_Sphere %%
Vmax(1:dimension)= 30; Vmin(1:dimension)=-30;
Xmax(1:dimension)= 30; Xmin(1:dimension)=-30;
end
%%三维显示粒子群运动变化%%
global Swarmscope;
Swarmscope = plot(0,0, '.');
axis([Xmin(1) Xmax(1) Xmin(2) Xmax(2) Xmin(3) Xmax(3)]); %初始轴的范围的设置
% axis square;
grid on;
set(Swarmscope,'EraseMode','xor','MarkerSize',12); %设置用来显示粒子.
%%initial Position Velocity%%
Position=zeros(dimension,Size);%以后位置Position统一为此种记法:行 dimension;列 Size;
Velocity=zeros(dimension,Size);%每个粒子的位置、速度对应于一列。
[Position,Velocity]=initial_Position_Velocity(dimension,Size,Xmax,Xmin,Vmax,Vmin);
%%个体最优 P_p 和全局最优 globe 初始赋值%%
P_p=Position;globe=zeros(dimension,1);
%%评价每个粒子适应值,寻找出 globle%%
for j=1:Size
Pos=Position(:,j);
fz(j)=Fitness_Function(Pos,F_n);
end
[P_g,I]=min(fz);%P_g 1*1 ?
globe=Position(:,I);
%%打散参数设置%%
N_dismiss=51;%太小,不利于初始寻优
N_dismissed=0;%记录被打散的次数
deltaP_gg=0.001%种群过分收敛衡量标准值(适应度变化率)
% reset = 1; %设置reset = 1时指示粒子群过分收敛时将被打散,如果reset=0则不打散
reset_dismiss = 0;
%%迭代开始%%
for itrtn=1:Tmax
time(itrtn)=itrtn;
%%过于集中时打散%%
if reset_dismiss==1
bit=1;
if itrtn>N_dismiss
bit=bit&((P_gg(itrtn-1)-P_gg(itrtn-N_dismiss))/P_gg(itrtn-1)< deltaP_gg);
if bit==1
[Position,Velocity]=initial_Position_Velocity(dimension,Size,Xmax,Xmin,Vmax,Vmin);%重新初始化位置和速度
N_dismissed=N_dismissed+1;
N_dismissed
warning('粒子过分集中!重新初始化……'); % 给出信息
itrtn
end
end
end
Weight=0.4+0.5*(Tmax-itrtn)/Tmax;
% Weight=1;
r1=rand(1);r2=rand(1);
for i=1:Size
Velocity(:,i)=Weight*Velocity(:,i)+c1*r1*(P_p(:,i)-Position(:,i))+c2*r2*(globe-Position(:,i));%速度更新
end
%%速度限制%%
for i=1:Size
%%引入速度边界变异%%
% Vout_max=max(Velocity(:,i));
% Vout_min=min(Velocity(:,i));
% if Vout_max
jj=1;
K=ones(dimension,1);
for row=1:dimension
if Velocity(row,i)>Vmax(row)
K(jj)=Vmax(row)/Velocity(row,i);
jj=jj+1;
elseif Velocity(row,i)
K(jj)=Vmin(row)/Velocity(row,i);
jj=jj+1;
else
end
end
Kmin=min(K);
for row=1:dimension
if Velocity(row,i)>Vmax(row)
Velocity(row,i)=Velocity(row,i)*Kmin;
elseif Velocity(row,i)
Velocity(row,i)=Velocity(row,i)*Kmin;
else
end
end
end
% K
Position=Position+Velocity;%位置更新
%%位置限制%%
for i=1:Size
for row=1:dimension
if Position(row,i)>Xmax(row)
Position(row,i)=Xmax(row);
elseif Position(row,i)
Position(row,i)=Xmin(row);
else
end
end
end
%%重新评价每个粒子适应值,更新个体最优 P_p 和全局最优 globe%%
for j=1:Size
xx=Position(:,j)';
fz1(j)=Fitness_Function(xx,F_n);
if fz1(j)
P_p(:,j)=Position(:,j);
fz(j)=fz1(j);
end
% [P_g1,I]=min(fz1);%%%有改动
if fz1(j)
P_g=fz1(j);
% globe=Position(:,I);
end
end
[P_g1 I]=min(fz);
P_gg(itrtn)=P_g1;
globe=P_p(:,I);
% globe=Position(:,I);
% itrtn
% globe
%% draw 粒子群运动变化图%%
XX=Position(1,:);YY=Position(2,:);ZZ=Position(3,:);
if dimension>= 3
set(Swarmscope,'XData',XX,'YData', YY, 'ZData', ZZ);
elseif dimension== 2
set(Swarmscope,'XData',XX,'YData',YY );%设置
end
xlabel('粒子第一维');
ylabel('粒子第二维');
zlabel('粒子第三维');
drawnow;
end
%%画‘评价值’变化曲线%%
figure(1);
BestFitness_plot(time,P_gg);
%%画系统阶跃响应变化曲线%%
% figure(2);
% Step_2PID(globe)
function BestFitness_plot(time,P_gg)
plot(time,P_gg);
xlabel('迭代的次数');ylabel('适应度值P_g');
function [Position,Velocity]=initial_Position_Velocity(dimension,Size,Xmax,Xmin,Vmax,Vmin)
for i=1:dimension
Position(i,:)=Xmin(i)+(Xmax(i)-Xmin(i))*rand(1,Size);
Velocity(i,:)=Vmin(i)+(Vmax(i)-Vmin(i))*rand(1,Size);
end
function Fitness=Fitness_Function(X,F_n)
global dimension Size
% F_n 标准测试函数选择,其中:
% n=1: f1_Sphere 测试
% n=2: f2_Quadric 测试
% n=3: f3_Ackley 测试
% n=4: f4_Griewank 测试
% n=5: f5_Rastrigin 测试
% n=6: f6_Rosenbrock 测试
% n=7: f7_Schaffer's f6 测试 注:此函数只接受两个变量,故dimension=2。
switch F_n
case 1
%% f1_Sphere %%
Func_Rastrigin=X(:)'*X(:);
Fitness=Func_Rastrigin;
end
多种群粒子群 MATLAB,多种群粒子群算法怎么编码啊,楼主小白求大神指导相关推荐
- 回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出
回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出 目录 回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出 预测效 ...
- 回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单输出回归预测
回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现PSO-GCNN粒子群算法优化分组卷积神经网络的数据多输入单 ...
- 混合储能系统容量优化MATLAB程序基于粒子群算法
混合储能系统容量优化MATLAB程序基于粒子群算法 (1)该程序为基于粒子群算法的混合储能系统容量优化程序,中文核心期刊论文源程序,配有该论文,再给一篇类似的参考论文. (2)该程序中混合储能系统为蓄 ...
- Matlab基于动态粒子群算法的动态环境寻优算法 基本粒子群算法首先是在解空间中随机初始化所有粒子
Matlab基于动态粒子群算法的动态环境寻优算法 基本粒子群算法首先是在解空间中随机初始化所有粒子,每个粒子位置即代表问题的一个潜在解,在搜索过程中,采用适应度函数对每个粒子位置进行评价,适应度值好的 ...
- 含抽水蓄能电站系统的调峰经济调度研究matlab程序(粒子群算法)
含抽水蓄能电站系统的调峰经济调度研究matlab程序(粒子群算法) 参考文献:抽水蓄能电站的最佳调度方案研究 调峰电源的优化调度是促进电力系统安全稳定运行,实现可靠供电的要措施.因为目前我国的调峰电源 ...
- 电力系统无功优化MATLAB程序基于粒子群算法IEEE30配电网
电力系统无功优化MATLAB程序基于粒子群算法IEEE30配电网 (1)该程序为基于粒子群算法的配电网无功优化程序,可达到有效降低网损的目的. (2)程序以IEEE-30节点为算例.以网损最小为目标函 ...
- 含分布式电源的配电网日前两阶段调度模型matlab程序(粒子群算法)
含分布式电源的配电网日前两阶段调度模型matlab程序(粒子群算法) 参考文献:含分布式电源的配电网日前两阶段优化调度模型 摘要:在电力市场环境下,供电公司通过对接入配电网的分布式电源(distrib ...
- 【MATLAB】混合粒子群算法原理、代码及详解
目录 1.算法 1.1.原理 1.2.性能比较 1.3.步骤 2.代码 2.1.源码及注释 2.2.执行与效果 1.算法 1.1.原理 \qquad建议没接触过粒子群算法的朋友先看较为基础的全局粒子群 ...
- MATLAB优化工具箱 粒子群算法 particleswarm优化包
记录几篇对我应用MATLAB粒子群particleswarm优化包很有帮助的文档. [1] <Tune Particle Swarm Optimization Process>matlab ...
- 混合储能系统容量优化matlab,采用粒子群算法编制风光互补发电储能系统的容量优化程序,程序采用超级电容和蓄电池的方案
混合储能系统容量优化matlab 采用粒子群算法编制风光互补发电储能系统的容量优化程序,程序采用超级电容和蓄电池的方案,得到最佳蓄电池和超级电容个数.
最新文章
- MMA冠军Rory MacDonald:比特币现金(BCH)是真正的比特币
- jQuery的end()方法使用详解
- C中常用字符串处理函数
- Java通过JNI调用C++的DLL库
- 深度学习2.0-13.神经网络与全连接层之张量实战
- Java练习 SDUT-1294_选票统计
- java编写猜数字游戏_java编写猜数字游戏
- 思科CDP/LLDP协议
- Spiceworks数据统计:Win10发布半年使用情况
- 磁带机技术的应用解析
- 生成验证码 大写、小写字母,数字 java
- 麻省理工学院:科技宠儿的摇篮
- 前沿研究丨李德毅院士:基于驾驶脑的智能驾驶车辆硬件平台架构
- influx配置文件详解
- 软件测试自动化验证码,自动化测试如何解决验证码的问题
- BTC100白新学堂——货币流通的双重巧合
- 小白学习图像处理3——图像旋转原理
- 循证护理教育中的移动辅助同伴评估方法
- JS 内存泄漏的几种情况以及解决方案
- 怎么将txt转为html
热门文章
- exchange 2010部署之一
- STM32F103无源蜂鸣器驱动程序
- 在vs2013下利用vb.net简单使用WebService实例
- 74cms php在那个文件夹里面,74cms骑士人才网站系统 v5.0/v5.1后台目录地址修改教程...
- 关于ExtJS错误“例外被抛出且未被接住”
- Hbase下载、安装流程
- win10 专业版安装系统
- PyQt4安装使用以及pycharm环境配置
- python 安装PyQt4
- Rainmeter个人使用的插件