精华内容
下载资源
问答
  • 三维装箱

    千次阅读 热门讨论 2019-01-25 20:18:18
    求教三维装箱算法。   刚刚找到了装箱的代码。现在分享如下 讨论请加QQ群:865601737。   刚发现上传不了文件。需要的加群下载吧。

    求教三维装箱算法。

     

    刚刚找到了装箱的代码。现在分享如下

    讨论请加QQ群:865601737。

     

    刚发现上传不了文件。需要的加群下载吧。

    展开全文
  • 三维装箱:给定装载的四个约束:长,宽,高,限重,若干待装载货箱的信息:长,宽,高,重量,求满足约束的情况下,最佳的装载方式(或是达到最高载重,或是达到最大装载体积),以货物的装载顺序和在卡车中的位置...

    一、简介

    三维装箱:给定装载的四个约束:长,宽,高,限重,若干待装载货箱的信息:长,宽,高,重量,求满足约束的情况下,最佳的装载方式(或是达到最高载重,或是达到最大装载体积),以货物的装载顺序和在卡车中的位置表示。
    求解思路:先把尺寸统一的货箱打包成合适的尺寸,以降低装载的复杂度。其次,设置策略为每个货箱选择合适的落脚点。最后,对多种装箱方式进行挑选,只对若干优秀的方式继续装填,舍弃劣解。
    主程序 main (展示使用方法)
    主装箱算法 final_zhuangxiang (整体框架)
    对箱子进行分类打包 classification
    对打包后的箱子及没打包的箱子进行装箱 zhuangxiang1

    二、源代码

     function [real_PATH,objective,surplus_box]=final_zhuangxiang(PATH,box,truck)
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%函数名称:主装箱算法 final_zhuangxiang
    %%入口参数:已装车的货物 PATH(cell格式,5行(左下坐标+信息+名称+名称+旋转方向)多列)  待装箱的货物信息 box(cell格式,第一行为长宽高重,第二行为货物的名称,第三行同第二行,第四行是旋转方向)  货车信息 truck
    %%出口参数:装车的货物 real_PATH(格式同上述PATH) 当前车辆的优化目标 objective(max(v/V,w/W))   未能装车的剩余货物 surplus_box
    %%函数功能说明:
        %%输入已装车的货物,未装车的货物,truck进行装车,步骤如下:
        %%步骤1:打包
        %%步骤2:对打包后的箱子+未打包的箱子进行装车
        %%步骤3:解包
        %%步骤4:评价
    %%注意:
    %%by SebastianLi, At ZhengZhou, 25th February, 2021
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    %% 如果PATH不为空,并以剩余的空间作为约束进行打包,以防止打包过大
    truck1=truck;
    if isempty(PATH)==0
        t=zeros(size(PATH,1),1);
        num_PATH=1;
        angles=[];
        w=0;
        for j=1:size(PATH{num_PATH, 1},1)
            s=eightangle(PATH{num_PATH, 1}{j, 1},PATH{num_PATH, 1}{j, 2});
            angles(end+1:end+8,:)=s;
            w=w+PATH{num_PATH, 1}{j,2}(1,4);
        end
        truck1=[truck(1,1)-max(angles(:,1)),truck(1,2),truck(1,3),truck(1,4)-w];  % 只考虑x方向的剩余空间
    end
    
    %% 对于两种方向的箱子进行打包,取打包后箱子数小的打包方式作为最终打包
    s2={};
    for i=1:size(box,2)  
        s=box{1, i};
        s1=[s(1, 2),s(1, 1),s(1, 3),s(1, 4)];
        s2(1,i)={s1};
        s2(2,i)=box(2, i);
    end
    s2(3,:)=s2(2, :);
    s2(4,:)={0};
    [Allbox1,~,~]=classification(s2,truck1);  % 对全部旋转后的箱子进行分类打包
    Allbox1(4,:)={1};
    
    [Allbox2,~,~]=classification(box,truck1); % 对未旋转的箱子进行分类打包
    Allbox2(4,:)={0};
    if size(Allbox1,2)>=size(Allbox2,2)       %  取打包后箱子数小的打包方式作为最终打包
        Allbox=Allbox2;
        y1=1;
    else
        Allbox=Allbox1;
        y1=0;
    end
    
    %% 对打包后的箱子+未打包的箱子进行装车
    s2={};       % 旋转后的Allbox
    for i=1:size(Allbox,2)  
        s=Allbox{1, i};
        s1=[s(1, 2),s(1, 1),s(1, 3),s(1, 4)];
        s2(1,i)={s1};
        s2(2,i)=Allbox(2, i);
        s2(3,i)=Allbox(3, i);
        s2(4,i)={y1};
        if strcmp(Allbox{2,i}(1:3),'bag')==1
            for j=1:size(s2{3,i},1)
                s2{3,i}{j,1}=[s2{3, i}{j, 1}(1,2),s2{3, i}{j, 1}(1,1),s2{3, i}{j, 1}(1,3)];
                s2{3,i}{j,2}=[s2{3, i}{j, 2}(1,2),s2{3, i}{j, 2}(1,1),s2{3, i}{j, 2}(1,3),s2{3, i}{j, 2}(1,4)];
            end
        end
    end
     Allbox=[Allbox,s2];  % 把旋转前后的箱子都放在一起
    [final_PATH,~,surplus_box]=zhuangxiang1(PATH,Allbox,truck);
    % show(final_PATH)
    %% 把surplus_box中的bag拆分出来
    if isempty(surplus_box)==0
        ss={};
        for i=1:size(surplus_box,2)
            if strcmp(surplus_box{2,i}(1:3),'bag')==0   % 如果不是bag
                if surplus_box{4,i}==0
                    ss(:,end+1)=[surplus_box(1,i);surplus_box(2,i)];
                else
                    ss(:,end+1)=[{[surplus_box{1, i}(1,2),surplus_box{1, i}(1,1),surplus_box{1, i}(1,3),surplus_box{1, i}(1,4)]};surplus_box(2,i)];
                end
            else
                if surplus_box{4,i}==0
                    for j=1:size(surplus_box{3,i},1)
                        ss(:,end+1)=[surplus_box{3,i}(j,2);surplus_box{3,i}(j,3)];
                    end    
                else
                        for j=1:size(surplus_box{3,i},1)
                        ss(:,end+1)=[{[surplus_box{3,i}{j,2}(1,2),surplus_box{3,i}{j,2}(1,1),surplus_box{3,i}{j,2}(1,3),surplus_box{3,i}{j,2}(1,4)]};surplus_box{3,i}(j,3)];
                        end
                        
                end
            end
        end
        surplus_box=ss; 
        surplus_box(3,:)=surplus_box(2,:);
        surplus_box(4,:)={0};
    end
    
    %% 拆分bag
    if isempty(final_PATH)==1  % 如果所有的箱子都不能装车
        real_PATH={};
        objective=0;
    else
        real_PATH={};  % 把bag再拆分成箱子
        for i=1:size(final_PATH{1, 1},1)
            if strcmp(final_PATH{1, 1}{i, 3}(1:3),'bag')==0
                real_PATH(end+1,:)=final_PATH{1, 1}(i,:);
            end
            if strcmp(final_PATH{1, 1}{i, 3}(1:3),'bag')==1
                    s=final_PATH{1, 1}{i, 4};
                    for j=1:size(final_PATH{1, 1}{i, 4},1)
                        s{j,1}=final_PATH{1, 1}{i, 4}{j, 1}+final_PATH{1, 1}{i, 1};
                        s{j,4}=s{j,3};
                        s{j,5}=0;
                    end
                    real_PATH(end+1:end+size(s,1),:)=s;
            end
        end  
    %% 评估货车的装载情况
        v=0;
        w=0;
        for i=1:size(real_PATH,1)
            v=v+real_PATH{i, 2}(1,1)*real_PATH{i, 2}(1,2)*real_PATH{i, 2}(1,3);
            w=w+real_PATH{i, 2}(1,4);
        end
    
        V=truck(1,1)*truck(1,2)*truck(1,3);
        W=truck(1,4);
    objective=max(v/V,w/W);
    end
    
     
    

    三、运行结果

    在这里插入图片描述

    完整代码或者仿真咨询添加QQ1575304183

    展开全文
  • 三维装箱问题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

    展开全文
  • 本程序能按照剩余空间最小的原则得出最优三维装箱顺序。
  • 三维装箱问题程序

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

    2019-11-04 13:17:21
    三维装箱MATLAB程序.m,目前求解方法主要是近似算法。
  • 三维装箱Python

    千次阅读 2020-03-21 09:43:14
    找到了一个Python三维装箱的代码,可是安装pyscipopt时显示没有model模块,也安装不了functools怎么办啊

    找到了一个Python三维装箱的代码,可是安装pyscipopt时显示没有model模块,也安装不了functools怎么办啊

    展开全文
  • 三维装箱决策问题

    2021-01-23 11:59:39
    三维装箱决策问题2.三维装箱决策问题分析3.算法描述(1) 原理描述(3) 时间复杂度分析 1.三维装箱决策问题 三维装箱问题即研究如何用最少数量的箱子将物品装起来。其描述如下: 假设有n个物品,其长宽高信息分别为(l1...
  • 针对梯形箱子的三维装箱问题,提出了一种基于空间分割的构造性启发式算法,根据梯形箱子三维装箱问题的特点,设计了相应的空间分割策略、空间合并策略与空间重组策略,在此基础上加入遗传算法,提高算法局部与全局...
  • 三维装箱:给定装载的四个约束:长,宽,高,限重,若干待装载货箱的信息:长,宽,高,重量,求满足约束的情况下,最佳的装载方式(或是达到最高载重,或是达到最大装载体积),以货物的装载顺序和在卡车中的位置...
  • 三维装箱问题MATLAB代码,注释比较少,需要学习的可以下载。
  • 一些三维装箱问题

    千次阅读 2020-03-20 19:30:43
    三维装箱问题在电商业务中有重要应用, 例如订单打包和商品装车. 下面我们列举一些电商业务中可能用到的三维装箱问题. 基本概念 首先我们把问题分为两类: 判定问题(Decision Problem). 这类问题的答案只有两种: 是 ...
  • 三维装箱和VRP结合的MATLAB算法,挺好的,需要输入数据后使用
  • 三维装箱问题的模型与改进遗传算法
  • 本人参加2019MCM,对于三维装箱问题,装好箱子使所用缓震材料最少(不是装满箱子)的个人解决策略和国外教授写的可视化程序
  • 基于改进粒子群算法的三维装箱优化研究,杨志强,牛占文,本文提出一种适用于求解三维装箱问题的改进粒子群优化算法。该算法在简化粒子群优化算法的基础上,引入小生境技术实现初始种群的
  • 粒子群算法求解三维装箱问题

    千次阅读 2021-03-04 19:55:06
    粒子群算法求解三维装箱问题三维装箱问题介绍基本约束条件模型假设模型建立粒子群算法参数设置粒子群代码结果展示店铺地址欢迎加入群智能讨论群 三维装箱问题介绍 三维装箱问题定义为:给定 i 种长宽高为 Li、Wi、 ...
  • https://www.eatqionline.top:8084/#/,https://www.eatqionline.top:8004/readme,集成了之前对三维装箱问题目前的一系列研究,将三维装箱算法进行了一定的注释说明规范化(pack.py)文件,这里的算法主要采用了...
  • 后端集成了之前对三维装箱问题目前的一系列研究,将三维装箱算法进行了一定的注释说明规范化(pack.py)文件,这里的算法主要采用了组合启发式算法,当然,后端更易于看到数据结构,可以通过自己添加重量标签或其他...
  • 3D with rotation on matlab 三维装箱问题代码 实测可以运行 MATLAB代码 欢迎下载
  • 粒子群算法求解三维装箱问题 三维装箱问题介绍 基本约束条件 模型假设 模型建立 粒子群算法 参数设置 粒子群代码 结果展示 三维装箱问题介绍 三维装箱问题定义为:给定 i 种长宽高为 Li、Wi、 ...
  • 三维装箱问题——最佳适应解法(BestFit),利用Java实现,借鉴于GitHub项目,大篇幅修改完成,数学建模专用。
  • BR0-BR15三维装箱经典的测试算例,目前OR-LIBRARY上仅提供了BR1-BR10,我这里提供了完整的测试数据集
  • [Matlab][遗传算法]三维装箱问题

    千次阅读 多人点赞 2020-08-19 23:45:53
    [Matlab][遗传算法]三维装箱问题简介模拟结果源码完整原代码联系作者 简介 装箱问题广泛存在于工业生产,包括服装行业的面料裁剪、运输行业的集装箱货物装载、加工行业的板材型材下料、印刷行业的排样和现实生活中...
  • 这里是只给出后面用python实现三维装箱可视化的代码。 基本思路 使用python中的matplotlib库中的Axe3D方法实现多个箱子的堆叠。 代码 以下是 代码. // An highlighted block # -*- coding: utf-8 -*- # @Author: ...
  • 一、粒子群算法的概述 粒子群算法(PSO)属于群智能算法的一种,是通过模拟鸟群捕食行为设计的。假设区域里就只有一块食物(即通常优化问题中所讲的最优解),鸟群的任务是找到这个食物源。鸟群在整个搜寻的过程中,...
  • 关于三维装箱算法问题, 一些算法理论, 感觉对这方面的应用有一定帮助
  • 为实现三维装箱问题的高效求解,提出了一个三维的剩余空间最优化算法(Three-Dimensional Residual-Space-Optimized Algorithm,3D-RSO)。在满足3个著名约束的条件下,该算法将三维问题转化为带有高度约束的二维...
  • matlab三维装箱优化

    2021-05-31 22:31:21
    可查看我发的博客描述
  • 关于三维装箱算法问题, 一些算法理论, 感觉对这方面的应用有一定帮助

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 175
精华内容 70
关键字:

三维装箱