收藏 分享(赏)

数学建模_贪婪算法_装箱练习及答案解析.doc

上传人:HR专家 文档编号:5310005 上传时间:2019-02-20 格式:DOC 页数:5 大小:51.50KB
下载 相关 举报
数学建模_贪婪算法_装箱练习及答案解析.doc_第1页
第1页 / 共5页
数学建模_贪婪算法_装箱练习及答案解析.doc_第2页
第2页 / 共5页
数学建模_贪婪算法_装箱练习及答案解析.doc_第3页
第3页 / 共5页
数学建模_贪婪算法_装箱练习及答案解析.doc_第4页
第4页 / 共5页
数学建模_贪婪算法_装箱练习及答案解析.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、贪婪算法练习练习题 1:考虑 1、8、9、11 这四种面值的硬币,要找出币值 24 的零钱,怎么找能使硬币数最少? 利用 matlab 编程求解。解:设 为二进制变量,如果硬币 j 被选中,则, =1,否则 =0,xj xj j则找硬币问题的数学模型如下:min ;njj1;mnjjxv1用贪婪算法求解,其 MATLAB 程序如下:function n,x=payback(v,y,m)m,n=size(y);for i=1:nfor j=1:n练习题 2:利用 matlab 编程 FFD 算法完成下题:设有 6 种物品,它们的体积分别为:60、45、35、20、20 和 20 单位体积,箱子的

2、容积为 100 个单位体积。降序首次适应算法 (FFD ):先将物体按长度从大到小排序,然后按 FF 算法对物体装箱.离线算法:如果算法在开始装箱之前,已经预先得到了所有物品的信息而一次性的确定装箱策略,这种算法就被称为离线算法。降序首次适应算法和降序最佳适应算法是两个重要的离线算法(排序即统筹了整个物品信息) 。这里的降序首次适应算法就是一种贪婪算法。FFD 算法:输入箱子的容积;输入物品体积;将体积从大到小顺序排序;%函数 sort(X)计算物品种数 n; %函数 length(X)预置 n 个可用箱子,给定每个箱子容积;预置已用箱子计数器 box_count 为 1;for i=1:n

3、%从已用的第一只箱子开始顺序寻找能放入物品 i 的箱子j;for j=1: box_countif 已用箱子都不能再放物品 I (一个物品Njxnij1只放在一个箱子里)另用一个箱子,并将物品 i 放入该箱子;box_count= box_count+1;else将物品 i 放入箱子 j;endendend装箱问题中最早被研究的是一维装箱问题。随着研究的深入,人们发现实际生活中更多存在的是一些带约束的装箱问题,因此也就抽象化出了,如二维装箱问题(条形装箱问题、剪裁问题) 、三维装箱问题、变容装箱问题、有色装箱问题、对偶装箱问题等等一系列的带约束的装箱问题。但是由于这些问题所与生俱来的复杂性,虽

4、然已经有一些研究成果发表了,但是其研究还是相当的困难。本文所讨论的还是一维装箱问题。此题程序:function nbox,p=sjy(n,v,limitv)m,n=size(v);w=limitv*ones(m,n);p=zeros(n);nbox=0;for i=1:nfor j=1:iif v(i)cl break%待放入包的物品重量大于包的重量,跳出循环else x(i)=1;%x(i)为 1 时,物品 i 在包中cl=cl-w(i);p=p+1;%p 记录放入背包物品的个数endendfunction knapsack(n,limitw,w,v)totalc=0;totalw=0;m,

5、n=size(w); %m 是 w 的行数 n 是 w 的列数x=zeros(m,n);t=w;%记录原数组 k=c;y=x;p,c,w=goodsinknapsack(n,limitw,v,w,x);%排序及计算装箱物品数for j=1:p%装包的 p 件物品for i=1:n%原 n 件物品if (w(j)=t(i)endendendyfor i=1:ntotalc=totalc+k(i)*y(i);%背包的总价值if y(i)=1totalw=totalw+t(i);%背包所装载总体积endendtotalwtotalcv=220,208,198,192,180,180,165,162,

6、160,158,155,130,125,122,120,118,115,110,105,101,100,100,98,96,95,90,88,82,80,77,75,73,72,70,69,66,65,63,60,58,56,50,30,20,15,10,8,5,3,1;w=80,82,85,70,72,70,66,50,55,25,50,55,40,48,50,32,22,60,30,32,40,38,35,32,25,28,30,22,50,30,45,30,60,50,20,65,20,25,30,10,20,25,15,10,10,10,4,4,2,1;limitw=1000;n=50

7、;knapsack(n,limitw,w,v);运行结果为:y =Columns 1 through 16 1 1 0 1 0 1 0 1 1 1 1 0 1 1 0 1Columns 17 through 32 1 0 1 1 0 1 1 1 1 1 1 1 0 1 0 0Columns 33 through 48 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0Columns 49 through 50 0 0totalw =996totalc =3095结果分析:由运行结果可知,被选中的物品编号为向量 y 中的 1,其所选物品总价值为 3095,总体积为 996;贪婪算法并不一定能得到最优解,但可以得到一个较好的解。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报