【三维装箱】基于matlab遗传和模拟退火算法求解三维装箱优化问题【含Matlab源码 031期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、三维装箱简介

1 前言
三维装箱问题(Three Dimensional Container Loading Poblem)指在满足容积限制、外形几何限制和稳定性限制等条件的情况下,把一定数量体积较小的物品放入具有较大容量的一个或多个箱子,达到所用箱子数量最少、空间利用率最高、稳定性最好、装载价值最高、容重比最高等目的组合优化的问题。三维装箱问题广泛存在于运输和包装等行业的物资装载过程中,因此,如何针对实际应用需求设计具有较高操作性和装载效率的三维装箱求解算法,对于提高社会经济效益具有积极作用。

自20世纪60年代开始,三维装箱问题便因切割库存问题而提出,引起了学者关注,并被证明是具有较高复杂度的NP难问题。经过多年发展,三维装箱问题的求解不仅在枚举法、分支定界法等确定性算法上取得了进步。随着元启发式算法、遗传算法、粒子群算法等现代启发式算法的崛起,三维装箱问题的研究更加深入,逐步出现了带有多种现实约束和求解目标的复杂算法。其中,近年来具有代表性的相关研究如下所述。

Lodi等[9]受到一维装箱问题求解算法的启发,针对三维装箱问题提出了基于“先高后面积”(Height First-Area Second)的分层策略的结构式禁忌搜索算法,实验证明算法在分层堆放的情况下能得到较好的结果。Crainic等考虑了装载盒子时箱子剩余空间的描述和备选定位点的重要作用,为寻找每次装载时的合适空间位置和最优定位点,提出了极点(Extreme Points,EPS)的概念和计算方法,并设计了基于极点的三维装箱启发式算法。Karabulut[12]和Kang[13]等先后以规则长方体箱装载最大量规则长方体盒为研究目标,在设计深度、底部和左部方向优先装载(Deepest Bottom Left with Fill)物资装载策略的基础上,提出了基于遗传算法的三维装箱策略求解算法,2个研究的区别在于后者在前者的基础上,对装载剩余空间进行了更为细致的描述。Ramos等重点考虑了运输行业货物装载时静止时的纵向稳定性和行进时的横向稳定性,并提出了具有较高操作性的稳定性评价指标和基于顺序的货物装载启发式算法。

尽管三维装箱问题研究的深度和广度在不断延伸,相关研究的模型建立、算法设计和实际应用也取得了众多成果,但是一些现实约束仍难以满足,解决方法也存在较大的局限性。其中,现有求解三维装箱问题较为常用的遗传算法,在交叉算子设计、变异算子设计和进化性能等方面表现不足。

1 问题描述
1.1 基本问题描述

除球体、非规则立方体等形状盒子的装箱特例外,经典的三维装箱问题(见图1)可描述为:用一定数量的长宽高分别为Li,Wi和Hi的箱子(Container),按照一定顺序和装载规则根据不同转向逐个装入一定数量的长、宽、高分别为lj,wj和hj的盒子(Box)中,实现箱子容量的利用率最大、盒子堆放的稳定性最好、装载价值最高或容重比最恰当等其一或多种目标,并满足外形约束、容积约束、稳定性约束、盒子属性相关性约束、载重约束等实际限制。
在这里插入图片描述
图1 三维装箱问题示意
根据文献对三维装箱问题的分类法,该研究以SBSBPP类(Single Bin-Size Bin Packing Problem,有限数量单类型箱体三维装载问题)为研究对象,研究如何在单个规则长方体箱子中装载尽量多的盒子(这些盒子具有相似度较小且分散较大的特点),以最大限度地提高箱子的空间利用率。此研究旨在解决每个盒子应以何种顺序、何种方向放置在具体空间位置的问题,即提供具体的盒子装载方案。此过程需满足如下现实约束。
1)外形约束。进行装载时,所有盒子的几何顶点不能位于箱子之外,装进箱子的盒子在空间上不能发生重叠。
2)容积约束。装载盒子的总体积不能超过箱子的容积。
3)稳定性约束。装载盒子的堆放需满足重心要求,不能出现悬空或重心偏移的情况。
基本假设:盒子质量均匀分布,其质心位于其几何中心;不考虑盒子总质量超载的问题;盒子装载时应与箱子的边长方向平行(即不斜放)。

