【多式联运】不确定需求下考虑混合时间窗的多式联运路径优化(Matlab代码实现)

2024-01-12

???????????????? 欢迎来到本博客 ❤️❤️????????

????博主优势: ???????????? 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️ 座右铭: 行百里者,半于九十。

???????????? 本文目录如下: ????????????

目录

????1 概述

????2 运行结果

????3 参考文献

????4 Matlab代码、数据、文章


????1 概述

文章来源:

假设两地之间需要运输一批货物,货物的需求量不确定,在运输过程中需通过若干节点,相邻 2 个

节点之间可采用多种运输方式,如图 1,采用多点间运输网络图的表示形式。O,D 分别为起点和终点,中间有若干个节点,有公路、铁路、水路、航空 4 种运输方式,由于各节点之间可采用不同的运输方式,相对应的时间、成本、碳排放量各不相同。因此,本文旨在混合时间窗约束下,考虑不确定需求,找到一个既让企业对运输成本、时间较为满意,同时又达到碳排放要求的最优运输路线和运输方式。因此,考虑多式联运实际情况和便于建模求解,作出如下假设。

1) 货物在运输途中只采用一种运输方式,不可进行分割运输;

2) 只在节点城市处进行运输方式的转换;

3) 在转运节点处,至多进行一次运输方式的转换;

4) 在运输过程中,货物的属性状态不发生变化,没有货损情况。

???? 2 运行结果

主函数代码:

clc;
clear all;
close all;
warning off
%%
noRng=1;
rng('default')
rng(noRng)
%%
global data
data.numN=15; %节点数量
data.Cap_Ts=xlsread("节点处的最大中转运输能力.xlsx");
temp=round(rand(data.numN,3)*10+15)*10;
data.Cap_Ts(:,2:end)=temp;
data.Windows=xlsread("节点的时间窗.xlsx");
data.D=xlsread("节点间距离.xlsx");
data.Cap_Tp=xlsread("节点间最大运输能力.xlsx");
data.T=data.D;
data.v=[76,60,30];
for i=1:length(data.Cap_Tp(:,1))
no1=data.Cap_Tp(i,1);
no2=data.Cap_Tp(i,2);
for j=1:3
if isnan(data.Cap_Tp(i,2+j))
data.D(i,2+j)=nan;
end
end
data.T(i,[3,6,9])=round(data.D(i,3:5)./data.v/1.2);
data.T(i,[4,7,10])=round(data.D(i,3:5)./data.v);
data.T(i,[5,8,11])=round(data.D(i,3:5)./data.v/0.8);
end
data.Windows(:,3)=data.Windows(:,3).*(1-rand(size(data.Windows(:,3))));
data.Windows(:,4)=data.Windows(:,4).*(1+rand(size(data.Windows(:,3))))+10;
data.Windows(:,3:4)=max(0,round(data.Windows(:,3:4)+randn(size(data.Windows(:,3:4)))));
data.Windows(:,5)=max(data.Windows(:,4));
data.CT=[0,3.09,5.23; % 转换成本
3.09,0,26.62;
5.23,26.62,0];
data.TT=[0,1,1;         %转换时间
1,0,2;
1,2,0];
data.ET=[0,1.56,6;       % 转换碳排放
1.56,0,3.12;
6,3.12,0];
data.q=[120,150,180];

data.E0=[0.796,0.028,0.04];
data.CW=[30,50];
data.S=1;
data.E=15;
data.alpha=0.8;
data.beta1=0.8;
data.beta2=0.8;
data.beta3=0.8;
data.C0=[0.3,0.2,0.1]; %三种运输方式的运输成本
data.weight=[1,1];
data.maxB=100000;
data.maxE=21000;
%%
%%
data.numQ=100;
for i=1:data.numQ
if rand<0.5
data.q0(i)=rand*(data.q(2)-data.q(1))+data.q(1);
else
data.q0(i)=rand*(data.q(3)-data.q(2))+data.q(2);
end
end
%%
G=graph(data.D(:,1),data.D(:,2),data.D(:,1)*0+1);
figure
plot(G)
set(gca,'LooseInset',get(gca,'TightInset'))
%%
lb=0;
ub=1;
dim=length(data.D(:,1))*3;
option.lb=lb;
option.ub=ub;
option.dim=dim;
if length(option.lb)==1
option.lb=ones(1,option.dim)*option.lb;
option.ub=ones(1,option.dim)*option.ub;
end
option.fobj=@aimFcn_1;
option.showIter=0;

