动态规划求解0-1背包问题

上传人:gui****hi 文档编号:132707828 上传时间:2022-08-08 格式:DOCX 页数:8 大小:86.19KB
收藏 版权申诉 举报 下载
动态规划求解0-1背包问题_第1页
第1页 / 共8页
动态规划求解0-1背包问题_第2页
第2页 / 共8页
动态规划求解0-1背包问题_第3页
第3页 / 共8页
资源描述:

《动态规划求解0-1背包问题》由会员分享,可在线阅读,更多相关《动态规划求解0-1背包问题(8页珍藏版)》请在装配图网上搜索。

1、基于MATLAB的0-1背包问题的动态规划求解数学实验论文动态规划算法求解0-1背包问题郭伦(15054053054)指导教师名:郭德龙职 称:副教授单 位:数学与统计学院专 业 名 称:B15信息与计算科学动态规划算法求解0-1背包问题摘 要本文主要阐述了基于MATLAB的0-1背包问题动态规划的求解。0-1背包问题(Knapsack Problem,简称KP问题)是一个经典的组合优化问题,具有广泛的实际应用背景,以及在理论研究领域也有其相当的代表性。KP问题的求解,在生活中多有应用,如货源分配、轮船装载、项目选择等等都有它的身影。并且它还常常作为其他相对复杂的组合问题的一个特殊解,但当问题

2、规模过大时,如果想要得到最优解是极其困难的,因此对大规模的0-1背包问题的研究无论是在理论研究领域还是实际应用背景都有其重要的意义。动态规划算法是五种常用的算法之一,通常用于求解具有某种最优性质的问题。其基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的

3、子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。由于我们可以用一个表来记录所有已解子问题的答案,需要用到的时候直接调用,所以动态规划法又叫“填表法”。关键词:KP问题,0-1背包问题,动态规划,最优解,背包问题,MATLAB,基于MATLAB的0-1背包问题动态规划的求解一问题重述给定一个容量为C的背包和n个物品,其中物品i的体积为vi,价值为wi(i=1,2,3,n),要从这n个物品中挑选出若干件放入背包,每个物品只能挑选一次,使得放入物品的总体积不超过C,而价值达到最大,并找出一

4、种添放物品的方案。二模型假设0-1背包问题的为:设xi为一个二进制量,xi=1表示将物品i放入背包,xi=0表示物品不装入背包,问题的目的在于确定一个二进制的数组(x1,x2,x3xn)使得maxi=1nxiwi即:maxi=1nxiwi xi(0,1) 且 i=1nxiviC三符号说明C:背包的容量V:物品的体积W:物品的价值n:物品的数量f:用于状态交换的矩阵t:用于输入物品是否装入背包,0表示装入,1表示不装入四问题分析对于0-1背包问题,每个物品都只有两种选择,装入或者不装入两种,可以用一个二维数组fij表示物品是否装入背包。我们要做的是找出可以放入背包的物品使得背包内的价值最大,利用

5、递归思想,用子问题定义状态:即fij表示前i件物品恰放入一个容量为j的背包可以获得的最大价值。则其状态转移方程便是:fij=maxfi-1j,fi-1j-vi+wi对于第i个物品,我们可以拿这个物品的体积同背包内剩余的体积相比较,如果背包内剩余的容量大于物品的体积,那么这个物品就可以装入背包,这时我们只要判断装入这个物品后和装入这个物品前的价值哪一个更大,就可以通过这种递归的方式球的背包能装入的最大价值。五模型建立与求解我们知道,动态规划算法又叫填表法,填表的顺序为自底向上,自左向右,于是我们首先确定第n个物品是否可以被装入背包: if v(n) c=15; % 定义背包的最大容量 v= 2

6、3 6 4 7; % 定义各个物品的体积 w= 10 5 8 16 9; % 定义各个物品对应的价值 n =length(v); % n为物品的数量 f=; %定义一个用于状态交换的矩阵 t=; %用于输出物品是否装入背包的状态 %1、判断第一个物品放或不放for j=1:15 if v(n)=j f(n,j)=w(n) ; else f(n,j)=0; end end %2、判断下一个物品是否装入。引用递归公式fii=maxfi-1j,fi-1j-vi+wi for i=n-1:-1:1 for j=1:15 if jf(i+1,j-v(i)+w(i) f(i,j)=f(i+1,j); else f(i,j)=f(i+1,j-v(i)+w(i); end end end end f%3、找出装入背包的所有物品 j=c; for i=1:n-1 if f(i,j)=f(i+1,j) t(i)=0; else t(i)=1; j=j-v(i); end end if f(n,j)=0 t(n)=0; else t(n)=1; end t针对动态规划填表为:装入背包的最优子序列为: 8

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!