ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 三坛老窖

[分享] 一维下料(线材排样)软件

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2019-4-26 21:11 | 显示全部楼层
三坛老窖 发表于 2019-4-26 20:38
“当出现一个可行性组合时,例如棒料3000,组合1650+1350,然后对这个组合进行评价”——是这个意思。不过 ...

我的意思是假如有一个1650+1350组合出现,, 此组合可组100次..  是一次性组用提取最大值100  还是说只组合80次, 保留一点 用于随机组合其他数.. 避免前期把最佳组合用完  后期无数可组.

我理解能力太差了..  对你说的这个 生成一个模式对模式进行评价保留最佳模式 一直想不透

目前797那组数据一直无法得到

生成100个方案大概60秒左右, 798出现概率为3%~4%   799 35%左右 800 45%左右.

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-26 22:46 | 显示全部楼层
本帖最后由 三坛老窖 于 2019-4-26 23:05 编辑
_东方未明_ 发表于 2019-4-26 21:11
我的意思是假如有一个1650+1350组合出现,, 此组合可组100次..  是一次性组用提取最大值100  还是说只组合 ...

是一次性组用提取最大值100

"生成一个模式对模式进行评价保留最佳模式"是3个步骤:
1、生成一个模式:内层循环获得一个模式,即1650+1350组合
2、对模式进行评价:依据该模式(组合)的有效长度、最大可重复使用次数(=MIN(1650需求8、1350需求3)=3)、模式中包含的零件数(=2)计算评价值。
3、保留最佳模式:与已有的最好评价值比较,如果此模式的评价值优于之前的最好评价值,则用此模式替换之前的最优模式。

这是我这个程序的核心内容,在之前的帖子中有较多的讨论,参看28、73楼。

TA的精华主题

TA的得分主题

发表于 2019-4-26 23:06 | 显示全部楼层
三坛老窖 发表于 2019-4-26 22:46
是一次性组用提取最大值100

"生成一个模式对模式进行评价保留最佳模式"是3个步骤:

谢谢你的解释,我再去爬楼消化一下.

TA的精华主题

TA的得分主题

发表于 2019-4-27 09:27 | 显示全部楼层
雖然不是做制造業,但看看還是覺得很厲害
雖然我沒有用,還是看看增長知識

TA的精华主题

TA的得分主题

发表于 2019-7-16 22:54 | 显示全部楼层
一维下料问题的核心就是排位、匹配、排位、匹配……过程,每次将其中一根上余料少的排列方式往前移,直至无法移动结束。所得结果为最优解。
举个简单例子来,原材料两种规格9m和12m,毛坯长度规格和数量分别为2.2m10根,3.1m9根,5.2米6根。先按一种规格9m计算
即lst='((2.2 2.2 2.2 2.2) 2 0.2)((5.2 3.1) 6 0.7)((3.1 3.1 2.2) 1 0.6)((3.1 2.2) 1 2.7)  
=((2.2 2.2 2.2 2.2) 2 0.2)((3.1 3.1 2.2) 1 0.6)((5.2 3.1) 6 0.7)((3.1 2.2) 1 2.7))
此时利用率为(2.2*10+3.1*9+5.2*6)/(9*(2+1+6+1))=90.11%

原材料按两种规格9m和12m下料,最终结果如图,即需要5根12米的,3根9m的,所得的利用率最高,(2.2*10+3.1*9+5.2*6)/(12*5+9*3)=93.21%.
234.png
235.png
678.png

TA的精华主题

TA的得分主题

发表于 2019-7-17 09:53 | 显示全部楼层
本帖最后由 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,根数是最少的(虽然下料方式数不是最少的,但可以肯定下料总根数是最优的)

111.png

TA的精华主题

TA的得分主题

发表于 2019-7-17 11:33 | 显示全部楼层
那么有个问题,即若迁移后对整体没影响,但会将较大毛坯和较小毛坯同时后移,此时该不该发生迁移呢?
如(……((1.5  0.3  0.2)1 0)……((0.6 0.6 0.5)1 0.3)……)?
若前面迁移项中每项均不大于后面迁移项中的最大值,显然迁移。
感觉视后面的情况而定,如果后面有项差值大于1.5,那么就迁移,否则不迁移。
即(……((1.5  0.3  0.2)1 0)……((0.6 0.6 0.5)1 0.3)……(()K   1.6)……)时迁移。

