Knapsack Problem (背包问题)

Slides:



Advertisements
Similar presentations
因数与倍数 2 、 5 的倍数的特征
Advertisements

3 的倍数的特征 的倍数有 : 。 5 的倍数有 : 。 既是 2 的倍数又是 5 的倍数有 : 。 12 , 18 , 20 , 48 , 60 , 72 , , 25 , 60 ,
2 和 5 的倍数的特征 运动热身 怎样找一个数的倍数? 从小到大写出 2 的倍数( 10 个): 写出 5 的倍数( 6 个) 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 5 , 10 , 15 , 20 , 25 , 30.
一、 一阶线性微分方程及其解法 二、 一阶线性微分方程的简单应用 三、 小结及作业 §6.2 一阶线性微分方程.
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
2.3 函数的微分. 四川财经职业学院 课前复习 高阶导数的定义和计算方法。 作业解析:
练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
3.4 空间直线的方程.
小学生游戏.
第5章 定积分及其应用 基本要求 5.1 定积分的概念与性质 5.2 微积分基本公式 5.3 定积分的换元积分法与分部积分法
2-7、函数的微分 教学要求 教学要点.
初中数学八年级下册 (苏科版) 10.4 探索三角形 相似的条件(2).
Hadoop I/O By ShiChaojie.
第二章 矩阵(matrix) 第8次课.
SOA – Experiment 3: Web Services Composition Challenge
走进编程 程序的顺序结构(二).
元素替换法 ——行列式按行(列)展开(推论)
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
Online job scheduling in Distributed Machine Learning Clusters
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
What have we learned?.
动态规划(Dynamic Programming)
使用矩阵表示 最小生成树算法.
工业机器人技术基础及应用 主讲人:顾老师
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
第一章 函数与极限.
习题 一、概率论 1.已知随机事件A,B,C满足 在下列三种情况下,计算 (1)A,B,C相互独立 (2)A,B独立,A,C互不相容
计算.
解决变化问题的自底向上 流程建模方法 严志民 徐玮.
专题作业.
顺序表的删除.
线性规 Linear Programming
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
5.2 常用统计分布 一、常见分布 二、概率分布的分位数 三、小结.
第九章 动态规划 第二节 背包问题.
WPT MRC. WPT MRC 由题目引出的几个问题 1.做MRC-WPT的多了,与其他文章的区别是什么? 2.Charging Control的手段是什么? 3.Power Reigon是什么东西?
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
用计算器开方.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第六章 Excel的应用 一、Excel的单元格与区域 1、单元格:H8, D7, IV26等 2、区域:H2..D8, HS98:IT77
第4章 Excel电子表格制作软件 4.4 函数(一).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
用穷举法设计程序 南京师范大学 教育技术系 倪佳慧
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.1 变化率与导数   3.1.1 变化率问题 3.1.2 导数的概念.
第五节 缓冲溶液pH值的计算 两种物质的性质 浓度 pH值 共轭酸碱对间的质子传递平衡 可用通式表示如下: HB+H2O ⇌ H3O++B-
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
1.非线性规划模型 2.非线性规划的Matlab形式
第七、八次实验要求.
Models and Software Practice of the Operations Research
分数再认识三 真假带分数的练习课.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
正弦、余弦函数的性质 华容一中 伍立华 2017年2月24日.
§2 方阵的特征值与特征向量.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
滤波减速器的体积优化 仵凡 Advanced Design Group.
线性规划 Linear Programming
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
第十七讲 密码执行(1).
第十二讲 密码执行(上).
§4.5 最大公因式的矩阵求法( Ⅱ ).
第二次课后作业答案 函数式编程和逻辑式编程
一元一次方程的解法(-).
最小生成树 最优二叉树.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
9.3多项式乘多项式.
Presentation transcript:

Knapsack Problem (背包问题) 戴红伟 20090427

The Knapsack Problem Def: 有N个物品和一个背包,其中: 如何放置物品可得最高价值? 此问题可以表示为如下: 物品具有重量 (w1, w2, …, wn) 和价值 (p1, p2, …, pn) 背包的最大重量承受限制为W 如何放置物品可得最高价值? 此问题可以表示为如下:

Knapsack Problem问题类型 Fractional Knapsack Problem: 物品可以被任意分割 一般采用贪婪算法(Greedy Approach) 0/1 Knapsack Problem: 物品不可分割 一般采用动态规划法(Dynamic Programming) 参考:《算法设计与分析》王红梅 P150

