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:edgenumber
    node1=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;
end

nearcell=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>vmin
        bestChrom=Chrom(indexmin,:);% 记录最优染色体
        bestValue=vmin;% 记录最优值
    end
    
    tracemat_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('遗传算法优化得到的最优染色体');
bestChrom

figure;
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
T


title201='遗传算法优化得到的路线图';
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.mfbz.cn/a/558536.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索MATLAB在计算机视觉与深度学习领域的实战应用

随着人工智能技术的快速发展&#xff0c;计算机视觉与深度学习已成为科技领域中最热门、最具挑战性的研究方向之一。 它们的应用范围从简单的图像处理扩展到了自动驾驶、医疗影像分析、智能监控行业等多个领域。 在这样的背景下&#xff0c;《MATLAB计算机视觉与深度学习实战…

【 基于Netty实现聊天室聊天业务学习】第4节.什么是BIO与NIO

IO在读写的时候是阻塞的&#xff0c;无法做其他操作&#xff0c;并发处理能力的非常低&#xff0c;线程之间访问资源通信时候也是非常耗时久&#xff0c;依赖我们的网速&#xff0c;带宽。 我们看一下他的白话原理 我们来看一下这张图那么这张图的话它里面有一个server还有三个…

OpenHarmony网络协议通信—libevent [GN编译] - 事件通知库

libevent主要是用C语言实现了事件通知的功能 下载安装 直接在OpenHarmony-SIG仓中搜索libevent并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 库代码存放路径&#xff1a;./third_party/libevent 修改添加依赖的编译脚本 在/developtools/bytrace_standard/…

Office文档在线预览-文档内容在线提取

文档提取功能&#xff0c;支持文档内容提取。包括提取文档中的所有文字内容&#xff0c;提取文档中的图片&#xff0c;提取文档音视频&#xff0c;提取文档中的统计及图表等。同时支持文档中公式的提取&#xff0c;文档大纲目录提取等功能。 支持以下文档格式进行内容提取&…

OSPGF高级实验综合

1.实验拓扑 二.实验要求 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&#x…

GPU深度学习环境搭建:Win10+CUDA 11.7+Pytorch1.13.1+Anaconda3+python3.10.9

1. 查看显卡驱动及对应cuda版本关系 1.1 显卡驱动和cuda版本信息查看方法 在命令行中输入【nvidia-smi】可以当前显卡驱动版本和cuda版本。 根据显示,显卡驱动版本为:Driver Version: 516.59,CUDA 的版本为:CUDA Version 11.7。 此处我们可以根据下面的表1 显卡驱动和c…

【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活

【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活 文章目录 【论文阅读】用于遥感弱监督语义分割的对比标记和标签激活一、介绍二、联系工作三、方法3.1 对比token学习模块&#xff08;CTLM&#xff09;3.2 Class token对比学习3.3 标签前景激活模块 四、实验结果 Cont…

java实现chatGPT SDK

搭建一个 ChatGPT-SDK 组件工程&#xff0c;专门用于封装对 OpenAI 接口的使用。由于 OpenAI 接口本身较多&#xff0c;并有各类配置的设置&#xff0c;所以开发一个共用的 SDK 组件&#xff0c;更合适我们在各类工程中扩展使用 整个流程为&#xff1a;以会话模型为出口&#x…

websocket 连接,http 协议下用 ws, https 协议下必须要使用 wss

解决方案&#xff1a; https 相当于使用 httpssl 认证&#xff0c;使用 https 时 websocket 访问&#xff08;比如建立链接时&#xff09;必须要使用 wss。 详细解释&#xff1a; WebSocket 协议有两个主要版本&#xff1a;“ws”和“wss”。"ws"表示非加密的 Web…

对EKS(AWS云k8s)启用AMP(AWS云Prometheus)监控+AMG(AWS云 grafana)

问题 需要在针对已有的EKS k8s集群启用Prometheus指标监控。而且&#xff0c;这里使用AMP即AWS云的Prometheus托管服务。好像这个服务&#xff0c;只有AWS国际云才有&#xff0c;AWS中国云没得这个托管服务。下面&#xff0c;我们就来尝试在已有的EKS集群上面启用AMP监控。 步…

