昆仑-昆仑娱乐-注册登录站

昆仑-昆仑娱乐-注册登录站 咨询热线:

昆仑新闻 >>当前位置: 首页 > 昆仑新闻

粒子群优化算法(2)离散粒子群算法

时间:2024-09-09 13:11:35

? ? ? 在上一篇博客 粒子群优化算法(1)中介绍了基本的粒子群算法,基本粒子群算法是基于连续空间(区间)进行搜索,然而在一些实际的工程应用中,我们的待求解的变量可能并不是历需的,而实一种离散型的变量。这就需要对基本的粒子群算法做出一些相应的改进。

? ? ? 在离散粒子群算法中,将离散问题空间映射到连续粒子运动空间,并做适当的修改。任然保留经典粒子群算法的速度-位置更新策略。粒子在状态空间的取值只限于0,1两个值,而速度的每一个位代表的是粒子位置所对应的位取值为0/1的可能性。因此在离散粒子群算法中,粒子速度的更新公式依然保持不变,但是个体最优位置和全局最优位置每一位的取值只能为0/1。

? ? ? 离散粒子群算法速度和位置的更新方式如下所示:


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v_{i}(t+1)=v_{i}(t)+c_{1}r_{r}(t)[p_{i,best}(t)-X_{i}(t)]+c_{2}r_{2}(t)[p_{g}(t)-X_{i}(t)]

? ? ? 粒子速度的更新方式不变,但是其位置的更新方式如下所示:

? ? ? ?s(v_{i,j})=\frac{1}{1+e^{-v_{i,j}}}? ? ? ? ? ? ? ? ? ? ? ? (利用sigmoid函数将例子的速度映射到0-1之间)

? ? ? 则粒子的速度可以表示为:

? ? x_{i,j}=\left\{\begin{matrix} 1, rand()<s(v_{i,j})\\ 0, else \end{matrix}\right.

例如,对于经典的0-1背包问题:如果采用粒子群优化算法求解,只能是采用离散的粒子群算法:
问题描述:

有一个容量为V的背包,有N件物品,第i件物品的体积是c(i),价值是w(i).那么将哪些物品放入背包中,可以使得价值最大。假设具体的数据如下:

假设N=10, V = 300, 每件物品的体积为:[95, 75, 23, 73, 50, 22, 6, 57, 89, 98], 物品的价值为[89, 59,19, 43, 100, 72, 44, 16, 7, 64]

具体的计算流程如下:

1. 对速度进行初始化,对粒子的位置进行初始化,这里粒子的位置采用的二进制的表示方法。1表示选择该物体,0表示不选择该物体。其他的参数的初始化的过程与前面的方法一样。

源代码:

 

运行结果:

除此之外,还可以使用离散粒子群算法求解单变量的优化问题:
例如,求解函数的极值,函数的表达式如下所示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? f(x)=x+6sin(5x)+4cos(3x)

其中:x\in [0,9]

可以画出函数的图像,如下所示:

源代码:

 

求取最大值,将mode参数设置为‘max’即可:

求取最小值,将mode参数设置为‘min’即可:

?

返回
Copyright © 2012-2018 昆仑-昆仑娱乐-注册登录站  电话:0898-08980898
地址:海南省海口市  ICP备案编号:琼ICP备xxxxxxxx号
找我

全国统一服务热线7*24小时为您在线服务

平台注册入口