基于粒子群优化算法的的微电网多目标优化调度----算法改进

前言:

        当阅读过前一篇我的博客之后,并且认真去读懂了那篇文章末尾的代码,那么,后续的算法改进对于你来说应当是很容易的了。前文中提及过,粒子群在进行迭代时,每迭代一次,都会根据自己个体最优值,全局最优值,自身惯性三个因子,来决定粒子下一次的飞行方向。传统的粒子群算法为什么是传统,就是他这三个因子,都是保持的一个常数值,缺乏适应性,这也就是为什么需要进行改进粒子群算法。

本文的目标:

1.解释如何对传统粒子群优化进行简单改进,与第一篇文章结果进行对比;

2.通过改变粒子群中粒子的数量,存档库的大小,迭代次数,观察算法效果。

基础知识:

1.传统型粒子群算法更新粒子的方式-------请看下面这篇博文,讲解十分精炼(基于Python实现)粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解-优快云博客

先看上边这个公式1(红圈),表示第n个粒子,在k+1次迭代时候的位置=第k次迭代时的位置+即将移动的速度(第k+1次的移动速度)。需要注意,粒子的位置使用一组数值来表示的,速度是对粒子位置进行增减,也是和前者尺寸长度相同的一组数值。所以,粒子的位置实际上就是代表问题的一组解。下面这个公式2(红圈)是在计算k+1次时候的速度,这个速度由粒子自身惯性(鸟飞行时的惯性)、个体最优值(这只鸟自己飞行时候遇见的最佳历史值)、群体最优值(整个鸟群飞行时候遇见的最佳历史值)共同决定。w'是粒子本身惯性权重因子,c1'和c2'是学习因子,r1'和r2'是分布在[0,1]区间内的随机数。以上w',c1',c2'都是保持一个恒定值,这样子求解容易出现局部最优解的情况,无法探索更大的空间。---------------传统型PSO的特点,恒定值导致的定步长,使得搜索成本增加,且不一定能够搜索到最优(这一点可以去哔哩哔哩上看动画演示)

2.粒子群群里粒子的数量越多,也就是每次参与寻找食物的鸟的数量越多,在同样的迭代次数下,寻找到全局最优的可能性越大,而且更加趋于收敛。在粒子群群里粒子数量一定的情况下,延长迭代次数,也可以达到寻找全局最优的效果,但是收敛的时间可能会比较漫长。毫无疑问,更大的粒子数量和迭代次数,都会导致搜索时间成本的增加,所以需要慎重选择二者间的平衡。

3.改进后的粒子群算法更新粒子方式---------------------将定步长修改为变步长

大致意思就是:在开始迭代的时候,粒子的迭代策略更加注重自身的最优解,以达到增大全局探索能力的目的。迭代次数过半的时候,开始逐渐将重点放在全局最优解,寻求一个稳定的收敛。

改进后的粒子群算法更新方式如下:

只对原来的恒定值做了更新,让其随着迭代次数的逐渐增加而C1数值逐渐减小,C2逐渐增大。

IT 是当前迭代次数; MI 是总迭代次数; w s 和 w e 是惯性权重因子的初始值和终止值。在迭代
初期,较大的 w 使算法不宜陷入局部极小值,便 于全局搜索[14] 。在迭代后期,较小的 w 有利于局 部搜索,有利于算法的收敛;c 1s c 1e c 1 的初 始值和停止值,c 1s 大于 c 1e c 2s c 2e 是的初始值和停止值,c 2s 小于 c 2e 。在迭代初期,大 c 1 和小 c 2 使粒子具有较好的自学习能力和较差的社会学 习能力,有利于全局搜索。在迭代后期,小 c 1 和 大 c 2 使粒子具有较强的社会学习能力和较差的自 学习能力,有利于算法的收敛。

代码实现:

定义了两个匿名函数w和pm用于对原来恒定常数值的动态更新。
这里使用了一个Matlab的语法,wc=w(it),和pc=pm(it),调用了两个匿名函数,使用w(it)就能调用66行定义的函数公式。这样在每一次群体迭代过程中,都会先计算一下本次迭代的最新权重系数值,然后再针对每个粒子去更新位置。这样更加保证搜索到全局最优(可以多次实验记录一下)
其余部分和传统型粒子群算法完全一样。

调整迭代次数和粒子个数

设置迭代次数为200,粒子个数为500,存档库的大小为500,点击运行代码即可。最直观的感受是,单次运算速度相比之前(迭代次数100,粒子个数100,存档库100)慢了很多,在视图上可以看见更多的粒子在动态搜索。下图为最新粒子个数

下面这个是迭代次数设置为100,粒子个数为100时候的对比

能够很明显看到,粒子数为500时候对应的界面更加密集。

改进粒子群算法代码如下:

链接:https://pan.baidu.com/s/1LmaxCCHlg-HhtaYZThoi9Q 
提取码:3333

搭配复现的论文PDF:

链接:https://pan.baidu.com/s/1tbuboB1sI6wIzMlkZdK7iw 
提取码:2222

暂时先告一段落啦,休息一会儿。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值