【TWVRP】遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1177期】

news2025/1/12 0:01:21

⛄一、VRP简介

1 VRP基本原理
车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一。VRP关注有一个供货商与K个销售点的路径规划的情况,可以简述为:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等),力争实现一定的目标(如车辆空驶总里程最短,运输总费用最低,车辆按一定时间到达,使用的车辆数最小等)。
VRP的图例如下所示:
在这里插入图片描述
2 问题属性与常见问题
车辆路径问题的特性比较复杂,总的来说包含四个方面的属性:
(1)地址特性包括:车场数目、需求类型、作业要求。
(2)车辆特性包括:车辆数量、载重量约束、可运载品种约束、运行路线约束、工作时间约束。
(3)问题的其他特性。
(4)目标函数可能是总成本极小化,或者极小化最大作业成本,或者最大化准时作业。

3 常见问题有以下几类:
(1)旅行商问题
(2)带容量约束的车辆路线问题(CVRP)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
该模型很难拓展到VRP的其他场景,并且不知道具体车辆的执行路径,因此对其模型继续改进。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)带时间窗的车辆路线问题
由于VRP问题的持续发展,考虑需求点对于车辆到达的时间有所要求之下,在车辆途程问题之中加入时窗的限制,便成为带时间窗车辆路径问题(VRP with Time Windows, VRPTW)。带时间窗车辆路径问题(VRPTW)是在VRP上加上了客户的被访问的时间窗约束。在VRPTW问题中,除了行驶成本之外, 成本函数还要包括由于早到某个客户而引起的等待时间和客户需要的服务时间。在VRPTW中,车辆除了要满足VRP问题的限制之外,还必须要满足需求点的时窗限制,而需求点的时窗限制可以分为两种,一种是硬时窗(Hard Time Window),硬时窗要求车辆必须要在时窗内到达,早到必须等待,而迟到则拒收;另一种是软时窗(Soft Time Window),不一定要在时窗内到达,但是在时窗之外到达必须要处罚,以处罚替代等待与拒收是软时窗与硬时窗最大的不同。
在这里插入图片描述
在这里插入图片描述
模型2(参考2017 A generalized formulation for vehicle routing problems):
该模型为2维决策变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)收集和分发问题
(5)多车场车辆路线问题
参考(2005 lim,多车场车辆路径问题的遗传算法_邹彤, 1996 renaud)
在这里插入图片描述
由于车辆是同质的,这里的建模在变量中没有加入车辆的维度。
在这里插入图片描述
在这里插入图片描述
(6)优先约束车辆路线问题
(7)相容性约束车辆路线问题
(8)随机需求车辆路线问题

4 解决方案
(1)数学解析法
(2)人机交互法
(3)先分组再排路线法
(4)先排路线再分组法
(5)节省或插入法
(6)改善或交换法
(7)数学规划近似法
(8)启发式算法

5 VRP与VRPTW对比
在这里插入图片描述

⛄二、遗传算法简介

1 引言
在这里插入图片描述
在这里插入图片描述
2 遗传算法理论
2.1 遗传算法的生物学基础
在这里插入图片描述
在这里插入图片描述
2.2 遗传算法的理论基础
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.3 遗传算法的基本概念
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.4 标准的遗传算法
在这里插入图片描述
在这里插入图片描述
2.5 遗传算法的特点
在这里插入图片描述
在这里插入图片描述
2.6 遗传算法的改进方向
在这里插入图片描述
3 遗传算法流程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4 关键参数说明
在这里插入图片描述

⛄三、部分源代码

%% 包括充电站1
clc;
clear all
close all