1.2 箱体最大剩余空间描述
最大剩余空间(Allowable Packing Area,简写为APA)指进行盒子装载前的最大长方体形闲置空间,每个最大剩余空间可用最靠近原点的长方体顶点三维坐标和最远离原点的长方体顶点三维坐标合并表示,全部的最大剩余空间即构成最大剩余空间集(简写为APAs)。盒子的装载是在箱子的最大剩余空间中按照一定规则进行的,最大剩余空间的刻画关系到盒子的放置和空间容纳能力,对于盒子的装载至关重要。该研究采用文献中的I-DBLF算法,完成最大剩余空间的描述。每装入一个箱子,其最大剩余空间将按照盒子的边界和x,y,z轴进行划分和更新。如图2a所示,空置箱子的最大剩余空间只有1个,表示为(0,0,0),(Li,Wi,Hi);在临原点位置装入一个长、宽、高分别为lj,wj和hj的盒子后,最大剩余空间更新为3个(见图2b—d),最大剩余空间集为{((Li-lj,0,0),(Li,Wi,Hi)),((0,0,Hi-hj),(Li,Wi,Hi)),((0,Wi-wj,0),(Li,Wi,Hi))}。最大剩余空间的计算过程较为复杂,因篇幅所限,此处不做赘述,具体可见文献。
在这里插入图片描述
图2 剩余空间示意

2 三维装箱问题求解的改进遗传算法设计
三维装箱问题本身具有较高的抽象性和复杂度,特别是解的构造、剩余空间更新、剩余空间描述等装载过程的建模为精确求解方法带来了较大难度。随着载重限制等约束条件和稳定性等求解目标的增加,分支定界和动态规划等常规方法更是无法求解。以遗传算法为代表的启发式算法在解的构造和最优解的全局搜索方面具有先天优势。此外,遗传算法通过模仿自然界物竞天择的进化机理,具有较高的自组织、自适应和自学习性。该研究以文献]所提出的编码方式和总体架构为基础,提出基于优先保持策略的改进遗传算法对三维装箱问题进行求解,以期获得更为优异的求解结果。

2.1 算法总体设计
基于优先保持策略改进遗传算法的总体流程见图3。需要说明的是,该算法以待装载盒子的顺序为算法的编码方式,在解码阶段完成具体装载顺序和装载方案的计算和生成。
在这里插入图片描述
图3 基于优先保持策略遗传算法总体流程

2.2 初始化
初始化是进行数据预处理、实现实际问题有效转化(将对象数据转化为遗传算法能识别和直接使用的形式)并完成运行环境设置的过程,此算法的初始化过程主要包括初始种群生成和计算环境初始化。

其中,计算环境初始化主要完成包括废弃变量和冗余数据的清除、算法实验数据(如箱子种类和数量、空间属性及载质量属性,盒子种类及数量、外形属性及重点等数据)的读入和算法基本参数(如迭代次数、种群数量、交叉和变异概率等)的设置,为遗传算法的运行做好准备。

种群的初始化是在编码策略的指导下完成合法初始种群的生成过程。编码是将具体的求解问题转化为遗传算法能够直接识别和操作的符号的过程,是遗传算法的核心和关键步骤。该算法采用长度等于Nb+Nc(待装载盒子数和箱子数之和)的自然数顺序编码,编码分为前后2段,分别由代表盒子顺序和箱子顺序的顺序串组成。如在一个装载过程中,假设有7个待装载的盒子和3个可用的箱子,则该编码为自然数1—7和1—3分别随机排序组成的10位数编码,如编码(6 1 4 2 5 7 3 2 3 1)表示按照盒子6最优先、盒子1次优先…盒子3末优先的顺序以一定规则(具体见“2.3解码”)装入箱子2,待达到体积、载质量或长宽高限制后,剩余盒子装入箱子3,以此类推。假设本遗传算法的种群由p个个体组成,则文中算法的种群初始化结果应为p*(Nb+Nc)个自然数组成的二维数组。

