matlab实现粒子群算法优化LQR法得不到最优解
clearall;closeall;n=2;%变量的个数m=20;%粒子的数量c1=2;c2=2;w=1;vmax=[70,30];%不同变量的更新最大速度xmax=[2...
clear all;
close all;
n=2; %变量的个数
m=20; %粒子的数量
c1=2;
c2=2;
w=1;
vmax=[70,30]; %不同变量的更新最大速度
xmax=[2000,500;1,1]; %不同变量的上限和下限值
%随机m个粒子(不同的变量可以采取不同的区间)
x=[(xmax(1,1)-xmax(2,1))*rand(m,1)+xmax(2,1),(xmax(1,2)-xmax(2,2))*rand(m,1)+xmax(2,2)];
v=[vmax(1)*rand(m,1),vmax(2)*rand(m,1)];
%计算适应值
for i=1:m
f(i)=daolibaimin(x(i,:)); %用函数计算的方式得到当前粒子的适应度值
%p=x(i,:);sim('POSmin');f(i)=s(1) %用simulink模型运算方式得到当前粒子的适应度值
end
pbx=x;
pbf=f;
[gbf i]=min(pbf);
gbx=pbx(i,:);
%开始循环迭代
k=0;
while k<100
for i=1:m
f(i)=daolibaimin(x(i,:)); %用函数计算的方式得到当前粒子的适应度值
%p=x(i,:);sim('POSmin');f(i)=s(1) %用simulink模型运算方式得到当前粒子的适应度值
end
for i=1:m
if f(i)<pbf(i)
pbf(i)=f(i); %取为当前粒子的最优值
pbx(i,:)=x(i,:);
end
end
[gbf i]=min(pbf); %求全局最优值
gbx=pbx(i,:);
for i=1:m
v(i,:)=w*v(i,:)+c1*rand*(pbx(i,:)-x(i,:))+c2*rand*(gbx-x(i,:)); %更新速度
for j=1:n
if v(i,j)>vmax(j)
v(i,j)=vmax(j);
elseif v(i,j)<-vmax(j)
v(i,j)=-vmax(j);
end
end
x(i,:)=x(i,:)+v(i,:);
for j=1:n
if x(i,j)>xmax(1,j)
x(i,j)=xmax(1,j);
elseif x(i,j)<xmax(2,j)
x(i,j)=xmax(2,j);
end
end
end
k=k+1;
end
gbx %全局最优解
gbf %最优值
k %迭代次数
程序代码参考自刘浩梅的<环形倒立摆的稳定控制研究与实现> 展开
close all;
n=2; %变量的个数
m=20; %粒子的数量
c1=2;
c2=2;
w=1;
vmax=[70,30]; %不同变量的更新最大速度
xmax=[2000,500;1,1]; %不同变量的上限和下限值
%随机m个粒子(不同的变量可以采取不同的区间)
x=[(xmax(1,1)-xmax(2,1))*rand(m,1)+xmax(2,1),(xmax(1,2)-xmax(2,2))*rand(m,1)+xmax(2,2)];
v=[vmax(1)*rand(m,1),vmax(2)*rand(m,1)];
%计算适应值
for i=1:m
f(i)=daolibaimin(x(i,:)); %用函数计算的方式得到当前粒子的适应度值
%p=x(i,:);sim('POSmin');f(i)=s(1) %用simulink模型运算方式得到当前粒子的适应度值
end
pbx=x;
pbf=f;
[gbf i]=min(pbf);
gbx=pbx(i,:);
%开始循环迭代
k=0;
while k<100
for i=1:m
f(i)=daolibaimin(x(i,:)); %用函数计算的方式得到当前粒子的适应度值
%p=x(i,:);sim('POSmin');f(i)=s(1) %用simulink模型运算方式得到当前粒子的适应度值
end
for i=1:m
if f(i)<pbf(i)
pbf(i)=f(i); %取为当前粒子的最优值
pbx(i,:)=x(i,:);
end
end
[gbf i]=min(pbf); %求全局最优值
gbx=pbx(i,:);
for i=1:m
v(i,:)=w*v(i,:)+c1*rand*(pbx(i,:)-x(i,:))+c2*rand*(gbx-x(i,:)); %更新速度
for j=1:n
if v(i,j)>vmax(j)
v(i,j)=vmax(j);
elseif v(i,j)<-vmax(j)
v(i,j)=-vmax(j);
end
end
x(i,:)=x(i,:)+v(i,:);
for j=1:n
if x(i,j)>xmax(1,j)
x(i,j)=xmax(1,j);
elseif x(i,j)<xmax(2,j)
x(i,j)=xmax(2,j);
end
end
end
k=k+1;
end
gbx %全局最优解
gbf %最优值
k %迭代次数
程序代码参考自刘浩梅的<环形倒立摆的稳定控制研究与实现> 展开
1个回答
展开全部
PSO确实会存在得不到最优解的情况,因为严格意义上它不是全局最优的算法,而且在比较复杂的问题上,得不到最优解的情况很容易发现。
建议你增大种群大小,增加迭代次数。
建议你增大种群大小,增加迭代次数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询