TA的精华主题

TA的得分主题

发表于 2019-7-17 12:09 | 显示全部楼层
本帖最后由 aimisiyou 于 2019-7-17 12:10 编辑

又发现几条迁移规则:
1、当余料相同且项内最小毛坯相同时,按各项内最大毛坯长度由大到小排列;
2、当余料相同且项内最大、最小毛坯长度相同时,按最小毛坯个数由少到多排列。
故( ((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)……)正确的排位为( ((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) ((0.8 0.7 0.45) 2 0.05)……)

TA的精华主题

TA的得分主题

发表于 2019-7-17 12:20 | 显示全部楼层
本帖最后由 aimisiyou 于 2019-7-17 12:21 编辑

((3.62  3.52 1.72) 110 3.14))
=((3.62  3.52 1.72 1.72) 55 1.72) (3.62  3.52) 55 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 27 0) ((3.62 3.52 1.72 1.72) 1 1.72) ((3.62  3.52 1.72) 27 3.14)(3.62  3.52) 55 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 28 0) ((3.62  3.52 1.72) 26 3.14)(3.62  3.52) 56 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 28 0) ((3.62  3.52 1.72 1.72) 13 1.72)  ((3.62  3.52) 13 4.86)  (3.62  3.52) 56 4.86) )=((3.62  3.52 1.72 1.72 1.72) 28 0) ((3.62  3.52 1.72 1.72) 13 1.72)  ((3.62  3.52) 69 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 28 0) ((3.62  3.52 1.72 1.72 1.72) 6 0) ((3.62  3.52 1.72 1.72) 1 1.72) ((3.62  3.52 1.72 ) 6 3.14)   ((3.62  3.52) 69 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 34 0) ((3.62  3.52 1.72 1.72) 1 1.72) ((3.62  3.52 1.72 ) 6 3.14)   ((3.62  3.52) 69 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 34 0) ((3.62  3.52 1.72 1.72 1.72) 1 0) ((3.62  3.52 1.72 ) 5 3.14)   ((3.62  3.52) 69 4.86)  ((3.62  3.52) 1 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 35 0) ((3.62  3.52 1.72 ) 5 3.14)   ((3.62  3.52) 70 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 35 0) ((3.62  3.52 1.72 1.72 ) 2 1.72) ((3.62  3.52 1.72 ) 1 3.14) ((3.62  3.52) 2 4.86)   ((3.62  3.52) 70 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 35 0) ((3.62  3.52 1.72 1.72 ) 2 1.72) ((3.62  3.52 1.72 ) 1 3.14)  ((3.62  3.52) 72 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 36 0) ((3.62  3.52 1.72 1.72 ) 1 1.72) ((3.62  3.52) 1 4.86)  ((3.62  3.52) 72 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 36 0) ((3.62  3.52 1.72 1.72 ) 1 1.72) ((3.62  3.52) 73 4.86) )
=((3.62  3.52 1.72 1.72 1.72) 36 0) ((3.62  3.52 1.72 1.72 ) 1 1.72) ((3.62  3.52 3.62) 24  1.24)((3.52 3.62 3.52)  24 1.34) ((3.62 3.52) 1 4.86))
=((3.62  3.52 1.72 1.72 1.72) 36 0)((3.62  3.52 3.62) 24 1.24) ((3.52 3.62 3.52)  24 1.34)((3.62  3.52 1.72 1.72 ) 1 1.72)  ((3.62 3.52) 1 4.86))
=((3.62  3.52 1.72 1.72 1.72) 36 0)((3.62  3.52 3.62) 25  1.24) ((3.52 3.62 3.52)  24 1.34)((3.52 1.72 1.72 ) 1 5.04))
除最后一项(仅一根)外,其余每项差值均小于最小毛坯长度,故程序结束。程序运行结果根数为36+25+24+1=86(估计是最优解吧),理论值(3.62+3.52+1.72)*110/12=81.21
而EXCEL程序运算结果却为92根,偏差有点大。


补充内容 (2019-7-20 12:34):
核算错误了。最少根数应该还是92根。
112.png

TA的精华主题

TA的得分主题

发表于 2019-7-26 22:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

传一下你的excel吧,看看
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-17 22:00 , Processed in 0.053259 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表