需要说明的是,此研究虽然只研究单个箱子的装载最大化,但编码中多个箱子的考量可为研究的大幅拓展和内容丰富带来更大空间,不影响该研究结果的情况下能为未来的研究打下基础。

2.3 解码
解码的目的在于将遗传算法的解空间转化到现实的问题空间,对于文中算法而言,解码的目的是翻译和解释每条染色体所代表的装箱方案(即每个盒子应按照何种顺序、装在哪个箱子、采用何种角度并放在什么位置的具体问题)。解码是该算法实现的核心,解码涉及包括APAs排序、盒子方向调整、盒子位置确定和APAs更新在内的具体的装载策略及实施方法,基本逻辑过程如下所示。

解码的基本过程:
输入参数中,Nb和Nc分别代表待装载盒子和箱子的数量,Chr为某个体(染色体),Boxes和Cons分别为包含长度、宽度、高度、质量、载质量等所有个体属性在内的盒子和箱子属性的集合。

在Step3中,完成箱子目前剩余空间集的生成和计算,为下一步的盒子装载提供可能的长方体形的备选空间;Step4中,依据最大剩余空间与箱子原点距离的远近对所有剩余空间进行排序,即考虑将盒子优先放置于箱子靠近原点的底部,实现紧凑装载的目的(对应于图3中的“APAs排序”);Step6中,若盒子的长宽高有任意条件不满足该最大剩余空间的要求,则考虑将该盒子尝试装载到下一个最大剩余空间;Step7中选择最佳放置角度的原因在于调整盒子的装载方向,至少使得装载后的最大剩余空间在一个方向上保持最小,即保持最小的装载间隙,减少空间的浪费(对应于图3中的“盒子方向调整”);Step8中,将最大剩余空间的原点作为装载盒子的原点,增加为盒子的装载属性(对应于图3中的“盒子位置确定”);Step9中,通过计算装载盒子后相关最大剩余空间的合法新增,并判定新增最大剩余空间与原最大剩余空间集是否存在包含关系,实现装载后最大剩余空间集元素的新增、删除和更新等操作(对应于图3中的“APAs更新”)。

2.4 交叉算子
通过分析不难得知,装箱过程中盒子装载后所形成的剩余空间集会对后续装载过程产生较大影响,特别是装载靠前的盒子其装载顺序的改变会为后续装载过程带来一系列“连锁反应”。为保证算法交叉时在遗传父代主要表现特征的同时避免陷入不易收敛的不稳定态,本研究在以往普通单点交叉方法的基础上,提出了面向优先保持的交叉算子。另外,如图5所示,与其他算法的交叉实现的控制不同,考虑到箱子顺序的改变会对整个迭代过程造成根本性的改变,因此文中交叉算子的实现由2个差异较大的交叉概率独立控制,即染色体盒子段(前Nb个基因)和染色体箱子段的交叉概率分别设计为pcb和数值更小的pcc。

在进行交叉时,染色体盒子段和染色体箱子段均采用基于优先保持策略的交叉法,见图4。在Step1中,2条待交叉的染色体首先分别分割为染色体盒子段和染色体箱子段,分别用2个独立的随机数对比pcb和pcc的大小(图4示例中,所生成的随机数只满足染色体盒子段交叉的条件,只进行前段染色体的交叉);Step2主要完成交叉点的选择,并由此将待交叉染色体串分别分割为m1,m2和n1,n2两子串;Step3首先完成两染色体子串主体部分的交叉,而后通过重复性检验判断交叉而来的染色体子串中的非法基因,将这些非法基因进行位置标记(如图4中ch’11存在重复基因“9”和“7”,代表盒子9和7装载了2次,显然非法),并按顺序存入待修复基因集;Step4中,分别用待修复基因集中的基因按顺序对对方非法基因位置的基因进行替换(如图4中修复基因序列c1和c2正好分别是ch’12和ch’11所缺失的基因,按修复基因顺序进行基因替换的意义在于最大限度的保持其装载先后的变现特征),完成染色体段的修复和合法化;Step5中,拼接染色体箱子段,完成交叉,返回新的子代。

