MATLAB实现遗传算法优化公铁水联运

公铁水联运是运输行业的经典问题, 常用智能算法进行优化,比如遗传算法.

公铁水多式联运优化的数学模型如下:

1.模型简介

公铁水多式联运优化问题可以抽象为一个网络流问题,其中节点代表不同的运输方式转换点(如公路、铁路、水运的交汇点),边代表不同的运输路径。目标是找到从起点到终点的最优路径,同时考虑运输时间、成本和距离等多个因素。

2.目标函数

目标函数通常包括最小化运输时间、成本和距离。这些目标可以通过加权的方式组合成一个单目标函数。具体公式如下:

  1. 最小化运输时间T = \sum_{i=1}^{n} t_{i j}x_{i j},其中t_{ij}是路径i的运输时间,x_{ij}是一个0-1变量,表示路径i的以第j种运输方式运输是否被选择(1表示选择,0表示未选择)。
  2. 最小化运输成本C = \sum_{i=1}^{n} c_{ij} x_{ij},其中 c_{ij}是路径i的运输成本,x_{ij}是一个0-1变量,表示路径i的以第j种运输方式运输是否被选择(1表示选择,0表示未选择)。
  3. 最小化运输距离D = \sum_{i=1}^{n} d_{ij} x_{ij},其中 d_{ij}是路径i的运输成本,x_{ij}是一个0-1变量,表示路径i的以第j种运输方式运输是否被选择(1表示选择,0表示未选择)。

综合以上三个目标,可以得到一个加权的目标函数:Z = \lambda_1 T + \lambda_2 C + \lambda_3 D,其中 \lambda_1, \lambda_2, \lambda_3)是权重因子,用于平衡不同目标之间的重要性。

约束条件

约束条件主要包括以下几类:

  1. 路径选择约束:确保从起点到终点只有一条路径被选择。即 \sum_{i \in P_{st}} x_{ij} = 1,其中P_{st}是从起点s 到终点t的所有可能路径集合。
  2. 转运次数约束:限制在整个运输过程中转运的次数。\sum_{j=1}^{m} y_j \leq k,其中最多转运次数为k,y_j表示在第j个转运点是否进行转运(1表示转运,0表示不转运)。
  3. 容量约束:确保每个运输方式的容量不超过其最大限制。v_{ij} \leq V_{ij\max},其中v_{ij}是路径i上运输方式j的运输量,V_{ij\max}是路径i的运输方式j最大运输容量。
  4. 时间约束:确保货物在规定的时间内到达目的地。设置总运输时间不超过T \leq T_{\max}

请注意,以上模型是一个简化的表示,实际应用中可能需要根据具体情况进行调整和扩展。

遗传算法的流程已经很多,不再赘述, 总体流程如下图所示:

MATLAB主程序:

%% 遗传算法优化多目标
clc;close all;clear all;warning off;%清除变量
rand('seed', 100);
randn('seed', 100);
format long g;global alpha1 beta1;alpha1=0.1;
beta1=0.9;%% 读取数据
filename='数据.xlsx';
[adata201,bdata201,cdata201]=xlsread(filename,'运费');
[adata202,bdata202,cdata202]=xlsread(filename,'转换费');
[adata203,bdata203,cdata203]=xlsread(filename,'转换时间');
[adata204,bdata204,cdata204]=xlsread(filename,'边数据');% [边序号	节点1	节点2	距离	公	铁	水]
[adata205,bdata205,cdata205]=xlsread(filename,'坐标');%% 变量赋值
global transport_cost_mat transport_v_mat tran_cost_mat tran_time_mat;
global nodenumber edgenumber edge_table transport_type_cell dmat nearcell;XY=adata205(:,2:3);% 坐标
transport_cost_mat=adata201(1,:)';% 运费
transport_v_mat=adata201(2,:)';% 速度
tran_cost_mat=adata202;% 转换费
tran_time_mat=adata202;% 转换时间nodenumber=size(XY,1);edge_table=adata204(:,2:end);% 节点1	节点2	距离	公	铁	水
edgenumber=size(edge_table,1);% 边数
E=zeros(nodenumber,nodenumber);
transport_type_cell=cell(edgenumber,1);
lb=zeros(1,edgenumber);
ub=zeros(1,edgenumber);
dmat=zeros(nodenumber,nodenumber);
for i=1:edgenumbernode1=edge_table(i,1);node2=edge_table(i,2);E(node1,node2)=1;% 邻接关系dmat(node1,node2)=edge_table(i,3);% 距离dmat(node2,node1)=edge_table(i,3);% 距离mat201=edge_table(i,4:end);index20i= find(mat201>0);lb(1,i)=1;ub(1,i)=length(index20i);transport_type_cell{i,1}=index20i;
endnearcell=nearfun(E,nodenumber);% 设定邻近集
N=nodenumber;% 遗传算法参数
popsize=20;% 遗传算法种群数
maxgen=50;% 遗传算法迭代次数
PM=0.05;% 变异概率
PC=0.8;% 交叉概率%% 遗传算法主程序
%性能跟踪
tracemat_ga=zeros(maxgen,2);Chrom=genChrome(popsize,N,lb,ub);% 建立种群
Value= decodingFun(Chrom,popsize);% 解码染色体
[vmin,indexmin]=min(Value);
bestChrom=Chrom(indexmin,:);% 记录最优染色体
bestValue=vmin;% 记录最优值%% 遗传算法优化的主循环
%进度条
gen=0;
tic;
wait_hand = waitbar(0,'run……', 'tag', 'TMWWaitbar');
while gen<maxgen% 遗传算子FitnV=ranking(Value);% 分配适应度值Chrom=select('rws',Chrom,FitnV,1);% 选择算子Chrom=mutationGA(Chrom,popsize,PM,N,lb,ub);% 种群变异,单点变异Chrom=crossGA(Chrom,popsize,PC,N);% 种群交叉,2点交叉Value= decodingFun(Chrom,popsize);% 解码染色体% 计算最优[vmin,indexmin]=min(Value);gen=gen+1;% 记录最优if bestValue>vminbestChrom=Chrom(indexmin,:);% 记录最优染色体bestValue=vmin;% 记录最优值endtracemat_ga(gen,1)=bestValue;tracemat_ga(gen,2)=mean(Value);waitbar(gen/maxgen,wait_hand);%每循环一次更新一次进步条
end
delete(wait_hand);%执行完后删除该进度条disp('算法运行时间');
runtime_ga=toc% 显示结果
disp('遗传算法优化得到的最优目标函数值');
bestValue
disp('遗传算法优化得到的最优染色体');
bestChromfigure;
plot(tracemat_ga(:,1),'r-','linewidth',1);
hold on;
plot(tracemat_ga(:,2),'b-','linewidth',1);
legend({'种群最优值','种群均值'},'fontname','宋体');
xlabel('迭代次数','fontname','宋体');
ylabel('目标函数','fontname','宋体');
title('遗传算法迭代曲线','fontname','宋体');x=bestChrom;
[y,route,C,T,midmat,egeIDmat,timeline]=myfun(x);outcell={'起点','终点','运输方式','起点到达时间','起点转运时间','起点到终点运行时间','到终点时间'};
outcell=[outcell;num2cell(timeline(:,1)),num2cell(timeline(:,2)),num2cell(timeline(:,3:end))]disp('路径')
route
C
Ttitle201='遗传算法优化得到的路线图';
drawnetfun102(XY,E,route,midmat,title201);

程序结果如下;

算法运行时间

runtime_ga =

                 1.8201103

遗传算法优化得到的最优目标函数值

bestValue =

          29.9884615384615

遗传算法优化得到的最优染色体

bestChrom =

  1 至 28 列

    23     1    20    13    21     3    10    16    14     7     2     5    19    11     4    17    15     9    12     6     8    22    18     1     2     2     2     2

  29 至 56 列

     1     2     1     2     2     2     1     1     2     2     1     1     1     1     1     2     1     1     1     2     2     1     1     2     1     2     2     1

  57 列

     1


