使用遗传算法解决一维下料问题(一、实现思路分析)

news2024/12/27 1:41:19

目录

一、前言

二、概念

三、术语定义

四、问题描述

五、实现思路

1、遗传算法

2、一维下料和遗传算法结合

六、下文预告


一、前言

三年前我就折腾过一维下料问题了,当时查遍百度、谷歌,阅尽硕博论文,最终采用自研算法解决了一维下料问题,详见“一维下料问题的研究”,算法演示详见“EasyCut一维下料系统”。当时也阅读了大量使用遗传算法解决该问题的论文,但由于效果比较差,最终放弃了该算法。

当时我还“大言不惭”的对一些论文进行了如下“批判”:

遗传算法能对下料方案有一定程度的优化,但是优化不明显,或许是哪个算子设计不合理、或者参数没有调到合适的值。(注:相关的论文中,结果数据非常优秀,但本人无法调出那么优秀的方案,所以对有些论文报怀疑态度)。

近期空下来,重拾了遗传算法,并进行了试验,下料结果较三年前有所突破。虽然比起我的自研算法还有不小差距,但起码为一维下料又贡献了一丢丢思路,也算为研究此算法的同志抛砖引玉一下。

二、概念

下料:有若干规格的原材料,要切割成一批若干规格的零件,确定一种切割方式,使得原材料用料最少、产生的废料最少。

一维下料:上面提到的规格,可以包含很多属性,比如:长度、宽度、厚度等等。所谓一维下料,只关注其中一种属性,而其它属性被认为全部相同,这样便大大降低了下料问题的处理难度。本文研究的一维下料,以长度作为优化目标。

三、术语定义

原料:用于切割的原材料,长度不定。

零件:从原料中切割下来的短料,长度不定。

废料:一根原料被使用后,剩余长度无法再用于生产任意零件。

余料:一个原料被使用后,剩余材料仍然可以在后续生产中进行零件切割。

四、问题描述

现有N段长度不等的原料(当然,也可以全部长度相等或者其中一部分长度相等),现需要切割为M段长度不等的零件,生成一种切割方案,使产生的废料最少、原料利用率最高。

五、实现思路

1、遗传算法

我们先梳理一遍遗传算法。本节基本就是遗传算法相关的八股文了,但为了后续分析,我们还是需要把概念说明白。

实际上,遗传算法就是你想的那个意思,明白了吧哈哈哈。

说点儿正经的,遗传算法的思想就是基于达尔基的。。。,不是,高尔文的。。。,不是,达尔文的进化论:适者生存、优胜略汰。那么通俗的讲,就是一个物种群体,通过一代一代的进化,最后留下来的是精英。对应到我们的算法中,这个精英就是我们追求的解。那么我们怎样把这个进化的过程抽象成计算机语言呢?伟大的算法专家为我们总结好了算法模型。

1)染色体

从生物学角度来说,每一个生物个体都有一个自己独特的染色体。遗传算法将一条解,抽象成一个染色体。所以遗传算法的最终目标,是通过一代一代的进化,找到一个最优的染色体。

2)种群

所谓种群,就是由多个生物个体,组成的一个群体。也可以简单的理解成,种群就是由一批染色体组成的群体。

从生物学角度理解,只有群体生物才能一代一代慢慢进化,或者反过来说,如果只有一个生物个体,它来不及进化可能就灭绝了。

3)交叉算子

简单理解为,两个雌雄个体,繁衍出一个新的个体。具体怎么繁衍,你懂得。

4)变异算子

简单理解为,没有变异,就没有进化。

5)选择算子

选择优秀个体让其生存下来,参与下一代的进化。

2、一维下料和遗传算法结合

一维下料到底应该如何基于遗传算法实现呢?我们分别从以上提到的五个点进行介绍。

1)染色体

由上面的分析可知,一个染色体就代表一个解,所以我们可以使用以下结构来表示一条染色体。

//染色体
public class Chromosome {
    //一个染色体包含多个元素
    private List<Element> representation;
}

//元素
public class Element {
    //原料长度
    private Integer rawLength;
    //本原料上切哪些零件
    private List<Integer> partList;
    //本原料的使用率
    private BigDecimal usedRate;
    //本原料的余料
    private Integer remainLength;
}

2)种群

如何生成初始种群?从遗传算法的原理可知,无论是交叉、还是变异、或者选择,都有随机的影子,那咱就干脆随机到底,种群初始化也使用随机策略。随机生成一群“质量”还算可以的种群,让他们进化。

