电动汽车路由问题的自适应精英遗传算法与改进的邻居路由初始化

英文:Adaptive Elitist Genetic Algorithm With Improved Neighbor Routing Initialization for Electric Vehicle Routing Problems(2021)

摘要

        本文将精英遗传算法应用于有时间窗口的电动汽车路由问题。在初始化方面,本文提出了一种改进的邻居路由初始化方法,用于自适应精英遗传算法。改进的邻居路由方法被用来选择最近的电动车客户作为下一个要安排的路线,并在精英主义GA的初始化过程中使路线从合适的第一个客户开始。这使得预定路线从一个相邻的方向性开始,这可以在选择、交叉和变异操作中继承下来。为了有效收j,我们提供了新的自适应交叉概率和变异概率,使算法更快地收j。对随机分布的客户和Solomon基准案例的实验研究表明了该算法的有效性能。

该算法在一个美国的邮政服务系统。模拟中得到了证明。


I.引言

        如今,随着消费和购买活动的增加,许多运输车辆被用来将货物或货物从仓库运送到客户手中。如何提高运输效率并使路由成本最小化被称为车辆路由问题(VRP)[1]。在交通方面,电动汽车(EV)比内燃机汽车更有利于节能和减少污染物,许多国家要求在其交通系统中使用电动汽车。因此,电动汽车路由问题(EVRPs)是近年来许多研究的主题[4]。

        EVRP是一个NP-hard优化问题,有许多约束条件,如车辆装载限制、车辆电池限制、客户时间窗口限制等。为了提高效率,应该尽可能地减少电动汽车的数量,一些电动汽车可能需要在交付过程中进行充电服务。因此,应该考虑充电时间和充电成本[8]。每个客户都有自己的时间窗口,这就要求每个客户都应该在一定的时间段内得到服务。如果一辆电动车在这个时隙之前或之后到达,惩罚成本将被添加到路由时间表中。这将增加整个路由成本。这样的问题被称为带时间窗口的电动车路由问题(EVRPTW)[9], [10]。

        对于解决所有这些问题,启发式遗传算法(GA)方法已被证明是有前途的[10] [12]。Braÿsy和Gendreau表明GA是EVRP中最具竞争力的启发式算法之一[10]。Ombuki等人。[11]将GA用于具有时间窗口(VRPTW)的车辆路由问题,并取得了快速融合的结果。Schneider等人。[12]通过应用混合启发式算法将EV引入VRPTW问题,以获得有效的性能。

        在遗传算法迭代中,过早收敛和进入局部最优是遗传算法的主要问题[13]-[15]。为了提高其在EVRPTW中的收敛性能,需要对算法的三个方面进行研究。第一个方面是遗传算法的初始化。传统的遗传算法使用随机初始化,这可能导致局部最优。由于每个EV都会到达相关的相邻客户,因此可以在GA初始化中使用相邻路由调度。Rezgui等人[16]称这种方法为贪婪算法,因为它选择最近的客户来验证路由问题中的所有约束。在邻接表中,靠近仓库的第一个客户是初始路由的关键领导者。然而,如何选择第一个客户还没有提到。提高遗传算法性能的第二个方面是自适应交叉概率和变异概率。它们是调整遗传算法收敛速度的关键参数[17],[18]。传统遗传算法中固定的交叉概率和变异概率会使收敛速度变慢,尤其是在有大量客户的情况下。Srinivas和Patnaik[17]给出了交叉概率和突变概率的自适应线性函数,这些函数可用于实现。但当适应度接近最大值时,交叉和突变的概率将非常小,从而导致局部最优。提高遗传算法性能的第三个方面是遗传算法的精英性。精英是父代中适应度最好的染色体。它们应该遗传给他们的孩子一代,以使适应度在迭代过程中更好地发展[13]。

        考虑到上述所有问题,本文将精英遗传算法(EGA)应用于EVRPTW。在初始化中,EGA的邻居路由方法(NR-EGA)被用来选择最近的邻居客户作为下一个要安排的服务路线。提出了涵盖第一个客户选择的圆圈,用于改进邻居路由方法,比较结果见表4。基于Srinivas和Patnaik的自适应方法[17],提出了一个新的交叉和变异概率公式,以便在适配度接近最大值时保持其数值为中等,这可以使NR-EGA在寻找全局最优时保持其多样性。图13中的对比模拟证明了该方法的性能。