filename=‘.\evrptw_instances\c101_21.txt’;
[NO,type,XCOORD, YCOORD,DEMAND,READY_TIME,DUE_DATE,SERVICE_TIME]=textread(filename,‘%s%s%s%s%s%s%s%s’,‘headerlines’,1);
%% 进行经验求解路径
K=randperm(100);%对客户点随机排序
M=30;%任务量
capacity = 200;%车子载重
timewindows_yuanshi=[str2num(char(READY_TIME))‘;str2num(char(DUE_DATE))’];%时间窗
coordinate_yuanshi=[str2num(char(XCOORD)),str2num(char(YCOORD))];%坐标信息
coordinate_chongdianzhan=[coordinate_yuanshi(2:22,1)‘;coordinate_yuanshi(2:22,2)’;]‘;%充电站坐标
demand_yuanshi=str2num(char(DEMAND))’;%所有需求
service_yuanshi=str2num(char(SERVICE_TIME))‘;%所有服务时间
D=distanse(coordinate_yuanshi);%距离1
coordinate=[coordinate_yuanshi(1,1),coordinate_yuanshi(K(1:M)+22,1)’;coordinate_yuanshi(1,2),coordinate_yuanshi(K(1:M)+22,2)‘;]’;%中心和客户坐标位置
timewindows=[timewindows_yuanshi(1,1),timewindows_yuanshi(1,K(1:M)+22) ;timewindows_yuanshi(1,2),timewindows_yuanshi(2,K(1:M)+22)];%随机选取的客户点时间窗
demand=[demand_yuanshi(1),demand_yuanshi(K(1:M)+22)];%随机选取的客户点需求
service=[service_yuanshi(1),service_yuanshi(K(1:M))+22];%随机选取的客户点服务时间
% coordinate_yuanshi1=[coordinate_yuanshi(1,1),coordinate_yuanshi(23:end,1)‘;coordinate_yuanshi(1,2),coordinate_yuanshi(23:end,2)’;]';%中心和客户坐标位置
% D1=distanse(coordinate_yuanshi1);%距离
D2=distanse(coordinate);%距离
renwudian1=[1,K(1:M)+1];%包括起点的任务点
Q=77.751111;%电量
r=1;%消耗率
g=0.39;%充电
v=1;%速度