3)交叉算子

交叉的实质是将两个染色体,其中的部分元素进行交叉替换,形成新的染色体。这个算子的设计,我参考了一批硕士论文,交叉过程有些复杂,下面我贴一张论文中的原图来帮助理解。需要说明几点:

第一、P1'、P2'代表交叉前的两个染色体,P1''、P2''代表交叉后新生成的两个染色体;

第二、A、B、C代表三个原料,1-9代表9个零件;

第三、其它的内容,自己意会一下下图吧。

 

4)变异算子

变异的逻辑较简单,将要变异的染色体上的元素进行重排即可。也就是说,原染色体上的零件1是从原料1上切割,零件2是从原料2上切割。重排后,可能变成零件1是从原料2上切割,零件2是从原料1上切割。

5)选择算子

选择算子采用经典的锦标赛算法。具体算法内容大家可自行百度。

六、下文预告

下一篇文章《使用遗传算法解决一维下料问题(二、源码分析)》将分析使用遗传算法解决一维下料问题的源码,敬请期待。

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

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

相关文章

天津值得信赖的python培训哪家好

近些年越来越多人涌入了互联网大厂&#xff0c;许多人选择去培训机构系统的学习Python&#xff0c;那么好的Python培训机构的标准是什么样的呢&#xff1f;我们来一点点说。 一、为什么要学python python是目前大火的的编程语言之一。至于为什么火&#xff0c;不名思意&#…

【Android】小米手机 Root全攻略:轻松获取手机最高权限

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境 1️⃣ 备份手机资源小米云服务小米助手备份方式 2️⃣ 解锁BL开启解锁等168个小时&#xff08;七天&#xff09;miflash_unlock解锁设备 3️⃣ 获取并安装MIUI完整包4️⃣ 刷机包解包&#xff0c;获取boot.img解压MIUI安装包payload…

C++ | std::tuple

std::tuple 文章目录 std::tuple成员函数及非成员函数模板参数成员函数Non-member functions非成员函数辅助类 构造函数获取元祖元素值元素个数元素的类型Reference 类模板 std::tuple 是不同类型值的固定大小集合。 它是 std::pair 的泛化。 可以当做一个结构体使用 ,不需要创…

【ChatGPT】科技革命促生互联网时代 ChatGPT浪潮打乱时代布局 人工智能新时代下的发展前景

目录 科技革命促生互联网时代 科技进步伴随着大国崛起 科技革命的发展 互联网时代的到来 ChatGPT浪潮来袭 资本市场当前的热潮 人工智能新时代下我们何去何从 开放注册两个月用户数破亿&#xff0c;ChatGPT的爆火也标志着时代的浪潮将要来袭&#xff0c;由科技革命促生的…

C语言200行代码实现简易三子棋

前言 三子棋应该是是我们最早接触到的棋类游戏&#xff0c;用C语言实现三子棋对初学者来说是一种不错的锻炼 编写三子棋只需要用到数组、函数和生成随机数的知识&#xff0c;所以比较适合成为编程学习者编写的第一个小游戏。 一.代码实现 第一部分是源码复制就可以使用&…

WiFi(Wireless Fidelity)基础(六)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

未面试蓄力,redis肝起来

目录 1、为什么要使用Redis做缓存&#xff1f;2、为什么Redis单线程模型效率也能那么高&#xff1f;3、Redis6.0为什么要引入多线程呢&#xff1f;4、Redis常见数据结构以及使用场景字符串&#xff08;String&#xff09;哈希(Hash)列表&#xff08;list&#xff09;集合&#…

【前端提效】--Chrome浏览器开发者工具 DevTools 使用技巧

介绍一下 DevTools 的一些好用的技巧&#xff0c;它能够很好地帮助你提高生产力和解决问题的能力。 1、打开命令行 或者使用&#xff1a;快捷键 Ctrl Shift P (Mac&#xff1a; ⌘ Shift P ) 命令行可以做很多事情&#xff0c;包括但不限于截图、更换主题等 2、控制 DevT…

Inno Setup Compiler的安装和使用详解

安装&#xff1a;官网最新下载最新版 最新版不支持中文哈&#xff0c;安装的时候直接选英文就好 安装注意事项&#xff1a;在安装过程中有一个 询问是否要 安装一个加密版本的&#xff08;可根据自己的需求挑选–我就没有&#xff09; 使用&#xff1a; 1.打开应用程序进入到…