本文的新贡献总结如下。

1)提出了一种改进的自适应EGA的邻居路由初始化方法。它使NR-EGA在初始化时选择最近的邻居客户作为合适的第一个客户的下一个服务路线。这使得预定路线从相邻的方向性开始,这使得NR-EGA更快地找到全局最优。

2)提出了一个新的交叉和变异概率公式,当适配度接近最大值时,将交叉和变异概率的值保持在中等水平,使算法更快地趋近。

3) 本文对随机分布的客户和Solomon基准实例[19]进行了几次模拟,以证明NR-EGA算法的性能,并将其应用于美国邮政局(USPS)132个客户的实际路由调度,这可以帮助USPS做出路由决策。

        本文的其余部分组织如下。第二节介绍了带有时间窗口的电动车路由问题。第三节提出了NR-EGA的算法。第四节和第五节证明了NR-EGA在随机分布的客户和所罗门基准实例中的性能。在第六节中,NR-EGA在USPS交付系统中进行了演示,并在第七节中给出了结论。

II.带有时间窗口的电动汽车行驶问题

        图.1.显示了在EVRPTW问题中,从一个仓库到几个客户的路由计划是如何进行的。时间表中有三条电动车路线。他们都从仓库出发,返回仓库。EV1在路线1中为3个客户提供服务,EV2在路线2中为4个客户提供服务并充电一次,EV3在路线3中为3个客户提供服务并充电一次。路由计划的目标是使所有三辆电动车的总服务时间和服务成本最小。

现在,让电动车的数量为m;这意味着有mroutes的送货服务。因此,路由计划的目标是找到最小的M = {1,...,m }电动汽车集合,满足所有客户的需求一次,而且只有一次,都是从仓库开始,在仓库结束,从而使总服务时间(包括驾驶时间,以及电动汽车充电站的充电和等待时间)和总电能成本最小。

        假设有n个客户和f个充电站。将t ij设置为从客户i到客户j的旅行时间;σi为客户服务时间;ck u为EV kat充电站u的充电时间;w u表示在充电站u的等待时间。如果EV-k在拜访客户i之后拜访了客户j,则将xk ij设置为1;否则,将xk ij设置为0。如果电动汽车在充电站u充电,则将yk u设置为1;否则,将yk u设置为0。因此,路由表中的总服务时间可以描述为上述所有时间的总和,如下所示[10]

III.具有改进的邻接路由初始化(NR-EGA)

A.邻居路由初始化

        初始化对于精英主义遗传算法(EGA)的融合非常重要。传统的GA使用随机初始化,这可以导致局部最优。由于在真实的路由计划中,车辆经常选择邻近的客户作为其下一个服务优先级,因此本文提出了EGA的邻居路由初始化方法(NR-EGA)。

        在路由初始化中,从一个客户开始,NR-EGA搜索所有与该客户相连的可用相邻路线,计算所有路线的距离,然后选择路线最短的客户作为下一个客户。图2.显示了这种方法的操作,客户3不是客户1的邻居。当路线从客户1开始时,可用的相邻路线是1→2、1→4和1→5;其中,最短的是1→4。因此,NR-EGA在初始化时将选择1→4作为电动车的路由计划。

这种初始化方法使预定路线从一个相邻的方向性开始。这一特点可以在选择、交叉和变异操作中继承下来,然后使NR-EGA更快地找到全局最优值.

B.初始化中的第一个用户替代物

        邻居路由方法使每个电动车在路由初始化中更合理地选择其下一个客户,但路由初始化中的第一个客户仍从所有客户中随机选择。有时,它使NR-EGA选择一个离仓库很远的客户,这就形成了一条较长的路线,导致了一个局部最优。

