基于二进制粒子群算法的背包问题求解- 附代码

文章目录

  • 基于二进制粒子群算法的背包问题求解- 附代码
    • 1.二进制粒子群算法
    • 2.背包问题
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab

摘要:本文主要介绍二进制粒子群算法,并用其对背包问题进行求解。

1.二进制粒子群算法

在 PSO 算法中,每个优化问题的解都是粒子在搜索空间中的位置,粒子还有一个速度值决定它们飞翔的方向和距离,然后粒子群就追随当前的最优粒子在解空间中搜索。在搜索过程中,每个粒子到目前为止找到的自身的最优位置称为粒子的个体极值pbestpbestpbest​​ ,所有粒子中的最优位置记为全局极值gbestgbestgbest​​ 。设在一个MMM​​维的搜索空间,粒子iii​​的位置表示为Xi=(xi1,xi2,...,xiM)X_i=(x_{i1},x_{i2},...,x_{iM})Xi​=(xi1​,xi2​,...,xiM​)​​, 速 度 表 示 为Vi=(vi1,vi2,...,viM)V_i=(v_{i1},v_{i2},...,v_{iM})Vi​=(vi1​,vi2​,...,viM​)​​。粒子i 有一个被优化的函数决定的适应度值,将XiX_iXi​​​代入目标函数计算出适应度值,根据该值的大小衡量XiX_iXi​​​的优劣,在找到pbestpbestpbest​​和gbestgbestgbest​​之后,根据公式(1)和(2)来更新自身的速度和位置 。
vimk+1=wvkmk+c1r1k(pbest,imk−ximk)+c2r2k(gbest,imk−ximk)(1)v_{im}^{k+1}=wv_{km}^k+c_1r_1^k(p_{best,im}^k-x_{im}^k)+c_2r_2^k(g_{best,im}^k-x_{im}^k)\tag{1} vimk+1​=wvkmk​+c1​r1k​(pbest,imk​−ximk​)+c2​r2k​(gbest,imk​−ximk​)(1)

ximk+1=ximk+vimk+1(2)x_{im}^{k+1}=x_{im}^k+v_{im}^{k+1}\tag{2} ximk+1​=ximk​+vimk+1​(2)

式中:ximk+1x_{im}^{k+1}ximk+1​​和vimk+1v_{im}^{k+1}vimk+1​​分别为粒子iii​在第 k+1k+1k+1​次迭代时在第mmm​维空间的位置和速度; www​ 为惯性权重;c1,c2c_1,c_2c1​,c2​​为加速因子,都是正实数;r1,r2r_1,r_2r1​,r2​​ 为随机产生的一个介于[0,1]之间的随机数;
pbest,imkp_{best,im}^kpbest,imk​​为粒子 iii 至第 kkk 次迭代为止在第 mmm 维空间找到的个体最优粒子位置; gbest,imkg_{best,im}^kgbest,imk​​为至第 kkk 次迭代为止在第 mmm​ 维空间找到的群体最优粒子位置。

