rand和unifrnd函数初始化速度对PSO-PID寻优的影响

rand和unifrnd函数的异同

rand函数和unifrnd函数的相同和不同点在CSDN这篇文章已经解释得很清楚👉:点击这里,其实本质上是一样的,都是用rand函数随机在0~1范围内取均匀分布的值,unifrnd是对rand函数的封装。其中博主举的例子很形象:

在区间[5,10]上生成400个均匀分布的随机数 ,两个生成的是一样的数:

 h1=unifrnd(5,10,1,400);
 h2=5+5*rand(1,400); % same pdf

还有不懂的可以查一查matlab官方帮助文档以及stackoverflow的这篇文章👉:点击这里 

我是不懂它们两个函数具体是怎么实现的,所以我只能用笨办法,分别运行两个仿真来看得到的实验结果,有没有什么异同。


 仿真代码

具体代码可以看我这个文章👉:线性递减权重的PSO-PID算法

具体运行代码的不同之处就在于:

1)rand函数随机初始化粒子速度

%% 粒子群初始化
Range = ones(SwarmSize,1)*(Ub-Lb);                              % 初始化范围
Swarm = rand(SwarmSize,Dim).*Range + ones(SwarmSize,1)*Lb       % 初始化粒子群
VStep = rand(SwarmSize,Dim)*(Vmax-Vmin) + Vmin                  % 初始化速度

2)unifrnd函数随机初始化粒子速度

%% 粒子群初始化
Swarm = zeros(SwarmSize,Dim);                                   %预分配内存
VStep = zeros(SwarmSize,Dim);
for i = 1:SwarmSize
    for j = 1:Dim
        Swarm(i, j) = unifrnd(Lb(j), Ub(j));                    % 使用均匀分布随机生成位置
        VStep(i, j) = unifrnd(Vmin, Vmax);                      % 使用均匀分布随机生成速度
    end
end 

仿真结果

两者共同的初始条件,只要注意其粒子个数Swarm、最大迭代次数MaxIter、速度边界Vmax&Vmin以及位置边界Ub&Lb即可。 

ws=0.9;       % 最大权重
we=0.4;       % 惯性因子 线性惯性权重 最小权重
c1 = 2;       % 加速常数/学习因子1
c2 = 2;       % 加速常数/学习因子2
Dim = 3;                  % 维数
SwarmSize = 100;          % 粒子群规模
ObjFun = @PSO_PIDdiscrete1;      % 待优化函数句柄
MaxIter = 100;            % 最大迭代次数  
MinFit = 0.00001;         % 最小适应值 
Vmax = 1;       %速度更新限制范围
Vmin = -1;
Ub = [10 50 10]; %位置更新限制范围
Lb = [0 0 0];

 rand函数的结果:

这些图像还是能够明显看出它的迭代效果的,前面的PID值都有不同的取值(Kp除外,它都是0),总的来说比我之前仿真的效果要好太多了,其迭代出来最优的PID值为:[ 0  ;  10.2371832745715  ;  2.08573422231178]

将这个结果带回到simulink模型可以得到最佳适应度值:0.0106427512662789

其反馈速度于输入速度之间的曲线对比图如下:

效果还是不错的!


 unifrnd函数结果如下:

 其迭代出来最优的PID值为:[0  ;  10.2371922156877  ;  2.08573268286997],与之前迭代出来的值只是在小数点后5、6位有差距,其实这是很小的变化。

 将这个结果带回到simulink模型可以得到最佳适应度值:0.0106427512135790,适应度值也是在小数点后9位才开始有变化。

其反馈速度于输入速度之间的曲线对比图如下:

和之前的结果几乎看不出什么变化,效果也是还可以的。

以及之前仿真时间大约是3.39h,这一次时间是3.68h,可能稍微有点差别但是也不大。


结论 

无论是用rand函数还是unifrnd函数初始化的速度,对最终迭代出来的较优PID值几乎没有影响,两种速度初始化都是可以的。 

 感谢大家能够看到这里!

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hipipi39

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值