【微信小程序】微信小程序的接口调入 获取太阳码 根据返回值的类型进行接收,微信接口可能直接返回图片,也可能返回一个错误信息的json,同时兼容处理这两种情况

目录 事件起因环境和工具操作过程解决办法遇到的一点问题结束语 事件起因 在开发一个关于微信小程序的过程中&#xff0c;有一个这样的需求&#xff0c;要求生成微信小程序的太阳码&#xff0c;然而这个东西的请求方式我们是这样的&#xff1a;我作为后端服务去请求这个太阳码…

【MFAC】基于紧格式动态线性化的无模型自适应控制(Matlab代码)

例题来源&#xff1a;侯忠生教授的《无模型自适应控制&#xff1a;理论与应用》&#xff08;2013年科学出版社&#xff09;。 &#x1f449;对应书本 4.2 单输入单输出系统(SISO)紧格式动态线性化(CFDL)的无模型自适应控制(MFAC) 例题4.1 题目要求 matlab代码 clc; clear al…

ASEMI代理ADXL345BCCZ-RL7原装ADI车规级ADXL345BCCZ-RL7

编辑&#xff1a;ll ASEMI代理ADXL345BCCZ-RL7原装ADI车规级ADXL345BCCZ-RL7 型号&#xff1a;ADXL345BCCZ-RL7 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;LGA-14 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;14 工作温度:-55C~105C…

HTTPS连接建立过程

目录 前言什么是HTTPSHTTPS的作用 TLS建立连接过程1、TCP三次握手2、Client Hello3、Sever Hello4、校验数字证书5、客户端回应6、服务器回应7、TCP四次挥手 前言 什么是HTTPS HTTPS&#xff0c;Hyper Text Transfer Protocol over SecureSocket Layer&#xff0c;超文本传输…

「自动化」聊起来简单,做起来难 | 谈效风生

第4期&#xff1a;“自动化”聊起来简单&#xff0c;做起来难 在上一期《如何找到现有研发体系的「内耗问题」?》中&#xff0c;我们聊了评估现有研发体系&#xff0c;正确的找到“体系内耗问题”&#xff0c;是改变研发体系的第一步。本期我们继续聊下一个关键点就是研发体系…

MIT6.824 lab4B实验记录

Background 主要是完成一个可以根据group数量&#xff0c;动态调整shard所属的group的分布式kv键值引擎。其中shard->group的配置由shardctrler集群来管理&#xff0c;底层也是通过raft group来容错&#xff08;分布式嘛&#xff09; 然后这个shardkv就是要完成的是根据sh…

哪些地方能发表计算机论文? - 易智编译EaseEditing

计算机科学领域是一个快速发展的领域&#xff0c;每年都会涌现出许多新的科技和新的研究成果。 为了保证研究成果的质量和可信度&#xff0c;科学家们通常会通过期刊来发表自己的研究成果。 SCI期刊是世界著名的科技期刊数据库&#xff0c;被认为是科技领域内的权威数据库之一…

docker 系列之 Dockerfile 文件里 cmd命令与entrypoint命令区别

文章目录 一、cmd&#xff1a;用法1&#xff1a;带有中括号的形式用法2&#xff1a;shell form&#xff0c;即没有中括号的形式 二、entrypoint&#xff1a;第一种&#xff1a;命令行模式&#xff0c;也就是带中括号第二种&#xff1a;shell模式 三、总结&#xff1a; 一、cmd&…

《人月神话》纪念典藏版撤下了以前的宣传语

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 《人月神话》作者Frederick Phillips Brooks Jr. 于2022年11月17日逝世。 清华大学出版社近期将发行《人月神话》纪念典藏版。 新版的封底如下&#xff0c;宣传语更换成了…

CleanMyMac X4.13.2.dmg最新中文版下载

它是Mac上一款美观易用的系统优化清理工具&#xff0c;也是小编刚开始用Mac时的装机必备。它能够清理系统垃圾&#xff0c;提升电脑的运行速度&#xff0c;卸载许久不用的软件&#xff0c;使其变得如新机一般流畅。 CleanMyMac X是一款专业的Mac清理软件&#xff0c;可智能清理…

al智能改写工具-ai自动生成文章软件

随着互联网的发展&#xff0c;文章编辑在不断地向自动化、高效化方向进行转变&#xff0c;一款名叫“改稿神器”的工具应运而生。它可以帮助我们快速实现全自动批量改稿&#xff0c;做到没有错别字&#xff0c;自动优化语法&#xff0c;自动插入图片&#xff0c;严格按照标准的…