%% 算法参数设置 Parameters
% 基本参数
option.numAgent=20;        %种群个体数 size of population
option.maxIteration=100;    %最大迭代次数 maximum number of interation
%% 遗传算法
option.p1_GA=0.7;
option.p2_GA=0.1;
%% 粒子群
option.w_pso=0.1;
option.c1_pso=1.2;
option.c2_pso=1.2;
%% AFO

option.v_lb=-(option.ub-option.lb)/4;
option.v_ub=(option.ub-option.lb)/4;
option.w2=0.5; %weight of Moving strategy III
option.w4=1;%weight of Moving strategy III
option.w5=1;%weight of Moving strategy III
option.pe=0.01; % rate to judge Premature convergence
option.gap0=ceil(sqrt(option.maxIteration*2))+1;
option.gapMin=5; % min gap
option.dec=2;    % dec of gap
option.L=10;     % Catastrophe
%% DE
option.F=0.5;
option.CR=0.5;
%%
str_legend=[{'GA'},{'PSO'},{'AFO'}];
aimFcn=[{@GA},{@PSO},{@AFO3}];
%% 初始化
rng(noRng)
x=ones(option.numAgent,option.dim);
y=ones(option.numAgent,1);
for i=1:option.numAgent
x(i,:)=rand(size(option.lb)).*(option.ub-option.lb)+option.lb;
y(i)=option.fobj(x(i,:),option,data);
end
%% 使用算法求解
bestX=x;
for i=1:length(aimFcn)
rng(noRng)
tic
[bestY(i,:),bestX(i,:),recording(i)]=aimFcn{i}(x,y,option,data);
tt(i)=toc;
end
%% 绘制迭代曲线
figure
hold on
for i=1:length(aimFcn)

if i>1
plot((recording(i).bestFit),'LineWidth',2)
else
plot((recording(i).bestFit),'--','LineWidth',2)
end
end
legend(str_legend)
xlabel('评价次数(*100)')
ylabel('适应度函数值')
set(gca,'LooseInset',get(gca,'TightInset'))
%% 计算结果
for i=1:length(str_legend)
str=[str_legend{i},'优化后方案'];
[~,result(i)]=option.fobj(bestX(i,:),option,data);

% drawPC(result(i),data,str)
end
%%
rng(11)
x0=[0.227391667368465    0.879816756512174    0.758978072405287    0.510838515791228    0.192188536212261    0.651441269146713    0.418963422194475    0.552435663022093    0.692178644766480    0.525121273337296    0.901443303774014    0.870433999021102    0.727907836575027    0.635555150728710    0.377948489141470    0.0665747380900594    0.380375322185706    0.271295139005737    0.556390072117235    0.836324594294146    0.412650509862244    0.435408044462144    0.339160221282954    0.517673083186858    0.305139543163461    0.759153928221489    0.661651047625365    0.695663261206050    0.579862243307374    0.0203768757943083    0.567587976562174    0.417560315118765    0.194865572678659    0.0355023446924871    0.0656090882042756    0.283822647397696    0.409304642722500    0.797371466667136    0.139734109717042    0.943567670211017    0.736340144724420    0.899302180486718    0.0958418793238567    0.494947220485218    0.377043083335839    0.392090901825893    0.872224588221799    0.225018973369553    0.658496649609525    0.985772242893824    0.312242936944674    0.0176752228038184    0.151305501546866    0.117920480497746    0.137344184189911    0.929080746036836    0.737056036783124    0.264583371593473    0.935709972806256    0.930542122124921    0.458371373498295    0.0216966409045397    0.0615124906604629    0.569072523079761    0.912715979600965    0.684016483416011    0.0872976004423956    0.854123989826840    0.699891878132857    0.603233918882651    0.626266466189881    0.764357628595205    0.633979476955922    0.162893341780099    0.277411062836412    0.839224723775726    0.908550538167801    0.890586782754062    0.466391769502905    0.488448750263230    0.365236675941588    0.730292329677324    0.748971571306197    0.706903738180738];
gs = GlobalSearch;
problem = createOptimProblem('fmincon','x0',x0,...
'objective',@(x)aimFcn_1(x,option,data),'lb',x0*0,'ub',x0*0+1);
x = run(gs,problem);
[fit1,result(i+1)]=aimFcn_1(x,option,data);
%%
P=[
0.610000000000000    1    1    1    1    0.610000000000000
0.610000000000000    1    1    0.810000000000000    0    0
0.830000000000000    0.920000000000000    1    1    0.900000000000000    0.830000000000000
1    1    1    0.930000000000000    1    0.930000000000000]; %注 P是从result里面复制出来的
str_legend=[str_legend,{'GS'}];
figure
bar(0:5,P,'grouped')
legend(str_legend)
xlabel('约束')
ylabel('满足概率')
set(gca,'LooseInset',get(gca,'TightInset'))

