找回密码
 欢迎注册
查看: 34366|回复: 44

[提问] 集装箱最密码放问题

[复制链接]
发表于 2021-1-18 13:49:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
集装箱内部尺寸(长×高×宽, mm):12032×2690×2322
货品包装箱尺寸(长×高×宽, mm):615×390×420
货品放置没有方向限制。
问每个集装箱最多能装多少箱以及堆放图示。
118.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2021-1-18 15:36:27 | 显示全部楼层
是否可先转化为二维,再分类讨论?

点评

二维排样问题的相关成熟的算法能发个么?  发表于 2021-1-18 18:20
二维就是排样问题,也叫钣金最优化问题。有成熟的计算机算法算了。  发表于 2021-1-18 16:38
最好写个app,输入尺寸,就屏显最优的堆放示意图  发表于 2021-1-18 16:20
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2021-1-18 16:36:44 | 显示全部楼层
这一类问题早有解决方案了。遗传算法程序。三维装箱问题。

点评

既然这种问题早就解决了,那你说说这集装箱能否装700+箱货品?该怎么装?  发表于 2021-1-18 18:42
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2021-1-18 19:12:06 | 显示全部楼层
本帖最后由 aimisiyou 于 2021-1-18 19:15 编辑

找到一种装法,共五层,两层每层高39cm,三层每层高61.5cm,能装659箱。先将高度分层,再每层按二维计算。当然,这可能不是最多的。

点评

开除原因不是因为偷懒,而是他们在集装箱前部装了大量违禁品。  发表于 2021-1-20 08:23
是装卸工人告诉我的,对他们来说,当然是尽量少装一点。他们已经被开除了。  发表于 2021-1-20 08:22
668箱是怎么容易看出来?  发表于 2021-1-19 11:50
按三个面上分别求二维,其对应垂直方向上分层。取最大值,也只能是一个下限。错落有致也许会更多吧。  发表于 2021-1-18 23:03
668箱是很容易看出来的数目,起码还能上几档  发表于 2021-1-18 20:05
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2021-1-18 19:29:35 | 显示全部楼层
实际中使用“最佳算法”会不会导致很难拿出来

点评

不会,只会导致拿出来一个的时候顺手掉出一堆……  发表于 2021-1-19 09:00
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2021-1-18 22:55:33 | 显示全部楼层
lsr314 发表于 2021-1-18 19:29
实际中使用“最佳算法”会不会导致很难拿出来

二维情形也没见“最佳算法”。

点评

我说的是”最佳算法”,你怎么知道我没找文献?  发表于 2021-1-19 22:47
那是你孤陋寡闻,没找文献  发表于 2021-1-19 22:00
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2021-1-20 10:32:56 | 显示全部楼层
这题可以装箱700+。问题是能上705箱吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2021-1-20 11:14:11 | 显示全部楼层
小铃铛 发表于 2021-1-20 10:32
这题可以装箱700+。问题是能上705箱吗?

是否还应考虑重力效果?即不能某个箱子下部部分悬空,上部受压情形。

点评

俺就是不清楚这第705箱能不能放进去,需要计算。所以,第一步,首先需要知道怎么装704箱  发表于 2021-1-20 11:40
当然不可能悬空,当然,假如喜欢在里面焊个货架,也悉听尊便  发表于 2021-1-20 11:37
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2021-1-20 12:29:50 | 显示全部楼层
就是这样一个空间,能否放进去1箱
120.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2021-1-20 16:50:13 | 显示全部楼层
MATLAB遗传算法和模拟退火,解决三维装箱问题,并可图形化展示装箱方案结果;
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=1rginal_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



点评

因为704箱,管仓库的老大爷也知道,用不着你所谓的劳动  发表于 2021-1-24 10:08
先给出结论,如果低于705箱,就别指望有酬。  发表于 2021-1-24 10:04
不无偿提供劳动。  发表于 2021-1-23 17:22
那么测试看看,俺这道题,它给出了个啥方案。,  发表于 2021-1-20 17:30
主程序。子函数没有上传。  发表于 2021-1-20 16:52
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-23 14:30 , Processed in 0.051611 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表