outcell = 

    '起点'    '终点'    '运输方式'    '起点到达时间'          '起点转运时间'    '起点到终点运行时间'     '到终点时间'       
    [   1]    [   3]    [      2]    [               0]    [         0]    [             2.5]    [             2.5]
    [   3]    [   6]    [      2]    [             2.5]    [         0]    [            3.75]    [            6.25]
    [   6]    [   9]    [      2]    [            6.25]    [         0]    [             2.5]    [            8.75]
    [   9]    [  10]    [      2]    [            8.75]    [         0]    [             2.5]    [           11.25]
    [  10]    [  15]    [      3]    [           11.25]    [       0.1]    [6.15384615384615]    [17.5038461538462]
    [  15]    [  20]    [      2]    [17.5038461538462]    [       0.1]    [             7.5]    [25.1038461538462]
    [  20]    [  23]    [      2]    [25.1038461538462]    [         0]    [            6.25]    [31.3538461538462]

路径

route =

     1     3     6     9    10    15    20    23


C =

                      17.7


T =

          31.3538461538462

>> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

x264编码器 MV 预测

H264 编码标准中MV预测的目的 每个分割 MV 的编码需要相当数目的比特,特别是使用小分割尺寸时。为减少传输比特数,可利用邻近分割的 MV 较强的相关性,MV 可由邻近已编码分割的 MV 预测而得。预测矢量 MVp 基于已计算 MV 和 MVD(预测与当前的差异)并被编码和传送。MVp 则取决…

【C++航海王:追寻罗杰的编程之路】C++11(上)

目录 1 -> C11简介 2 -> 统一的列表初始化 2.1 -> {}初始化 2.2 -> std::initializer_list 3 -> 声明 3.1 -> auto 3.2 -> decltype 3.3 -> nullptr 1 -> C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C…

解决跨域和https不能访问的问题。

本地安装了项目,是一键安装的,安装之后还是apache的web服务器,有个视频服务用的是https的服务,要对这个项目进行二次开发,本地调用没问题,可是别人已调用就跨域。只能本地访问。 现在有两个问题:1.解决跨域问题 2.还要解决https访问的问题。 解决思路,用nginx 的ssl证…

网络编程套接字(三)之TCP服务器简单实现

目录 一、服务端TcpServer 1、tcp_server.hpp 2、tcp_server.cc 二、客户端TcpClient tcp_client.cc 三、服务器和客户端进行通信 四、完整代码 一、服务端TcpServer 首先我们需要对服务端进行封装。我们需要的成员变量有IP地址&#xff0c;端口号port&#xff0c;以及监…

CentOS7下安装mysql8或者mysql5.7

mysql8 1、下载 访问mysql官网下载mysql8软件包 https://dev.mysql.com/downloads/mysql/ 选择相应的版本如&#xff1a;RPM Bundle mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar RPM Bundle 8.0.33 下载地址&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.…

Android的一些总结

先打开自定义的app显示欢迎->消失 打开桌面应用程序->在桌面应用程序中也要能一键启动打开视频播放的app 桌面应用程序广播接收者进行监听&#xff0c;然后打开服务/activity是可行的。 ########################## 日志&#xff0c;调试&#xff1a; Usb 无线 串口…

Vue3从入门到实战:深度了解相关API

shallowRef 作用&#xff1a;创建一个响应式数据&#xff0c;但只对顶层属性进行响应式处理。 用法&#xff1a; let myVar shallowRef(initialValue); 特点&#xff1a;只跟踪引用值的变化&#xff0c;不关心值内部的属性变化。 shallowReactive 作用&#xff1a;创建一个…

【MySQL】表的基本约束

文章目录 1、约束类型1.1NOT NULL约束1.2UNIQUE&#xff1a;唯一约束1.3DEFAULT&#xff1a;默认值约束1.4PRIMARY KEY&#xff1a;主键约束1.5FOREIGN KEY&#xff1a;外键约束 2、表的设计2.1一对一2.2一对多2.3多对多 1、约束类型 关键字解释NOT NULL指示某列不能存储NULL值…

在线编辑器 CodeMirror

如何优雅的在网页显示代码 如果开发在线编辑器 引入资源&#xff1a; <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.60.0/codemirror.min.css"><script src"https://cdnjs.cloudflare.com/ajax/libs/c…

力扣经典150题第三十题:长度最小的子数组