上述 PSO 算法主要是针对于连续函数优化问题的。二进制粒子群算法中,将粒子每一维位置
ximx_{im}xim​和粒子最优的个体值都限定为 0 或 1 ,而对粒子的速度不加限制。根据速度大小来选择在粒子对应位置上为 0 或者 1 ,速度大一些,则表示对应位置选 1 的概率大,速度较小则意味着对应位置可能会选 0 。其基本公式如式(3)所示:
{ximk+1=1,rimk+1<sigmoid(vimk+1)ximk+1=0,rimk+1≥sigmoid(vimk+1)(3)\begin{cases} x_{im}^{k+1}=1,r_{im}^{k+1}<sigmoid(v_{im}^{k+1})\\ x_{im}^{k+1}=0,r_{im}^{k+1}\geq sigmoid(v_{im}^{k+1}) \end{cases}\tag{3} {ximk+1​=1,rimk+1​<sigmoid(vimk+1​)ximk+1​=0,rimk+1​≥sigmoid(vimk+1​)​(3)
式(3)中的rimk+1r_{im}^{k+1}rimk+1​为随机产生的介于[0,1]之间的随机数为防止sigmoid(vimk+1)sigmoid(v_{im}^{k+1})sigmoid(vimk+1​)函数饱和,本文中将粒子的速度设定在[-4,4 ]范围内,对应的sigmoid(vimk+1)sigmoid(v_{im}^{k+1})sigmoid(vimk+1​)函数为:
sigmoid(vimk+1)={0.98,vimk+1>411+exp(−vimk+1),−4≤vimk+1≤4−0.98,vimk+1<−4(4)sigmoid(v_{im}^{k+1})=\begin{cases} 0.98,v_{im}^{k+1}>4\\ \frac{1}{1+exp(-v_{im}^{k+1})} ,-4\leq v_{im}^{k+1}\leq4\\ -0.98,v_{im}^{k+1}<-4 \end{cases}\tag{4} sigmoid(vimk+1​)=⎩⎪⎨⎪⎧​0.98,vimk+1​>41+exp(−vimk+1​)1​,−4≤vimk+1​≤4−0.98,vimk+1​<−4​(4)

2.背包问题

背包问题的一般提法为:已知 nnn 个物品s1,s2,...,sns_1,s_2,...,s_ns1​,s2​,...,sn​ 的重量及其价值分别为wj>0w_j >0wj​>0和 cj>0(j=1,2,…,n)c_j >0( j=1,2,…,n)cj​>0(j=1,2,…,n)背包的容量假设为 V>0V >0V>0​如何选择那些物品装入背包可使在背包的容量限制之内所装物品的总价值最大,引入变量 xjx_jxj​
xj={1,物品放入背包0,否则(5)x_j=\begin{cases}1,物品放入背包\\ 0,否则\end{cases}\tag{5} xj​={1,物品放入背包0,否则​(5)
则该问题的数学模型为:
max(∑j=1n)cjxj(6)max(\sum_{j=1}^n)c_jx_j\tag{6} max(j=1∑n​)cj​xj​(6)
约束条件:
{∑j=1nwjxj≤Vxj∈{0,1},j=1,2,...,n(7)\begin{cases} \sum_{j=1}^nw_jx_j\leq V \\ x_j\in\{0,1\},j=1,2,...,n \end{cases} \tag{7} {∑j=1n​wj​xj​≤Vxj​∈{0,1},j=1,2,...,n​(7)

3.实验结果

背包问题的实验数据如下:

 C = [72,490,651,833,833,489,359,337,267,441,...70,934,467,661,220,329,440,774,595,98,424,...37,807,320,501,309,834,851,34,459,111,...253,159,858,793,145,651,856,400,...285,405,95,391,19,96,273,152,...473,448,231];
W = [438,754,699,587,789,...912,819,347,511,287,541,784,676,198,...572,914,988,4,355,569,144,272,531,...556,741,489,321,84,194,483,205,607,...399,747,118,651,806,9,607,121,...370,999,494,743,967,718,397,...589,193,369];
V = 11258;

二进制粒子群的参数如下:

%% 二进制粒子群求解
dim = length(C);%维度
pop = 50;%种群数量
MaxIter = 500;%迭代次数
Vmax = 4;%速度范围
Vmin = -4;%速度范围
fobj = @(x) fun(x,C,W,V);%适应度函数

最终结果:

背包存放结果为:0 0 1 1 1 0 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 0 1 1 1 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1
总价值为:15955

4.参考文献

[1]李超文,何正友,张海平,高辉.基于二进制粒子群算法的辐射状配电网故障定位[J].电力系统保护与控制,2009,37(07):35-39.

[1]马慧民,叶春明,张爽.二进制改进粒子群算法在背包问题中的应用[J].上海理工大学学报,2006(01):31-34.

5.Matlab

基于二进制粒子群算法的背包问题求解- 附代码相关推荐

  1. 【二进制粒子群算法的配电网故障定位】

    二进制粒子群算法的配电网故障定位 配电网坏了,有些节点的电流情况受到变化,有些节点的电流没有变化.我们采集了现在各个节点的电流情况,写一个程序,导入节点电流情况,用 0表示电流正常,1表示电流不对和平 ...

  2. 基于改进二进制粒子群算法的配电网重构(matlab实现)

    目录 一.引言 1.问题背景 2.二进制粒子群算法 2.1简介 2.2 S i g m o i d Sigmoid Sigmoid函数 2.3二进制粒子群算法 2.4算法的改进 二.配电网重构模型 1 ...

  3. 【ELM回归预测】基于matlab粒子群算法优化ELM回归预测【含Matlab源码 036期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [优化预测]基于matlab粒子群算法优化ELM神经网络预测[含Matlab源码 036期] 二.粒子群算法及ELM简介 1 粒子群算法简 ...

  4. pm模型matlab算法,18基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码...

    基于遗传算法(粒子群算法.人工鱼群算法等)的投影寻踪模型 MATLAB源代码 投影寻踪是一种处理多因素复杂问题的统计方法,其基本思路是将高维数据向低维空间进行投影,通过低维投影数据的散布结构来研究高维 ...

  5. 粒子群算法组卷_概率表示的二进制粒子群算法在组卷中的应用

    概率表示的二进制粒子群算法在组卷中的应用 于庆梅 ; 杨争争 ; 雷景生 ; 刘怡乐 [期刊名称] <计算机仿真> [年 ( 卷 ), 期] 2012(029)009 [摘要] In or ...

  6. Matlab基于动态粒子群算法的动态环境寻优算法 基本粒子群算法首先是在解空间中随机初始化所有粒子

    Matlab基于动态粒子群算法的动态环境寻优算法 基本粒子群算法首先是在解空间中随机初始化所有粒子,每个粒子位置即代表问题的一个潜在解,在搜索过程中,采用适应度函数对每个粒子位置进行评价,适应度值好的 ...

  7. 【无人机】基于matlab粒子群算法优化干扰受限下无人机群辅助网络【含Matlab源码 2245期】

    ⛄一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约 ...

  8. 基于改进粒子群算法的WSN节点部署优化

    文章目录 一.理论基础 1.PSO算法(经典粒子群算法) 2.UPSO算法(均匀搜索粒子群算法) 3.CPSO算法(本文算法) 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.PSO算法(经典 ...

  9. 【优化覆盖】基于matlab粒子群算法优化无人机编队布局求解车载网络通信覆盖优化问题【含Matlab源码 2021期】

    一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约束 ...

  10. 【微电网优化】基于matlab粒子群算法求解综合能源系统优化问题【含Matlab源码 1969期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解综合能源系统优化问题[含Matlab源码 1969期] 点击上面蓝色字体,直接付费下载,即可. ...

最新文章

  1. 设置RGBColor
  2. Python中使用Flask、MongoDB搭建简易图片服务器
  3. LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)
  4. python模拟地面网管接收数据
  5. JUC多线程:线程池的创建及工作原理 和 Executor 框架
  6. PHP|异常的使用,异常子类化的最佳实践
  7. java string 前缀匹配_字符串前缀和后缀匹配
  8. C# 控件置于最顶层、最底层、隐藏、显示
  9. 平均成绩计算机控件,计算机技术基础(第十二章 文件 )
  10. 136.只出现一次的数字
  11. GOF之创建型模式(重点)
  12. 74. PHP 计数器
  13. Open Source Drives IOT From Device to Edge
  14. 高等代数---二次型
  15. 智头条:小米第二家汽车公司成立; 华为发布7款智慧生活新品;萤石视频锁携手电影《门锁》今日上映
  16. # 研究杂感 × VOSviewer(第六辑)
  17. Python学习指南——1.常用库说明
  18. ZN-17A机器人光机电一体化分拣实训系统
  19. 全球新能源500强四季沐歌借助氚云搭建业务系统,实现人效翻倍!
  20. excel 按列拆分合并 表格操作及脚本

热门文章

  1. mysql查询周边商铺_利用Redis的Geo功能实现查找附近的店铺
  2. 爬虫实例九 豆瓣电影详情信息
  3. cpu与简单模型机设计实验_180套经典夹具设计方案(附详解+模型),原来夹具设计这么简单!...
  4. 动态分配算法_【原创连载】算法素颜(第4篇):空间复杂度你真的懂了吗?
  5. java产生随机数(可个性化定制)
  6. EasyUI:动态更改combox下拉框中选项
  7. mondrain配置mysql_Mondrian + JPivot 环境配置
  8. HashMap内部存储实现及HashTable比较
  9. 重磅!国内首个三维重建系列视频课程,涉及SFM、立体匹配、多视图几何、结构光等...
  10. [Beta阶段]第十次Scrum Meeting