每条电动车路线从仓库出发,然后前往第一个客户。所以,第一个客户应该靠近仓库。因此,并不是所有的客户都适合第一个客户的选择。可用的替代数字应在初始化时决定。图3.显示了范围,所有客户都在半径为R max的圆1中,R max是仓库和最远客户之间的距离。半径为 R 2, R 2 < R max 的圆 2 , 它涵盖了第一个客户的选择。第一个客户可以从所有这些备选方案中随机选择。

        如果有k辆电动车来做交付工作;由于每辆电动车从仓库出发,在仓库结束;将有2k条路线从仓库出发或结束;因此,至少,将有2k个离仓库最近的客户,他们可能被选为第一个客户选择。这意味着R 2的下限值可以是仓库和这2k个最近的客户之间的最大距离(R 2kmax)。所以,R 2的范围是R 2kmax ≤ R 2 < R max,如图3.所示。

        R 2的值决定了初始种群的随机性。大R 2增加了随机性,因为它让圆圈2变大,给第一个客户的替代品增加了更多的客户,这增加了染色体的多样性。但过大的R 2会让一些更远的客户被包括在内。这将导致NR-EGA落入局部最优。反之,小的R 2会降低随机性,因为它限制了第一个客户选择的数量。如果小的R 2使圆圈2包括最佳的第一个客户,那么NR-EGA可以快速融合。但如果不是这样,NR-EGA将很难融合。

按照上述所有分析,本文使用仓库和所有客户之间的距离的平均值为R 2,可以表示如下。

其中d oi是仓库和客户i之间的距离;m是所有客户的数量。使用平均值使第2圈覆盖所有最近的客户;同时,排除那些远离仓库的客户。在用第一个客户选择相邻的路由初始化后,NR-EGA的初始群体将有更好的染色体来做选择、交叉和变异操作。

C.选择、交叉和突变操作

        当NR-EGA应用于解决电动车路由问题时,所有的仓库、客户和充电站被结合起来,产生NR-EGA的人口。例如,对于一个有9个客户、1个仓库和1个充电站的路由问题,NR-EGA分配数字1到9来表示客户,数字0表示卸货,数字10表示充电站。因此,NR-EGA的人口可以表示为仓库、客户和充电站的随机组合。如果用3辆电动车来做送货服务,NR-EGA群体中的每个个体都可以表示为一个数字串,如图所示。4.在这个数字串中,3个电动车路由时间表是0→2→5→9→6→0;0→4→7→10→0;和0→3→8→1→0。第二个电动车需要在为客户7服务后进行充电

NR-EGA的目标是找到使总服务成本最小的数字串。因此,目标函数可以被描述为五个成本函数的总和

在(11)中,第一项描述了距离成本,第二项描述了充电成本,可以通过(3)计算。第三个描述了违反服务时间窗口的惩罚成本,可以通过(9)计算。最后两个项是路由约束。第四项限制电动汽车的总客户负荷需求不超过电动汽车的负荷容量Q。第五个任务确保所有的电动车都有足够的电池电量来完成交付服务。在前往下一个客户之前,应计算电动车的电池,以满足约束条件(7)和(8);否则,它应该被充电。为了使这两个约束条件有效,系数M 1和M 2被设置得非常大,例如,M 1 = M 2 = 108。

NR-EGA使用成本函数(11)的倒数作为每个单独的适应度函数fit(i)来进行选择、交叉和变异操作。在一个有数字串的群体中,每个个体都被称为染色体。

1) 选择

        NR-EGA计算所有染色体的适配度fit(i),并将其相加,sumfit = ∑ fit(i),其中N是种群大小;然后,计算每个染色体的累积概率,ps(i) = ∑ (fit(i)/sumfit)。如果ps(i)大于[0, 1]中的一个选定的随机数r,ps(i)>r,那么这个染色体将被选中。

2) 交叉

        在选择操作中可以选择两条染色体来进行交叉操作。例如,图5.中所示的两条染色体。被选中。如图6.所示,NR-EGA将它们的随机附属数字串放在前面,从0开始,在0结束。 然后,一个染色体中的其余数字将与另一个染色体的全部数字逐一进行交叉操作。然而,由于客户不应该被服务超过一次,一个染色体中已经在介词串中的数字不能在染色体的其余部分重复使用,而需要被另一个染色体的其余未使用的数字所取代。图7.显示了交叉操作的结果。

        因为数字0也在介词字符串中,一些0在交叉操作后可能不存在;在这种情况下,它们可以被随机地插入到字符串的其余部分,如图7.所示。健身函数fit(i)可以用来评估哪条添加的染色体具有最大的健身能力,这个函数将是交叉结果之一。


3) 突变

进行突变,使NR-EGA搜索到全局最优。交叉操作后,可以随机选择从0开始到0结束的附属数字串来进行变异操作。在突变操作中,NR-EGA颠倒了附属数字的顺序,以确保路线的方向性质量被继承,如图8.所示。

