IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 基于二进制正余弦算法的背包问题求解- 附代码 -> 正文阅读

[数据结构与算法]基于二进制正余弦算法的背包问题求解- 附代码

基于二进制正余弦算法的背包问题求解- 附代码


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

1.二进制正余弦算法

正余弦优化算法是一种随机优化算法,具有高度的灵活性,原理简单,易于实现,可以方便地应用于不同领域的优化问题。正余弦优化算法的寻优过程可分为两个阶段,在探索阶段,优化算法通过结合某随机解在所有随机解中快速寻找搜索空间中的可行区域; 到了开发阶段,随机解会逐渐发生变化,且随机解的变化速度会低于探索阶段的速度。在正弦余弦算法中,首先候选解会被随机初始化,然后会根据正弦或者余弦函数并结合随机因子来更新当前解在每一维度上的值。其具体更新方程为:
X i t + 1 = { X i t + r 1 ? s i n ( r 2 ) ? ∣ r 3 P i t ? X i t ∣ r 4 < 0.5 X i t + r 1 ? c o s ( r 2 ) ? ∣ r 3 P i t ? X i t ∣ r 4 > 0.5 (1) X_{i}^{t+1}=\begin{cases}X_{i}^{t}+r_{1}*sin(r_{2})*|r_{3}P_{i}^{t}-X_{i}^{t}|\quad r_{4}<0.5\\ X_{i}^{t}+r_{1}*cos(r_{2})*|r_{3}P_{i}^{t}-X_{i}^{t}|\quad r_{4}>0.5\end{cases}\tag{1} Xit+1?={Xit?+r1??sin(r2?)?r3?Pit??Xit?r4?<0.5Xit?+r1??cos(r2?)?r3?Pit??Xit?r4?>0.5?(1)
式中: X i t X_{i}^{t} Xit?是当前个体的第 i i i维第 t t t代的位置; r 2 r_{2} r2?为0到 2 π 2\pi 2π的随机数; r 3 r_{3} r3?为0到2之间的随机数; r 4 r_{4} r4?为0到1的随机数, P i t P_{i}^{t} Pit?表示在t次迭代时最优个体位置变量的第 i i i维的位置。
r 1 = a ? t a T (2) r_{1}=a-t\frac{a}{T}\tag{2} r1?=a?tTa?(2)
式中: a a a 是一个常数; t t t 为当前迭代次数; T T T 为最大迭代次数; 参数 r 1 r_{1} r1?表示下一个解的位置区域在当前解和最优解之内或者之外,较小的 r 1 r_{1} r1?的值有助于增强算法的局部开发能力,较大的 r 1 r_{1} r1?的值有助于提高算法的全局探索能力,同时 r 1 r_{1} r1?的值随迭代次数逐渐减小,平衡了算法局部开发和全局搜索的能力; r 2 , r 3 , r 4 r_{2},r_{3},r_{4} r2?,r3?,r4?为随机因子,参数 r 2 r_{2} r2?定义了当前解朝向或者远离最优解多远; 参数 r 3 r_{3} r3?为最优解给出一个随机权值,是为了随机强调 ( r 3 > 1 ) (r_{3}>1) (r3?1) 或者忽略 ( r 3 < 1 ) (r_{3}<1) (r3?1) 最优解在定义候选解移动距离时的影响效果; 参数 r 4 r_{4} r4??平等地切换正弦和余弦函数。

由于原始正余弦算法是求解连续解,为了适应背包问题,需要对其进行离散化。离散化准则如下:首先算法初始化,所有解在[-1,1]之间生成,针对这些实数,利用正负信息进行离散化,并将离散化的解作为适应度的输入,求解适应度值。
Y ( i , j ) = { 1 , X ( i , j ) ≥ 0 0 , e l s e (3) Y(i,j) = \begin{cases} 1,X(i,j)\geq0\\ 0,else \end{cases}\tag{3} Y(i,j)={1,X(i,j)00,else?(3)
每次经过正余弦位置更新后,需要将X约束到[-1,1]的范围。
X ( i , j ) = { 1 , X ( i , j ) > 1 ? 1 , X ( i , j ) < ? 1 (4) X(i,j)=\begin{cases} 1,X(i,j)>1\\ -1,X(i,j)<-1 \end{cases}\tag{4} X(i,j)={1,X(i,j)>1?1,X(i,j)<?1?(4)

2.背包问题

背包问题的一般提法为:已知 n n n 个物品 s 1 , s 2 , . . . , s n s_1,s_2,...,s_n s1?,s2?,...,sn? 的重量及其价值分别为 w j > 0 w_j >0 wj?0 c j > 0 ( j = 1 , 2 , … , n ) c_j >0( j=1,2,…,n) cj?0j1,2,,n背包的容量假设为 V > 0 V >0 V0?如何选择那些物品装入背包可使在背包的容量限制之内所装物品的总价值最大,引入变量 x j x_j xj?
x j = { 1 , 物 品 放 入 背 包 0 , 否 则 (5) x_j=\begin{cases}1,物品放入背包\\ 0,否则\end{cases}\tag{5} xj?={1,0,?(5)
则该问题的数学模型为:
m a x ( ∑ j = 1 n ) c j x j (6) max(\sum_{j=1}^n)c_jx_j\tag{6} max(j=1n?)cj?xj?(6)
约束条件:
{ ∑ j = 1 n w j x j ≤ V x j ∈ { 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;%迭代次数
fobj = @(x) fun(x,C,W,V);%适应度函数

最终结果:
请添加图片描述

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

4.参考文献

[1]郭晓虎,李泽文,李亚.二进制正余弦算法求解0-1背包问题[J].科技经济导刊,2019,27(25):172.

5.Matlab

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 19:04:09  更:2021-09-11 19:05:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:51:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码