其他类型背包问题 完全背包问题(0/1): 多重背包问题 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 多重背包问题 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

分组背包问题: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 有依赖的背包问题: 这种背包问题的物品间存在某种“依赖”的关系。也就是说,i依赖于j,表示若选物品i,则必须选物品j。为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品所依赖;另外,没有某件物品同时依赖多件物品。

适配背包问题: 有容量为S的背包,N件物品,重量分别为w1, w2, …, wn,从N件物品中挑选若干件物品,所选物品之和恰能放入该背包,即所选物品之和等于S。

授课内容 贪心法求解 最佳装载 背包问题 动态规划法求解 0/1 背包问题 遗传算法求解 0/1 背包问题

贪心法求解 最佳装载 背包问题 描述:对于容量为c的背包进行装载,从n个物品中选择装入背包的物品,每个物品i的重量和价值分别为wi和pi。在背包中物品的总重量不超过背包容量的前提下,求装入物品价值最高的装载法。 输入: 5 20 //物品的数量和背包的容量 6 3 //第一个物品的重量和价值 2 5 //… 3 8 10 6 7 4

输出: 1 0.714286

解题思路 总是对当前问题作最好的选择,也就是局部寻优。现按物品效益、重量比值升序排列。然后每次选择比值大的物品进行装载,直到背包装满为止。

核心代码 //创建物品信息结构体

转换为价值重量比

2-动态规划法求解0/1背包问题 动态规划法设计算法一般分成三个阶段: (1)分段:将原问题分解为若干个相互重叠的子问题; (2)分析:分析问题是否满足最优性原理,找出动态规划函数的递推式; (3)求解:利用递推式自底向上计算,实现动态规划过程。 动态规划法利用问题的最优性原理,以自底向上的方式从子问题的最优解逐步构造出整个问题的最优解。

于是,问题归结为寻找一个满足约束条件式2.1,并使目标函数式2.2达到最大的解向量X=(x1, x2, …, xn)。 在0/1背包问题中,物品i或者被装入背包,或者不被装入背包,设xi表示物品i装入背包的情况,则当xi=0时,表示物品i没有被装入背包,xi=1时,表示物品i被装入背包。根据问题的要求,有如下约束条件和目标函数: (式2.1) (式2.2) 于是,问题归结为寻找一个满足约束条件式2.1,并使目标函数式2.2达到最大的解向量X=(x1, x2, …, xn)。

证明0/1背包问题满足最优性原理。 设(x1, x2, …, xn)是所给0/1背包问题的一个最优解,则( x2, …, xn)是下面一个子问题的最优解: 如若不然,设(y2, …, yn)是上述子问题的一个最优解,则 因此, 这说明(x1, y2, …, yn)是所给0/1背包问题比(x1, x2, …, xn)更优的解,从而导致矛盾。

0/1背包问题可以看作是决策一个序列(x1, x2, …, xn),对任一变量xi的决策是决定xi=1还是xi=0。在对xi-1决策后,已确定了(x1, …, xi-1),在决策xi时,问题处于下列两种状态之一: (1)背包容量不足以装入物品i,则xi=0,背包不增加价值; (2)背包容量可以装入物品i,则xi=1,背包的价值增加了vi。 这两种情况下背包价值的最大者应该是对xi决策后的背包价值。令V(i, j)表示在前i(1≤i≤n)个物品中能够装入容量为j(1≤j≤C)的背包中的物品的最大值,则可以得到如下动态规划函数:

[动态规划函数]: 3 第 i 物的重量比背包目 前可承受之重量还重 1装入0个物品 2 背包容量为0 (式2.3) (式2.4.1) (式2.4.2) 5 放入第 i 物后可得的价值 4 不放入第 i 物可得的价值

式2.3表明:把前面i个物品装入容量为0的背包和把0个物品装入容量为j的背包,得到的价值均为0。 式2.4的第一个式子表明:如果第i个物品的重量大于背包的容量,则装入前i个物品得到的最大价值和装入前i-1个物品得到的最大价值是相同的,即物品i不能装入背包;第二个式子表明:如果第i个物品的重量小于背包的容量,则会有以下两种情况: (1)如果把第i个物品装入背包,则背包中物品的价值等于把前i-1个物品装入容量为j-wi的背包中的价值加上第i个物品的价值vi; (2)如果第i个物品没有装入背包,则背包中物品的价值就等于把前i-1个物品装入容量为j的背包中所取得的价值。显然,取二者中价值较大者作为把前i个物品装入容量为j的背包中的最优解。

