⛄一、简介

1 问题描述:
在考虑汽车零部件包装箱长、宽、高等三维尺寸的约束下,以配送中心为原点,分派多辆同一规格的货车到n个供应商处取货,最后回到配送中心。本章所构建的三维装载约束下的汽车零部件循环取货路径优化模型要解决的问题是确定循环取货路径,要求充分考虑汽车零部件在货车车厢中的三维装载位置,确保每个供应商处的零部件均能成功装载,尽可能使车辆装载率最大,且所有车辆的总行驶路径最短。
基于上述分析,本文所研究的循环取货优化问题可做如下假设:
假设条件:
(1)一个配送中心与多个供应商,且车辆从配送中心出发,最后均回到配送中心;
(2)每辆货车车厢规格(即车厢长、宽、高,载重质量等)均相同;
(3)每辆货车匀速行驶,且行驶速度已知;不存在交通堵塞情况;
(4)配送中心与各零部件供应商以及各供应商之间的距离已知;
(5)各供应商处提供的零部件均由长方体箱包装,且各长方体箱的尺寸、数量、重量等参数已知;
(6)每个供应商提供的零部件总体积、总重量均小于每辆车的容积与载重质量;每个供应商只由一辆车完成服务,且只服务一次;
(7)每条线路上的货物总重量、总体积不得超过货车载重质量及容积;
(8)考虑汽车零部件供应的准时性,每辆货车必须在规定时间以内返回配送中心;
(9)零部件(指长方体包装箱,下同)必须在车厢内部,不得超出车厢车门;
(10)零部件的边总是与车厢的边平行或者垂直、高度方向与车厢高度方向平行,且不得倒置;
(11)货物的重心即为几何中心。





⛄二、部分源代码

close all;
clear;
clc;

format long;

%load data of mat file trans from excel
load_data;

%set data of known infomation
set_data;

%get the distance among the nodes
get_distance;

%preparation for true task
preparation;

%GA
%GA_for_route;

%GA for tabu
GA_tabu_for_route;

%plot
plot_final;
%start the GA

%struct of GA
GA=struct(‘num_of_individual’,[],‘num_of_generation’,[],…
‘probability_of_mate’,[],…
‘pairs_of_mate’,[],…
‘probability_of_mutation’,[],…
‘probability_of_reverse’,[],…
‘individual’,…
struct(…
‘route_code’,[],‘distance’,[],‘time_cost’,[],…
‘volume_rate’,[],‘weight_rate’,[],‘adaptability’,[],…
‘satisfy’,[],‘van_instance’,…
struct(‘supplier_num_list’,[],‘distance’,[],‘time_cost’,[],…
‘satisfy’,[],‘topology’,[],…
‘length_width’,[],‘height’,[])…
),…
‘sum_of_adaptability’,[],‘accumulate_of_adaptability’,[]);

%set the numbers individual in the group
GA.num_of_individual=8000;
%set the generations
GA.num_of_generation=200;
%set the probability of mate
GA.probability_of_mate=0.4;
%set the pairs to mate
GA.pairs_of_mate=…
floor(GA.probability_of_mate*GA.num_of_individual/2);
%set the probability of mutation
GA.probability_of_mutation=0.15;
%set the probability of reverse
GA.probability_of_reverse=0.1;

%set the property of individual in the group
GA.individual(1:GA.num_of_individual)=…
struct(‘route_code’,[],‘distance’,[],‘time_cost’,[],…
‘volume_rate’,[],‘weight_rate’,[],‘adaptability’,[],…
‘satisfy’,[],‘van_instance’,…
struct(‘supplier_num_list’,[],‘distance’,[],‘time_cost’,[],…
‘satisfy’,[],‘topology’,[],…
‘length_width’,[],‘height’,[]));

%result show
group_trend(1:GA.num_of_generation)=…
struct(‘route_code’,[],‘distance’,[],‘time_cost’,[],…
‘volume_rate’,[],‘weight_rate’,[],‘adaptability’,[],…
‘satisfy’,[],‘van_instance’,…
struct(‘supplier_num_list’,[],‘distance’,[],‘time_cost’,[],…
‘satisfy’,[],‘topology’,[],…
‘length_width’,[],‘height’,[]));

%%
%for the number of van,start from min_van_num
van_parameter.van_num=van_parameter.min_van_num;
%start
van_parameter.van_num=num_of_node;
%the problem is not solved in the beginning
problem_solved=0;

%a list save new generation
temp.index_in_accumulate_list=zeros(GA.num_of_individual,1);

while 1

