装箱问题?面料裁割问题?矩形裁剪问题?求助。在线等

stonepeter 2004-11-07 09:34:52
RT
输入:大矩形面料的长宽m*n
以及:要裁剪出的小矩形面料长宽及数量m1*n1*k1, m2*n2*k2, ..., mj*nj*kj
输出:最出的用最少的面料个数,以及裁割的方法。
这是一个实际应用的问题
请给出程序,或者是算法思路。用穷举的办法也行,只要能算出来。

...全文
361 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oldman 2005-01-25
  • 打赏
  • 举报
回复
在每一块大矩形上都做各种情况的组合使其剩余量最小,然后在做下一块大矩形,依次下去直到所有的小矩形都切割完毕 就行了吧~!~~~

这个使用回塑法是可以的,但是系统说切几块大,几块小,我看我们不一定能切出来!
所以这个怎么切,还得解决先
stonepeter 2005-01-24
  • 打赏
  • 举报
回复
我同意楼上用回溯应当可以的说法,要求最优解是NP问题。
所以一定要很好地控制回溯的次数。
user139 2005-01-02
  • 打赏
  • 举报
回复
花點錢無所謂,關鍵是值不值。這回我虧了。像這種東西很難有人會完全分享,可以理解。
baryjim 2005-01-01
  • 打赏
  • 举报
回复
哭,不会吧,现在都怎么了,这点代码又不是很高深的算法,还卖钱,呵呵!

这个题目用回溯法的确复杂度很大,但是如果把条件限制好还是可以做的!
user139 2005-01-01
  • 打赏
  • 举报
回复
我也在想这个问题,下面是我花了几块钱买来的代码,不过只能往下研究一块板最多切几块,而且速度在比例大(1:10)的时候很慢(会假死机)。你可以研究研究。也可以发邮件给我一起讨论
james.wong@263.net

以下代码用于VBA中
Function CountIt(total As Integer, Blong As Double, Bwide As Double, Slong As Double, Swide As Double) As Integer
a = a + 1
'********************************** Type a **********************************
b = 1
If (Blong >= Swide) And (Bwide >= Slong) Then
total = total + Fix(Blong / Swide)
mode1 = mode1 + CStr(1)
CountIt total, Blong, Bwide - Slong, Slong, Swide

total = total - Fix(Blong / Swide)
mode1 = Left(mode1, Len(mode1) - 1)
Else
If maxc < total Then
maxc = total
mode2 = mode1
End If
End If
'********************************** Type b **********************************
b = 2
If (Blong >= Slong) And (Bwide >= Swide) Then
total = total + Fix(Blong / Slong)
mode1 = mode1 + CStr(2)
CountIt total, Blong, Bwide - Swide, Slong, Swide
total = total - Fix(Blong / Slong)
mode1 = Left(mode1, Len(mode1) - 1)
Else
If maxc < total Then
maxc = total
mode2 = mode1
End If
End If

'********************************** Type C **********************************
b = 3
If (Blong >= Swide) And (Bwide >= Slong) Then
total = total + Fix(Bwide / Slong)
mode1 = mode1 + CStr(3)
CountIt total, Blong - Swide, Bwide, Slong, Swide
total = total - Fix(Bwide / Slong)
mode1 = Left(mode1, Len(mode1) - 1)
Else
If maxc < total Then
maxc = total
mode2 = mode1
End If
End If

'********************************** Type D **********************************
b = 4
If (Blong >= Slong) And (Bwide >= Swide) Then
total = total + Fix(Bwide / Swide)
mode1 = mode1 + CStr(4)

CountIt total, Blong - Slong, Bwide, Slong, Swide
total = total - Fix(Bwide / Swide)
mode1 = Left(mode1, Len(mode1) - 1)
Else
If maxc < total Then
max = total
mode2 = mode1
End If
End If

End Function
Oldman 2004-11-29
  • 打赏
  • 举报
回复
使用回朔应该可以。
cici7788 2004-11-25
  • 打赏
  • 举报
回复
关注
fleg 2004-11-25
  • 打赏
  • 举报
回复
去查 下料问题 的论文, 国内有很多研究,而且有一些针对
特定领域的软件,但是不一定能找到,一般都是专用的。
赖勇浩 2004-11-11
  • 打赏
  • 举报
回复
看看.
stonepeter 2004-11-08
  • 打赏
  • 举报
回复
每一块大矩形上都做各种情况的组合---这个难一点
stonepeter 2004-11-08
  • 打赏
  • 举报
回复
昨天晚上睡觉的时候要在想
其实有一个重要的难点:已知若干个小矩形,如何判断是否可以在大矩形裁出?
上面的装箱问题只是用体积来计算,实际情况都是刚体,单计算体积是完全不合用的。

huhuhu5 2004-11-08
  • 打赏
  • 举报
回复
在每一块大矩形上都做各种情况的组合使其剩余量最小,然后在做下一块大矩形,依次下去直到所有的小矩形都切割完毕 就行了吧~!~~~
stonepeter 2004-11-07
  • 打赏
  • 举报
回复
-----------------------我的这个问题不是装箱问题-------------------
-----------------------我要最优解--------------------
【问题】 装箱问题

问题描述:装箱问题可简述如下:设有编号为0、1、…、n-1的n种物品,体积分别为v0、v1、…、vn-1。将这n种物品装到容量都为V的若干箱子里。约定这n种物品的体积均不超过V,即对于0≤i<n,有0<vi≤V。不同的装箱方案所需要的箱子数目可能不同。装箱问题要求使装尽这n种物品的箱子数要少。

若考察将n种物品的集合分划成n个或小于n个物品的所有子集,最优解就可以找到。但所有可能划分的总数太大。对适当大的n,找出所有可能的划分要花费的时间是无法承受的。为此,对装箱问题采用非常简单的近似算法,即贪婪法。该算法依次将物品放到它第一个能放进去的箱子中,该算法虽不能保证找到最优解,但还是能找到非常好的解。不失一般性,设n件物品的体积是按从大到小排好序的,即有v0≥v1≥…≥vn-1。如不满足上述要求,只要先对这n件物品按它们的体积从大到小排序,然后按排序结果对物品重新编号即可。装箱算法简单描述如下:

{ 输入箱子的容积;

输入物品种数n;

按体积从大到小顺序,输入各物品的体积;

预置已用箱子链为空;

预置已用箱子计数器box_count为0;

for (i=0;i<n;i++)

{ 从已用的第一只箱子开始顺序寻找能放入物品i 的箱子j;

if (已用箱子都不能再放物品i)

{ 另用一个箱子,并将物品i放入该箱子;

box_count++;

}

else

将物品i放入箱子j;

}

}

上述算法能求出需要的箱子数box_count,并能求出各箱子所装物品。下面的例子说明该算法不一定能找到最优解,设有6种物品,它们的体积分别为:60、45、35、20、20和20单位体积,箱子的容积为100个单位体积。按上述算法计算,需三只箱子,各箱子所装物品分别为:第一只箱子装物品1、3;第二只箱子装物品2、4、5;第三只箱子装物品6。而最优解为两只箱子,分别装物品1、4、5和2、3、6。

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