% %% 遗传参数初始化
C=500;%C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模和耗费的时间而定
Pc=0.9;%交叉概率
Pm=0.4;%变异概率
popsize=80;%种群数量
%经验公式m=[Σgi /aq]+1,粗求车辆数
function [ farm ] = crossover( farm,n,k,popsize,Pc )
%CROSSOVER Summary of this function goes here
% Detailed explanation goes here
% ⑴随机产生交叉位,如果在交叉位的外侧两端的父代基因都是0的话,则对父代1
% 进行简单交叉;如果交叉位的外侧两端的父代基因不为0的话,则将左交叉位向左
% 移,直至移动到左交叉位的左端基因为0时停止。以左交叉位为起点,继续向右移
% 动右交叉位,直至右交叉位的右端基因为0为止。这样就保证了父代染色体都用1条
% 子路径来进行交叉。
% ⑵经过第1步操作,子代中仍会产生访问同一客户2次的情况,需要对
% 子代进行整理。在子代中选择那些具有重复情况的自然数,如果该自然数并非
% 在交叉位内的话,则删除之。子代如存在未访问到某一客户的情况,则在染色
% 体的交叉位外补上该客户对应的自然数。
% ⑶经过第2步的操作,如果产生了某一子路径为空的情况,即染色体中含
% 有2个连续的0,须继续进行第3步操作。将其中的1个0与染色体其它位上
% 的客户自然码进行交换。对该客户自然码的要求是该码的前一位与后一位均不
% 为0。本步操作可放在对子代的变异后进行。
function temp = minsert(chrom,num,n)%insert函数,向量中指定位置插入数
%n是要插入的位置(之后)
[x,xx] = size(chrom);
temp = zeros(1,xx+1); %初始化
temp(1,1:n) = chrom(1,1:n);
temp(1,n+1) = num;
temp(1,(n+2):(xx+1)) = chrom(1,(n+1):xx);
end
function temp = mdelete(chrom,n)%delete函数,向量中指定位置删除数
%n是要删除数的坐标
[x,xx] = size(chrom);
temp = zeros(1,xx-1); %初始化
temp(1,1:n-1) = chrom(1,1:n-1);
temp(1,n:xx-1) = chrom(1,(n+1):xx);
end
total = n+k+1;
for i = 1:(popsize/2) %按对进行交叉
if Pc > rand
chromosome1 = zeros(1,total);
chromosome2 = zeros(1,total);
chromosome1 = farm(i,:); %染色体1
chromosome2 = farm(popsize - i + 1,:); %染色体2
%第一步*************************************************************
ran1L = round(rand*(total-3)+2); %随机数1 注意1和最后不要随机到
while chromosome1(1,ran1L) == 0 %不能随机到0
ran1L = round(rand*(total-3)+2);
end
ran1R = ran1L;
ran2L = round(rand*(total-3)+2); %随机数2
while chromosome2(1,ran2L) == 0 %不能随机到0
ran2L = round(rand*(total-3)+2);
end
ran2R = ran2L;
while chromosome1(1,ran1L-1) ~= 0 %左移直至第一个0出现
ran1L = ran1L - 1;
end
while chromosome1(1,ran1R+1) ~= 0 %右移直至第一个0出现
ran1R = ran1R + 1;
end
while chromosome2(1,ran2L-1) ~= 0 %左移直至第一个0出现
ran2L = ran2L - 1;
end
while chromosome2(1,ran2R+1) ~= 0 %右移直至第一个0出现
ran2R = ran2R + 1;
end
%交换片段**********************************************************
temp1 = zeros(1,total); %临时储存
temp2 = zeros(1,total); %临时储存
length1 = ran1R-ran1L+1; %片段长
length2 = ran2R-ran2L+1; %片段长
for ii = 1:length1 %转移到临时储存
temp1(1,ii) = chromosome1(1,ran1L+ii-1);
end
for ii = 1:length2 %转移到临时储存
temp2(1,ii) = chromosome2(1,ran2L+ii-1);
end
chrom1 = zeros(1,total+length2-length1); %中间染色体1
chrom2 = zeros(1,total+length1-length2); %中间染色体2
%重新拼接染色体***************************************************
chrom1(1,1:ran1L-1) = chromosome1(1,1:ran1L-1);
chrom1(1,ran1L:ran1L+length2-1) = temp2(1,1:length2);
chrom1(1,ran1L+length2:total+length2-length1) = chromosome1(1,ran1R+1:total);
chrom2(1,1:ran2L-1) = chromosome2(1,1:ran2L-1);
chrom2(1,ran2L:ran2L+length1-1) = temp1(1,1:length1);
chrom2(1,ran2L+length1:total+length1-length2) = chromosome2(1,ran2R+1:total);
%第二步*************************************************************
nala1 = zeros(1,total);%搜索temp2中有而temp1中没有的数,那个数1中必定重复
nala11 = zeros(1,total);%存放nala中数的位置
nala2 = zeros(1,total);%搜索temp1中有而temp2中没有的数,那个数2中必定重复
nala22 = zeros(1,total);%存放nala中数的位置
%搜索相互没有的数
kk = 1; %nala的下标 好累啊,wwwww…
for ii = 1:length2
flag = 0;
for j = 1:length1
if temp2(1,ii) == temp1(1,j);
flag = 1;
end
end
if flag == 0
nala1(1,kk) = temp2(1,ii);
kk = kk + 1;
end
end
kk = 1; %nala的下标
for ii = 1:length1
flag = 0;
for j = 1:length2
if temp1(1,ii) == temp2(1,j);
flag = 1;
end
end
if flag == 0
nala2(1,kk) = temp1(1,ii);
kk = kk + 1;
end
end
%将多余的数设为0***************************************************
ii = 1;
while nala1(1,ii) ~= 0
[x,xx] = find(chrom1nala1(1,ii)); %找出重复的位置
j = 1;
while xx(1,j) >= ran1L && xx(1,j) <= ran1L+length2-1
j = j + 1;
end
nala11(1,ii) = xx(1,j); %将重复数的位置保存下来
chrom1(1,xx(1,j)) = 0; %%重复的数变为零
ii = ii + 1;
end
ii = 1;
while nala2(1,ii) ~= 0
[x,xx] = find(chrom2
nala2(1,ii)); %找出重复的位置
j = 1;
while xx(1,j) >= ran2L && xx(1,j) <= ran2L+length1-1
j = j + 1;
end
nala22(1,ii) = xx(1,j); %将重复数的位置保存下来
chrom2(1,xx(1,j)) = 0; %%重复的数变为零
ii = ii + 1;
end
%补上没有的数******************************************************
[xx,x] = size(nonzeros(nala1));%得到nala的大小
[yy,y] = size(nonzeros(nala2));%得到nala的大小
if yy-xx < 0 %交换后变成yy>xx的情况
%交换
[chrom1,chrom2] = exchange(chrom1,chrom2);
[nala1,nala2] = exchange(nala1,nala2);
[nala11,nala22] = exchange(nala11,nala22);
end
% yy-xx > 0 --> 说明变化后1比2短–>1需要补0并且插入,2需要补0并且删0
% yy-xx < 0 --> 说明变化后2比1短–>2需要补0并且插入,1需要补0并且删0
%补0
ii = 1;
while nala11(1,ii) ~= 0
chrom1(1,nala11(1,ii)) = nala2(1,ii);%1中补0
chrom2(1,nala22(1,ii)) = nala1(1,ii);%2中补0
ii = ii + 1;
end
%||||||||stage3|||||||||
%当前ii在下一位的位置
%1插入&2删除*****************************************************
model1 = chrom1; %用来适应变量维度
model2 = chrom2;
j = 1; %!!!j初始化应该放在while循环外面,小错误不断啊
flag_nala22 = 1;
% %两个chrom的维度是一个问题
% chrom11 = zeros(1,total);
% chrom22 = zeros(1,total);
while nala2(1,ii) ~= 0
%插入,先扩充model->存储变维后的数据;然后chrom扩充,得到model保存的数据
model1 = [model1,0]; %注意顺序
model1 = minsert(chrom1,nala2(1,ii),1);
chrom1 = [chrom1,0];
chrom1 = model1;
%删除0,首先降序排列,用来从后向前删除;之后model变维
while flag_nala22 %又是一个错误,靠,nala22temp每次循环都会被初始化,1次就够了,细心细心,淡定淡定…
nala22temp = zeros(1,total-ii+1);
nala22temp = nala22(1,ii:total);
flag_nala22 = 0;
end
nala22temp = sort(nala22temp);
nala22temp = fliplr(nala22temp);
[q,qq] = size(chrom2);
model2 = zeros(1,qq-1); %注意顺序
model2 = mdelete(chrom2,nala22temp(1,j));
j = j + 1;
chrom2 = zeros(1,qq-1);
chrom2 = model2;
%千万不要忘记迭代+1
ii = ii + 1;
end
farm(i,:) = chrom1;
farm(popsize - i + 1,:) = chrom2;
%在整个算法中,我通过重复的数设0避免了0接着0的情况,很有成就感。
end %交叉概率检测
end %main loop
end %function