2.5 其他算子的设计和选择
1)变异算子。研究采用基因位随机交换的方式进行变异操作,即按一定概率(变异率,盒子段和箱子段分别为pmb和pmc)和比例(变异比例,盒子段和箱子段分别为rmb和rmc),从待变异的染色体盒子段和箱子段的基因中随机选择一定数量的基因(即分别为Nbrmb和Ncrmc个基因),通过位置随机互换的方式完成变异。值得注意的是,变异算子同样遵守交叉算子中的染色体分段和分别判定变异概率的基本原则,以较小的染色体盒子段变异率保证总群的基本稳定和总体收敛。
2)个体适应值的计算。研究以单个箱子装载空间利用率最大为目标,逐个完成每个箱子的装载任务,直到所有待装载盒子完成装载,因此,仅需将装载利用率最大的其中1个盒子作为分析对象,即可得出相关装载结论。个体适应值的计算设置为盒子剩余空间的比例的倒数,即:适应值=箱子容积/(箱子容积-已装载盒子总体积),适应值越大,该个体越优。
3)选择算子。研究在一般锦标赛选择法的基础上,采用精英保持的策略完成子代种群的选择与生成,即在选择过程中,为保持种群优异个体能良好保持,首先选择少数(设为比例值re)适应值居于前列的个体进入子代种群,然后再采用常规锦标赛选择法进行操作。

⛄二、遗传算法简介

1 引言
在这里插入图片描述
在这里插入图片描述
2 遗传算法理论
2.1 遗传算法的生物学基础
在这里插入图片描述
在这里插入图片描述
2.2 遗传算法的理论基础
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.3 遗传算法的基本概念
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.4 标准的遗传算法
在这里插入图片描述
在这里插入图片描述
2.5 遗传算法的特点
在这里插入图片描述
在这里插入图片描述
2.6 遗传算法的改进方向
在这里插入图片描述
3 遗传算法流程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4 关键参数说明
在这里插入图片描述

⛄三、模拟退火算法简介

1 引言
模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火算法求解组合最优化问题[1] 。模拟退火算法是一种基于MonteCarlo迭代求解策略的随机寻优算法, 其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。其目的在于为具有NP(Non-deterministic Polynomial) 复杂性的问题提供有效的近似求解算法,它克服了其他优化过程容易陷入局部极小的缺陷和对初值的依赖性。
模拟退火算法是一种通用的优化算法,是局部搜索算法的扩展。它不同于局部搜索算法之处是以一定的概率选择邻域中目标值大的劣质解。从理论上说,它是一种全局最优算法。模拟退火算法以优化问
题的求解与物理系统退火过程的相似性为基础, 它利用Metropolis算法并适当地控制温度的下降过程来实现模拟退火,从而达到求解全局优化问题的目的[2].
模拟退火算法是一种能应用到求最小值问题的优化过程。在此过程中,每一步更新过程的长度都与相应的参数成正比,这些参数扮演着温度的角色。与金属退火原理相类似,在开始阶段为了更快地最小
化,温度被升得很高,然后才慢慢降温以求稳定。
目前,模拟退火算法迎来了兴盛时期,无论是理论研究还是应用研究都成了十分热门的课题[3-7]。尤其是它的应用研究显得格外活跃,已在工程中得到了广泛应用,诸如生产调度、控制工程、机器学习、神经网络、模式识别、图像处理、离散/连续变量的结构优化问题等领域。它能有效地求解常规优化方法难以解决的组合优化问题和复杂函数优化问题,适用范围极广。
模拟退火算法具有十分强大的全局搜索性能,这是因为比起普通的优化搜方法,它采用了许多独特的方法和技术:在模拟退火算法中,基本不用搜索空间的知识或者其他的辅助信息,而只是定义邻域
结构,在其邻域结构内选取相邻解,再利用目标函数进行评估:模拟退火算法不是采用确定性规则,而是采用概率的变迁来指导它的搜索方向,它所采用的概率仅仅是作为一种工具来引导其搜索过程朝着更优化解的区域移动。因此,虽然看起来它是一种盲目的搜索方法,但实际上有着明确的搜索方向。

