【粒子群算法】(Particle Swarm Opitimization, PSO)在1995年由Dr.Eberhart和Dr.Kennedy提出,源于对鸟群捕食行为的研究。

好比说,一群鸟在一个区域内寻找食物,这个区域只有一条虫子(最优解),所有的鸟都不知道食物在哪。假设,他们知道自己的当前位置距离食物有多远,也知道自己距离食物最近的鸟的位置。

鸟A:哈哈哈原来虫子离我最近!
鸟B,C,D:我得赶紧往 A 那里过去看看!

同时各只鸟(粒子)飞行时,位置不停变化,距离食物的距离也不断变化,所以一定有过离食物最近的位置,这也是它们的一个参考(粒子飞行的历史)。

鸟某某:我刚刚的位置好像靠近了食物,我得往那里靠近!

综上,影响鸟的运动状态变化有下面两个因素:

  • 离食物最近的鸟的位置(全局最优)
  • 自己之前达到过的离食物最近的位置(个体最优)
  • 自身惯性
三个因素综合为速度公式:
经过不断的调整,鸟群会向食物方向聚集,达到目标。
以上内容参考知乎@草稿纸反面,稍作修改,侵删。
PSO Step:
1:初始种群,计算个体的适应度值,设置各个体最优,全局最优;
2:迭代 i=0:MAX_GEN
3:粒子飞行:速度更新、位置更新、计算个体适应度值;
4:更新个体最优、全局最优;
5:i= MAX_GEN时,迭代结束
【背包问题】
背包问题(Knapsack problem)是一种组合优化的NP完全问题。
问题描述为:给定一组物品,每种物品都有自己的重量weight和价格value,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。
【0-1背包问题】
对每个物品i 只有 装入/不装入背包 两种情况。
我们有n种物品,物品j的重量为wj,价格为pj。
我们假定所有物品的重量和价格都是非负的。背包所能承受的最大重量为W。
如果限定每种物品只能选择0个或1个,则问题称为0-1背包问题。
可以用公式表示为:
最大化 
受限于  
令V(i,j)表示前i个物品中能够装入容量为j的背包中的物品价值最大值,则可得到动态规划函数:
V(i,0) = V(0,j)=0;                 //把前i个物品装入容量为0的背包   和   把0个物品装入容量为j的背包,价值均为0
V(i,j) = V(i-1,j)    j<wi                   //如果第i个物品的重量大于背包容量wi>j,则装入前i个物品得到的最大价值和装入前i-1个物品得到的最大价值相同,即物品i不装入背包
V(i,j) = max{ V(i-1,j),V(i-1,j-wi)+vi   }   j>wi   // 1.如果把第i个物品装入背包,则背包中物品的价值=把前i-1个物品装入容量为j-wi背包中的价值加上第i个物品的价值vi; 2. 如果第i个物品没有装入背包,则背包中价值=前i-1个物品装入容量为j的背包中所取得的价值。  取二者中价值较大者。
step 1:只装入前1个物品,确定各种情况下的背包能够得到的最大价值;
step 2:只装人前2个物品,确定各种情况下的背包能够得到的最大价值;
.
.
.
step n:... 
最后V(n,C)便是容量为C的背包中装入n个物品时取得的最大价值。
为了得到V(n,C) 需想前推到V(n-1,C)。如果V(n,C)>V(n-1,C),则第n个物品装入背包,前n-1个物品装入容量为C-wn的背包中;否则,第n个物品没有被装入背包,前n-1个物品被装入容量为C的背包中。
直到确定第一个物品是否被装入背包中。
得到:
当 V(i,j)= V(i-1,j), xi = 0;
当 V(i,j) > V(i-1,j), xi = 1,j = j-wi;
【动态规划】

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>#define C 17  //背包容量
#define N 5  //物品个数int W[] = {3,4,7,8,9};
int V[] = {4,5,10,11,13};int Value[N+1][C+1];
int X[N+1];using namespace std;int KnapSack(int n,int c,int w[],int v[],int x[])
{
//int i,j;
for (int i=0;i<=n;i++)
Value[i][0]=0;
for (int j=0;j<=c;j++)
Value[0][j]=0;for (int i=1;i<=n;i++)
{
for (int j=1;j<=c;j++)
{
if (j < w[i])
Value[i][j]=Value[i-1][j];else
Value[i][j]=max(Value[i-1][j],v[i]+Value[i-1][j-w[i]]);cout<<Value[i][j]<<"  ";
}
cout<<endl;
}int j=C;
for (int i=n;i>0;i--)
{
if (Value[i][j]>Value[i-1][j])
{
x[i] = 1;
j=j-w[i];
}
else
x[i]=0;
}
return Value[n][C];
}int _tmain(int argc, _TCHAR* argv[])
{cout<<KnapSack(N,C,W,V,X)<<endl;for (int i=1;i<=N;i++)
{
cout<<X[i]<<"  ";
}
system("pause");
return 0;
}

