高难度算法征解,分不够再加
最近公司有一个关于自动配料方面的软件,由小弟接手,关于算法部分苦思不得其解,望各位大哥大姐赐教。具体如下:
假设:
库存中有4m*3、6m*5、7m*5、8m*10、10m*8(4m*3表示4米的材料有3根),
现在用户需要3m*3、4m*4、5m*3、1m*5
问用户该怎么取材,才能使材料的切割次数最少、焊接次数最少?
[解决办法]
关注:
想了下,大致需要以下步骤
1.先遍历尺码完全匹配的板数,得出不足部分板数
2.切割次数最少优先于焊接次数最少,以不浪费余料为目的,遍历 所需尺码/已有尺码 余数为0的板,找到倍数最接近所需剩余数量的板
3.以上无法匹配的剩余板,则遍历 所需尺码/已有尺码 余数不为0的板,找到最小匹配的板
4.以上无法匹配,则需要焊接,遍历出 只需一次焊接的板,即板A+板B=板c,其次是需要焊接N次的板,直到所有的板达到
[解决办法]
如果用户需要只是3m*3,用zlt982001(乐天) 的思路当然可以,但“用户需要3m*3、4m*4、5m*3、1m*5 ”,还要考虑“用户需要”的组合就是库存中的一种,如库存中有7m的,用户需要3m和4m的,哪么只需要切割一次就行了。
[解决办法]
我的一点想法:
1: 首先去掉库存中相同的。得到一个新的问题。
2: 然后把所有用户需求的长度相加,得到一个自然数A.
3: 从库存中分解自然数A(即把A表示为一些库存中的长度之和),如果可以分解,得到所有分解的组合。不能分解,则求最接近的数据。(具体怎么分解,可以用回朔)。
4:对所有组合,求取焊接次数,求出焊接次数最少的。
5:如果最少焊接次数有相同的,求出切割次数。则切割次数最少的,得到最优解。
其中1,2最简单。3,4,5具体怎么做最好我没想清楚。
大家看看整体思路对不?
[解决办法]
选择第一个条件(切割次数最少)作为约束;
然后安以下进行优先分配:
1。刚好有同样的长度(要求的和库存的)的钢材。(直接加减)
2。两个要求长度(包括两个自己本身)之和等于钢材长度
3。三个。。。。。。。
4。四个,,,,
依次类推。这样绝对是要求的裁减数和废料最少(实际是没有废料)。
然后不能组合的。
在废料最少的情况下进行计算(切割次数少作为前提)。
1。两两组合,与储备钢材长度要求最少的,进行切割
2。三个。。。。。。。。。。
。。。。。。。
当然也可以增加一些判断,这里就不细说了。
[解决办法]
指出这个题中矛盾的2点:
1。这个题要求剩尽量少的废料,因为可以焊接,所以,不存在废料。要么干脆就把条件改为,如果某根材料,切割后,剩余长度比客户需求最短长度短,那么即视为废料,去掉可以焊接的条件,免得引起混乱。
2。仓库中每种长度的材料的数量的不确定性。而题目的要求似乎是每种长度材料都应该在解完题后,还应该有剩余,这必然导致算法的不确定性,这样是找不到最优化切割方法的。