2 模拟退火算法理论
模拟退火算法以优化问题求解过程与物理退火过程之间的相似性为基础,优化的目标函数相当于金属的内能,优化问题的自变量组合状态空间相当于金属的内能状态空间,问题的求解过程就是找一个组
合状态, 使目标函数值最小。利用Me to polis算法并适当地控制温度的下降过程实现模拟退火,从而达到求解全局优化问题的目的[8].
2.1物理退火过程
模拟退火算法的核心思想与热力学的原理极为类似。在高温下,液体的大量分子彼此之间进行着相对自由移动。如果该液体慢慢地冷却,热能原子可动性就会消失。大量原子常常能够自行排列成行,形成一个纯净的晶体,该晶体在各个方向上都被完全有序地排列在几百万倍于单个原子的距离之内。对于这个系统来说,晶体状态是能量最低状态,而所有缓慢冷却的系统都可以自然达到这个最低能量状态。实际上,如果液态金属被迅速冷却,则它不会达到这一状态,而只能达到一种只有较高能量的多晶体状态或非结晶状态。因此,这一过程的本质在于缓慢地冷却,以争取足够的时间,让大量原子在丧失可动性之前进行重新分布,这是确保能量达到低能量状态所必需的条件。简单而言,物理退火过程由以下几部分组成:加温过程、等温过程和冷却过程。

加温过程
其目的是增强粒子的热运动,使其偏离平衡位置。当温度足够高时,固体将熔解为液体,从而消除系统原先可能存在的非均匀态,使随后进行的冷却过程以某一平衡态为起点。熔解过程与系统的能量增
大过程相联系,系统能量也随温度的升高而增大。

等温过程
通过物理学的知识得知,对于与周围环境交换热量而温度不变的封闭系统,系统状态的自发变化总是朝着自由能减小的方向进行:当自由能达到最小时,系统达到平衡态。

冷却过程
其目的是使粒子的热运动减弱并逐渐趋于有序,系统能量逐渐下降,从而得到低能量的晶体结构。

2.2 模拟退火原理
模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却。加温时,固体内部粒子随温升变为无序状,内能增大:而徐徐冷却时粒子渐趋有序,在每个温度上都达到平衡态,最后在常
温时达到基态,内能减为最小。模拟退火算法与金属退火过程的相似关系如表7.1所示。根Metropolis准则, 粒子在温度7时趋于平衡的概率为exp(-▲E/T) , 其中E为温度7时的内能, ▲E为其改变量。用
固体退火模拟组合优化问题,将内能E模拟为目标函数值,温度7演化成控制参数,即得到解组合优化问题的模拟退火算法:由初始解%和控制参数初值7开始,对当前解重复“产生新解→计算目标函数差一接受或舍弃”的迭代,并逐步减小T值,算法终止时的当前解即为所得近似最优解, 这是基MonteCarlo迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表控制,包括控制参数的初值7及其衰
减因子K、每个7值时的迭代次数I和停止条件。
在这里插入图片描述
2.3 模拟退火算法思想
模拟退火的主要思想是:在搜索区间随机游走(即随机选择点),再利用Metropolis抽样准则, 使随机游走逐渐收敛于局部最优解。而温度是Metropolis算法中的一个重要控制参数,可以认为这个参数的大小控制了随机过程向局部或全局最优解移动的快慢。Metropolis是一种有效的重点抽样法, 其算法为:系统从一个能量状态变化到另一个状态时,相应的能量从E变化到E,其概率为
在这里插入图片描述
这样经过一定次数的迭代,系统会逐渐趋于一个稳定的分布状态。
重点抽样时,新状态下如果向下,则接受(局部最优);若向上(全局搜索),则以一定概率接受。模拟退火算法从某个初始解出发,经过大量解的变换后,可以求得给定控制参数值时组合优化问题的相对最优解。然后减小控制参数7的值, 重复执行Metropolis算法,就可以在控制参数T趋于零时,最终求得组合优化问题的整体最优解。控制参数的值必须缓慢衰减。温度是Metropolis算法的一个重要控制参数, 模拟退火可视为递减控制参数7时Metro pl is算法的迭代。开始时7值大, 可以接受较差的恶化解;随着7的减小,只能接受较好的恶化解;最后在7趋于0时,就不再接受任何恶化解了。
在无限高温时,系统立即均匀分布,接受所有提出的变换。T的衰减越小, 7到达终点的时间越长; 但可使马尔可夫(Markov) 链减小,以使到达准平衡分布的时间变短。

