位置: 编程技术 - 正文
推荐整理分享Python编程实现粒子群算法(PSO)详解(python怎么编程),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:python 编写,python怎样编写程序,python编程怎么做,python怎么编程,python怎么编程,python 编写,python编程如何,python 编写,内容如对您有帮助,希望把文章链接给更多的朋友!
1 原理
粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的。假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位置)。最好的策略就是结合自己的经验在距离鸟群中距离食物最近的区域搜索。
利用粒子群算法解决实际问题本质上就是利用粒子群算法求解函数的最值。因此需要事先把实际问题抽象为一个数学函数,称之为适应度函数。在粒子群算法中,每只鸟都可以看成是问题的一个解,这里我们通常把鸟称之为粒子,每个粒子都拥有:
位置,可以理解函数的自变量的值;经验,也即是自身经历过的距离食物最近的位置;速度,可以理解为自变量的变化值;适应度,距离食物的位置,也就是函数值。
粒子群算法的过程
PSO流程图
初始化。包括根据给定的粒子个数,初始化粒子,包括初始化一下的值:
位置:解空间内的随机值;经验:与初始位置相等;速度:0;适应度:根据位置,带入适应度函数,得到适应度值。更新。包括两部分:粒子自身信息:包括根据下面的公式更新粒子的速度、位置,根据适应度函数更新适应度,然后和用更新后的适应度和自身经验进行比较,如果新的适应度由于经验的适应度,就利用当前位置更新经验;
速度更新公式
位置更新公式
上面公式中:i表示粒子编号;t表示时刻,反映在迭代次数上;w是惯性权重,一般设置在0.4左右;c表示学习因子,一般都取值为2;Xpbest表示的是粒子i的经验,也即是粒子i所到过最佳位置;Xgbest代表的是全局最优粒子的位置;r是0到1之间的随机值。
种群信息:把当前适应度和全局最优位置的适应度进行比较,如果当前适应度优于全局最优的适应度,那么久用当前粒子替换群居最优。
判断结束条件。结束条件包括最大迭代次数和适应度的阈值。
2 代码
实验环境为python 2.7.。
这个代码最初是用于求解一维最大熵分割图像问题的,因此是求解函数最大值,如果需要求解最小值,把代码中的大于号全部改成小于号就可以了。
首先需要解决的是粒子的存储,我第一反应是利用结构体来存储,但是python并没有相应的数据结构,所以我选择用一个类来表示粒子结构,该类的一个对象就是一个粒子,上代码:
接下来就是粒子群算法的主干部分,用一个类来封装,代码:
有了以上代码,只需要自定义适应度函数fitFunc就可以进行求解,但是需要注意的是只适用于求解 一维问题 。
总结
标签: python怎么编程
本文链接地址:https://www.jiuchutong.com/biancheng/372231.html 转载请保留说明!友情链接: 武汉网站建设