????3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

???? 4 Matlab代码、数据、文章

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【多式联运】不确定需求下考虑混合时间窗的多式联运路径优化(Matlab代码实现) 的相关文章

  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit
  • MATLAB - GUI 和 OPC 服务器

    我想在 MATLAB 中设计一个图形用户界面 可以使用 MATLAB 的过程控制对象链接和嵌入 OPC 工具箱连续读取数据 我怎样才能实现这个 我已经设计了图形用户界面 但我无法将数据读入图形用户界面 就这样做 type opctoolMA
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • Matlab 一个图上有多个图例 2014b

    我想在一个地块上有多个传说 该解决方案在 2014b 版本之前完美运行 我试图弄清楚如何使用手柄优雅地制作它 但到目前为止还没有成功 欢迎任何想法 2013b 的示例 x 1 50 y1 sin x 2 y2 cos x 2 f figur
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • Matlab的导入函数的范围是什么?

    我正在尝试将一些用 Matlab 编写的代码转换为独立的 编译的 Matlab 应用程序 然而 在出现一些奇怪的错误之后 我意识到代码大量使用了从路径中添加和删除的操作 以避免多次使用多个具有相同名称 但结果 计算不同 的函数这一事实 环顾
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • Ilnumerics Ilpanel 在 winform 中编译成 dll 并加载到 matlab 时不激活

    我想将 Visual studio 2012 中用 C 编写的 winform 编译为 dll 然后将其加载到 matlab 2013a 中 然后 我想使用 matlab net 接口与 winform 进行交互 侦听其事件并通过一组预定义
  • 禁止 MATLAB 自动获取焦点[重复]

    这个问题在这里已经有答案了 我有以下问题 在我的 MATLAB 代码中 我使用如下语句 figure 1 更改某些数据的目标数字 问题是 在此 MATLAB 之后 系统将焦点集中在具有该图形的窗口上 当我在后台运行一个大脚本并尝试在计算机上
  • MATLAB:将当前文件夹设置为脚本位置

    我在不同的文件夹中有一些脚本和数据 我使用addpath和相对路径经常 我的问题是 只有当我的当前文件夹是我执行的脚本所在的位置时 这才有效 例如 如果我执行添加路径 X 的脚本 A 然后执行位于路径 X 中的脚本 B 则 Matlab 不
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • 更新:随机将行添加到矩阵中,但遵循严格的规则

    以下是一个更大的矩阵的一部分 0 1 0000 1 0000 77 0000 100 0000 0 0 2500 0 1 0000 1 0000 72 0000 100 0000 0 2500 0 2500 0 1 0000 1 0000
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 在 Pari-GP 中嵌套特定递归

    每个人 我最初在 Stackexchange 上发布了类似的问题 它已移至此处 可以在链接中找到 在 Matlab 中声明函数递归序列 https stackoverflow com questions 67146061 declaring

随机推荐