基于遗传算法二维下料问题/矩形件排样/matlab程序

2024-06-13 09:58

本文主要是介绍基于遗传算法二维下料问题/矩形件排样/matlab程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于遗传算法的二维板材切割下料优化问题/matlab程序

关键词: 遗传算法, 二维板材切割, matlab

引言

二维板材切割问题在实际的工程中有很多的应用,该问题基本等同于矩形件优化排样,具体是指将若干尺寸不相同的矩形零件在给定的矩形板材上以最优的方式排布,要求所有待排零件都必须排放在板材内,且各个零件之间不发生重叠,并满足一定的工艺要求.排样问题普遍存在于工程领域中,如钣金下料、玻璃切割、造船、车辆、家具生产、报刊排版、服装和皮革裁剪等.最优的排样方案可以最大限度地节约材料、提高材料利用率,在经济上制造可观的效益.排样问题属于典型的组合优化问题,从理论上讲,该类问题属于具有最高计算复杂性的优化计算问题,即 NP完全问题.对于 NP完全问题,以目前计算理论和方法,在可行的时间界限内不可能找到问题的最优解,只能求其局部最优的近似解.
遗传算法是一种全局随机搜索算法,它借鉴了生物界的自然选择思想和自然遗传机制,将问题的可行解构成种群,把每一个可能的解看作种群的个体,算法运行时在整个解空间里随机搜索,并按一定的评估策略(或适应度函数)对每一个个体做出评价,然后不断地使用选择、交叉、变异3个遗传算子来进化问题的解,直至产生最优解.其优点是:强调概率转移规则,具有快速随机的全局搜索能力,鲁棒性强.缺点是:对于系统中的反馈信息利用不够,当求解到一定范围时往往做大量的冗余迭代,求解效率低。
本文采用遗传算法对二维板材切割/矩形件优化排样问题进行优化求解

遗传算法实现

遗传算法设计如下:

  1. 编码:采用十进制整数编码方式.
  2. 适应度函数:将适应度函数定义为f® = Area / Area1,
    其中,Area是待排入矩形零件的面积总和,Area1是所得排样图高度轮廓线以下的矩形板材面积.
  3. 初始种群:使用随机函数来生成一定数量的十进制整数序列组成父辈群体,设定种群规模 M=50.
  4. 交叉算子:采用单点交叉和双点交叉
    .设置交叉概率pc=1,单点交叉与双点交叉各占一半.
  5. 变异算子:采用位置变异和旋转变异
    .设置位置变异概率pm1=0.1和旋转变异概率pm2=0.1.
  6. 选择算子:根据适应度函数值从大到小排列执行完交叉、变异操作的个体,选择前 M 个个体组成下
    一代父辈群体.
  7. 结 束 条 件:设置迭代多少代.设置maxgen = 200.

流程图

整个算法的流程图,基本如下图所示:
在这里插入图片描述

算例

在一块高10m,宽度没有没有限制的板材上,切割出一定数量的以下两种规格的零件,并使所消耗的板材的宽度最小,或容积利用率最大。

  1. 零件1:高度1m,宽度2m,个数10
  2. 零件2:高度1.5m,宽度2.5m,个数30

Matlab程序

