一、问题描述

若干城市点之间构成了物流运输网络,每座城市与城市之间都有不超过内河、铁路、公路和航空运输方式;考虑与行驶距离线性相关的旅行成本和每种运输方式之间转换的费用(中转费用),另外考虑行驶时间和中转时间之和的时间成本。其他成本也可以同时考虑。

联合运输的概念及特点

联合运输是一种综合性的运输组织模式,它是指运输企业通过一次托运、一次结算、一票到底、全程负责的运输组织程序提供的两种以上(含两种)运输方式或两程以上(含两程)运输相衔接的全程运输服务。

联合运输的特点

联合运输的种类

  1. 陆空联运(Train-Air简称T.A,或者Train-Air-Trunk简称T.A.T.)
  2. 海空联运
  3. 陆海联运
  4. 陆桥运输(海——陆——海)
  5. 国际多式联运

国际多式联运

国际多式联运是指按照多式联运合同,以至少两种不同的运输方式,由多式联运经营人,将货物从一国境内的接管地点运送至另一国境内指定交付地点的货物运输方式。

构成国际多式联运的基本条件

  1. 必须具有一份多式联运合同
  2. 必须使用一份全程多式联运单
  3. 必须是至少两种不同运输方式
  4. 必须是国际间的货物运输
  5. 必须由一个多式联运经营人对货物运输全程
  • 亚欧第一大陆桥:东起俄罗斯东部符拉迪沃斯托克港口,西至荷兰鹿特丹;
  • 亚欧第二大陆桥:东起我国连云港,通过陇海兰新铁路,穿越中亚地区,连接俄罗斯,德国等欧洲国家,最终抵达鹿特丹。
  • 构想中的第三亚欧大陆桥:东起我国广东沿海港口群,由昆明经缅甸、孟加拉国、印度、巴基斯坦、伊朗,从土耳其进入欧洲,最终抵达鹿特丹。

二、算法

遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。

再给出相关术语:(各位看看就好,后面都会涉及到,再细说)

基因型(genotype):性状染色体的内部表现;

表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;

进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。

适应度(fitness):度量某个物种对于生存环境的适应程度。

选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。

复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。

交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;

变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。

编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。

解码(decoding):基因型到表现型的映射。

个体(individual):指染色体带有特征的实体;
种群(population):个体的集合,该集合内个体数称为种群的大小。

遗传算法的有趣应用很多,诸如寻路问题,8数码问题,囚犯困境,动作控制,找圆心问题(在一个不规则的多边形中,寻找一个包含在该多边形内的最大圆圈的圆心),TSP问题,生产调度问题,人工生命模拟等。下面我以袋鼠为例子讲讲遗传算法。(因为袋鼠会跳)

遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。可以这样想象,这个多维曲面里面有数不清的“山峰”,而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)

问题的提出与解决方案:

让我们先来考虑考虑下面这个问题的解决办法。

已知一元函数:f(x) = xsin(10pi*x)+2

现在要求在既定的区间内找出函数的最大值
“袋鼠跳”问题

既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰(尽管袋鼠本身不见得愿意那么做)。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

作为对比下面简单介绍“袋鼠跳”的几种方式。

1. 爬山法(最速上升爬山法):

从搜索空间中随机产生邻近的点,从中选择对应解最优的个体,替换原来的个体,不断重复上述过程。因为爬山法只对“邻近”的点作比较,所以目光比较“短浅”,常常只能收敛到离开初始位置比较近的局部最优解上面。对于存在很多局部最优点的问题,通过一个简单的迭代找出全局最优解的机会非常渺茫。(在爬山法中,袋鼠最有希望到达最靠近它出发点的山顶,但不能保证该山顶是珠穆朗玛峰,或者是一个非常高的山峰。因为一路上它只顾上坡,没有下坡。)

2… 模拟退火:

这个方法来自金属热加工过程的启发。在金属热加工过程中,当金属的温度超过它的熔点(Melting Point)时,原子就会激烈地随机运动。与所有的其它的物理系统相类似,原子的这种运动趋向于寻找其能量的极小状态。在这个能量的变迁过程中,开始时,温度非常高, 使得原子具有很高的能量。随着温度不断降低,金属逐渐冷却,金属中的原子的能量就越来越小,最后达到所有可能的最低点。利用模拟退火的时候,让算法从较大的跳跃开始,使到它有足够的“能量”逃离可能“路过”的局部最优解而不至于限制在其中,当它停在全局最优解附近的时候,逐渐的减小跳跃量,以便使其“落脚 ”到全局最优解上。(在模拟退火中,袋鼠喝醉了,而且随机地大跳跃了很长时间。运气好的话,它从一个山峰跳过山谷,到了另外一个更高的山峰上。但最后,它渐渐清醒了并朝着它所在的峰顶跳去。)

3. 遗传算法:

模拟物竞天择的生物进化过程,通过维护一个潜在解的群体执行了多方向的搜索,并支持这些方向上的信息构成和交换。是以面为单位的搜索,比以点为单位的搜索,更能发现全局最优解。(在遗传算法中,有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠,并希望存活下来的袋鼠是多产的,在它们所处的地方生儿育女。)(或者换个说法。从前,有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。)

遗传算法的实现过程

遗传算法的实现过程实际上就像自然界的进化过程那样。首先寻找一种对问题潜在解进行“数字化”编码的方案。(建立表现型和基因型的映射关系)然后用随机数初始化一个种群(那么第一批袋鼠就被随意地分散在山脉上),种群里面的个体就是这些数字化的编码。接下来,通过适当的解码过程之后(得到袋鼠的位置坐标),用适应性函数对每一个基因个体作一次适应度评估(袋鼠爬得越高,越是受我们的喜爱,所以适应度相应越高)。用选择函数按照某种规定择优选择(我们要每隔一段时间,在山上射杀一些所在海拔较低的袋鼠,以保证袋鼠总体数目持平。)。让个体基因变异(让袋鼠随机地跳一跳)。然后产生子代(希望存活下来的袋鼠是多产的,并在那里生儿育女)。遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解。(你不必去指导袋鼠向那边跳,跳多远。)而只要简单的“否定”一些表现不好的个体就行了。(把那些总是爱走下坡路的袋鼠射杀,这就是遗传算法的精粹!)

所以我们总结出遗传算法的一般步骤:

开始循环直至找到满意的解。

1.评估每条染色体所对应个体的适应度。

2.遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。

3.抽取父母双方的染色体,进行交叉,产生子代。

4.对子代的染色体进行变异。

5.重复2,3,4步骤,直到新种群的产生。

结束循环。

接下来,我们将详细地剖析遗传算法过程的每一个细节。

编制袋鼠的染色体----基因的编码方式

受到人类染色体结构的启发,我们可以设想一下,假设目前只有“0”,“1”两种碱基,我们也用一条链条把他们有序的串连在一起,因为每一个单位都能表现出 1 bit的信息量,所以一条足够长的染色体就能为我们勾勒出一个个体的所有特征。这就是二进制编码法,染色体大致如下:

010010011011011110111110

上面的编码方式虽然简单直观,但明显地,当个体特征比较复杂的时候,需要大量的编码才能精确地描述,相应的解码过程(类似于生物学中的DNA翻译过程,就是把基因型映射到表现型的过程。)将过分繁复,为改善遗传算法的计算复杂性、提高运算效率,提出了浮点数编码。染色体大致如下:

1.2 –3.3 – 2.0 –5.4 – 2.7 – 4.3

(注:还有一种编码方式叫符号编码)

那么我们如何利用这两种编码方式来为袋鼠的染色体编码呢?因为编码的目的是建立表现型到基因型的映射关系,而表现型一般就被理解为个体的特征。比如人的基因型是46条染色体所描述的却能解码成一个眼,耳,口,鼻等特征各不相同的活生生的人。所以我们要想为“袋鼠”的染色体编码,我们必须先来考虑“袋鼠”的“个体特征”是什么。也许有的人会说,袋鼠的特征很多,比如性别,身长,体重,也许它喜欢吃什么也能算作其中一个特征。但具体在解决这个问题的情况下,我们应该进一步思考:无论这只袋鼠是长短,肥瘦,黑白只要它在低海拔就会被射杀,同时也没有规定身长的袋鼠能跳得远一些,身短的袋鼠跳得近一些。当然它爱吃什么就更不相关了。我们由始至终都只关心一件事情:袋鼠在哪里。因为只要我们知道袋鼠在那里,我们就能做两件必须去做的事情:

(1)通过查阅喜玛拉雅山脉的地图来得知袋鼠所在的海拔高度(通过自变量求适应函数的值。)以判断我们有没必要把它射杀。

(2)知道袋鼠跳一跳(交叉和变异)后去到哪个新位置。

如果我们一时无法准确的判断哪些“个体特征”是必要的,哪些是非必要的,我们常常可以用到这样一种思维方式:比如你认为袋鼠的爱吃什么东西非常必要,那么你就想一想,有两只袋鼠,它们其它的个体特征完全同等的情况下,一只长得黑,另外一只长得不是那么黑。你会马上发现,这不会对它们的命运有丝毫的影响,它们应该有同等的概率被射杀!只因它们处于同一个地方。(值得一提的是,如果你的基因编码设计中包含了袋鼠黑不黑的信息,这其实不会影响到袋鼠的进化的过程,而那只攀到珠穆朗玛峰的袋鼠黑与白什么的也完全是随机的,但是它所在的位置却是非常确定的。)


clc,clear,close all
tic%运输距离
m=28;
distance_rail=xlsread('data.xlsx','铁路','B2:AB28');
distance_rail(isnan(distance_rail))=inf;
for i=1:size(distance_rail,1)for j=1:idistance_rail(i,j)=distance_rail(j,i);end
end
distance_road=xlsread('data.xlsx','公路','B2:AB28');
distance_road(isnan(distance_road))=inf;
for i=1:size(distance_road,1)for j=1:idistance_road(i,j)=distance_road(j,i);end
end
distance_water=xlsread('data.xlsx','水路','B2:AB28');
distance_water(isnan(distance_water))=inf;
for i=1:size(distance_water,1)for j=1:idistance_water(i,j)=distance_water(j,i);end
end
%运输时间
dilivery_road=distance_road/100;%公路
dilivery_rail=distance_rail/80;%铁路
dilivery_water=distance_water/20;%水路
% 输入:m:终点站编号,南京:9;合肥:25;杭州:28
% 输出:输出: 公路、铁路、水路运输距离和运输时间
starpoint={'长沙','武汉','郑州','重庆','成都','西安','怀化','贵阳','南宁','北海'...,'昆明','广州','上海','满洲里','二连浩特','阿拉山口','喀什',...'瓜达尔','仰光','曼谷','胡志明','新加坡','鹿特丹','汉堡','华沙','杜伊斯堡'};endpoint={'武汉','郑州','重庆','成都','西安','怀化','贵阳','南宁','北海'...,'昆明','广州','上海','满洲里','二连浩特','阿拉山口','喀什',...'瓜达尔','仰光','曼谷','胡志明','新加坡','鹿特丹','汉堡','华沙','杜伊斯堡','德国'};
[finalrouts,finalObjcost]=solver(distance_road,distance_rail,distance_water,dilivery_road,dilivery_rail,dilivery_water,starpoint,endpoint);toc