%initialize all the individual in the group
%for each individual
for index_of_individual=1:GA.num_of_individual%route code and whom to serviceGA.individual(index_of_individual).route_code=...van_parameter.van_num*rand(num_of_node,1);%initialize the van informationGA.individual(index_of_individual)....van_instance(1:van_parameter.van_num)=struct(...'supplier_num_list',[],'distance',[],'time_cost',[],...'satisfy',[],'topology',[],...'length_width',[],'height',[]);
endfor index_of_generation=1:GA.num_of_generation%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%step 1%compute the adaptability for each individual%and the summation of all the individual%the summation of all the individual in the group is 0GA.sum_of_adaptability=0;%set the accumulation of the adaptabilityGA.accumulate_of_adaptability=...zeros(GA.num_of_individual,1);%for each individual compute the adaptabilityfor index_of_individual=1:GA.num_of_individual%reset distance for each individualGA.individual(index_of_individual).distance=0;%van instance%depend on the number of the van   %for each vanfor index_of_van=1:van_parameter.van_num%get the supplier number listtemp.belong_list=...find(ceil(GA.individual(index_of_individual)....route_code)==index_of_van);[~,temp.sorted_belong_list]=...sort(GA.individual(index_of_individual)....route_code(temp.belong_list));GA.individual(index_of_individual)....van_instance(index_of_van).supplier_num_list=...temp.belong_list(temp.sorted_belong_list);%get the distance and the time cost[~,GA.individual(index_of_individual)....van_instance(index_of_van).distance,...GA.individual(index_of_individual)....van_instance(index_of_van).time_cost]=...get_distance_and_time_cost(...GA.individual(index_of_individual)....van_instance(index_of_van).supplier_num_list,...distance_data_struct,van_parameter,time);%get distance of each individual%add to time costGA.individual(index_of_individual).distance=...GA.individual(index_of_individual).distance+...GA.individual(index_of_individual)....van_instance(index_of_van).distance;end%for index_of_van=1:van_parameter.van_num%get time cost of each individualGA.individual(index_of_individual).time_cost=...GA.individual(index_of_individual).distance/...van_parameter.speed+num_of_node*time.load_and_unload;%get adaptability of each individualGA.individual(index_of_individual).adaptability=...(GA.individual(index_of_individual).time_cost)^(-9);%adaptability post processGA.individual(index_of_individual)=...post_process(GA.individual(index_of_individual),...supplier_struct,time,van_parameter,total);%give the accumulated adaptabilityif index_of_individual==1GA.accumulate_of_adaptability(index_of_individual)=...GA.individual(index_of_individual).adaptability;elseGA.accumulate_of_adaptability(index_of_individual)=...GA.accumulate_of_adaptability(index_of_individual-1)+...GA.individual(index_of_individual).adaptability;endend%for index_of_individual=1:GA.num_of_individual%get the summation of adaptabilityGA.sum_of_adaptability=...GA.accumulate_of_adaptability(index_of_individual);%save index[~,max_index]=max(cat(1,GA.individual.adaptability));%save resultgroup_trend(index_of_generation)=GA.individual(max_index);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%step 2 %individual copy by itself%eliminate the weaked%for each individual judge whether copyfor index_of_individual=1:GA.num_of_individual%generate a random numbertemp.rand=rand*GA.sum_of_adaptability;%get the index in the accumulate of adaptability listtemp.index_in_accumulate_list(index_of_individual)=...find((temp.rand<GA.accumulate_of_adaptability),1);end%copyGA.individual=GA.individual(temp.index_in_accumulate_list);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%step 3%matefor index_of_pair=1:GA.pairs_of_mate%choose two mate individualtemp.mate_num1=ceil(rand*GA.num_of_individual);temp.mate_num2=ceil(rand*GA.num_of_individual);%choose the mate exchange jointtemp.mate_joint=ceil(rand*(num_of_node-1));%make two new individual's route codetemp.new_route_code1=...[GA.individual(temp.mate_num1)....route_code(1:temp.mate_joint);...GA.individual(temp.mate_num2)....route_code(temp.mate_joint+1:end)];temp.new_route_code2=...[GA.individual(temp.mate_num2)....route_code(1:temp.mate_joint);...GA.individual(temp.mate_num1)....route_code(temp.mate_joint+1:end)];%cover the oldGA.individual(temp.mate_num1).route_code=temp.new_route_code1;GA.individual(temp.mate_num2).route_code=temp.new_route_code2;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%step 4%mutationfor index_of_individual=1:GA.num_of_individual%generate a random numbertemp.rand=rand;%judge whether can mutateif temp.rand<GA.probability_of_mutation%mutation_jointtemp.mutation_joint=ceil(rand*num_of_node);%mutateGA.individual(index_of_individual)....route_code(temp.mutation_joint)=...GA.individual(index_of_individual)....route_code(temp.mutation_joint)+...rand*van_parameter.van_num;%avoid repeatif GA.individual(index_of_individual)....route_code(temp.mutation_joint)>...van_parameter.van_numGA.individual(index_of_individual)....route_code(temp.mutation_joint)=...GA.individual(index_of_individual)....route_code(temp.mutation_joint)-...van_parameter.van_num;endend%if temp.rand<GA.probability_of_mutationend%for index_of_individual=1:GA.num_of_individualproblem_solved=1;
%%
%if the problem is solved
%then break out of the circulation
if problem_solvedbreak;
end

