描述
离散二进制粒子群算法(Discrete Binary Particle Swarm Optimization Algorithm, BPSO)最初由J.Kennedy和R.C.Eberhart在1997年设计;
PSO主要优化连续实值问题,BPSO主要优化离散空间约束问题;
BPSO是在离散粒子群算法基础上,约定位置向量、速度向量均由0、1值构成;
BPSO有很强全局搜索能力,但不能收敛于全局最优值,且随着算法迭代搜索随机性越来越强,缺乏后期的局部搜索能力;
离散二进制粒子群算法(BPSO )步骤
背包问题初始化粒子位置:按一定策略,生成二进制编码;
速度更新公式:速度 x 惯性权重 + (个体最优位置 - 当前位置)x 学习因子1 x 随机数 + (全局最优位置 - 当前位置)x 学习因子2 x 随机数。位置更新公式:概率映射方式,采用sigmoid函数将速度映射到 [0, 1] 区间作为概率,这个概率就是粒子下一步取值为1的概率;
位置变化的绝对概率:当前位置为0变化为1,当前为1变化为0,这二者被称为绝对变化;概率表示为:
【背包问题】
背包问题(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;