2.4 模拟退火算法的特点
模拟退火算法适用范围广,求得全局最优解的可靠性高,算法简单,便于实现;该算法的搜索策略有利于避免搜索过程因陷入局部最优解的缺陷,有利于提高求得全局最优解的可靠性。模拟退火算法具
有十分强的鲁棒性,这是因为比起普通的优化搜索方法,它采用许多独特的方法和技术。主要有以下几个方面:
(1)以一定的概率接受恶化解。
模拟退火算法在搜索策略上不仅引入了适当的随机因素,而且还引入了物理系统退火过程的自然机理。这种自然机理的引入,使模拟退火算法在迭代过程中不仅接受使目标函数值变“好”的点,而且还能够以一定的概率接受使目标函数值变“差”的点。迭代过程中出现的状态是随机产生的,并且不强求后一状态一定优于前一状态,接受概率随着温度的下降而逐渐减小。很多传统的优化算法往往是确定性
的,从一个搜索点到另一个搜索点的转移有确定的转移方法和转移关系,这种确定性往往可能使得搜索点远达不到最优点,因而限制了算法的应用范围。而模拟退火算法以一种概率的方式来进行搜索,增加了搜索过程的灵活性。
(2)引进算法控制参数。
引进类似于退火温度的算法控制参数,它将优化过程分成若干阶段, 并决定各个阶段下随机状态的取舍标准, 接受函数由Metropolis算法给出一个简单的数学模型。模拟退火算法有两个重要的步骤:一
是在每个控制参数下,由前迭代点出发,产生邻近的随机状态,由控制参数确定的接受准则决定此新状态的取舍,并由此形成一定长度的随机Markov链; 二是缓慢降低控制参数, 提高接受准则, 直至控制参数趋于零,状态链稳定于优化问题的最优状态,从而提高模拟退火算法全局最优解的可靠性。
(3)对目标函数要求少。
传统搜索算法不仅需要利用目标函数值,而且往往需要目标函数的导数值等其他一些辅助信息才能确定搜索方向:当这些信息不存在时,算法就失效了。而模拟退火算法不需要其他的辅助信息,而只是
定义邻域结构,在其邻域结构内选取相邻解,再用目标函数进行评估。

2.5模拟退火算法的改进方向
在确保一定要求的优化质量基础上,提高模拟退火算法的搜索效率,是对模拟退火算法改进的主要内容[9-10]。有如下可行的方案:选择合适的初始状态;设计合适的状态产生函数,使其根据搜索进程的
需要表现出状态的全空间分散性或局部区域性:设计高效的退火过程;改进对温度的控制方式:采用并行搜索结构;设计合适的算法终止准则:等等。
此外,对模拟退火算法的改进,也可通过增加某些环节来实现。
主要的改进方式有:
(1)增加记忆功能。为避免搜索过程中由于执行概率接受环节而遗失当前遇到的最优解,可通过增加存储环节,将到目前为止的最好状态存储下来。
(2)增加升温或重升温过程。在算法进程的适当时机,将温度适当提高,从而可激活各状态的接受概率,以调整搜索进程中的当前状态,避兔算法在局部极小解处停滞不前。
(3)对每一当前状态,采用多次搜索策略,以概率接受区域内的最优状态,而不是标准模拟退火算法的单次比较方式。
(4)与其他搜索机制的算法(如遗传算法、免疫算法等)相结合。可以综合其他算法的优点,提高运行效率和求解质量。