Linux搭建Discuz论坛

搭建一个论坛 —接上篇博客 改名/etc/httpd/conf.d/vhosts.conf 》/etc/httpd/conf.d/vhosts.conf.bak [rootlocalhost conf.d]# mv /etc/httpd/conf.d/vhosts.conf /etc/httpd/conf.d/vhosts.conf.bak此时的vhosts.conf是一个新创建的文件&#xff0c;之前的vhosts.conf已经…

代码+视频,R语言对数据进行多重插补后回归分析

我们在临床做回顾性研究分析中经常要面对数据缺失的问题&#xff0c;如果数据缺失量大就会对我们的研究结果产生影响&#xff0c;近年来&#xff0c;对数据进行多重插补广泛应用于SCI论文中。我们在之前的文章中已经演示了使用SPSS对数据进行多重插补并分析。今天&#xff0c;我…

【C语言】Dijkstra算法详解

一、引言二、Dijkstra算法原理三、Dijkstra算法的C语言实现四、Dijkstra算法的应用场景五、总结 一、引言 Dijkstra算法是一种著名的图论算法&#xff0c;用于解决单源最短路径问题。它是由荷兰计算机科学家Edsger W. Dijkstra在1956年提出的。本文将详细介绍Dijkstra算法的原理…

数仓建模—逻辑数据模型

数仓建模—逻辑数据模型 数据模型是数据元素及其基于现实世界对象之间的关系的可视化表示。数据模型揭示并定义数据在业务流程中的连接方式,并支持创建高效的信息系统或应用程序。例如,在商业智能中,数据模型定义用户可以在其分析中使用哪种数据。 逻辑数据模型 (LDM Logi…

qt设置TextEdit的提示性文字

提示性文字&#xff0c;就是用户在输入的时候自动消失的那种 比如&#xff1a; 可以这样设置&#xff1a; lineEdit->setPlaceholderText("我是提示性文字"); 但是我们觉的这样有点难看&#xff0c;可以用以下QSS来调整&#xff1a; 调整提示性文字的位置&…

【MATLAB源码-第193期】基于matlab的网络覆盖率NOA优化算法仿真对比VFINOA,VFPSO,VFNGO,VFWOA等算法。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 NOA&#xff08;Network Optimization Algorithm&#xff0c;网络优化算法&#xff09;是一个针对网络覆盖率优化的算法&#xff0c;它主要通过优化网络中节点的分布和配置来提高网络的整体覆盖性能。网络覆盖率是衡量一个无…

【学习】软件压力测试对软件产品的作用

在信息化高速发展的今天&#xff0c;软件产品已经成为各行各业不可或缺的一部分。然而&#xff0c;随着软件功能的日益复杂和用户需求的不断增长&#xff0c;软件产品的稳定性和可靠性问题也愈发凸显。在这样的背景下&#xff0c;软件压力测试作为软件质量保障的重要手段之一&a…

weblogic反序列化漏洞(CVE-2017-10271)复现

直接用vuluhub搭建现成的靶场做 访问靶场 打开是这样表示成功 想反弹shell 就先开启kali1的nc监听&#xff0c;这就监听2233端口吧 linux&#xff1a;nc -l -p 2233 抓包修改为攻击数据包 ip和端口可以任意修改 反弹的shell 还可以写入文件shell 只需要把提供的poc POS…

机器学习鸢尾花各种模型准确率对比

流程 获取数据集导入需要的包读取数据划分训练集和测试集调用各种模型比较准确率 获取数据集 链接&#xff1a;https://pan.baidu.com/s/1RzZyXsaiJB3e611itF466Q?pwdj484 提取码&#xff1a;j484 --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd impo…

ASP.NET基于WEB的选课系统

摘要 设计本系统的目的是对选课信息进行管理。学生选课系统维护模块主要完成的是系统管理与维护功能。课题研究过程中&#xff0c;首先对系统管理模块进行了详尽的需求分析&#xff0c;经分析得到系统管理模块主要完成如下的功能&#xff1a;用户基本信息、选课信息的录入,查看…
最新文章