【路径规划】基于遗传算法求解多式联运运输问题matlab源码相关推荐

  1. 【路径规划】遗传算法求解多式联运运输问题【含Matlab源码 877期】

    ⛄一.联运运输简介 1 问题描述 若干城市点之间构成了物流运输网络,每座城市与城市之间都有不超过内河.铁路.公路和航空运输方式:考虑与行驶距离线性相关的旅行成本和每种运输方式之间转换的费用(中转费用) ...

  2. 【路径规划】基于matlab蚁群算法栅格地图路径规划及避障【含Matlab源码 2088期】

    一.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾后搜救.军事.太空探索.深海勘探.家用和服务行业等, 机器人的发展正向智能化方向延伸, 要求其具有自组织.自学习.自适 ...

  3. 【路径规划】邮政运输网络中的邮路规划和邮车调度【含Matlab源码 648期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[路径规划]邮政运输网络中的邮路规划和邮车调度[含Matlab源码 648期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付 ...

  4. 【多式联运】基于matlab遗传算法求解多式联运运输问题(考虑碳交易)【含Matlab源码 1997期】

    一.联运运输简介 1 引言 运输问题(Transportation Problem)是一类特殊的线性规划问题,最早是由Hichcock于1941年提出的,由于它不仅能解决物资的合理调运和车辆的合理调度 ...

  5. 【多式联运】基于matlab遗传算法求解多式联运运输问题(考虑碳税)【含Matlab源码 1996期】

    ⛄一.联运运输简介 1 引言 运输问题(Transportation Problem)[1]是一类特殊的线性规划问题,最早是由Hichcock于1941年提出的,由于它不仅能解决物资的合理调运和车辆的 ...

  6. qr-rls算法matlab实现,【预测模型】基于RLS算法进行预测matlab源码

    一.简介 1 概述 递归最小二乘(RLS)算法是一种典型的数据处理方法,由著名学者高斯在1795年提出,高斯认为,根据所获得的观测数据来推断未知参数时,未知参数最可能的值是这样一个数据,即它使各项实际 ...

  7. 【三维装箱】基于粒子群算法求解三维装箱问题matlab源码

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

  8. 【RBF预测】基于RBF神经网络实现预测matlab源码

    1 简介 数据预测是指在分析现有数据的基础上估计或推测未来的数据的过程.神经网络具有良好的训练性和自学习能力,能够对大量复杂数据进行分析,特别是RBF网络模型,非常适合解决预测问题.随着云计算技术的迅 ...

  9. 通俗易懂的布谷鸟算法与莱维飞行,(附求解函数最小值matlab源码)

    1 从布谷鸟的育雏到布谷鸟算法 2 布谷鸟算法 3 萊维飞行与公式(1)的深层含义 4 附:CS算法求解函数最小值代码 5 源码下载 6 参考文献 1 从布谷鸟的育雏到布谷鸟算法 布谷鸟不会做窝,也不 ...

  10. 【多式联运】基于遗传算法求解多式联运低碳路径规划问题matlab源码

    1 模型 基于集装箱多式联运在进行门到门的运输过程中可以选择多种运输方式和路径的组合进行优化运输这个特点,本文将多式联运的运输优化问题转化成为一个最短路径问题,以成本和时间为优化目标建立了选择最优路径 ...

最新文章

  1. linux系统编程快速定位头文件的技巧之强大的grep命令
  2. Linux中的信号处理原理
  3. f(f(x)) = -x
  4. linux 常用命令技巧
  5. 亲手搭建一个基于Asp.Net WebApi的项目基础框架1
  6. 容器与devops_容器和DevOps如何改变杜克大学的IT部门
  7. 折半查找的实现(1010)swust-oj
  8. Jenkins+Git+Maven+Nexus+Tomcat
  9. keyphrase抽取论文在聊什么?
  10. winfrom软件开发汽车测试_从事汽车电子软件开发岗,我们最近还没那么愁
  11. Linux环境yum安装nodejs
  12. 数据库操作:更新数据update
  13. java 三阶幻方编程_巧解三阶幻方
  14. Linux下PHP下载安装
  15. AWash: Handwashing Assistance for the Elderly with Dementia via Wearables
  16. JCMsuite应用:光子晶体谐振腔光子晶体谐振腔
  17. android开发之发送短信SMS
  18. Ubuntu删除多余内核
  19. 微信第三方开发行业解决方案
  20. 【翻译论文】 Supervised Parametric Classification of Aerial LiDAR Data(2004)

热门文章

  1. java小球挡板游戏_多线程的一个小球游戏,就是以前的那个Pong游戏
  2. QT(5.12)+Qgis(3.10) 点图层及线图层渲染
  3. 计算机网络物联网论文,物联网对计算机网络技术发展分析
  4. 大数据基础知识之什么是服务器什么是集群
  5. RTB广告展示分步说明
  6. [USACO10HOL]赶小猪
  7. 1、AUTOSAR简介
  8. 餐馆点菜系统python程序_Python写一个自动点餐程序
  9. 云备份-保障你的数据安全
  10. 【前端知识之JS】JS的作用域链