## ⛄四、运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/b96b5aceb2364426addb9be6b278a907.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f17e4f6e02d34bd2bb8c28849e249c3e.JPG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/dba5ecb3035f4fc4b127c2d34c2c457e.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70#pic_center)



## ⛄五、matlab版本及参考文献
**1 matlab版本**
2014a

**2 参考文献**
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

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


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

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

相关文章

【密码学篇】虚拟专用网技术原理与应用(商密)

【密码学篇】虚拟专用网技术原理与应用&#xff08;商密&#xff09; VPN技术不是洪水猛兽&#xff0c;其普遍应用于网络通信安全和网络接入控制&#xff0c;可通过服务器、硬件、软件等多种方式实现。—【蘇小沐】 文章目录【密码学篇】虚拟专用网技术原理与应用&#xff08;…

JAVA多线程并发(一):线程的创建

JAVA多线程并发——创建线程 第一章&#xff1a;线程的创建与实现 文章目录JAVA多线程并发——创建线程一、继承Thread类二、实现runnable接口三、简单匿名内部类写法四、实现Callable接口五、线程池一、继承Thread类 代码示例&#xff1a; public class ExtendThread {publ…

SPARKSQL3.0-Unresolved[Parsed]阶段源码剖析

一、前言 上两节介绍了Antlr4的简单使用以及spark中如何构建SessionState&#xff0c;如果没有看过建议先了解上两节的使用&#xff0c;否则看本节会比较吃力 [SPARKSQL3.0-Antlr4由浅入深&SparkSQL语法解析] [SPARKSQL3.0-SessionState构建源码剖析] 那么在Unresolved…