目录 力扣经典150题解析之三十&#xff1a;长度最小的子数组1. 介绍2. 问题描述3. 示例4. 解题思路方法一&#xff1a;滑动窗口 5. 算法实现6. 复杂度分析7. 测试与验证测试用例设计测试结果分析 8. 进阶9. 总结10. 参考文献感谢阅读 力扣经典150题解析之三十&#xff1a;长度最…

Web前端 Javascript笔记6

BOM 前面的笔记讲的都是DOM&#xff08;文档对象模型&#xff09;&#xff0c;DOM几乎被所有浏览器支持&#xff0c;是DOM的作用为操作HTML文档的重要手段。利用DOM可以对HTML文档中的所有元素&#xff0c;节点进行获取与访问&#xff0c;对标签属性与样式进行设置。 下面是一…

OpenHarmony鸿蒙南向开发案例:【智能窗户通风设备】

样例简介 本文档介绍了安全厨房案例中的相关智能窗户通风设备&#xff0c;本安全厨房案例利用轻量级软总线能力&#xff0c;将两块欧智通V200Z-R/BES2600开发板模拟的智能窗户通风设备和燃气告警设备组合成。当燃气数值告警时&#xff0c;无需其它操作&#xff0c;直接通知软总…

Targeted influence maximization in competitive social networks

abstract 利用口碑效应的广告对于推销产品是相当有效的。在过去的十年中&#xff0c;人们对营销中的影响力最大化问题进行了深入的研究。影响力最大化问题旨在将社交网络中的一小群人识别为种子&#xff0c;最终他们将引发网络中最大的影响力传播或产品采用。在网络营销的实际场…

C++ 继承(一)

一、继承的概念 继承是面向对象编程中的一个重要概念&#xff0c;它指的是一个类&#xff08;子类&#xff09;可以从另一个类&#xff08;父类&#xff09;继承属性和方法。子类继承父类的属性和方法后&#xff0c;可以直接使用这些属性和方法&#xff0c;同时也可以在子类中…

DLT 直接线性变换

DLT 直接线性变换 对于单应变换 x i ′ H x i x_i^{\prime}Hx_i xi′​Hxi​&#xff0c;易知两图中对应的特征点&#xff0c;如何找出所需要的 H H H​&#xff0c;为了解决这个问题&#xff0c;可以采用DLT算法 原理 其中采用Least Squares Error去拟合 其中目标是获得最佳…

【办公类-22-05】20240419 UIBOT填写“PATHS课程”的《SSBS校园行为问卷》

背景需求&#xff1a; 每年都有一个PATHS课程的“家长问卷调查”和“教师问卷调查”需要填写 作为教师&#xff0c;每次要对全班所有的孩子进行评价&#xff0c;每位孩子64题&#xff01; 反复点题目&#xff0c;感觉非常累&#xff0c;工作操作就是两位老师&#xff0c;每人做…

Golang | Leetcode Golang题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; func reverseKGroup(head *ListNode, k int) *ListNode {hair : &ListNode{Next: head}pre : hairfor head ! nil {tail : prefor i : 0; i < k; i {tail tail.Nextif tail nil {return hair.Next}}nex : tail.Nexthead, tail my…

U盘秒变0字节?别慌,数据恢复有妙招!

在日常的工作和生活中&#xff0c;U盘已成为我们不可或缺的数据存储工具。然而&#xff0c;有时候我们可能会遇到一个令人头疼的问题&#xff1a;原本存有重要文件的U盘&#xff0c;突然间容量显示为0字节。这意味着U盘中的数据全部丢失&#xff0c;无法读取。那么&#xff0c;…

hackthebox - Redeemer

2024.4.19 TASK 1 Which TCP port is open on the machine? 6379 TASK 2 Which service is running on the port that is open on the machine? redis TASK 3 What type of database is Redis? Choose from the following options: (i) In-memory Database, (ii) Traditiona…

UltraScale+的10G/25G Ethernet Subsystem IP核使用

文章目录 前言一、设计框图1.1、xxv_ethernet_01.2、xxv_ethernet_0_sharedlogic_wrapper1.3、xxv_ethernet_0_clocking_wrapper1.4、xxv_ethernet_0_common_wrapper 二、IP核配置三、仿真四、上板测速 前言 前面我们学习了很多基于XILINX 7系列的高速接口使用&#xff0c;本文…