例如,有5个物品,其重量分别是{2, 2, 6, 5, 4},价值分别为{6, 3, 5, 4, 6},背包的容量为10。 根据动态规划函数,用一个(n+1)×(C+1)的二维表V,V[i][j]表示把前i个物品装入容量为j的背包中获得的最大价值。     1 2 3 4 5 6 7 8 9 10   w1=2 v1=6 1 w2=2 v2=3 2 w3=6 v3=5 3 w4=5 v4=4 4 w5=4 v5=6 5

第一阶段,只装入前1个物品,确定在各种情况下的背包能够得到的最大价值; 第二阶段,只装入前2个物品,确定在各种情况下的背包能够得到的最大价值; 依此类推,直到第n个阶段。最后,V(n,C)便是在容量为C的背包中装入n个物品 时取得的最大价值。   1 2 3 4 5 6 7 8 9 10 w1=2 v1=6 w2=2 v2=3 w3=6 v3=5 11 14 w4=5 v4=4 13 w5=4 v5=6 12 15

如何确定装入背包的具体物品? 从V(n,C)的值向前推,如果V(n,C)>V(n-1,C),表明第n个物品被装入背包,前n-1个物品被装入容量为C-wn的背包中;否则,第n个物品没有被装入背包,前n-1个物品被装入容量为C的背包中。依此类推,直到确定第1个物品是否被装入背包中为止。由此,得到如下函数: (式6.13)

    1 2 3 4 5 6 7 8 9 10   x1=1 w1=2 v1=6 1 6 6 6 6 6 6 6 6 6 x2=1 w2=2 v2=3 2 6 6 9 9 9 9 9 9 9 x3=0 w3=6 v3=5 3 6 6 9 9 9 9 11 11 14 x4=0 w4=5 v4=4 4 6 6 9 9 9 10 11 13 14 x5=1 w5=4 v5=6 5 6 6 9 9 12 12 15 15 15

核心算法实现: 设n个物品的重量存储在数组w[n]中,价值存储在数组v[n]中,背包容量为C,数组V[n+1][C+1]存放迭代结果,其中V[i][j]表示前i个物品装入容量为j的背包中获得的最大价值,数组x[n]存储装入背包的物品,动态规划法求解0/1背包问题的算法如下:

遗传算法求解 0/1 背包问题(仅做了解)

遗传算法基本原理 遗传算法的基本运算 ⑴ 选择算子 ⑵ 交叉算子 ⑶ 变异算子 模拟自然界优胜劣汰的进化现象,把搜索空间映射为遗传 空间,把可能的解编码成一个向量——染色体,向量的每个 元素称为基因。 X=11010111 通过不断计算各染色体的适应值,选择最好的染色体,获 得最优解。 遗传算法的基本运算 ⑴ 选择算子 ⑵ 交叉算子 ⑶ 变异算子

xi 为种群中第i个染色体, ●选择算子 ——从旧的种群中选择适应度高的染色体,放入匹配集(缓冲 区),为以后染色体交换、变异,产生新的染色体作准备。 选择方法——适应度比例法(转轮法) 按各染色体适应度大小比例来决定其被选择数目的多少。 某染色体被选的概率:Pc xi 为种群中第i个染色体,

具体步骤 举例: ⒈具有6个染色体的二进制编码、适应度值、Pc累计 值。 1)计算各染色体适应度值 2)累计所有染色体适应度值,记录中间累加值S - mid 和最 后累加值 sum = ∑f(xi) 3) 产生一个随机数 N,0〈 N 〈 sum 4) 选择对应中间累加值S - mid 的第一个染色体进入交换集 5) 重复(3)和(4),直到获得足够的染色体。 举例: ⒈具有6个染色体的二进制编码、适应度值、Pc累计 值。

染色体的 适应度和所占的比例 用转轮方法进行选择

10个染色体种群按比例的选择过程 染色体被选的概率 被选的染色体个数 1 2 3 4 5 6 7 8 9 10 17 12 11 27 48 染色体编号 1 2 3 4 5 6 7 8 9 10 适应度 17 12 11 被选概率 0.1 0.02 0.22 0.09 0.16 0.14 0.03 适应度累计 27 34 36 48 59 66 69 76 被选的染色体个数 随机数 23 49 76 13 1 27 57 所选染色体号码 3 7 10