D. NR-EGA的精英

        精英是经过选择、交叉和变异操作后具有最大适配性的p染色体。如图9. 所示,它们被下一代保留和继承。为了保持NR-EGA群体的数量不变,应该拒绝最差的p条染色体。精英主义的保留操作使NR-EGA在每一代中都能记住其最好的染色体。因此,下一代的染色体将比父代的染色体具有更大的适配性;因此,获得全局最优的速度会更快。数字p可以在[5], [10]内设置。

E. 交叉和突变概率

        交叉概率Pc和突变概率Pm用于调整NR-EGA的速度。传统的遗传算法通常使用常数P c和P m,这使得NR-EGA在迭代开始时收敛较慢,在迭代结束时收敛较快,从而导致局部最优。Srinivas和Patnaik[17]提出了第一个线性自适应遗传算法。但在该方法中,当适应度接近最大值时,Pc和Pm将非常小,这将导致局部最优,尤其是在迭代开始时。在此基础上,本文对自适应P c和P mas进行了如下调整

在(12)和(13)中,当适配度接近最大值时,P c和P m可以保持中位数。这使得NE-EGA中的染色体在寻找全局最优时保持其多样性。


IV.随机分布的客户端的模拟

为了证明NR-EGA的路由能力,对一个有25个客户的送货问题进行了数值模拟。如图10.所示,这25个客户随机分布在[0-110公里,0-110公里]区域。它们的坐标已经知道。每个客户 i 都有其所需的交付时间窗口 [Ti 1, Ti 2] 。在路由区域,有两个充电站,分别在[83, 45]和[32, 40],在图10.中缩写为CS。[56, 56]的仓库(Depot)使用电动车来提供送货服务

        在初始化过程中,采用了改进的邻居路由方法。如图10所示,在圆圈内选择第一个客户备选方案。根据函数(10)计算图3中圆的半径R2。

        为了找到描述目标函数(11)中前两个项的电能成本(3),设置电动车速度v为常数,(3)中的电能消耗bk ij可以通过电动车-k的行驶距离来评估。由于电价r ijt和充电价格r ut在服务时间内通常是恒定的,所以它们可以分别设为常数r和r u。在模拟中,每辆电动车以全电池容量开始服务,并在充电后获得全电池容量。如果满电池可以为电动车提供一个固定的行驶距离D max,那么(3)中的充电成本可以通过电动车-k充电后的行驶距离来评估。经过上述分析,设定dk ij为充电前从客户i到客户j的行驶距离的电动车;设定dk′ ij为充电后的距离;那么总的电能成本可以评估如下

从(14)中,总行驶距离是计算总电能成本的关键值。这个值可以在NR-EGA迭代过程中计算出来。为了找到时间窗口的惩罚成本,可以用(9)来计算,其中惩罚价格pun1和pun2可以设置为常数。所有的电动车参数都在表1给出。

为了找到成本最低的路由时间表,NR-EGA使用100个群体进行更新,迭代500次。NR-EGA的参数显示在表2中。所有的算法都在2018年MATLAB平台上实现。

经过500次的迭代,NR-EGA找到了路由时间表。该时间表使用三辆电动车来进行交付。对于每个电动车的路线安排,旅行距离和负载能力见表3。同时,这三条路线也被画在图11. 中。用三种不同的颜色表示。从表3的路线安排来看,在交付过程中,2号和3号电动车需要分别在CS1和CS2充电站充电;因此,这两辆电动车的总行驶距离超过了160公里的有限里程。同时,每辆电动汽车的需求负荷能力不大于5吨的有限负荷能力。

为了分析NR-EGA的性能,模拟比较了三种不同算法的服务成本。NR-EGA、随机初始化的EGA、没有精英主义的NR-GA。所有算法在2018年MATLAB平台上都取得了最佳性能。随机初始化的EGA是传统的EGA。没有精英主义的NR-GA不一定为下一代保留最佳种群。

服务成本由距离成本和惩罚成本组成。作为比较,所有的模拟都以相同的参数进行,如表1所示。图12.给出了这三种算法的仿真结果,其中观察到以下几点。NR-EGA得到最低的成本,并迅速融合。具有随机初始化的EGA收敛快,但它到达了一个局部最优。服务成本比NR-EGA高得多。没有精英主义的NR-GA不能记住来自父母世代的最佳种群,所以它不仅进入了局部最优,而且还在缓慢地趋近。

        为了分析具有交叉概率P c和突变概率P m的NR-EGA的性能,模拟比较了具有三种不同P c和P m的NR-EGA的服务成本,在(12)和(13)中改进了自适应P c和P m,Srinivas和Patnaik[17]分别改进了自适应P c和P m,以及恒定的P c和P m

        对于改进的自适应公式和Srinivas和Patnaik公式,参数P c和P m,被约束在表2中定义的最大和最小范围内。对于常数P c和P m,它们被设定为P c = 0.99,P m = 0.05。仿真结果如图所示。13

