‘壹’ matlab 粒子群优化问题
我这里有一个粒子群的完整范例:<群鸟觅食的优化问题>
function main()
clc;clear all;close all;
tic; %程序运行计时
E0=0.001; %允许误差
MaxNum=100; %粒子最大迭代次数
narvs=1; %目标函数的自变量个数
particlesize=30; %粒子群规模
c1=2; %每个粒子的个体学习因子,也称为加速常数
c2=2; %每个粒子的社会学习因子,也称为加速常数
w=0.6; %惯性因子
vmax=0.8; %粒子的最大飞翔速度
x=-5+10*rand(particlesize,narvs); %粒子所在的位置
v=2*rand(particlesize,narvs); %粒子的飞翔速度
%用inline定义适应度函数以便将子函数文件与主程序文件放在一起,
%目标函数是:y=1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2))
%inline命令定义适应度函数如下:
fitness=inline('1/(1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2)))','x');
%inline定义的适应度函数会使程序运行速度大大降低
for i=1:particlesize
for j=1:narvs
f(i)=fitness(x(i,j));
end
end
personalbest_x=x;
personalbest_faval=f;
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
k=1;
while k<=MaxNum
for i=1:particlesize
for j=1:narvs
f(i)=fitness(x(i,j));
end
if f(i)<personalbest_faval(i) %判断当前位置是否是历史上最佳位置
personalbest_faval(i)=f(i);
personalbest_x(i,:)=x(i,:);
end
end
[globalbest_faval i]=min(personalbest_faval);
globalbest_x=personalbest_x(i,:);
for i=1:particlesize %更新粒子群里每个个体的最新位置
v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))...
+c2*rand*(globalbest_x-x(i,:));
for j=1:narvs %判断粒子的飞翔速度是否超过了最大飞翔速度
if v(i,j)>vmax;
v(i,j)=vmax;
elseif v(i,j)<-vmax;
v(i,j)=-vmax;
end
end
x(i,:)=x(i,:)+v(i,:);
end
if abs(globalbest_faval)<E0,break,end
k=k+1;
end
Value1=1/globalbest_faval-1; Value1=num2str(Value1);
% strcat指令可以实现字符的组合输出
disp(strcat('the maximum value','=',Value1));
%输出最大值所在的横坐标位置
Value2=globalbest_x; Value2=num2str(Value2);
disp(strcat('the corresponding coordinate','=',Value2));
x=-5:0.01:5;
y=2.1*(1-x+2*x.^2).*exp(-x.^2/2);
plot(x,y,'m-','linewidth',3);
hold on;
plot(globalbest_x,1/globalbest_faval-1,'kp','linewidth',4);
legend('目标函数','搜索到的最大值');xlabel('x');ylabel('y');grid on;toc;
请采纳答案,支持我一下。
‘贰’ 粒子群算法 matlab 工具箱 在哪调用 还是没有现成的需要自己下载
http://www.mathworks.com/matlabcentral/fileexchange/7506
这个基本上快算是官方的了。粒子群算法工具。注册以后就可以下载了。
‘叁’ 粒子群(PSO)算法的matlab程序
%不知道你具体的问题是什么,下面是一个最基本的pso算法解决函数极值问题,如果是一些大型的问题,需要对速度、惯性常数、和自适应变异做进一步优化,希望对你有帮助
function y = fun(x)
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+2.71289;
%下面是主程序
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=200; % 进化次数
sizepop=20; %种群规模
Vmax=1;%速度限制
Vmin=-1;
popmax=5;%种群限制
popmin=-5;
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=5*rands(1,2); %初始种群
V(i,:)=rands(1,2); %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:)); %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
for j=1:sizepop
%速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;
%种群更新
pop(j,:)=pop(j,:)+0.5*V(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;
%自适应变异(避免粒子群算法陷入局部最优)
if rand>0.8
k=ceil(2*rand);%ceil朝正无穷大方向取整
pop(j,k)=rand;
end
%适应度值
fitness(j)=fun(pop(j,:));
%个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
%群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
yy(i)=fitnesszbest;
end
%% 结果分析
plot(yy)
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
以上回答你满意么?
‘肆’ 求带约束条件的粒子群算法的MATLAB编程
恩
这个比较简单,可以很容易的做出来
Matlab中提供了两种方法,数值和解析
1.数值解法使用filter函数
对于递推公式
a(1)*y(n)+a(2)*y(n-1)
+
...
+
a(na+1)*y(n-na)
=
b(1)*x(n)
+
b(2)*x(n-1)
+
...
+
b(nb+1)*x(n-nb)
我们可以变成如下
filter(b,a,x,zi)其中a和b就是上面的系数,x是需要计算的n,zi是初值
由于使用filter函数需要信号基础
我们这里不详细说明
2.解析解法就是Z变换
%首先我们要改变递推公式如下,否则没法的到正确结果
%y(n+1)=2y(n),y(0)=-2
L=ztrans(sym('y(n+1)'));%等式左边的Z变换
R=ztrans(sym('2*y(n)'));%等式右边的Z变换
S=L-R
%将初值y(0)带入,我们可以根据y(-1)推出y(0)=-2
%令Y=ztrans(y(n),n,z),y0=y(0),求解出S中的y(n)的Z变换结果
y0=-2;
s=subs(S,{'ztrans(y(n),n,z)','y(0)'},{'Y',y0});
%求解出y(n)的Z变换结果
Y=solve(s,'Y')
%对Y进行反Z变化
iztrans(Y)
S
=
z*ztrans(y(n),n,z)-y(0)*z-2*ztrans(y(n),n,z)
Y
=
-2*z/(z-2)
ans
=
-2*2^n
‘伍’ 怎么用matlab中的粒子群算法求解多目标优化问题
不知道你所说的多目标是指什么,据我的理解,既然有个目标函数,那么多目标可以在目标函数那里表示,我最近也在做这个粒子群算法, 下面是我的vc++6.0代码,改造了一下基本粒子群,求路径的.. #include #include #include using namespace std; d
‘陆’ MATLAB中粒子群算法定义
你要自己写这个fun_PSOtrain_QNN的算法,神经网络工具箱里没有这个函数
‘柒’ 求粒子群算法MATLAB完整代码
%% 清空环境
clear
clc
tic
%% 参数初始化
% 粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen = 200; % 进化次数
sizepop = 20; % 种群规模
Vmax = 1;
Vmin = -1;
popmax = 5;
popmin = -5;
%% 产生初始粒子和速度
for i = 1:sizepop
% 随机产生一个种群
pop(i,:) = 5 * rands(1,2); % 初始种群
V(i,:) = rands(1,2); % 初始化速度
% 计算适应度
fitness(i) = fun(pop(i,:)); % 染色体的适应度
end
% 找最好的染色体
[bestfitness bestindex] = min(fitness);
zbest = pop(bestindex,:); % 全局最佳
gbest = pop; % 个体最佳
fitnessgbest = fitness; % 个体最佳适应度值
fitnesszbest = bestfitness; % 全局最佳适应度值
%% 迭代寻优
for i = 1:maxgen
for j = 1:sizepop
% 速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax)) = Vmax;
V(j,find(V(j,:)<Vmin)) = Vmin;
%种群更新
pop(j,:) = pop(j,:) + 0.5*V(j,:);
pop(j,find(pop(j,:)>popmax)) = popmax;
pop(j,find(pop(j,:)<popmin)) = popmin;
% 自适应变异
if rand > 0.8
k = ceil(2*rand);
pop(j,k) = rand;
end
% 适应度值
fitness(j) = fun(pop(j,:));
end
% 个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
% 群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
yy(i) = fitnesszbest;
end
toc
%% 结果分析
plot(yy);
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');
ylabel('适应度');
fun函数如下
function y = fun(x)
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 + 2.71289;
‘捌’ MATLAB建模方法有哪些
建模覆盖的内容很广,可以分为两大块:优化和统计,因此建模方法也可以由这两大块划分。
一.优化:
智能算法: 遗传算法,粒子群算法,模拟退火算法,蚁群算法...
基础优化算法: 目标规划,整数规划...
排队论
二.统计:
分类/聚类算法: k-means...
预测: 时间序列算法,灰色预测算法,指数平滑算法,
评价: 模糊综合评价,信息熵评价,粗糙集,数据包络分析,层次分析,
智能算法:神经网络,svm...
回归/拟合:多元线性拟合,最小二乘法
数据处理:小波变换