【转】二维异形件排版算法介绍(二)

转自:https://bbs.huaweicloud.com/blogs/196289
【摘要】 二维不规则异形件主要有两种策略:分别是基于可行解的排样策略和基于重叠移除的排样策略。所谓基于可行解的排样策略,是指在排样过程中零件之间始终是不重叠的,而基于重叠移除的排样策略,是指在排样过程中允许零件之间发生重叠,在搜索过程中采用一定策略减少零件重叠的程度,直至最终得到可行解为止。

1       二维异形件排样算法

上一篇博客提到二维异形件排样算法涉及到高速几何算法、排样策略和优化算法,并且系统综述了临界多边形(NFP)的求解算法,感兴趣的童鞋可以查看博文:https://bbs.huaweicloud.com/blogs/175385

2       二维异形件排样策略

二维不规则异形件主要有两种策略:分别是基于可行解的排样策略和基于重叠移除的排样策略。所谓基于可行解的排样策略,是指在排样过程中零件之间始终是不重叠的,而基于重叠移除的排样策略,是指在排样过程中允许零件之间发生重叠,在搜索过程中采用一定策略减少零件重叠的程度,直至最终得到可行解为止。下面分别详细介绍。

2.1   基于可行解策略

基于可行解的排样策略的好处是排样方案总是可行的。设计该类算法需要考虑两个主要因素:零件的可行放置位置和零件摆放的评估方法。最经典的策略是“左底法”,即将零件摆放在所有可行点中最靠左的位置,若出现多个最左点,则选择最底下的位置。

如何确定零件的可行放置位置呢?上文我们知道,NFP可以表征两个简单多边形“相切”的情况,因此,当固定一个简单多边形时,第二个简单多边形可以选择其相对第一个简单多边形的NFP上的点作为可行放置点。当然,这样的点有无穷多个,因此,一般只选择NFP的顶点(也可能再加上线段中点)作为可行放置点。

你可能会有这样的疑问,当只有两个简单多边形时当然可以这样摆放,但是如果已经摆放了若干个简单多边形,再摆放下一个简单多边形时,该如何保证其不与所有的多边形都不重叠呢?这的确是一个非常好的问题,也正是开发异形件切割排版算法遇到的第一个难题。解决方案主要有两个,一是将已经排版的简单多边形合并成一个大多边形,然后再进行排版,如图1所示,二是考虑所有NFP的顶点以及NFP每条线段的交点,然后再判断这些点是否在某个NFP的内部,如果该点不在任何一个NFP内部,则该点为可行点,否则不是可行点。第一个方案的问题是,零件之间的空隙将无法再放其他的简单多边形,造成原料浪费,第二个方案的问题计算成本大。

图2-1.png

图1. 基于可行解的排样选点策略(图片来源:参考文献[1])

零件排放位置该如何评估呢?常见的方法如表1和图2所示:

表1. 异形零件摆放位置评估方法

表2-1.png

图2-2.png

图2. 零件摆放位置评估常见方法(图片来源:参考文献[2])

上述基于可行解策略得到的排样方案效果一般不会太好,还需要智能优化算法改善结果。常见的智能优化算法有遗传算法、模拟退火算法、价值修正、束搜索等方法,下面详细介绍一下束搜索方法。

图2-3.png

