|
本帖最后由 aimisiyou 于 2019-7-17 15:16 编辑
我根据自己的算法手工可以算出较优解,时间也就几分钟而已。
比如原材料规格2m,毛坯规格及数量要求分别为0.8m10根,0.6m4根,1.5m65根,0.7m6根,0.45m7根,0.2m76根。先按数量从多到少排列((0.2 76)(1.5 65)(0.8 10)(0.45 7)(0.7 6)(0.6 4)),然后合并列出每种下料方式剩下的余料长
即((0.2 76)(1.5 65)(0.8 10)(0.45 7)(0.7 6)(0.6 4))
=((1.5 0.2) 65 0.3)(0.2 11)(0.8 10)(0.45 7)(0.7 6)(0.6 4))
=((1.5 0.2) 65 0.3)(0.8 0.2) 10 1)(0.45 7)(0.7 6)(0.6 4)(0.2 1))
=(((1.5 0.2) 65 0.3)((0.8 0.2) 10 1)((0.7 0.45 ) 6 0.85)(0.6 4)(0.45 1)(0.2 1))
=(((1.5 0.2) 65 0.3)((0.8 0.2) 10 1)((0.7 0.45 ) 6 0.85))((0.6 0.6 0.6) 1 0.2)((0.6 0.45 0.2)1 0.75)) ;;;然后按预料从小到大排列=( ((0.6 0.6 0.6) 1 0.2) ((1.5 0.2) 65 0.3) ((0.6 0.45 0.2) 1 0.75) ((0.7 0.45 ) 6 0.85) ((0.8 0.2) 10 1));;;从第一项开始,余料0.2m>=最小毛坯0.2m,将最后一个0.2m迁移往前,依次往后,尽量使得余料小于最小毛坯长度(核心思想即若是后续零件往前移可以使整体更紧凑,那么就将该零件往前移)。
……
最终得到( ((0.45 0.45 0.45 0.45 0.2) 1 0) ((0.6 0.2 0.2 0.2 0.2 0.2 0.2 0.2) 1 0) ((0.8 0.8 0.2 0.2)1 0)((0.6 0.6 0.6 0.2)1 0)((0.8 0.7 0.45) 2 0.05)
((1.5 0.45) 1 0.05) ((1.5 0.2 0.2) 32 0.1) ((1.5 0.2) 1 0.3) ((1.5) 31 0.5) ((0.8 0.7) 4 0.5) )
最前面几项余料小于最小毛坯0.2,从((1.5 0.2)1 0.3)开始余料均大于最小毛料,若将前面 ((1.5 0.2 0.2) 32 0.1)中的0.2迁移过来,余料由0.3变为0.1,但((1.5 0.2 0.2) 32 0.1)中的预料为0.1,即迁移后对整体没有改进,所以不予迁移。以此类推。
故总根数为1+1+1+1+2+1+32+1+31+4=75根
对比EXCEL结果74根,发现须补充几条规则:1若迁移后对整体没一影响,但将前面较小的零件移至后面了,这种情况还是要迁移的。如(……(0.6 0.2 0.2 0.2 0.2 0.2 0.2 0.2)1 0)……((0.8 0.8)2 0.4)),即迁移后(……((0.8 0.8 0.2 0.2)2 0)……((0.6 0.2 0.2 0.2)1 0.8))转化为;2、余料(大于最小毛坯长)须两极分化,一个小,一个大,而不能合并取平均,如((0.8 0.7)2 0.5)应为(((0.8 0.8)1 0.4)((0.7 0.7) 1 0.6)。
故( ((0.45 0.45 0.45 0.45 0.2) 1 0) ((0.6 0.2 0.2 0.2 0.2 0.2 0.2 0.2) 1 0) ((0.8 0.8 0.2 0.2)1 0)((0.6 0.6 0.6 0.2)1 0)((0.8 0.7 0.45) 2 0.05)
((1.5 0.45) 1 0.05) ((1.5 0.2 0.2) 32 0.1) ((1.5 0.2) 1 0.3) ((1.5) 31 0.5) ((0.8 0.7) 4 0.5) )=( ((0.8 0.8 0.2 0.2)1 0) ((0.6 0.6 0.6 0.2)1 0) ((0.6 0.2 0.2 0.2 0.2 0.2 0.2 0.2) 1 0) ((0.45 0.45 0.45 0.45 0.2) 1 0) ((1.5 0.45) 1 0.05) ((0.8 0.7 0.45) 2 0.05) ((1.5 0.2 0.2) 32 0.1) ((1.5 0.2) 1 0.3)((0.8 0.8) 2 0.4) ((1.5) 31 0.5) ((0.7 0.7) 2 0.6) )
=( ((0.8 0.8 0.2 0.2)1 0) ((0.6 0.6 0.6 0.2)1 0) ((0.45 0.45 0.45 0.45 0.2) 1 0) ((1.5 0.45) 1 0.05) ((0.8 0.7 0.45) 2 0.05) ((1.5 0.2 0.2) 32 0.1) ((1.5 0.2) 1 0.3)((0.8 0.8 0.2 0.2) 2 0) ((1.5) 31 0.5) ((0.7 0.7) 2 0.6) ((0.6 0.2 0.2 0.2) 1 0.8))
=( ((0.8 0.8 0.2 0.2) 3 0) ((0.6 0.6 0.6 0.2)1 0) ((0.45 0.45 0.45 0.45 0.2) 1 0) ((1.5 0.45) 1 0.05) ((0.8 0.7 0.45) 2 0.05) ((1.5 0.2 0.2) 32 0.1) ((1.5 0.2) 1 0.3)((1.5) 31 0.5) ((0.7 0.7 0.6) 1 0) ((0.7 0.7 0.2 0.2 0.2) 1 0))
=( ((0.8 0.8 0.2 0.2) 3 0) ((0.7 0.7 0.6) 1 0) ((0.7 0.7 0.2 0.2 0.2) 1 0)((0.6 0.6 0.6 0.2)1 0) ((0.45 0.45 0.45 0.45 0.2) 1 0) ((1.5 0.45) 1 0.05) ((0.8 0.7 0.45) 2 0.05) ((1.5 0.2 0.2) 32 0.1) ((1.5 0.2) 1 0.3)((1.5) 31 0.5) )
此时无法迁移结束运算。总根数为3+1+1+1+1+1+2+32+1+31=74,根数是最少的(虽然下料方式数不是最少的,但可以肯定下料总根数是最优的)。
|
-
|