%     Author:    怡宝2号			博士猿工作室
%     淘宝链接:  https://shop437222340.taobao.com/index.htm?spm=2013.1.w5002-16262391244.6.733e1fb4LF2f58%     Use:       用遗传求解二维板材物料切割问题
%                物料参数视自己的具体情况而定。
%     Illustrate:输入变量(must):
%                                initial:零件的相关信息
%                                parameter:板材参数
%
%       Can—changed parameter: 
%                                Option:遗传算法的相关参数
%                                Option.NIND:蚁群的规模
%                                Option.MAXGEN:蚁群的最大迭代代数
%                               
%                  输出:        bestpop:最短路程对应的路径
%                                trace :最短路程
%         remark:如有疑问请咨询qq:778961303clc
clear all
close allformat compact%遗传算法参数:NIND/种群规模;MAXGEN/最大迭代代数;PC/交叉概率;PM/变异概率;GGAP/遗传代沟
Option = struct('NIND',60, 'MAXGEN', 200, 'PC', 0.85, 'PM', 0.1, 'GGAP', 0.8);
Option.w1 = 1; Option.w2 = 0;            %多目标时每个目标函数的比重//没有用到%导入数据
[initial, parameter] = initialFunc();%初始化种群
chrom = initialpop( Option.NIND, initial);%  画出各客户的初始坐标
figure();
Initial_Draw_( chrom(1:2,:), parameter, initial );%结果记录的结构体
Result = struct('mintrace',zeros( Option.MAXGEN,1),'bestpop',[]);
trace =Result;%迭代开始
gen = 1;
while gen<=Option.MAXGEN%计算目标函数[cost, fitness] = CalculateFitness_( chrom, initial, parameter, Option);%选择[selch] = Select(chrom,fitness, Option.GGAP);%随机交叉[selch] = CrossOver(selch, Option.PC);%交换变异selch = ExchangeMutation_(selch, Option.PM);%计算子代的目标函数和适应度[selcost, selfitness] = CalculateFitness_( selch, initial, parameter, Option);%重插入[chrom,cost]=reins_(chrom,selch,1,1,cost,selcost);   %也就是ObjVSel中个体目标函数越小则月容易被选择,按fitval和selfitval来进行选择%结果记录[mincost,index] = min(cost);trace.mintrace(gen) = min(cost);trace.bestpop(gen*2-1:gen*2,:) = chrom(index(1)*2-1:index(1)*2,:);disp(['共迭代',num2str( Option.MAXGEN ),'次,现在为:',num2str(gen)]);gen = gen + 1;
end%绘制寻优迭代图
figure()
plot(trace.mintrace,'--m',...'LineWidth',2);
grid off
xlabel('迭代次数')
ylabel('Cost')
title('遗传寻优','fontsize',16)%显示信息
FuncDisplay(trace);%画出最优下料图
[minvalue minindex] = min(trace.mintrace);
minchrom = trace.bestpop(minindex*2-1:minindex*2,:);
figure();
Final_Draw_( minchrom, parameter, initial );

结果

由结果可以看到,整个优化过程提高了12.785%的容积利用率。结果图如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Reference

  1. 融合蚁群算法和遗传算法的矩形件排样问题研究
  2. 矩形件排样问题的遗传算法求解
  3. 遗传算法求解立体仓库货位优化
  4. 基于遗传算法的二维板材切割下料优化问题/矩形件排样/matlab程序

这篇关于基于遗传算法二维下料问题/矩形件排样/matlab程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056974

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

问题-windows-VPN不正确关闭导致网页打不开

为什么会发生这类事情呢? 主要原因是关机之前vpn没有关掉导致的。 至于为什么没关掉vpn会导致网页打不开,我猜测是因为vpn建立的链接没被更改。 正确关掉vpn的时候,会把ip链接断掉,如果你不正确关掉,ip链接没有断掉,此时你vpn又是没启动的,没有域名解析,所以就打不开网站。 你可以在打不开网页的时候,把vpn打开,你会发现网络又可以登录了。 方法一 注意:方法一虽然方便,但是可能会有

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在

vue+elementui--$message提示框被dialog遮罩层挡住问题解决

最近碰到一个先执行this.$message提示内容,然后接着弹出dialog带遮罩层弹框。那么问题来了,message提示框会默认被dialog遮罩层挡住,现在就是要解决这个问题。 由于都是弹框,问题肯定是出在z-index比重问题。由于用$message方式是写在js中而不是写在html中所以不是很好直接去改样式。 不过好在message组件中提供了customClass 属性,我们可以利用