MySql查询的生命周期和性能优化思路

目录 前言 1. 为什么查询性能差 2. 一次查询的生命周期 2.1 客户端与服务端通信 2.2 查询缓存 2.3 解析器 2.4 预处理器 2.5 优化器 2.6 查询引擎 2.7 存储引擎 3. 查询性能优化的思路 4.总结 前言 一说到mysql的查询性能优化&#xff0c;相信很多人能说出来很多的技…

AT32F407/437使用FreeRTOS并实现ping客户端

示例目的 基于以太网络&#xff0c;实现ping客户端已检测网络联机。 支持型号 AT32F407xx AT32F437xx 主要使用外设 EMAC GPIO USART 快速使用方法硬件资源 1) 指示灯LED2/LED3 2) USART1(PA9/PA10) 3) AT-START-F407/ AT-START-F437实验板 4) 以太网连接线软件资源 1) SourceC…

sql函数coalesce和parse_url

学习函数系列&#xff1a; coalesce coalesce函数可以用来排除null值。 coalesce(a, b,c,d) 参数的个数没有限制 返回第一个参数中非null的值。 select help coalesce\G; [ 1. row ] name | COALESCE description | Syntax: COALESCE(value,…) Returns the first non-NUL…

15-JavaSE基础巩固练习:多态、接口、抽象类的综合练习

多态的综合练习 1、需求 狗类 属性&#xff1a;年龄&#xff0c;颜色行为&#xff1a; eat(String something)&#xff1a;表示吃东西lookHome()&#xff1a;看家 猫类 属性&#xff1a;年龄&#xff0c;颜色行为&#xff1a; eat(String something)&#xff1a;吃东西catch…

5G工业互联阶段二:5G产线工控网

5G深入核心生产环节的第二个阶段&#xff0c;主要是实现产线内部通信5G化。以工控5G化为主&#xff0c;并综合考虑数采、安全通信等。大致示意如下&#xff1a; 工艺部件工控通信5G化&#xff1a; 如上图所述&#xff0c;以产线主PLC为中心&#xff0c;大致分为主PLC到产线内机…

Spark 3.0 - 5.ML Pipeline 实战之电影影评情感分析

目录 一.引言 二.Stage1 - 数据准备 1.数据样式 2.读取数据 3.平均得分与 Top 5 4.训练集、测试集划分 三.Stage-2 - Comment 分词 1.Tokenizer &#x1f645;&#x1f3fb;‍♀️ 2.JieBa 分词 &#x1f646;&#x1f3fb;‍♀️ 2.1 Jieba 分词示例 2.2 自定义 Jie…

系统设计 system design 干货笔记

参考大佬的博客 https://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache 参考的github https://github.com/donnemartin/system-design-primer#step-2-review-the-scalability-article scalability 1 Clone 每台服务器都包含完全相同的代码库&#…

SOLIDWORKS 2023 3D Creator 云端结构设计新功能