从图13.中可以看出。,所有的方法在最后都趋于一致,但采用改进的自适应P c和P m的NR-EGA获得了最快的趋于一致的速度,而采用常数P c和P的NR-EGA则保持最慢。Srinivas和Patnaik的自适应方法在开始时收=快,但随着迭代的进行,P c和P m的值迅速减少,收=慢。改进的自适应P c和P mcan使NR-EGA具有更快的融合速度。

V.与Solomon基准数据的比较

        本文进一步  用Solomon VRPTW基准数据[19]来评估NR-EGA算法。VRPTW基准数据被设计用来评估路由和调度算法的行为。

        由于电动汽车在服务过程中可能需要充电,充电站应该被添加到基准数据图中。在下面的模拟中加入了两个坐标为[25, 43], [75, 60]的充电站。他们的时间窗口与仓库相同。每个充电站的充电时间与每个客户的服务时间相同

        仿真使用VRPTW基准数据:聚类客户集(C201,C205)、随机客户集(R201,R205)和随机聚类客户集(RC201,和RC205),并选择50个客户和100个客户来比较[20]中的原始算法和NR-EGA算法。这些数据有大量的客户。设定每个电动车的车辆负荷能力足够大,以提供交付服务。表5显示了比较结果,其中,第一列显示了基准中的选定数据和选定的客户数量。例如,我们把C201.50和C201.50都看作是在数据C201中选择前50个客户,而我们把C205.100都看作是在数据RC205中选择了全部100个客户。

        由于所有的VRPTW基准数据都没有单位,将表1中的EV参数设置为r = 1,r u = 1,pun 1 = 0.1,pun 2 = 0.1,以使距离成本和惩罚成本具有相同的权重。其他NR-EGA参数的设置与表2相同。所有的性能都在2018年MATLAB平台上实现。

        与随机客户集以及随机和集群客户集的混合相比,在原始算法结果中,集群客户集上使用的总路线距离和车辆总数更少。随着客户数量的增加(从50个增加到100个),表5中的总路线距离和使用的车辆总数也会增加。

        在NR-EGA算法中,两个不充电的电动车被用来解决C201和C205的路由问题。两辆一次性充电的电动车被用来解决其他有50个客户的数据中的路由问题。在有100个客户的RC201和RC205中,使用了3辆一次性充电的电动汽车。使用的电动车总数比原始算法结果中的要少得多。该算法节省了大量的车辆,显示了NR-EGA的适用性。

        在NR-EGA的结果中,对于有50个客户的数据,电动车的负载能力限制不超过600。在RC201和RC205中,随着客户数量从50增加到100,每辆电动车应该为更多的客户提供服务,所以电动车的负载能力限制也应该增加。然而,这些限制并不比原始算法结果中的限制多。

        由于在NR-EGA中使用的电动车数量较少,每辆电动车应该为更多的客户提供服务。如果在一次电动车服务中,一些客户处于同一时间窗口,由于一次电动车不能在同一时间窗口为一个以上的客户提供服务,这种服务将产生惩罚。表5给出了有时间窗口和无时间窗口情况下的总距离。它表明没有时间窗口的总距离比有时间窗口的短。

        为了研究电动车数量和时间窗口惩罚之间的关系,本文在RC205.100数据上用不同数量的电动车进行了NR-EGA模拟。表6给出了仿真结果。

        同时,当电动汽车的数量下降时,每辆电动汽车应该行驶更长的距离。如果距离大于电动汽车的全电池容量所能提供的距离,则应为电动汽车充电。在表6中,当使用3辆电动汽车时,一次性充电的总距离将是最短的。当使用4辆电动汽车时,无需充电即可完成整个配送服务。因此,如果将距离和充电时间作为优先事项,那么在路线安排中可以使用较少数量的电动汽车来提供送货服务。


结论

