精华内容
下载资源
问答
  • 利用遗传算法和模拟退火,解决三维装箱问题,并可图形化展示装箱方案结果
  • 【三维装箱】基于粒子群算法求解三维装箱问题matlab源码.md
  • 【三维装箱】基于遗传和模拟退火的三维装箱问题matlab源码.md
  • 三维装箱问题Java代码的简单实现过程

    万次阅读 多人点赞 2016-07-06 10:48:58
    **三维装箱问题Java代码的简单实现过程**  时间:2016年7月  作者:竹林春雨  QQ:6996899 (一) 前言 勤勤恳恳地码农了很多年,也没少在CSDN上下东西,一直没有贡献过什么,突然略感愧疚。恰好最近领导指派...

    时间:2016年7月
                                  作者:竹林春雨
                                   QQ:6996899

    (一) 前言

    勤勤恳恳地码农了很多年,也没少在CSDN上下东西,一直没有贡献过什么,突然略感愧疚。恰好最近领导指派设计一款类似库房管理的软件,其中涉及到零售商库房商品打包出库的部分,刚好碰到商品装箱问题。将思路和大家分享,如有不妥,望及时指正,可联系QQ或者直接留言。
      
    (二) 背景及业务叙述

    顾客下完订单以后,零售商库房将商品打包出库;库房工作人员将订单所购买的商品装到零售商所提供的不同型号的箱子中,打包寄送给顾客。
      顾客下的订单中包含各式各样的大小规格的商品,有一些不能倒置,像玻璃瓶的酒水饮料、易碎物品,带重力感应的仪器设备,都不可倒置。
    供应商提供不同种类的箱型,以方便商品的二次包装。
      装箱工人需要根据实际情况将不同类型的商品放置到合适的箱子中去。

    (三) 问题叙述

    首先,装箱工人在装箱过程中需要对订单的商品选择箱型,评估商品体积和箱子容积的正确比例,这一过程极其耗费资源,给仓库作业带来困难的同时还降低了作业效率。
      其次,所送商品会出现装箱不合理的情况,如,顾客只是买一款体积很小的商品,收到的确是一个很大很空的箱子,浪费资源的同时,也给用户带来困惑,同时零售商的专业性也遭到了质疑。

    (四) 编写目的以及适用读者

    为了帮助作者实现算法过程中能够捋清思路,不迷失方向。

    (五) 需求(自己整理,如有偏差,见谅)

    1,自动计算出某一订单需要各种规格的箱子各多少个。
    2,商品绝对不可以倒置(旋转180度、上下颠倒)。但是某些商品可以躺着放(旋转90度、横向放置)。
    3,尽可能不浪费箱子资源,箱子尽可能装满。

    (六) 定义

    术语定义:

    1, 箱型:箱子的型号,记录记录箱子内部空间的长宽高等属性。箱型的长宽高特指箱体内部的长宽高。
    2, 常规箱型:最常用的箱子型号,符合大多数商品,以及方便搬运的体积。
    3, 特型:最不常用的箱型,不方便运输以及码放。例如:装晾衣杆的特长箱型、装大号电冰箱的特大号箱型。
    4, 常规指数:箱型的orderNum属性,用来表示优先使用的箱子,和不推荐使用的特型箱子。(数字越大,越常规)
    5, 容积:特指箱子的容量。
    6, 剩余容积:箱子装入一个商品后还剩多少空间,箱子的剩余空间用构造好的若干个更小的箱型表示。
    7, 体积:特指商品的体积。(这里每个箱子只装一个商品,剩下的空间将分割成更小的3个箱子)
    8, 满:箱子中放不下订单中任何其他商品的时候,箱子状态为满。
    9, 未满:箱子中还可以放下订单中的其他任意小件商品时候,箱子状态为未满。
    10, 爆箱:箱子还有一部分空间,但是订单中最小的商品体积比箱子的剩余容积大。
    11, 符合度:特指一组商品和某种箱型的符合度,数值越小,越符合。符合度公式:0-(剩余容积+容积–常规指数)得到的数字越大,符合度越高。

    规则定义:

    1, 所有箱子均为标准的长方体或者正方体。长宽高为内围长宽高(从箱子内部测量,如果是从箱子外部测量,需减去箱壁的厚度)。
    2, 所有商品均描述为矩形,长宽高为外围长宽高。
    3, 装箱时,优先放置大件商品。如果大件商品放不满的情况下,考虑次小商品,直到放满为止。
    4, 装箱时,优先选择容积小的箱子。容积更小的箱子如果能够装下商品,则剩余容积会更小,说明箱子更适合商品。其次优先选择常规指数最大的箱子。(值越大越常规,值越小表示是非常规箱型甚至是特型箱)
    5, 如果订单中的商品恰好已经装完,箱子未满,尝试更换容积更小的箱子。如果爆箱则换回原来的箱型。
    6, 如果订单中的商品恰好已经装完,出现爆箱,尝试更换小一号箱子,后继续装箱剩余商品。如果此时箱子已经是最小,则更换成多个箱子装箱。
    7, 将箱型按照符合度值由大到小的顺序排列。如果箱子可以装满的情况下优先选择符合度值大的箱子。
    8, 将箱型按照容积从小到大的顺序排列。如果箱子装不满优先尝试小的箱型。
    9, 箱子优先放置大件商品,然后放置次大商品,最后放订单中最小的商品。
    10, 优先尝试使用单个箱子完成一个订单的商品的包装,其次尝试使用多箱完成一个订单的商品包装。
    11, 如果所有的箱子都不能一个箱子装下单个订单内的全部商品,才会启用多个箱子来装商品。(个别特性箱可能只正对某一款商品,此时该箱型可以不参与该逻辑运算。)

    (七) 数据模型

    实体关系ER
    这里写图片描述

    实体清单
    这里写图片描述

    实体属性

    1. 订单
      这里写图片描述

    2. 订单项
      这里写图片描述

    3. 商品
      这里写图片描述

    4. 箱子
      这里写图片描述

    5. 箱型
      这里写图片描述

    6. 订单的盒子清单项
      这里写图片描述

    7. 客户
      这里写图片描述

    (七) 实现过程

    单个商品的一次装箱过程

    商品的长宽高以及箱子的长宽高分别如下图所示:
    这里写图片描述
                       图一
    单个商品装入箱子中以后如下图所示:
    这里写图片描述

    装进箱子中以后所产生的剩余空间如下图所示:
    这里写图片描述

    在商品可以装入箱子的情况下,每装入一次,可以产生三块新的空间,也就是新的箱子。三个新的箱子的大小是可以通过计算得到的。

    假如上述方案,商品的长度、宽度或者高度中任意一个维度的值要大于箱子的长度、宽度或者高度的话,表示箱子装不下此商品,需要使用其它的摆放方案解决装箱问题。下文列出三种其它方案,加上上述方案,一共四种。

    其它摆放方案

    假设商品不可以倒置(其实商品在矩形形态下,倒置和正常放置占用空间一样,所以不考虑该情况),第二种方案是将上一种(前一章节的图三)横向旋转90度,假如横向旋转180度商品的占用空间和不旋转没有任何区别,所以该情况也不考虑,通过总结得出四种方案,以下将列出其余的三种方案。

    第二种方案

    将箱子内部的商品,在商品正常摆放(正面朝上)情况下,横向向右旋转90度得到下图的三个新的箱子(剩余空间):

    这里写图片描述

    第三种方案

    如果商品不介意放倒(平躺)的话,那么就会有第三种方案,在商品正常摆放(正面朝上)情况下,向左倾斜90度,得到如下三个剩余空间:

    这里写图片描述

    第四种方案

    如果商品不介意放倒(平躺)的话,那么就会有第四种方案,在商品处于第三种方案摆放姿态的情况下,向右旋转90度,得到如下三个剩余空间:

    这里写图片描述

    (八) 小结

    上述内容,对一次装箱过程进行了分解,每次需要一个商品和一个空箱子,同时会产生三块新的更小的剩余空间。这三块剩余空间又可以看作是新的箱子。和新的合适自己的空间大小的商品去匹配。

    那么,这就是一个递归算法,方法输入一款商品和一个箱子,每一次递归都会产生三个新的箱子,新的箱子又可以装入其它更小的商品。

    如此循环往复,直到每一个新的箱子连最小的商品都装不下了,或者没有任何商品可以装进箱子里了,这个过程就会自动结束。这是递归的出口条件。

    其实,当然没有那么简单,图二所示的商品放入箱子的方法至少分为4种,每一种都需要尝试一下,以求得最合理的剩余空间;另外还有一订单多商品多箱子。

    (九) 可能存在的问题

    1, 箱子没有实际装满(”装满”的定义非本文中定义的)。
    2, 用户会认为系统推荐的装箱方案不是太合理的安排。特型箱被匹配到常规商品上。例如:可能会有一种特别细长的箱型、而某种商品又恰好长宽都匹配,一字码放很多件后,刚好填满,这也是一个很奇葩的结局,需要特别考虑。
    3, 部分箱型和商品需要手动匹配,因为某些箱子本来就是专门为指定的商品量身定做的。

    (十) 尾声

    程序员总是沉浸在自己的世界里、忽视身边的朋友、父母、妻子和孩子、最近南方洪灾不断、而执拗的老父刚刚负气而回、生活总有那么多的不如意。

    如果此文还有一点价值的话,那就算是献给我需要感恩的人们吧…
      
    作者在后来研发的新款WMS中就采用了该算法来计算和评估商品所需要的箱型。
      
      代码请参考: http://smallcode.cn/post/4

    展开全文
  • 针对梯形箱子的三维装箱问题,提出了一种基于空间分割的构造性启发式算法,根据梯形箱子三维装箱问题的特点,设计了相应的空间分割策略、空间合并策略与空间重组策略,在此基础上加入遗传算法,提高算法局部与全局...
  • 三维装箱问题MATLAB代码,注释比较少,需要学习的可以下载。
  • 本人参加2019MCM,对于三维装箱问题,装好箱子使所用缓震材料最少(不是装满箱子)的个人解决策略和国外教授写的可视化程序
  • 三维装箱问题的模型与改进遗传算法
  • 三维装箱问题程序

    2019-01-27 00:48:38
    作为三维装箱问题的一种工程应用,集装箱装载问题(Container Loading Problem,CLP)通常是指如何将一些小尺寸货物按照某种方式装入集装箱中。集装 箱装载质量的好坏,直接影响着企业运输成本的高低。如何给出一个...
  • 一些三维装箱问题

    千次阅读 2020-03-20 19:30:43
    三维装箱问题在电商业务中有重要应用, 例如订单打包和商品装车. 下面我们列举一些电商业务中可能用到的三维装箱问题. 基本概念 首先我们把问题分为两类: 判定问题(Decision Problem). 这类问题的答案只有两种: 是 ...

    三维装箱问题在电商业务中有重要应用, 例如订单打包和商品装车. 下面我们列举一些电商业务中可能用到的三维装箱问题.

    基本概念

    首先我们把问题分为两类:

    • 判定问题(Decision Problem). 这类问题的答案只有两种: .
    • 优化问题(Optimiation Problem). 这类问题一般有一个优化目标, 问题的最优解使得目标达到最优.

    为了方便描述, 我们先介绍一些术语和假设.

    物品

    物品有两种类型:

    • 普通物品(Item). 它是长方体且无弹性. 用长宽高来描述普通物品的尺寸.

    • 柔性物品(Soft Item). 它有 k ≥ 1 k \geq 1 k1种尺寸, 即 ( l 1 , w 1 , h 1 ) , ( l 2 , w 2 , h 2 ) , … , ( l k , w k , h k ) (l_1, w_1, h_1), (l_2, w_2, h_2), \ldots, (l_k, w_k,h_k) (l1,w1,h1),(l2,w2,h2),,(lk,wk,hk). 要求所有尺寸对应的体积相同, 即 l i w i h i = l j w j h j l_iw_ih_i = l_jw_jh_j liwihi=ljwjhj, ∀ i ≠ j \forall i\neq j i=j. 普通物品可以看成是只有一种尺寸的柔性物品.

    箱子

    箱子有两种类型:

    • 盒子(Box). 它是长方体的表面, 且无弹性. 用长宽高来描述盒子的尺寸.
    • 袋子(Bag). 它是高度为零的长方体表面. 用长和宽描述袋子的尺寸. 此外, 袋子是柔软的. 换句话说它可以变形成盒子, 要求其表面积等于袋子的表面积, 且水平和垂直方向的周长不超过袋子在水平和垂直方向上的周长. 设袋子的长和宽分别为 L L L W W W, 它变形成的盒子的长宽高分别是 l , w , h l,w,h l,w,h. 因此我们要求:
      l + h ≤ L w + h ≤ W \begin{aligned} & l + h \leq L\\ & w+ h \leq W \end{aligned} l+hLw+hW

    装箱

    我们说物品集合 I I I能被装入盒子当且仅当:

    1. I I I中所有物品都在盒子的内部;
    2. I I I中任意两个物品不相交.

    装袋

    我们说物品集合 I I I能被装入袋子当且仅当存在一个由袋子形变的盒子能装入 I I I中所有物品.

    判定问题

    3D装盒-单盒 (Three-dimensional box packing with single box)

    输入. 长宽高为 ( L , W , H ) (L, W, H) (L,W,H)的盒子和 n n n个物品. 物品的长宽高分别是 ( l i , w i , h i ) (l_i, w_i, h_i) (li,wi,hi), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n且允许90度旋转.
    问题. 物品是否可以被全部装入盒中?

    3D装盒-单盒-柔性物品 (Three-dimensional box packing with single box and soft items)

    输入. 长宽高为 ( L , W , H ) (L, W, H) (L,W,H)的盒子和 n n n个柔性物品, 其中每个柔性物品 i i i k i k_i ki种尺寸, 即 ( l i 1 , w i 1 , h i 1 ) , … , ( l i k i , w i k i , h i k i ) (l_i^1, w_i^1, h_i^1), \ldots, (l_i^{k_i}, w_i^{k_i}, h_i^{k_i}) (li1,wi1,hi1),,(liki,wiki,hiki), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n. 允许物品90度旋转.
    问题. 柔性物品是否可以被全部装入盒中?

    3D装袋-单袋 (Three-dimensional bag packing with single bag)

    输入. 长宽为 ( L , W ) (L, W) (L,W)的袋子; n n n个物品, 其长宽高是 ( l i , w i , h i ) (l_i, w_i, h_i) (li,wi,hi), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n. 物品允许90度旋转.
    问题. 物品是否可以被全部装入袋中?

    3D装袋-单袋-柔性物品 (Three-dimensional bag packing with single bag and soft items)

    输入. 长宽为 ( L , W ) (L, W) (L,W)的袋子; n n n个物品, 其中每个物品 i i i k i k_i ki种尺寸, 即 ( l i 1 , w i 1 , h i 1 ) , … , ( l i k i , w i k i , h i k i ) (l_i^1, w_i^1, h_i^1), \ldots, (l_i^{k_i}, w_i^{k_i}, h_i^{k_i}) (li1,wi1,hi1),,(liki,wiki,hiki), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n. 物品允许90度旋转.
    问题. 柔性物品是否可以被全部装入袋中?

    优化问题

    3D装盒-单盒 (Three-dimensional box packing with single box)

    输入. m m m个盒子, 其长宽高为 ( L j , W j , H j ) (L_j, W_j, H_j) (Lj,Wj,Hj), 成本为 c j c_j cj, j = 1 , 2 , … , m j=1,2,\ldots,m j=1,2,,m; n n n个物品, 长宽高为 ( l i , w i , h i ) (l_i, w_i, h_i) (li,wi,hi), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n. 物品允许90度旋转.
    问题. 找一个成本最低的盒子使得它能装下所有商品, 否则返回不存在.

    3D装盒-单盒-柔性物品 (Three-dimensional box packing with single box and soft items)

    输入. m m m个盒子, 长宽高为 ( L j , W j , H j ) (L_j, W_j, H_j) (Lj,Wj,Hj), 成本为 c j c_j cj, j = 1 , 2 , … , m j=1,2,\ldots,m j=1,2,,m; n n n个物品, 其中每个物品 i i i k i k_i ki种尺寸, 即 ( l i 1 , w i 1 , h i 1 ) , … , ( l i k i , w i k i , h i k i ) (l_i^1, w_i^1, h_i^1), \ldots, (l_i^{k_i}, w_i^{k_i}, h_i^{k_i}) (li1,wi1,hi1),,(liki,wiki,hiki), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n. 物品允许90度旋转.
    问题. 找一个成本最低的盒子使得它能装下所有柔性物品, 否则返回不存在.

    3D装盒-多盒 (Three-dimensional box packing with mutiple boxes)

    输入. m m m个盒子, 长宽高为 ( L j , W j , H j ) (L_j, W_j, H_j) (Lj,Wj,Hj), 成本为 c j c_j cj, j = 1 , 2 , … , m j=1,2,\ldots,m j=1,2,,m; n n n个物品, 长宽高为 ( l i , w i , h i ) (l_i, w_i, h_i) (li,wi,hi), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n; 总成本 M M M. 物品允许90度旋转.
    问题 找一些盒子使得它们能装下所有物品且总成本不超过 M M M, 否则返回不存在.

    3D装盒-多盒-柔性物品 (Three-dimensional box packing with multiple boxes and soft items)

    输入. m m m个盒子, 长宽高为 ( L j , W j , H j ) (L_j, W_j, H_j) (Lj,Wj,Hj), 成本为 c j c_j cj, j = 1 , 2 , … , m j=1,2,\ldots,m j=1,2,,m; n n n个柔性物品, 其中每个柔性物品 i i i k i k_i ki种尺寸, 即 ( l i 1 , w i 1 , h i 1 ) , … , ( l i k i , w i k i , h i k i ) (l_i^1, w_i^1, h_i^1), \ldots, (l_i^{k_i}, w_i^{k_i}, h_i^{k_i}) (li1,wi1,hi1),,(liki,wiki,hiki), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n; 总成本 M M M. 物品允许90度旋转.
    问题. 找一些盒子使得它们能装下所有柔性物品且总成本不超过 M M M, 否则返回不存在.

    3D装袋-单袋 (Three-dimensional bag packing with single bag)

    输入. m m m个袋子, 长宽为 ( L j , W j ) (L_j, W_j) (Lj,Wj), 成本为 c j c_j cj, j = 1 , 2 , … , m j=1,2,\ldots,m j=1,2,,m; n n n个物品, 长宽高为 ( l i , w i , h i ) (l_i, w_i, h_i) (li,wi,hi), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n. 物品允许90度旋转.
    问题. 找一个成本最低的袋子使得它能装下所有物品, 否则返回不存在.

    3D装袋-单袋-柔性物品 (Three-dimensional bag packing with single bag and soft items)

    输入. m m m个袋子, 长宽为 ( L j , W j ) (L_j, W_j) (Lj,Wj), 成本为 c j c_j cj, j = 1 , 2 , … , m j=1,2,\ldots,m j=1,2,,m; n n n个柔性物品, 其中每个物品 i i i k i k_i ki种尺寸, 即 ( l i 1 , w i 1 , h i 1 ) , … , ( l i k i , w i k i , h i k i ) (l_i^1, w_i^1, h_i^1), \ldots, (l_i^{k_i}, w_i^{k_i}, h_i^{k_i}) (li1,wi1,hi1),,(liki,wiki,hiki), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n. 物品允许90度旋转.
    问题. 找一个成本最低的袋子使得它能装下所有物品, 否则返回不存在.

    3D装袋-多袋 (Three-dimensional bag packing with multiple bags)

    输入. m m m个袋子, 长宽为 ( L j , W j ) (L_j, W_j) (Lj,Wj), 成本为 c j c_j cj, j = 1 , 2 , … , m j=1,2,\ldots,m j=1,2,,m; n n n个物品, 长宽高为 ( l i , w i , h i ) (l_i, w_i, h_i) (li,wi,hi), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n; 总成本 M M M. 物品允许90度旋转.
    问题. 找一些袋子使得它们能装下所有物品且总成本不超过 M M M, 否则返回不存在.

    3D装袋-多袋-柔性物品 (hree-dimensional bag packing with multiple bags and soft items)

    输入. m m m个袋子, 长宽为 ( L j , W j ) (L_j, W_j) (Lj,Wj), 成本为 c j c_j cj, j = 1 , 2 , … , m j=1,2,\ldots,m j=1,2,,m; n n n个柔性物品, 其中每个物品 i i i k i k_i ki种尺寸, 即 ( l i 1 , w i 1 , h i 1 ) , … , ( l i k i , w i k i , h i k i ) (l_i^1, w_i^1, h_i^1), \ldots, (l_i^{k_i}, w_i^{k_i}, h_i^{k_i}) (li1,wi1,hi1),,(liki,wiki,hiki), i = 1 , 2 , … , n i=1, 2, \ldots, n i=1,2,,n; 总成本 M M M. 物品允许90度旋转.
    问题. 找一些袋子使得它们能装下所有柔性物品且总成本不超过 M M M, 否则返回不存在.


    公众号:生活研究生(mo_hulage)

    展开全文
  • 针对约束条件下三维装箱问题复杂性,为提高装箱利用率,本文提出 了混合粒子群算法,该算法采用BF启发式算法配合改进的自适应权重粒子群算法实现.通过仿真试验,结果表明该混合粒子群算法对解决部分约束条件下装箱问题 ...

    1 简介

    针对约束条件下三维装箱问题复杂性,为提高装箱利用率,本文提出 了混合粒子群算法,该算法采用BF启发式算法配合改进的自适应权重粒子群算法实现.通过仿真试验,结果表明该混合粒子群算法对解决部分约束条件下装箱问题 较之传统研究遗传算法利用率和准确率更高,具有不同程度的可行性.

    1.1 粒子群算法

       粒子群算法(PSO)属于群智能算法的一种,是通过模拟鸟群捕食行为设计的。假设区域里就只有一块食物(即通常优化问题中所讲的最优解),鸟群的任务是找到这个食物源。鸟群在整个搜寻的过程中,通过相互传递各自的信息,让其他的鸟知道自己的位置,通过这样的协作,来判断自己找到的是不是最优解,同时也将最优解的信息传递给整个鸟群,最终,整个鸟群都能聚集在食物源周围,即我们所说的找到了最优解,即问题收敛。

    (1)粒子群算法的流程

       粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度

    和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。粒子群算法的思想相对比较简单,主要分为:1、初始化粒子群;2、评价粒子,即计算适应值;3、寻找个体极值;4、寻找全局最优解;5、修改粒子的速度和位置。下面是程序的流程图:

    img

    (PSO流程)

    1.2 三维装箱问题

    2 部分代码

    clc;clear;close all;
    Vmax = 1;%速度限制
    Vmin = -1;
    nodes=50;%节点数目
    links=150;%边数目
    dims=nodes*(nodes-1)/2;%种群维数
    c1 = 1.49445;
    c2 = 1.49445;
    maxgen = 300;    %进化次数
    sizepop = 100;   %种群规模
    % 惯性权重
    w=1;
    % 线性递减惯性权重
    w_max=0.9;
    w_min=0.4;
    pop=zeros(sizepop,dims);%初始化种群
    trans_index=zeros(1,dims);%初始化转换索引
    %% 产生初始粒子和速度
    for iter = 1:sizepop
       %初始化种群
       xx=randperm(nodes);
       yy=randperm(nodes);
       A=zeros(nodes,nodes);%连通阵,AA的迹为0
    
    
               fitnesspbest(j) = fitness(j);
           end
           % 群体最优更新
           if fitness(j) > fitnessgbest
               gbest = pop(j,:);
               fitnessgbest = fitness(j);
           end
       end
       record(1,i)=fitnessgbest;
       fprintf('%d     %f\n',i,fitnessgbest);  %输出结果
    %% 适应度值变化绘图
    plot(record);
    xlabel('gen');
    ylabel('fitness');
    end

    3 仿真结果

    img

    4 参考文献

    [1]杜振, 宫会丽. 解决约束三维装箱问题的混合粒子群算法[J]. 计算机光盘软件与应用, 2014, 000(022):115-116.

    展开全文
  • 三维装箱问题,怎么将多个货物装到多个货舱里面,要尽可能装的最多,用什么方法解决哪?有没有相关例子可以推荐一下?
  • 解决约束三维装箱问题的混合粒子群算法.pdf
  • 3D with rotation on matlab 三维装箱问题代码 实测可以运行 MATLAB代码 欢迎下载
  • 本程序能按照剩余空间最小的原则得出最优三维装箱顺序。
  • 三维装箱问题——最佳适应解法(BestFit),利用Java实现,借鉴于GitHub项目,大篇幅修改完成,数学建模专用。
  • 一种简化粒子群算法及在三维装箱问题中的应用.pdf
  • 【优化求解】基于遗传和模拟退火的三维装箱问题matlab.md
  • 为实现三维装箱问题的高效求解,提出了一个三维的剩余空间最优化算法(Three-Dimensional Residual-Space-Optimized Algorithm,3D-RSO)。在满足3个著名约束的条件下,该算法将三维问题转化为带有高度约束的二维...
  • 箱体积利用率最大化为目标建立三维装载模型,同时考虑体积约束、重量约束、重心约束、方向约束。利用混合遗 传、模拟退火与三空间分割启发式装载算法求解模型,算法中融入局部最优解保存策略来避免局部较好解在后续...

    1 简介

    集装箱装载是货物运输过程中重要的一步,其属于NP-hard问题。为了提高效率,降低成本,提出了以集装

    箱体积利用率最大化为目标建立三维装载模型,同时考虑体积约束、重量约束、重心约束、方向约束。利用混合遗

    传、模拟退火与三空间分割启发式装载算法求解模型,算法中融入局部最优解保存策略来避免局部较好解在后续的

    算法过程中出现适应度降低的情况。通过强异类算例与弱异类算例对算法进行性能测试,并结合具体的货物装载

    数据,得出三维装载图与目标函数值。结果表明,该算法应用于集装箱装载有着较好的效果。

    1.1 三维装箱问题的数学模型

    1.2 模拟退火算法

    2 部分代码

    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(rand*num_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)*100*T0/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',PG*100);
    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
    
    

    3 仿真结果

    4 参考文献

    [1]张德富, 彭煜, 朱文兴,等. 求解三维装箱问题的混合模拟退火算法[J]. 计算机学报, 2009, 032(011):2147-2156.

    展开全文
  • 一个三维装箱问题的搜索树算法

    千次阅读 2020-03-20 17:52:04
    三维装箱问题的业务场景可以参考电商业务中的纸箱推荐问题. 文中考虑了如下问题. 输入 : 长宽高为(L,W,H)(L, W, H)(L,W,H)的箱子和nnn个物品, 其长宽高为(li,wi,hi)(l_i, w_i, h_i)(li​,wi​,hi​), i=1,2,…,ni=1...
  • 基于 三维装箱问题的算法研究-1 的基础上 对整个装箱过程发生的函数进行封装 # -*- coding: utf-8 -*- from matplotlib import pyplot as plt #设置图表刻度等格式 from matplotlib.ticker import MultipleLocator, ...
  • 基于 三维装箱问题的算法研究-2 的基础,对整个过程进行了优化 前提:整一个装箱的实现,实际上就是一直在判断: 东西可以放在哪里?不可以放在哪里?应该怎么放?放完之后对整个空间有什么影响? 基本概念:所以...
  • 关于三维装箱算法问题, 一些算法理论, 感觉对这方面的应用有一定帮助
  • 《基于重力装载的自适应随机算法求解多箱型三维装箱问题》 计算机集成制造系统/2020/北京科技大学 多箱型装箱问题的定义为:已知一组数量有限且三维尺寸不同的待装载货物,有一组不同三维尺寸且价值不同的可选...
  • 使用 R 语言求解三维装箱问题

    千次阅读 2019-01-29 13:57:10
    文章目录 搭建 R 语言环境 下载指定的 R 语言包 检验是否成功安装 R 指定 R 包的镜像源 安装`devtools` 安装其他本项目需要...最终解决的三维装箱的 R 代码运行结果如下(参数随便设置的) 代码以后再贴出来。
  • 为了提高效率,降低成本,提出了以集装箱体积利用率最大化为目标建立三维装载模型,同时考虑体积约束、重量约束、重心约束、方向约束。利用混合遗传、模拟退火与三空间分割启发式装载算法求解模型,算法中融入局部最...
  • 编程语言:Java 特点:具有可视化人机交互界面 有疑问的话,欢迎提问!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,484
精华内容 2,193
关键字:

三维装箱问题