Algorithm 最优组合切割算法

Algorithm 最优组合切割算法,algorithm,optimization,language-agnostic,Algorithm,Optimization,Language Agnostic,输入:我有一个10米的主长度,我有需要切割成3米、4米、5米尺寸的产品 我尝试编写一个算法,为我生成下表(最佳长度): 我知道它是如何工作的,但我不知道如何将其转换为代码。 我需要一些伪代码或帮助(我应该使用递归吗)?这里是一个天真的尝试。在已知范围内进行彻底搜索 masterLength = 10 print "3m 4m 5m Waste" for l3m = 0 to floor(masterLenth/3) { for l4m = 0 to floor(masterLengt

输入:我有一个10米的主长度,我有需要切割成3米、4米、5米尺寸的产品

我尝试编写一个算法,为我生成下表(最佳长度):

我知道它是如何工作的,但我不知道如何将其转换为代码。


我需要一些伪代码或帮助(我应该使用递归吗)?

这里是一个天真的尝试。在已知范围内进行彻底搜索

masterLength = 10

print "3m 4m 5m Waste"

for l3m = 0 to floor(masterLenth/3)
{
    for l4m = 0 to floor(masterLength/4)
    {
        for l5m = 0 to floor(masterLength/5)
        {
            usedLength = l3m*3 + l4m*4 + l5m*5
            waste = masterLength - usedLength
            if (waste<3 and waste>=0)
            {
                print l3m,l4m,l5m,waste
            }
        }
    }
}
masterLength=10
打印“3米4米废物”
对于l3m=0至地板(masterLenth/3)
{
对于l4m=0至地板(主长度/4)
{
对于l5m=0至地板(主长度/5)
{
使用长度=l3m*3+l4m*4+l5m*5
浪费=母版长度-使用长度
如果(废物=0)
{
打印l3m、l4m、l5m、废料
}
}
}
}
[编辑]略有改进,减少了搜索空间

print "3m 4m 5m Waste"

masterLength = 10
remaining = masterLength

for l3m = 0 to floor(remaining/3)
{
    remaining = remaining-l3m*3
    for l4m = 0 to floor(remaining/4)
    {
        remaining = remaining-l4m*4
        for l5m = 0 to floor(remaining/5)
        {
            waste = remaining - l5m*5
            if (waste<3 and waste>=0)
            {
                print l3m,l4m,l5m,waste
            }
        }
    }
}
打印“3米4米废物”
母版长度=10
剩余长度=母版长度
对于l3m=0至楼层(剩余/3)
{
剩余=剩余-l3m*3
对于l4m=0至楼层(剩余/4)
{
剩余=剩余-l4m*4
对于l5m=0至地板(剩余/5)
{
废物=剩余-l5m*5
如果(废物=0)
{
打印l3m、l4m、l5m、废料
}
}
}
}

用于此的算法是线性优化。这是一个很好的起点,我想min(Waste)是个不错的选择,但也许你只是想要所有可能的组合,其中1*3m和Waste 7是一个完美的法律答案。
我理解它的工作原理。
——如果这是真的,那么你应该已经有了一个伪代码。@Tool好的,那么,请写下你的目标。不同输入大小的所有组合?只生成您已有的表?是否需要生成包含所有可能组合的表?我可以想象,对于非琐碎的输入,这将快速增长。你能跳过表格,朝着你的最终目标前进吗?我想这将是找到一个最佳的切割组合。不是所有可能的,只有最佳的组合,即1 0是无效的,因为你仍然可以添加其他列而不超过10个限制。你可以通过将l4m=0的循环更改为
,以改善这一点((masterLength-l3m*3)/4)
对于l5m=0到地板((masterLength-l3m*3-l4m*4)/5)
此外,
usedLength=l3m*3+l3m*4+l3m*5
应该是
usedLength=l3m*3+l4m*4+l5m*5
print "3m 4m 5m Waste"

masterLength = 10
remaining = masterLength

for l3m = 0 to floor(remaining/3)
{
    remaining = remaining-l3m*3
    for l4m = 0 to floor(remaining/4)
    {
        remaining = remaining-l4m*4
        for l5m = 0 to floor(remaining/5)
        {
            waste = remaining - l5m*5
            if (waste<3 and waste>=0)
            {
                print l3m,l4m,l5m,waste
            }
        }
    }
}