针对有时间窗约束的电动汽车路由问题,提出了一种改进的邻居路由初始化方法和自适应精英遗传算法。改进的邻居路由方法从一开始就赋予所有染色体方向性特征,使精英遗传算法比随机分布染色体算法收敛更快。自适应交叉概率和变异概率使精英遗传算法具有较快的收敛速度。即使在最大适应度下,概率也可以保持在中等水平,并帮助算法避开局部最优。仿真验证了该方法的有效性能。同时,通过对美国邮政投递服务的仿真验证了该方法的实用性。

本文中带有时间窗口的电动车路由模型仍然是一个统计模型,假设电池电池电池持续时间及其充电时间是恒定的,这将在实际交付案例中带来差异和误差[21], [22]。为了解决这些问题,在未来的研究中应该讨论动态电池模型的电动汽车路由问题。另外,充电价格对能源成本也有深刻的影响[23]。应讨论不同充电站和不同充电时间的价格。因此,针对充电价格的电动汽车路由问题的动态精英遗传算法可能是未来研究的主要课题。

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

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

相关文章

StarUML6.0.1使用

1. 简介 作为一个软件开发人员&#xff0c;平时免不了做一定的软件设计&#xff0c;标准做法就是采用UML来设计&#xff1a; 讨论功能流程时采用时序图、活动图来表达&#xff1b;做业务功能架构时采用组件图来表达&#xff1b;做系统部署架构时采用部署图来表达&#xff1b;做…

浅谈结构化数据、非结构化数据,关系数据库、非关系数据库

结构化数据和非结构化数据两者之间存在一定的区别。以下是具体分析&#xff1a; - **结构化数据**&#xff1a;通常指的是那些组织严谨、格式规范统一的数据&#xff0c;它们存储在关系数据库中&#xff0c;可以通过二维表的形式进行逻辑表达。这类数据有明确的数据模型&#…

【小白学机器学习7】相关系数R,决定系数R2和SST=SSR+SSE, 离差,偏差,方差,标准差,编译系数,标志误。

目录 1 各种数据指标&#xff0c;分类整理 1.0 关于数据/值有3种 1.1 第1类&#xff1a;描述一堆数据特征的指标&#xff1a;集中度&#xff0c;离散度&#xff0c;形状特征 1.2 第2类&#xff1a;判断预测y值和观测值差距的指标 1.3 第3类&#xff1a;描述误差的各种指标…

容器化软件应用简化传统设备的连接

| Docker容器如何简化工业物联网解决方案 制造和包装工厂可通过集成IT和OT技术来改善运营&#xff0c;从而释放预测性维护、数据分析以及接入强大的企业管理应用等优势。然而&#xff0c;对于缺乏员工、时间或资源的企业而言&#xff0c;实施工业物联网解决方案并不容易。对此…

HashSet在添加元素时,是如何判断元素重复的? (原理详解 | 易错案例)

前言&#xff1a;我们知道Set中所存储的元素是不重复的&#xff0c;那么Set接口的实现类HashSet在添加元素时是怎么避免重复的呢&#xff1f; HashSet在添加元素时&#xff0c;是如何判断元素重复的? ● 在底层会先调用hashCode()&#xff0c;注意&#xff0c;Obje…

有名信号量、网络协议模型、UDP编程发送端

我要成为嵌入式高手之3月5日Linux高编第十五天&#xff01;&#xff01; ______________________________________________________ 学习笔记 有名信号量 1、创建semget #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget(…

js SheetJS 合并表格导出到同一个excel中

最近有个需求,我在一个页面显示了4个表格, 然后合并导出到excel文件中 四个表,四个sheet,一个excel文件 最后导出时这样: 实现: 1,页面有个导出的checkbox,勾选则导出,不勾选不处理 2,在一个函数中,集中处理四个表数据获取,并将结果返回出来 //获取数据后返回为…

开展庆2024年“三八”国际妇女节系列纪念活动怎样向媒体投稿?

为了向媒体投稿,庆祝2024年“三八”国际妇女节系列纪念活动,你可以遵循以下步骤: 策划与准备: 确定纪念活动的主题和目标,例如提升女性权益、表彰女性成就、促进性别平等。 策划一系列活动,如研讨会、表彰仪式、展览、讲座等,确保内容丰富多样。 准备相关的背景资料、活动介…

PyTorch搭建LeNet神经网络