●交叉算子 复制不能创新,交叉解决染色体的创新 方法:随机选择二个染色体(双亲染色体),随机指定一点或多点, 进行交换,可得二个新的染色体(子辈染色体). 新的子辈染色体: A’ 11010001 B’ 01011110 双点(two-point crossover)交叉,多点(multi-point crossover)交叉…

模拟生物在自然界环境变化,引起基因的突变.产生新的染色体,表现出新的性状。 ●变异算子 模拟生物在自然界环境变化,引起基因的突变.产生新的染色体,表现出新的性状。 在染色体二进制编码中,1变成0;或0变成1.突变产生染色体的多样性,避免进化中早期成熟,陷入局部极值点,突变的概率很低. 基本位变异:以变异概率Pm随机指定某一位或者几位基因做上的基因值做变异运算; 均匀变异,边界变异等…

遗传策法的运算过程 选择(复制): 根据各个个体的适应度,按照一 定的规则或方法,从第t代群体P(t) 中选择出一些优良的个体遗传到下 交叉: 将群体P(t)内的各个个体随机搭配 成对,对每一对个体,以某个概率 (称为交叉概率)交换它们之间的 部分染色体; 变异: 对群体P(t)中的每一个个体,以某一概率(称为变异概率)改变某 一个或某一些基因座上的基因值为其他基因值。 实际问题参数集 编码 随机产生群体t 计算适值 运算:复制 交叉 变异 群体t+1群体t 群体t+1 满足要求? N Y 解码 改善或解决实际问题

注意约束条件

实验讲解 冲撞机器人问题

实验讲解——碰撞机器人 模拟与仿真的应用; 描述:在A*B大小的仓库种有N个机器人,每个机器人都有一个初始位置和方向,机器人按照指令进行移动,而且没有两个机器人同时移动。每个机器人占据直径为1的圆形区域。 如果企图移动出仓库的范围,则判断为撞墙;如果两个机器人占据同样的位置,则判断为冲撞。

输入 第一行K,测试序列的组数; 每个测试序列开始一行是两个整数A B,1<=A,B<=100,给定仓库大小。A是东西方向,B是南北方向。第二行是两个整数M N,1<=N, M<=100,分别表示机器人的数目和指令的数目。随后两行包括2个整数1<=Xi<=A,1<=Yi<=B和一个字母(N S E W)表示位置和方向,没有两个机器人的初始位置是相同的。

最后M行顺序给定所有指令。 指令格式如下: <机器人编号> <操作> <次数> 其中有3种操作: L——左转90度 R——右转90度 F——向前一个单位 1<= 次数 <= 100

输出 对于每个测试序列,输出一行: 机器人撞墙(Robot i crashes into the wall) Robot i crashes into robot j. (i是移动机器人) OK(没有发生冲撞)

解题思路 二维数组保存所有机器人的位置,数组元素的值就是占据该网格的机器人的编号,如果网格没有被占有,值为0; 用一个数组记录机器人的方向,值为0~3,表示(东北西南)4个方向。左转值增加,右转值减少,结果需要模4。方向改变不会导致机器人碰撞。 蛮力法模拟机器人的移动,每次移动一格,如果下个位置是墙或者有别的机器人,则发生碰撞。

输入样例 1 5 4 2 2 1 1 E 5 4 W 1 F 7 2 F 7

输出样例 Robot 1 crashes into the wall

实验安排 时间:20090429(周三) 16:40~18:15 地点:计算机楼二楼机房 内容: 时间:20090429(周三) 16:40~18:15 地点:计算机楼二楼机房 内容: 动态规划法求解如下0/1背包问题:5个物品重量和价值分别为{3,2,1,4,5}{25,20,15,40,50},背包容量为6。 贪心算法求解订票问题: 某公司以出售某一固定数量的连号票(套票)来代替单张售票,套票的订单以该套票中最小的座位号为标志。如果一个订单完全按照观众要求,那么观众付全价(2元),如果一个订单虽被接受,但是至少有一个座位与观众要求不同,那么顾客只要付半价(1元),问怎样销售才能使收入最高。

service.in Service.out 其他授课内容实验作业; 20 3 //总座位数,套票所含座位数; 7 20 3 //总座位数,套票所含座位数; 7 4 2 10 9 16 15 17 Service.out 9 //最大收入 6 //订单数 4 1 //第4位观众的座位从座位号1开始 1 4 2 7 3 10 6 13 5 16 其他授课内容实验作业;