3 模拟退火算法流程
模拟退火算法新解的产生和接受可分为如下三个步骤:
(1)由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前解经过简单变换即可产生新解的方法。注意,产生新解的变换方法决定了当前新解
的邻域结构,因而对冷却进度表的选取有一定的影响。
(2)判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropolis准则:若AK 0, 则接受X作为新的当前解否则, 以概率exp(-▲E/7) 接受X”作为新的当前解X.
(3)当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。此时,当前解实现了一次迭代,可在此基础上开始下一轮试验。若当新解被判定为舍弃,则在原当前解的基础上继续下一轮试验。模拟退火算法求得的解与初始解状态(算法迭代的起点)无关,具有渐近收敛性,已在理论上被证明是一种以概率1收敛于全局最优解的优化算法。模拟退火算法可以分解为解空间、目标函数和初始解三部分。该算法具体流程如下[8]:
(1)初始化:设置初始温度7(充分大)、初始解状态%(是算
法迭代的起点)、每个7值的迭代次数L:
(2)对k=1,…,L做第(3)至第(6)步;
(3)产生新解X;
(4) 计算增量A BE(X) -E(X) , 其中E() ) 为评价函数:
(5)若AK0,则接受X作为新的当前解,否则以概率
exp(-▲E/7) 接受X作为新的当前解;
(6)如果满足终止条件,则输出当前解作为最优解,结束程序:
(7)7逐渐减小,且T→0,然后转第(2)步。
模拟退火算法流程如图7.1所示。
在这里插入图片描述
4 关键参数说明
模拟退火算法的性能质量高,它比较通用,而且容易实现。不过,为了得到最优解,该算法通常要求较高的初温以及足够多次的抽样,这使算法的优化时间往往过长。从算法结构知,新的状态产生函
数、初温、退温函数、Markov链长度和算法停止准则, 是直接影响算法优化结果的主要环节。
状态产生函数
设计状态产生函数应该考虑到尽可能地保证所产生的候选解遍布全部解空间。一般情况下状态产生函数由两部分组成,即产生候选解的方式和产生候选解的概率分布。候选解的产生方式由问题的性质决
定,通常在当前状态的邻域结构内以一定概率产生。
初温
温度7在算法中具有决定性的作用,它直接控制着退火的走向。由随机移动的接受准则可知:初温越大,获得高质量解的几率就越大,且Metropolis的接收率约为1。然而, 初温过高会使计算时间增加。
为此,可以均匀抽样一组状态,以各状态目标值的方差为初温。
退温函数
退温函数即温度更新函数,用于在外循环中修改温度值。目前,最常用的温度更新函数为指数退温函数, 即T(n+1) =KXT(n) , 其中0<K1是一个非常接近于1的常数。
Markov链长度L的选取
Markov链长度是在等温条件下进行迭代优化的次数, 其选取原则是在衰减参数7的衰减函数己选定的前提下,L应选得在控制参数的每一取值上都能恢复准平衡,一般L取100~1000.
算法停止准则
算法停止准则用于决定算法何时结束。可以简单地设置温度终值T,当F=T,时算法终止。然而,模拟火算法的收敛性理论中要求T趋向于零,这其实是不实际的。常用的停止准则包:设置终止温度的阈
值,设置迭代次数阈值,或者当搜索到的最优值连续保持不变时停止搜索。

⛄四、部分源代码

clc
clear all
global box; global cargo; global lambda; global num_cargo;global num_box;global solution;

%-------------------------------控制参数---------------------------

lambda = 0.5; % 重量利用率权重

T0 = 100; % 初始温度
T_End = 1; % 终止温度
metropolis = 100; % 退火算法中 metropolis链长度
cooling = 0.98; % 降温系数

pop = 20; %遗传算法染色体数
maxite = 100; %遗传最大迭代次数
pm = 0.1; %遗传变异概率
%--------------------------------------------------------------------

%----------------------------初始化:读取货箱信息 ----------------------------
orginal_cargo=load(‘cargo’);box=load(‘box’);
count=1;
for i=1:size(orginal_cargo,1) %重构货物格式 cargo: 重 长 宽 高 体积 ;其中 长>宽>高
for j=1:orginal_cargo(i,2)
cargo(count,1:4) = orginal_cargo(i,3:6);
cargo(count,5) = prod(cargo(count,2:4),2);
cargo(count,2:4) = sort(cargo(count,2:4),‘descend’);
count=count+1;
end
end
for i=1:size(box,1) %重构箱子box: 重 长 宽 高 体积
box(i,5)=prod(box(i,2:4),2);
end