3DEXPERIENCE平台更新版本已经与大家见面&#xff0c;今天微辰三维与大家分享3D Creator 云端结构设计新功能&#xff0c;让我们先一起来看看视频—— SOLIDWORKS 2023 3D 云端结构设计新功能点击观看3D Creator 云端结构设计新功能 如今&#xff0c;我们的设计生产工作不仅要面…

Linux进阶-Makefile

make工具&#xff1a;找出修改过的文件&#xff0c;根据依赖关系&#xff0c;找出受影响的相关文件&#xff0c;最后按照规则单独编译这些文件。 Makefile文件&#xff1a;记录依赖关系和编译规则。 Makefile本质&#xff1a;无论多么复杂的语法&#xff0c;都是为了更好地解决…

m认知无线电网络中频谱感知的按需路由算法matlab仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 使用无线电用户的频率范围在 9kHz 到 275GHz[3]&#xff0c;由于无线通信环境中的干扰、信道衰落和无线电收发设备自身属性等的影响&#xff0c;大部分无线电设备只能工作在 50GHz 以下。…

融媒体解决方案-最新全套文件

融媒体解决方案-最新全套文件一、建设背景二、建设思路三、建设方案二、获取 - 融媒体全套最新解决方案合集一、建设背景 随着互联网的快速发展&#xff0c;社会已步入全媒体时代&#xff0c;各媒体机构积极探索传统媒体转型之路。 为巩固壮大主流思想舆论&#xff0c;不断提…

对数的应用:放缩x轴或者y轴以更好地表达函数的结果

对数尺度的作用 yAxnyAx^nyAxn 在实验中 AAA 和 nnn 都是未知数&#xff0c;现在我想求出 AAA 和 nnn假设 n1.5,A1n1.5, A1n1.5,A1&#xff0c;那么我们可以做个图看看 x np.linspace(1,10,10) y 1 * x**3 plt.plot(y)如果我做实验恰好得到一些点&#xff0c;那么我很难知道…

【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照(FFmpeg、fswebcam)

【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照背景&#xff08;一&#xff09;FFmpeg1、简介&#xff1a;2、交叉编译FFmpeg3、测试&#xff08;二&#xff09;fswebcam1、背景2、交叉编译fswebcam3、测试背景 在开发板上有一个csi转dvp接口的摄像头&#xff0c;但是…

前端入门到放弃(VUE、ES6,简单到不得了)

VSCode 使用 1、安装常用插件 切换到插件标签页 安装一下基本插件 2、创建项目 vscode 很轻量级&#xff0c;本身没有新建项目的选项&#xff0c;创建一个空文件夹就可以当做一个项目 3、创建网页 创建文件&#xff0c;命名为 index.html 快捷键 !快速创建网页模板 h1 回…

精益管理学会|什么是ECRS改善方法?

ECRS是IE工程改善、精益生產管理改善的四大法宝。 针对现有的生产线进行改善时&#xff0c;常见的做法是对现有的生产线进行绘制各工站的工时山积表如下圖所見&#xff0c;然后对各工站的动作单元进行ECRS 改善。 E&#xff1a;不需要的可进行 Eliminate &#xff08;取消&…

Telegraf-Influxdb-Grafana容器化部署拓展(Https、AD域、告警集成)并监控Cisco设备指标

前言&#xff1a; 还记得在去年的笔记中提到过使用python的pysnmp模块&#xff0c;配合Influxdb&#xff0c;Grafana收集Cisco设备指标。链接如下&#xff1a;https://blog.csdn.net/tushanpeipei/article/details/117329794 。在该实例中&#xff0c;我们通过python编写脚本收…

第一节 Maven核心程序解压与配置

1、Maven 官网地址 首页&#xff1a; Maven – Maven Repositories (apache.org)https://maven.apache.org/repositories/index.html下载页面&#xff1a; Maven – Download Apache Mavenhttps://maven.apache.org/download.cgi下载链接&#xff1a; 具体下载地址&#xff…