粒子群算法总结+背包问题相关推荐

  1. matlab中fic算法,粒子群算法在函数优化问题中的应用最终版(全文完整版)

    <粒子群算法在函数优化问题中的应用.doc>由会员分享,可免费在线阅读全文,更多与<粒子群算法在函数优化问题中的应用(最终版)>相关文档资源请在帮帮文库(www.woc88.c ...

  2. 粒子群算法理解+求解01背包问题

    最近在学群体优化算法,做个学习笔记吧,本人蒟蒻,有不对的地方还情多多包涵. 1.粒子群算法的理解. 粒子群算法是一种智能优化算法,模拟的是鸟内捕食行为.假设有一群鸟,在一个区域内觅食,这个区域内只有一 ...

  3. 求解“背包问题”的“粒子群算法”

    今天给大家介绍一个经典的算法,粒子群算法. 然后,我们用粒子群算法解决一个经典的问题---背包问题. 先说一下背包问题: 一:背包问题: 一个小偷,背着一个空背包进入了一家珠宝店.他的背包能承受的最大 ...

  4. 粒子群算法之01背包问题(C语言实现)

    参数说明 Vi(t+1)=ωVi(t)+c1r1(pbesti−Xi(t))+c2r2(gbest−Xi(t)) 根据粒子群算法速度迭代公式: w:惯性因子 c1,c2:学习率 r1,r2:[0,1] ...

  5. 粒子群算法组卷_粒子群(PSO)算法概念及代码实现

    粒子群算法的由来及思想 粒子群算法最早是由两名美国的科学家基于群鸟觅食,寻找最佳觅食区域的过程所提出来的,作为一种智能算法,PSO模拟的就是最佳决策的过程,鸟群觅食类似于人类的决策过程,想想在你做出选 ...

  6. 粒子群算法求解多元函数最值问题

    粒子群算法求解多元函数最值问题 一.简介 多元函数极值&最值问题通常使用导数/偏导数进行推导,这里尝试使用启发式算法进行求解近似最优解.选用粒子群算法进行求解,粒子群算法模仿鸟群觅食行为,核心 ...

  7. 自己对粒子群算法的理解(附matlab直接运行代码)(二维)

    首先声明,作者为准大二学生,由于一些特殊原因被某研究生老师拉近了一个研究组,为了更好地记忆和复习,所以写了一下内容,如有错误,希望提出,直接骂我都可以. 现在开始正文,首先老样子,介绍一下粒子群算法的 ...

  8. 粒子群算法(一)—— 理论篇

    目录 1 算法理论 2 算法流程 3 算法种类 3.1 基本粒子群算法 3.2 标准粒子群算法 3.3 压缩因子粒子群算法 3.4 离散粒子群算法 4 仿真实例 粒子群算法(Particle Swar ...

  9. 改进粒子群算法的配电网故障定位(PythonMatlab代码实现)

    目录 1配电网故障定位原理 1.1 故障信息的数学表示 1.2 二进制PSO算法的配电网故障定位原理 1.3 构造配电网故障定位评价函数 1.4 求期望函数 2 二进制粒子群算法的简单举例------ ...

最新文章

  1. 远程办公,团队如何高效沟通与协作
  2. 32位的cpu不能安装linux_Python3.5.2 安装教程【64位/32位】
  3. windows录屏_ApowerREC for Mac(屏幕录屏工具) V1.2.7.10激活版
  4. 1_反向代理【跨域】
  5. php同学录网站设计_基于PHP的校友录系统的设计与实现
  6. vba两个集合的差集_Python中的集合是如何使用的?
  7. Javascript下拉刷新
  8. ubuntu上virsh+kvm安装虚拟机
  9. 盘点当下稳定又好用的远程控制方案,软硬全覆盖
  10. 打log的方式检查程序里面的问题 及示例代码 详解
  11. 英国电信选择由 Canonical 开发的 Ubuntu OpenStack 作为云平台
  12. 069 模块基础总结
  13. 第六次作业阶段一 学生成绩录入系统设计与实现
  14. postman批量测试成功newman生成测试报告失败
  15. postman中的header入参
  16. 谷歌Google验证
  17. 设计稳定的COT转换器以实现所需的负载和线路调节
  18. 抖音短剧本应该怎么写
  19. 幅频特性曲线protues_函数幅频特性曲线
  20. 智慧社区的现状分析及发展前景

热门文章

  1. 解字谜:黑白皆算,对我等众猿而言中央C所在位置数优剃爱肤杠吧爱慕帝贰亿次的值是?...
  2. vcs+verdi/Debussy
  3. USB大容量存储设备无法启动该怎么办?
  4. Exynos 4412处理器IIC总线控制器(包括协议)
  5. 7-12 个位数字统计 (15 分)
  6. LeetCode力扣刷题——简单易懂的贪心算法
  7. 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 9月24日
  8. 洛谷 P4100 [HEOI2013]钙铁锌硒维生素 解题报告
  9. 怎么把jpg转换成pdf方法
  10. Windows Terminal + WSL2 + CENTOS 配置Windows命令终端