num_cargo=size(cargo,1); % 货物数
num_box=size(box,1); % 货箱数

solution= fix((num_box)*rand(1,num_cargo))+1; %随机生成初始解
Scheme=transform(solution); %解转化成“货箱:货物”对应的形式
[feas_solution,Scheme]= placement(Scheme); %装箱处理
[PG,PV,gbest ]= evaluate(feas_solution) ; %计算适应度

%--------------------------------------------------------------------

%----------------------------退火------------------------
begin=cputime; %开始计时

%遗传算法优化 GENE(染色体数/种群规模,最大迭代次数,染色体长度/维度,变异概率)
[final_solution,gbest]=GENE(pop,maxite,num_cargo,pm) ;

%遗传执行完毕后 模拟退火进一步优化
T = T0;
while T > T_End
for i=1:metropolis
%-----------随机交换两件货物生成新解
newsolution=final_solution;
R1=fix(randnum_cargo)+1;
R2=fix(rand
num_cargo)+1;
inter=newsolution(R1);
newsolution(R1)=newsolution(R2);
newsolution(R2)=inter;
NewScheme=transform(newsolution); % 分配货箱
[feas_solution,NewScheme]= placement(NewScheme); % 装箱处理
[NPG,NPV,pbest ]= evaluate(feas_solution); % 评估新方案
if pbest>gbest
gbest = pbest;
final_solution = newsolution;
PG = NPG;
PV = NPV;
Scheme = NewScheme;
else
if rand < exp( (pbest-gbest)100T0/T)
gbest=pbest;
final_solution=newsolution;
PG = NPG;
PV = NPV;
Scheme = NewScheme;
end
end
end
T = T * cooling;
end

timecost = cputime-begin; %计时结束

%----------------------------输出结果------------------------
result(Scheme,15); %将装箱方案Scheme 按每行15个货物显示

fprintf(‘重量利用率:\t%5.3f %%\n’,PG100);
fprintf(‘空间利用率:\t%5.3f %%\n’,PV
100);
fprintf(‘综合利用率:\t%5.3f %%\n’,gbest*100);
fprintf(‘计算时间:\t\t%5.4f s\n’,timecost);
disp(‘图像生成中…’)
depict( Scheme, 1,‘c’ ) % ( 方案,画出编号为i箱子,颜色) 颜色:r\g\b\c\m\y\k\w

⛄五、运行结果

在这里插入图片描述

⛄六、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 19
    点赞
  • 180
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
LoadExpert装柜专家 集装箱是现代重要的运输工具,在市场竞争日趋激烈的当今社会,如何在货物运输这一重要环节减低成本与费用,是进出口和运输等行业企业普遍关心的问题。事实上,集装箱的装箱问题在大部分企业中一直得不到很好解决,往往是凭经验作业,造成: · 空间利用率低,平均只有八成左右 · 计算耗时费力,难以得到优化方案 · 货物装柜超重,装载数量不准确 · 作业缺乏标准,货物摆放混乱 LoadExpert 装柜专家 解决集装箱装柜问题;多种方式切合实际需求,详细设置满足装载规定,智能算法优化空间效率,直观操作展现装柜方案;节约运费,提高效率,规范作业,降低成本,是一个多快好省的集装箱软件。 装柜方式多种多样,满足不同的实际应用需求 傻瓜型操作、方便直观,步进式显示装柜作业流程 自动智能计算拼柜,快速准确,优化装柜方案 强大的报表打印,包括装柜方案报表、装柜清单、效果图和步骤分解图 实用的图片输出,方便与客户的业务沟通交流 算法严密可靠,考虑到货物装柜的型变因素、货物摆放要求和堆叠控制 自定义货物、集装箱尺寸,解决多种货物在不同的集装箱的排布问题 自动统计装柜货物的数量、重量和金额 三维立体旋转功能,自由切换观察角度,更清晰地展现货物在集装箱内的摆放情况 指定成套的货物(例如家具),计算满一柜的最多套数和最优装柜方法 对装柜方案进行编辑,任意的在同一柜或者柜与柜之间移动货物、还可以添加或删除货物

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值