图3. 束搜索方法示意图(图片来源:参考文献[3)

束搜索(Beam Search)是一种启发式图搜索方法,在每一步深度扩展的时候,剪掉一些质量比较差的节点,留下一些质量较高的节点。这样就减少了空间消耗,并提升了时间效率。具体而言,如图3(a)所示,束搜索使用广度优先策略创建搜索树,在树的每一层,按照局部启发式评价方法对节点进行排序,留下预先指定个数(filter width)的节点,而后再对这些节点进行全局启发式评价,再次留下预先指定个数(beam width)节点。仅这些节点在下一层次继续扩展,其余节点就被剪掉了。图3(b)展示了filter width=3,beam width=2时的搜索过程。束搜索评价函数采用顺序搜索评价函数加和模式,选择表1中Incentive列中的L1和R1,Balanced列中的O2,令评价函数等于L1+R1-O2。

束搜索还需要考虑零件的排序,常见的零件排序方法有如下几种:(1)面积;(2)长度;(3)宽度;(4)周长;(5)凸包面积;(6)包络矩形面积等等。一般采用零件面积进行排序。

2.2   基于重叠移除的排样策略

所谓重叠移除算法,如图4示,是指在初始可行解的基础上,减少原料长度,并通过交换、平移等邻域搜索技术改变当前的排版方案,在改变时允许裁片之间发生重叠,然后采用分离技术消除重叠,得到改进可行解。上述过程不断交替进行,直到达到算法终止条件为止。

图2-4.png

图4. 重叠移除方法示意图(图片来源:参考文献[4])

首先,使用启发式方法得到一个可行解,假设原料长度为L。若得到了可行解,则缩小原料长度,若没有得到可行解,则适当增加原料长度。之后,扰动当前解,实施上述优化程序。该过程迭代进行,直到达到算法终止条件。最终选择原料长度最小的可行解作为算法的输出。

重叠移除排版算法的详细介绍将在后续博客中更新,欢迎大家关注。

参考文献

[1] Oliveira J F, Gomes A M, Ferreira J S. TOPOS–A new constructive algorithm for nesting problems[J]. OR-Spektrum, 2000, 22(2): 263-284.

[2] Bennell J A, Song X. A beam search implementation for the irregular shape packing problem[J]. Journal of Heuristics, 2010, 16(2): 167-188.

[3] Bennell J A, Song X. A beam search implementation for the irregular shape packing problem[J]. Journal of Heuristics, 2010, 16(2): 167-188.

[4] Elkeran A. A new approach for sheet nesting problem using guided cuckoo search and pairwise clustering[J]. European Journal of Operational Research, 2013, 231(3): 757-769.

登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:huaweicloud.bbs@huawei.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决用户控件循环引用的笨办法

在上一篇中提到使用MagicAjax开发了一个项目,因为做这个项目之前对MagicAjax不是很了解,在里面使用了用户控件,我发现这是一个很致命的错误,用户控件在MagicAjax中用起来很痛苦.因我们的项目不是简单的只要求"看起来像"没有刷新页面,其中一个主要的页面有那么一点点复…

【转】介绍一些免费/开源的医学影像后处理工具

转自:https://blog.csdn.net/liaopiankun0618/article/details/84328331 来源:融视影像科技 综述 医学影像的处理有两个特质。一是复杂,整个处理流程涉及多种算法,需要调整的参数较多。二是发展快,从采集、重建到后…

android 安卓市场,安卓市场(Android Market).doc

安卓市场(Android Market)安卓市场(Android Market)Android (HiMarket) China market is the earliest and largest Android software and online game download platform, Netdragon well-known products, provide good service for users of mobile phone software. Since it…

IROM 浅见

IROM其实是三星已经固化在CPU里面的一段代码,我们要做的事情就是提供一段可以供IROM读取的8K代码程序,至于这8K代码放在哪里,由CPU的相关引脚决定(OM1-OM4,GPN13-GPN15)。也就是说从哪里启动的意思。 如果从…

LINQ是死是活?——很奇怪为什么会有这样的话题?

LINQ是死是活??? 如果我问您:机器代码死了吗?汇编死了吗?C死了吗?VB6.0死了吗?Delphi死了吗?您可能会觉得我很无聊。所以我觉得“LINQ是死是活”的说法也很奇怪? LINQ诞…

android gradle 语法,Gradle 1.语法

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?gradle 语法解析:gradle的语法十分简洁,以至于看起来跟像是配置文件。先看一个简单的android项目完整的gradle脚本:build.gradle123456789101112131415…

【转】二维异形件排版算法介绍(三)

转自:https://bbs.huaweicloud.com/blogs/203947 【摘要】 相比于基于可行解的排样算法,重叠移除算法在改变解的状态时,允许零件之间发生重叠,然后采用分离技术消除重叠,直到达到算法的终止条件为止。重叠移除算法的关…

WinCE6.0中应用程序如何直接访问物理空间

在实际开发过程中,经常希望能在应用程序中直接读写设备的物理空间。以前在做WinCE6.0下的MEMMgr时通过秘密加载一个内核态驱动实现了这个需求。但这种方式有一个明显的缺陷,每次读写都必须经由它才能完成。如果只是读取GPIO,那问题不算大。如…

开博之文

逛园子很久了,读而不写非礼也。分享技术,交流经验,体味人生,本博主旨,此为09年的开年大事。转载于:https://www.cnblogs.com/imstand/archive/2009/01/11/1373712.html

【转】Dicom格式文件解析器!!!!!!!

转自:https://www.cnblogs.com/assassinx/archive/2013/01/09/dicomViewer.html Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯的问题 只讲*.dcm 也就是diocm格式文件的读取,读取本身是没啥难度的 无非就是字节码数据流处理。只不过确…

android 设置view最大高度,android-在RecyclerView上设置最大高度

我有一个对话框片段,其中包含线性布局,其中涉及RecyclerView上方的titleText,在最底部,recyclerView下方有一个按钮.由于recyclerView根据适配器设置的项目数展开或折叠,因此按钮有时会被截断并且不再显示在屏幕上,因为recyclerView仅覆盖整个屏幕.我的问题是,有没有一种方法可…

【转贴】利用 Javascript 获取 URL 参数(适合IE、FF)

.  ... .../test.html?str123456如何用Javascript接收类似上面的url参数呢?这个问题网上有很多答案,看了看,主要有两种,一个是利用字符串的截取,另一种是利用正则表达式。[正则式&#xff3d…

【WinCE】流设备驱动简介及GPIO驱动的实现

流设备驱动实际上就是导出标准的流接口函数的驱动,这是文档上面的定义。在WinCE中,所有的流设备都导出流设备接口,这样WinCE中的Device Manager可以加载和管理这些流设备驱动。 流设备驱动的架构如图: 首先我声明一下,…

android contentprovider api,Content Provider Basics

一个内容提供者访问数据的中央资源库。提供者是应用程序的一部分,提供自己的操作数据的UI。然而,内容提供者主要是被其他应用程序引用,通过提供者客户对象访问提供者。提供者和提供者客户端为数据提供一个一致的,标准的接口&#…

【转】医学影像调窗技术!!!!

转自:https://www.cnblogs.com/assassinx/p/3139505.html 在年初的时候做过一个dicom格式文件解析,当时只是提了下。看着跟别人的显示出来也差不多 其实是我想太简单了。整理了下思路 这里提供正确的调窗代码。 医学影像 说得挺高科技的 其实在这个过程…

开始-运行 下常用快捷命令

在“开始”菜单上单击“运行“,输入 1. eventvwr.msc /s 打开事件查看器 (可查看系统日志) 2.gpedit.msc 打开组策略 示例:在Windows Server 2003中关闭系统事件跟踪程序: 单击“开始→运行”,输入gped…

解决6410 WINCE6 应用层调用SetSystemPowerState api关机无效的问题

6410平台下的wince6系统,在应用层中使用SetSystemPowerState api函数关机发现无效。 应用层调用如下: [cpp]view plaincopy SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE); 注:该调用需要引用pm.h头文件,该头文件在…

【转】理解字节序 大端字节序和小端字节序

转自:https://www.cnblogs.com/gremount/p/8830707.html 以下内容参考了 http://www.ruanyifeng.com/blog/2016/11/byte-order.html https://blog.csdn.net/yishengzhiai005/article/details/39672529 1. 计算机硬件有两种储存数据的方式:大端字节序…

Web-DispatcherServletUrlPatterns

Web-DispatcherServletUrlPatterns 在MANIFEST.MF文件中指定了Web-DispatcherServletUrlPatterns时千万要注意它的规则,首先它必须是符合servlet的url-pattern的,其规则如下: 在web.xml文件中,以下语法用于定义映射: …

WCHAR char CString等常用类型互转

1、CString to WCHAR*: [cpp]view plaincopy WCHAR *wch (WCHAR*)str.GetBuffer(str.GetLength()); str为CString类型。 2、WCHRA* to char*: [cpp]view plaincopy memset(buf, 0, bufInLen); // WCHRA to char WideCharToMultiByte( CP_ACP, 0, wch, -1, buf,…