end

⛄三、运行结果





⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]俞武扬.多式联运运输问题的混合遗传算法[J].计算机工程与应用. 2009,45(33)

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

【路径规划】基于matlab汽车零部件循环取货路径优化(三维装载约束)【含Matlab源码 1100期】相关推荐

  1. 【路径规划】基于遗传算法求解三维装载下的汽车零部件循环取货路径规划问题含Matlab源码

    1 简介 在考虑汽车零部件包装箱长.宽.高等三维尺寸的约束下,以配送中心为原点,分派多辆同一规格的货车到n个供应商处取货,最后回到配送中心.本章所构建的三维装载约束下的汽车零部件循环取货路径优化模型要 ...

  2. 【路径规划】汽车零部件循环取货路径优化(三维装载约束)【含Matlab源码 1100期】

    ⛄一.简介 1 问题描述: 在考虑汽车零部件包装箱长.宽.高等三维尺寸的约束下,以配送中心为原点,分派多辆同一规格的货车到n个供应商处取货,最后回到配送中心.本章所构建的三维装载约束下的汽车零部件循环 ...

  3. 优化汽车零部件循环取货路径的遗传算法模型

    优化汽车零部件循环取货路径的遗传算法模型 随着工业化程度的提高,汽车行业的发展也越来越快速.汽车零部件加工作为汽车行业中的重要环节,为汽车整体质量和性能提供了坚实的保障.而在汽车零部件加工过程中,循环 ...

  4. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  5. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

  6. 【Matlab树叶分类】BP神经网络植物叶片分类【含GUI源码 916期】

    一.代码运行视频(哔哩哔哩) [Matlab树叶分类]BP神经网络植物叶片分类[含GUI源码 916期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  7. 【Matlab水果蔬菜识别】形态学水果蔬菜识别【含GUI源码 919期】

    一.代码运行视频(哔哩哔哩) [Matlab水果蔬菜识别]形态学水果蔬菜识别[含GUI源码 919期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅. ...

  8. 【Matlab青草识别】形态学马唐草+牛筋草识别【含GUI源码 908期】

    一.代码运行视频(哔哩哔哩) [Matlab青草识别]形态学马唐草+牛筋草识别[含GUI源码 908期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  9. 【Matlab限速标志识别】形态学限速标志识别【含GUI源码 1142期】

    一.代码运行视频(哔哩哔哩) [Matlab限速标志识别]形态学限速标志识别[含GUI源码 1142期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

最新文章

  1. Android ORMLite 框架的入门用法
  2. 大型企业云化2.0的深度思考与展望
  3. Butter Knife:一个安卓视图注入框架
  4. ado filter 多条记录_江苏气动断料锯商家,多条锯_邢台富宇来机械厂
  5. VSCode 阅读 Linux 代码怎么才不卡顿?这样做才能快的飞起!
  6. python连连看小游戏_python实现连连看游戏
  7. java 平均分割list_Java 实现将List平均分成若干个集合
  8. c# —— 枚举和值的隐藏副作用
  9. hrjava项目原型html_产品入门|什么是原型图设计?
  10. 网管学习日记-VRRP单组备份
  11. python requests json_python:解析requests返回的response(json格式)
  12. Java 队列 Queue 使用说明
  13. 小程序服务器配置要多高,小程序服务器配置要求
  14. 基础电路设计知识:电阻、电容、电感、二极管、三极管、mos管!
  15. python的hello world
  16. python抢票软件 app_收藏!用 Python 写一个抢票软件
  17. java 模拟天眼查登陆,scrapy,我想模拟登陆天眼查网站,那个网站要滑动对齐验证,我能怎么办才能模拟登陆成功呢?...
  18. 4大私域流量体系(个人号、公众号、社群和小程序)全方面价值对比:私域流量,企业保命之本爆发之源!...
  19. Python 毕设精品实战案例——快速索引目录
  20. Linux权限drwxrwxrwx是什么意思?

热门文章

  1. 卸载AMD software后导致声卡驱动(AMD High Definition Audio)损坏问题的解决办法
  2. 《关于Android系统的电量问题》
  3. 【Docker系列】镜像的创建管理和发布
  4. 关于word中文输入法状态下打句号出来却是英文的点问题
  5. Linux中的进程和计划任务
  6. MySQL数据库学习导航
  7. RotateAnimation
  8. 在线报刊html代码,HTML5 虚拟现实- 3D阅读漂浮的报刊
  9. 阿里云+腾讯云实现定时自动发送短信
  10. C2280 “std::_Uhash_compare<_Kty,_Hasher,_Keyeq>......尝试引用已删除的函数