函数的参数 1、PyTorch Tensor的通道排序 [batch, channel, height, width] batch: 要处理的一批图像的个数 channel: 通道数&#xff08;一般是R G B 三个通道&#xff09; height: 图像的高度 width: 图像的宽度 2.Conv 2d 卷积层的参数 [in_channels, out_channels, ke…

从零开始学习Netty - 学习笔记 -Netty入门【自定义编码器解码器】

自定义编码器解码器 通过一个简单案例&#xff0c;我们自己去实现一个编码器 和解码器 实现思路 编码器&#xff08;Encoder&#xff09;实现&#xff1a; 在编码器中&#xff0c;实现了 ByteToMessageCodec<Message> 类&#xff0c;并覆盖了 encode() 方法来处理消息的编…

【HarmonyOS】Dev Eco Studio4.0安装教程

目录 下载安装开发工具配置 下载 Dev Eco Studio4.0下载连接→https://developer.huawei.com/consumer/cn/next/deveco-studio/ 安装 点击Next 选择安装目录。点击Next 勾选创建桌面快捷方式和环境变量&#xff0c;点击Next 点击Install&#xff0c;安装 等待安装 选…

Node.js最准确历史版本下载(以下载Node.js16.17.1版本为例)

先进入官网:Node.js https://nodejs.org/en 括号中LTS代表稳定版本. 嫌其他冗余博客帖子多&#xff0c;找起来费眼睛,可以到/release下载:Node.js,在blog后面加/release https://nodejs.org/en/blog/release/ 点击next翻页,跟上面同样的步骤

做分析用什么工具

做分析用什么工具 导读 数据分析是数据辅助决策的最后一公里&#xff0c;是最终的数据可视化展示与探索分析的部分&#xff0c;选择使用最适合的数据展示方式&#xff0c;可以帮助分析人员大大提升分析效率。 问题&#xff1a; ● 纠结选择哪个工具 ● 纠结从哪里学起&#x…

Java异常的介绍与处理

一、异常与错误(Error)的区别&#xff1a; 异常&#xff08;Exception&#xff09;和错误&#xff08;Error&#xff09;都是指程序执行过程中的问题&#xff0c;但它们之间存在一些重要的区别。 异常&#xff08;Exception&#xff09;&#xff1a; 异常表示程序在执行期间可能…

Memcached介绍和详解

Memcached介绍 Memcached是一个高性能的分布式内存对象缓存系统&#xff0c;它通过在内存中缓存数据来减少数据库负载&#xff0c;加快动态Web应用程序的响应速度。 以下是Memcached的一些关键特点和作用&#xff1a; 分布式缓存&#xff1a;Memcached是分布式的&#xff0c;不…

Android高级工程师面试实战,三幅图给你弄懂EventBus核心原理

阿里技术一面-35min 自我介绍 Android 有没有遇到OOM问题(有遇到内存泄漏问题)Handler机制ThreadLocalActivity启动到加载View过程View绘制过程LinearLayout (wrap_content) & TextView (match_parent) 最终结果???OKHttp(1. 为什么选择它&#xff1f; 2. 性能了解不…

阿里云服务器几核几G怎么选择?带宽多少合适?

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

Java 学习和实践笔记(27):Object类的基本特性、toString方法以及IDEA的部分快捷键介绍

Object类基本特性&#xff1a; 1.Object类是所有类的父类&#xff0c;所有的Java对象都拥有Object类的属性和方法&#xff08;注意拥有并不等于可以直接使用&#xff09; 2.如果在类的声明中未使用extends&#xff0c;则默认继承Object类。 toString方法是Object类里定义的一个…

Word中的文档网格线与行距问题

在使用Word编辑文档时&#xff0c;经常会发生以下动图展示的这种情况&#xff1a; 上面的动图里&#xff0c;将文字大小放大到某个字号时&#xff0c;单倍行距的间距突然增加很多。造成这种情况的原因是文档中定义了网格线&#xff0c;并且设置了对齐到网格线。如果取消文档中…

[清爽快捷] Ubuntu上多个版本的cuda切换

做到真正的一行代码搞定&#xff0c;只需要修改对应软链接&#xff0c;就可以轻松实现快捷切换cuda 查看已安装的cuda版本有哪些 一般如果我们都是使用默认位置安装cuda的话&#xff0c;那么其安装路径都是/usr/local。如果要查看该目录下已经安装有哪些版本的cuda&#xff0c…