matlab三维集装3D container箱装箱优化【matlab优化算法七】
简介
三维装箱问题考虑三个因素——一般指长、宽、高。装车、装船、装集装箱等要考虑这三个维度都不能超。
优化模型优化模型中的目标函数值可以评价装箱方案的优劣,本文考虑待装箱子的空间利用率最大以及所使用箱子数目最小,目标函数规定为:
其中:m为所使用的箱子数目,cmax为一个足够大的常数,在本文中取为1000,以保证Cmax/m为大于1的正数,后一项为箱子的空间利用率,u为装箱方案违背约束条件时的处罚值。
主程序
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);
endnum_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_Endfor 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>gbestgbest = pbest;final_solution = newsolution;PG = NPG;PV = NPV;Scheme = NewScheme;elseif rand < exp( (pbest-gbest)*100*T0/T)gbest=pbest;final_solution=newsolution;PG = NPG;PV = NPV;Scheme = NewScheme;endend endT = T * cooling;
endtimecost = 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
运行结果
如需代码可查看我的资源下载
https://download.csdn.net/download/weixin_46567845/19274867
matlab三维集装3D container箱装箱优化【matlab优化算法七】相关推荐
- matlab三维路径规划,【路径规划】基于A星算法的三维路径规划matlab源码
%% 该函数用于演示基于A_Star算法的三维路径规划算法 %% 清空环境 clc clear %% 数据初始化 %下载数据 starttime=cputime; load HeightData z ...
- matlab三维图与二维图画在一起,matlab 画二维图与三维图
C#_技巧:计算代码块运行的时间 System.Diagnostics下类Stopwatch,给程序代码块运行计时, 利用start()和stop()方法来标记代码快. 该命名空间下还有一些其他类,可 ...
- MATLAB三维绘图基础meshgrid函数的用法解析
MATLAB三维绘图基础meshgrid函数的用法解析 MATLAB中meshgrid函数是用来生成网格的,函数用法是: [X,Y] = meshgrid(x,y);这种是最常用的一种用法.x ...
- matlab以空间的点画球,3D空间画空洞小球Matlab程序
3D空间画空洞小球Matlab程序 3D空间画空洞小球Matlab程序 有时候在三维空间中,需要画出很多的空洞小球.可以使用入戏的代码! clear all clc; [x,y,z]=sphere(1 ...
- CVPR2020论文解读:三维语义分割3D Semantic Segmentation
CVPR2020论文解读:三维语义分割3D Semantic Segmentation xMUDA: Cross-Modal Unsupervised Domain Adaptation for 3D ...
- matlab中三视图如何画,[matlab 三维图]怎样把三维图导入到MATLAB
怎样把三维图导入到MATLAB ●数据导入方法很多,要看你放在什么地方了. 画图用plot3(x,y,z)就行了 怎么在MATLAB三维图上标注坐标轴名称和图的标题? 问题补充:二维的时候我就把plo ...
- matlab 三维 作图 坐标轴_matlab三维画图
matlab三维画图主要有三个命令:plot3命令.mesh命令和surf命令. plot3plot3是三维画图的基本函数,绘制的是最为主要的3D曲线图,最主要的调用格式是: plot3(X,Y,Z) ...
- 两个同时comet matlab,matlab 三维绘制
1. mesh(Z)语句 mesh(Z)语句可以给出矩阵Z元素的三维消隐图,网络表面由Z坐标点定义,与前面叙述的x-y平面的线格相同,图形由邻近的点连接而成.它可用来显示用其它方式难以输出的包含大量数 ...
- matlab三维绘图poly,matplotlib绘制三维图形mplot3d(包含Mayavi.mlab模块)
http://blog.csdn.net/pipisorry/article/details/40008005 Matplotlib mplot3d 工具包简介 The mplot3d toolkit ...
最新文章
- 2022-2028年中国橡胶手套行业市场研究及前瞻分析报告
- 树莓派 Ubuntu mate 18.04 下开启vncserver
- 【译】x86程序员手册37-第10章 初始化
- Nginx正向与反向代理
- Spring中监听器的详解
- php1.9,PHP1.9--数组
- Leetcode 刷题笔记(十三) —— 二叉树篇之二叉树的层序遍历及相关题目
- jmeter连接mysql时jdbc下载
- 兴奋!北大嵩天教授Python零基础入门教程全套,可以下载啦
- 博客园编辑器为Markdown时改变图片大小
- Unity开发手游在Android平台的内存优化
- 粒子滤波 机器学习_用机器学习研究粒子物理学中的开放性问题
- 【python】GIL是什么?
- 数据库隔离级别发展史
- php 手机号码三要素实名查询
- 诊所信息化武器——医号馆基层医疗信息化系统!
- 浅谈CRM核心理念和运营
- mac更换apple id_如何使用Mac在Apple TV上截屏
- 小巧的截屏软件Greenshot
- NW.js 和 Electron 优缺点分析对比