24小时热门版块排行榜    

查看: 1139  |  回复: 8

lizh714285

金虫 (小有名气)

[交流] 【趣题鉴赏】最少需要几个袋子?已有3人参与

转自“博士数学论坛”的一个帖子
   (转载理由:4楼建的01规划模型很巧妙,尤其是目标函数的设置方法,值得推荐)


1#

最少需要几个袋子?

有一堆糖块N克,总共m块,分别重a1,a2,a3,.....am克,
现有最多能装M克的袋子足够多个,M>=  max{a1,a2,a3,a4....am}
请问最少需要几个袋子才能把所有的糖装完?
最好能给出方法!补充:所给的袋子都是一样的。

------------------------------------------------------------------------------------

2#

定义:某几个糖块组成的一个集合A,如果这几个糖块的质量之和小于M,则称A为一个候选。找出包含a1的所有候选,找出包含a2的所有候选,…,找出包含am的所有候选。取这些候选中质量最大的装入一个袋子中。继续以上的步骤,在有限步内即可把所有的糖块都装完。

------------------------------------------------------------------------------------

3#


首先把所有糖块按照重量由大到小排列,不妨设为a01,a02,a03,……,a0m,然后
(1)将目前最重放入袋B1中,
(2)看剩下糖块中最重的能否能放入B1中,如果能重复(2),如果不能则判断能不能放入下一个袋子中,如果能重复(2),否则取新袋子装,后重复(2),直至所有糖块都装入袋子中。


------------------------------------------------------------------------------------

4#


这可以使用线性规划模型(01规划)来求解。
1)将各糖块编号命名为1号糖块、2号糖块、.....m号糖块;
2)取m个袋子,命名为1号袋子、2号袋子....m号袋子;
3)设决策变量X(i,j); 当i号糖块在j号袋子中时,该变量为1;否则为0
4)约束方程:Σ X(i,j)=1;  (说明,和号下为j=1,和号上为m); (意义:每个糖块在且仅在一个袋子中);
  如此对每个糖块建立一个约束方程,共m个约束方程。
  
   再对每个袋子可装M克建立m个约束方程Σ X(ij)*a(i)<=M (说明,和号下为i=1,和号上为m);  
  如此对每个袋子建立一个约束方程,共m个约束方程。

5)目标函数,要使袋子尽可能少;
   取函数f(j)=Σ X(i,j)      (说明,和号下为i=1,和号上为m),
   该函数表述了j号袋子中的糖块数量.
     由于每个袋子中的糖块可能是0,1,2,....m个; 所以f(j)
     取系数1, m+1,   (m+1)^2,     (m+1)^3,   ......,     (m+1)^(m-1)  ; (共m个系数);命名为c(1),c(2),。。。c(m)
    目标函数为 Σ  c(j) * f(j)      显然这是一个关于决策变量X(i,j)的线性函数 ;
   目标函数最小化;(由于更靠后的袋子中的每个糖块,其权重是相邻前一个袋子权重的m+1倍,按m+1进制计数自然数,用几个袋子则对应几位整数
(例如,用4个袋子,对应目标函数为m+1进制的4位数);不难证明这个目标函数确有引导袋子最小化的作用)。
6)初始可行解,   X(i,i)=1 ,   X(i,j)=0(对i不等于j)

7) 运算结果,获得了一个装糖块的最优方案,不但回答了楼主的问题,而且给出了装糖果的具体方案

_________________________________________
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zengpeiwei

金虫 (著名写手)


小木虫(金币+0.5):恭喜抢沙发,给个红包
晕呢
生气是拿别人的错误来惩罚自己!!!
2楼2010-04-14 19:40:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ws335

新虫 (小有名气)

小雨萌萌:请勿多次灌水,下次再这样就会扣金币了。谢谢理解和支持! 2010-04-16 15:32
太晕了~~~
3楼2010-04-16 13:05:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小雨萌萌

铜虫 (文坛精英)

优秀版主


引用回帖:
Originally posted by zengpeiwei at 2010-04-14 19:40:46:
晕呢

就是一个数学建模的过程,等你用到类似模型时就不会晕了。
4楼2010-04-16 15:33:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lizh714285

金虫 (小有名气)

★ ★
javeey(金币+2):谢谢提供解释 2010-04-16 19:35
我来解释
线性规划,是运筹学中的较为成熟,应用较多的一个模型。

对一组非负变量Xi , 在满足一组关于Xi 的线性方程(称为约束方程)的条件下, 求使得“关于Xi 的线性函数 c(x)” 取得极大值或极小值的 特解问题。 称为线性规划问题。 (线性条件极值问题)

线性规划模型的解法,在运筹中研究得较成功。

(解法不成问题),而实际问题,怎样化为一个线性规划问题,就是所谓建立线性规划模型,并利用线性规划模型的算法去解决实际问题,这才是应用者所关心的问题。
(解法的研究,是另一个领域,也还有很多研究者在不断探索)

本例叙述将装糖块问题化为线性规划问题的建模过程。

第3点,讲了变量的选取,一共选了m*m个变量, X(1,1), X(1,2),...... x(m,m);每个变量的意义是: x(i,j) 代表第i号糖块 将装进第j号袋子,这件事为真或为假。
第4点,讲约束方程的选择,一组约束方程是,每个糖块在且只在一个袋子中,例如1号糖块,X(1,1)、X(1,2)、X(1,3)、...., X(1,m)中必有一个为1且其他都为0, 所以它们加起来应该为1, 第i号 糖块也是如此。所以有m个方程。  第二组约束方程是,每个袋子顶多装M克, 以1号袋子为例,假设最优解中1号袋子装了3号,7号,18号三个糖块,x(3,1),X(7,1),X(18,1)会等于1, X(1,1),X(2,1),X(4,1),X(5,1)....会等于0; 那么,一号袋子总重就是X(i,1)=1的那些糖块重量和,即 Σ X(ij)*a(i)<=M

第5点较为精彩。题目要求是,使袋子尽可能少。
“造一个关于X(i,j)的线性函数,体现使袋子尽可能少。”

事实是,因为糖块总数是m, 所以每个袋子中最多装m块糖,不会比m多。
我们构造了每个袋子中糖块数这一中间过程函数,f(j)=Σ X(i,j) (对于每个袋子求和)  f(j) 的值域是0到m的整数。
用这些袋子糖块数共同构造m+1进制数字的想法,可以发现,用袋子最少将对应m+1进制数的最小。
5楼2010-04-16 19:17:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhixian-ma

木虫 (正式写手)


javeey(金币+1):从中悟出一些道理并发表出来,怎么可能是灌水。欢迎常来发表见解 2010-04-17 12:29
的确不错,将实际问题上升到数学高度,一个具体的问题就演化成了一类问题,这个看以看做集装问题的模型吧?
数学——太美妙了!
走过,路过,没有错过,第一次来数学版,灌下水,版主包含!
静,俭,悟,生,成
6楼2010-04-17 12:25:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小木虫(金币+0.5):给个红包,谢谢回帖交流
7楼2010-09-12 00:38:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
8楼2010-10-30 13:00:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

想你白菜

新虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by 小雨萌萌 at 2010-04-16 15:33:51:
就是一个数学建模的过程,等你用到类似模型时就不会晕了。

现在在参加数模竞赛,看的懂一些
过去的已去,未来的未来
9楼2011-04-24 12:13:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lizh714285 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见