电动汽车路由问题的基准测试

news2024/11/17 5:43:47

摘要

        有几家物流公司开始在日常运营中利用电动汽车(EVs)来减少温室气体污染。然而,电动汽车有限的驾驶范围可能需要在运行期间访问充电站。这些潜在的访问必须得到解决,避免不必要的长时间绕行。我们制定了电容式车辆路由问题(E-CVRP),其中包含了电动汽车在满足客户交付需求的同时访问充电站的可能性。电动汽车的能源消耗与它们的货物负荷成正比,这是现实世界物流应用中的一个重要制约因素。为E-CVRP提出了一套新的基准实例。作为这些新基准的解决方法,我们应用了蚁群优化元启发法和精确法。在ECVRP上的实验结果证明了问题的高度复杂性和应用元启发式求解方法的效率。

引文

        近年来,由于温室效应,物流公司对利用电动汽车(EVs)进行日常运营的兴趣越来越大。因此,出现了一个电动车队的路由问题,即电动汽车路由问题(EVRP)[1]。EVRP的目的是为电动车车队找到最佳路线,使一组客户被电动车访问一次,而且只有一次,确保电动车永远不会耗尽能量。EVRP的几个变体已经被引入,主要在其约束条件上有所不同,如带时间窗口的EVRP[2],带取货和送货的EVRP[3],带多个仓库的EVRP[4],带服务时间的EVRP[5]和带backuals的EVRP[6]。更多细节请参考[7]中的综合调查。

        所有EVRP变化的共同限制是,由于电动汽车的行驶里程有限,需要考虑去充电站。在这项工作中,我们将电动汽车路径问题(E-CVRP)公式化为混合整数线性规划(MILP),其中每辆电动汽车都有有限的货物负载来满足客户的交付需求,并且电动汽车的能耗率与货物负载成比例。现有的EVRP公式假设能量消耗率是固定的[2],[8],或者使用纵向动力学模型[9]进行估计。在这项工作中,我们强调了电动汽车的货物负载对其能源消耗的影响。

        此外,还提出了一套新的E-CVRP问题实例的基准,以表示问题的复杂性。基准实例中的充电站分配被优化,以确保来自任何客户地点的电动汽车的能源覆盖。为了给这个新的基准集提供一套初步的结果,我们进行了实验。由于E-CVRP扩展了众所周知的有容量的车辆路由问题(CVRP),该问题的高复杂性使得精确求解方法对于解决现实大小的问题实例效率低下[10]。因此,作为一种近似求解方法,我们应用了蚁群优化(ACO)元启发式[11],它被成功地用于解决类似问题的世界尺度实例[12],[13]。新生成的E-CVRP基准集由小尺寸的实例组成,它们可以使用所提出的MILP公式和Gurobi求解器[14]进行求解(在合理的时间内),以评估近似求解方法的性能(即近似解与可能是最优的上限解的偏差),以及现实尺寸的实例,以研究近似求解方法的效率。

        本文的其余部分组织如下。第二节描述了E-CVRP,并提供了该问题的MILP表述。第三节描述了上述两种解决E-CVRP的方法。第四节描述了一种从现有CVRP问题实例生成E-CVRP问题实例的方法。第五节介绍了在新生成的基准集上获得的初步结果。第六节给出了本文的结论和未来工作。

II. 电动汽车出行问题(E-CVRP)

A.问题描述

        E-CVRP是一个具有挑战性的NP难组合优化问题,因为它是包含额外硬约束的传统CVRP问题的扩展[10]。问题可以描述如下:给定一支电池充电水平有限、货物装载能力有限的电动汽车车队,我们需要为每辆电动汽车找到最佳路线,起点和终点都是中央停车场,以满足一批客户的交付需求。

E-CVRP可以定义在一个完整的加权图G = (N,A)上,其中N = {0}∪ I ∪F ′是一组节点,A = {(i,j) | i,j ∈N,i 6 = j }是一组连接这些节点的弧。每个弧都有一个非负值d ij,代表节点i和j之间的欧氏距离。节点0表示中央仓库。集合I⊂N表示客户集合,其中每个客户i∈I被分配一个正值δ i,表示客户交付需求1。集合F′⊂N表示每个充电站i∈F的β i节点副本集合(即|F′|=∑i∈Fβ i),用于允许多次访问每个充电站i∈F(如果需要)[15]。每个充电站的节点拷贝数的上限等于β i = 2|I |,因为在最坏的情况下,每个客户都需要一辆电动车,而且在为其服务之前和之后都需要访问一个充电站[16]。

        每个电动车都有一个货物负荷,u i(0≤u i≤C),其中C是电动车的最大货物负荷,u i是电动车到达节点i时的剩余货物负荷。此外,每个电动车都有一个电池充电水平y i(0≤y i≤Q),其中Q是电动车的最大电池充电水平,y i是电动车到达节点i时的剩余电池充电水平。每条行驶的弧线消耗的电量为剩余电池电量h i d ij,其中h i表示穿越该弧线的电动车的能量消耗率。能量消耗率与电动车当前的货物负荷成正比(即电动车越重,消耗的能量越多),定义如下。

        其中r是能源消耗率的恒定值,u i是电动车到达节点i时的剩余货物负荷,C是电动车的最大货物负荷。还有其他可能影响能源消耗率的次要因素[5],但在这项工作中,我们重点关注电动车的重量,这是最重要的因素之一[17]。 

        E-CVRP的目标函数是找到一组电动车路线,使总行驶距离最小,

        - 每个客户都被一个电动车访问过一次,而且只有一次。        

        - 所有电动车的起点和终点都在仓库。

        - 所有的电动车总是从仓库开始完全充电,例如,y 0 = Q。

        - 所有的电动车总是从仓库满载的货物开始,例如,u 0 = C。

        - 对于每条电动车路线,客户的总交付需求不超过电动车的最大货物负荷C。

        - 每个行进弧上的电池充电水平永远不会是负的。

        - 电动汽车总是让充电站充满电。

        - 任何电动车都可以多次访问充电站。

B. MILP问题的提出

为了解决E-CVRP,定义了一个二元决策变量,即x ij,∀i,j∈N,表示弧(i,j)是否被电动车穿越(即x ij = 1)或不穿越(即x ij = 0)。E-CVRP的数学模型被表述为。

         其中公式。(2a)定义了E-CVRP的目标函数,公式。(2b)强制执行客户访问的连接性,公式。(2c)处理访问充电站的连接性,公式。(2d)通过保证在每个顶点,传入弧的数量等于传出弧的数量来建立流量守恒,公式。(2e), Eq.(2f)和公式。(2g)通过在到达任何顶点时保证非负的货物负荷,保证所有客户的交付需求得到满足,公式。(2h)确保电动汽车开始时从仓库满载货物,公式。(2i), Eq.(2j)和公式。(2k)确保电池电荷量永远不会低于0,公式。(2l)确保电动汽车从仓库开始完全充电,而公式。(2m)是前面描述的二元决策变量。

三、解决E-CVRP的问题

        为了给新基准集的每个问题实例提供一组初始结果(例如,最优值、上界或最佳已知值),我们使用公式(2)中的MILP表述。和算法1中描述的ACO元启发式作为E-CVRP的解决方法。

A.使用MILP公式

        虽然公式中定义的公式(2)完全描述了E-CVRP问题,它不能被标准的数学优化求解器所处理,如Gurobi求解器[14]。这是因为该公式没有遵守任何MILP标准形式,因为公式(2i)和公式(2j) 中的约束条件。 因为它们涉及一个连续变量和一个二元变量的乘积 , 即 u i x ij 。回顾一下,当前的货物负荷u i被用来计算公式(1)中的可变能量消耗率h i。为了解决这个问题,引入了连续变量m ij来代替乘积,m ij = u i x ij,这样它就可以根据大的 "M "符号[28]等效地转化为一组MILP不等式,如下所示:

        总而言之,公式(2)中提出的问题。可以通过替换公式(2i)和公式(2j)中的变量乘积(即u i x ij)来重新表述为一个MILP问题。中的m ij,并加上公式(3).。因此,我们得到一个只涉及线性约束的转换数学程序。

B.使用ACO元启发式

        使用了MAX-MIN蚁系统(MMAS)[19]变体,它是研究最多的ACO变体之一,并且已经在相关的EVRP上证明了其良好的性能[5], [20]。在这一节中,我们描述了MMAS在E-CVRP中的应用,包括所提出的构建可行解的方法。

1) 初始化。

        最初,一个由ω蚁群组成的群落被放置在中央仓库,即组件0。问题的所有解决部分都与一个信息素跟踪值有关,该值在执行开始时被统一初始化,如下所示。

其中τ ij是与连接解决方案组件i和j的弧(i,j)相关的信息素轨迹值,τ 0是初始信息素轨迹值。一个好的τ 0值被发现是1/ρCnn,其中ρ是蒸发率(更多细节将在后面提供),Cnn是由最近邻启发式产生的解决方案的质量[21] 。

2)解决方案的构建。

        每只蚁k代表一个完整的E-CVRP解决方案T k(即所有电动车的路线),并根据现有的信息素轨迹和一些与问题的解决方案组件相关的启发式信息进行偏置选择,直到所有组件(即客户)都被选中。

        蚁k从解决方案组件i中选择下一个客户组件j的概率分布定义如下:

        其中τ ij和η ij = 1/d ij分别是现有的信息素轨迹和组件i和j之间先验的启发式信息。α和β是两个参数,分别决定了τ ij和η ij的相对影响。N k i是与组件i相邻的第k只未被选中的客户组件的集合。请注意,仓库和充电站组件不包括在N k i集合中(这些组件的选择将在后面的III-B3节中描述)。

        所选的客户组件j必须满足公式(2e)和(2g)中定义的电动车容量约束。以及公式(2i), (2j), 和(2k)中定义的能量约束。。值得一提的是,本节提出的构造方法可以在其他构造性或局部搜索启发式方法中利用,在处理类似的EVRP时构造可行的解决方案。下一节将更详细地描述对上述约束的处理。

3) 约束条件处理。

        为了构建一个可行的解决方案,要选择下一个客户组件j,使用公式(5)。必须满足以下所有标准。

1)客户部分j的交付需求,即δ j,不能导致货物负荷低于零,即:

2) 从解决方案组件i到客户组件j的能量消耗不能导致能量水平,即y i,低于零,即:

3) 客户组件j必须在其能量范围内至少有一个充电站或中央仓库[5],即:

 

        当下一个客户违反了公式(6)中的交付需求标准时。然后将仓库组件添加到E-CVRP解决方案中,以关闭电动车的路线(即表示电动车返回中央仓库)。如果这个返回仓库的过程违反了公式(7)中的能量标准,然后电动车在返回仓库之前访问一个充电站。当下一个客户违反了公式(7)中的能源标准或公式(8)中的范围标准时,那么从当前解决方案组件i到(潜在的)下一个客户j的最近的能源充电站s被选择如下。

        并且被添加到E-CVRP解决方案中(即表示对能量再充电站的访问)。然后,如果等式(6)、等式(7)和等式(8)中定义的所有三个标准现在都得到满足,则下一个要访问的客户很可能是j,否则将选择满足所有上述标准的另一个客户。由于客户组件必须始终满足等式(8)中的范围标准,因此消除了没有足够的能量前往任何能量再充电站或返回中央仓库的可能性。

4) 信息素更新:在MMAS变体[19], [21], [22]中,信息素轨迹的更新方法是首先减少所有弧上的信息素轨迹(使用信息素蒸发),然后增加由最佳蚁蚁构建的解决方案的弧上的信息素轨迹(使用信息素沉积)。信息素蒸发的应用方法如下。

 其中ρ(ρ∈(0,1))是蒸发率。

在信息素蒸发后,最佳蚁将信息素沉积在其解路线的弧线上,如下所示:

        其中∆τbest ij = 1/Cbest是蚁群沉积的信息素数量,Cbest是最佳解决方案T best的质量。允许沉积信息素的 "最佳 "蚁可能是迄今为止的最佳蚁3,其中Cbest = Cbs,或者是迭代最佳蚁,在这种情况下,Cbest = Cib。这两只蚁子被允许以另一种方式沉积信息素。更确切地说,在每次迭代中,最佳蚁群沉积信息素,偶尔也有最佳蚁群沉积信息素(即在这项工作中每25次迭代,更多细节见[22])。信息素蒸发使算法能够逐渐减少属于低质量解决方案的弧上的信息素轨迹,从而使属于高质量解决方案的弧上的信息素轨迹由较高的数值组成(例如,由于信息素沉积,它们将定期增加)。

        由于只允许保存信息素的最佳蚁类,所以搜索的重点是搜索空间的一个特定区域。因此,从优化过程的早期阶段开始,就有陷入搜索停滞的危险。为了解决这个问题,明确施加了信息素轨迹值的下限和上限,以这种方式防止信息素轨迹在最佳蚁群的弧线上的过度增长,具体如下。

 其中τmin和τmax分别是信息素轨迹的最小值和最大值。τmax值以1/ρCbs为界,其中Cbs是迄今为止最好的蚂蚁的解质量5。τmin值设置为τmin=τmax(1−n√0.05)/((avg−1)n√0.05。注意,每当发现新的迄今为止最佳蚂蚁时,τmax和τmin值都会更新。

此外,只要出现停滞行为或在给定的迭代次数中没有找到改进的解决方案,所有的信息素轨迹都会被均匀地重新初始化为τ max值。使用衡量信息素轨迹值分布的λ-分支因子来检测停滞行为[23]。λ分支因子由满足以下条件的节点i附带的弧的数量给出:τ ij ≥ τi min + λ(τi max − τi min),其中τi max和τi min分别是节点i附带的弧上的最大和最小信息素值,λ∈[0, 1]是一个常数。来自所有节点的平均λ-分支因子 λ-分支因子表示搜索是否已经进入停滞行为。

四、 E-CVRP基准测试套件

A.将CVRP转换为E-CVRP

 算法2 将CVRP转换为E-CVRP

1:输入:经典的CVRP基准实例

2:读取大小为n的初始基准问题

3:定义最大的电池充电水平(即Q)

4:增加充电站

5:输出。电动CVRP基准实例

在这一节中,我们提供了将CVRP问题实例转换为E-CVRP问题实例的算法步骤,算法2中概述了基本程序。更具体地说,在第一步,我们导入经典的CVRP问题实例,其中每个客户节点i∈I代表笛卡尔平面上的一个点(例如,第1-2行)。在下文中,最大电池电量水平Q定义如下:

其中d-是仓库与所有其他客户节点之间的最大欧氏距离,即d-= arg max i∈ I {d 0i },γ是用户定义的常数。

         站点布局(算法2,第4行)的目标是找到最小数量的充电站及其位置,以便所有客户节点都被至少一个充电站覆盖。此过程确保具有远程客户节点的问题实例保持可行。特别地,假设每个充电站覆盖一个特定半径R=φQ的圆的区域,其中φ是用户选择的常数。增加φ的值会导致充电站的覆盖面积更大。每个客户i∈i可以从放置在具有半径R的圆的区域内的至少一个充电站覆盖,其中客户i是圆的中心。所有潜在的定位点都在所有客户点的凸包区域内,可以通过Quickhull方法[18]进行计算。集合P表示可以潜在地放置充电站的上述凸区域中的任何潜在离散点(不包括客户节点的所有点)。此外,集合A i,∀i∈i,确定集合P中覆盖每个客户i∈i的所有潜在充电站点(即,圆的面积)。

为了优化解决所述的充电站安置问题,我们引入了一个MILP公式,旨在选择覆盖每个客户节点的最小数量(连同其位置)。让变量ψ j∈{0,1},j∈P,表示潜在点j∈P是否被选中放置充电站(ψ j = 1)或不放置(ψ j = 0)。相关的数学公式如:

 其中公式。(14a)是前面描述的目标函数,公式。(14b)负责确保每个客户i∈I至少被一个充电站覆盖,而公式。(14c)定义了二元决策变量。最后,在算法2的第5行,定义的最大电池充电水平值和充电站的定位被用来生成E-CVRP基准实例。

B.E-CVRP问题实例的描述

在实验中,四组不同的CVRP基准实例被用来生成新的E-CVRP基准实例6,包括Christofides和Eilon[24]、Christofides等人的流行实例。[25]和Fisher[26],以及Uchua等人的最新实例。[27]。第四节给出了将CVRP实例转换为E-CVRP实例的细节。表一、二、三、四描述了转换后的E-CVRP基准问题实例,其中各列(从左边开始)表示问题实例的名称7、客户数量(#客户)、充电站数量(#站)、一个解决方案可以拥有的最小电动车路线数量8(#路线)、电动车的最大货物负荷(C)和电动车的最大电池充电水平(Q)。请注意,所有的E-CVRP基准实例都由一个中央仓库组成。为了产生合理的(即强制电动汽车访问充电站)E-CVRP实例,γ和φ参数被设置为γ=2和φ=0.125。增加γ的值和减少φ的值会导致更多的充电站数量。

V.实验结果

A.实验设置

为了向新的基准提供一组初步结果,已经使用第III-B节中描述的MMAS方法和第III-A节中定义的MILP方法进行了实验。实验是在Linux系统下进行的,该系统采用Intel Core i7-3930K 3.20GHz处理器,具有12MB缓存和16GB RAM。

MILP方法使用Gurobi求解器[14]进行求解,并规定了大约3周的时间限制。MMAS方法对10个独立的执行(使用不同的随机种子)进行了25000n次评估9,其中n是问题大小。具有最佳质量的解决方案所走的总距离以及CPU时间被记录下来。MMAS的蚁群大小被设定为ω = n ants。蒸发率被设定为ρ=0.02,决策规则的两个参数被设定为典型值,如下所示。α=1和β=2。

B.结果分析

MMAS和MILP方法的小规模问题实例的实验结果见表五,而大规模问题实例的实验结果见表六。请注意,MILP方法无法在预定的时间限制内为大规模问题实例提供解决方案,因此,表六中只报告了MMAS方法的结果。" UB是在MILP方法找到的时间限制内的最佳上界(在某些情况下,给定的上界也是最优的)。"best-、worst-、mean- "和 "stdev- "分别是MMAS从其10次独立运行中发现的最小、最大、平均和标准偏差值。此外,t avg是MMAS找到具有最佳质量的解决方案所需的CPU时间(10次运行的平均值)。UB "和 "最佳 "值还包括括号内的解决方案所包含的路线数量。

 

 

从表V中可以看出,在大多数最小的问题实例中,MILP方法可以找到比MMAS10方法更好的解决方案。然而,MMAS方法的解质量与MILP方法在E-n29-k4-s7、E-n30-k3-s7和E-n35-k3-s5问题实例(这也是这些情况的最优解)上发现的上界解的偏差非常小。然而,MMAS方法需要几秒钟,而MILP方法需要几周。随着问题规模的增加,可以观察到,MMAS方法可以找到比MILP方法更好的解决方案(例如,在e-n60-k5-9问题实例上),因为预先确定的时间似乎很短。考虑到E-CVRP的高度复杂性,这一观察结果是意料之中的。

从表VI中可以看出,MMAS方法能够为所有E-CVRP问题实例找到解决方案,大多数问题实例(少于300个节点)需要几分钟,其余问题实例需要几个小时。这一观察结果证明了MMAS方法相对于MILP ble V的有效性。此外,它还验证了ACO算法是解决这类问题的有效方法。

 

 

最后,MMAS方法生成的中值解(来自10次运行的解)如图1所示。针对E-n29-k4-7问题实例,MILP方法生成的最优解如图2所述。针对同一问题实例。从图1可以看出,MMAS方法生成的解决方案由四条路线组成,其中所有路线都包含对充电站的一次访问。相反,从图2中可以看出,最优解由四条路线组成,其中一条路线包含两次对充电站的访问,其余三条路线各访问一次。请注意,由这两种方法生成的解决方案可以由四个电动汽车同时操作,也可以由单个电动汽车顺序操作。尽管MMAS方法生成的中值解决方案比最优解决方案需要更少的充电站访问,但其解决方案质量较差。这一观察结果表明,在解决E-CVRP问题时存在挑战,因为到充电站的弯路更少并不一定能带来更好的解决方案质量。

VI.结论

        在这项工作中,我们提出了一个新的车辆路由问题的变体,用于确定电动汽车的最小距离路线。E-CVRP考虑了有限的电池充电水平和有限的电动汽车货物装载能力。电动汽车的能量消耗是基于电动汽车的货物负荷,也就是说,电动汽车越重,消耗的能量就越多。该问题被表述为一个MILP,并使用精确求解方法和近似求解方法进行求解。在一组新生成的基准E-CVRP实例上的实验结果代表了问题的复杂性,因为所应用的方法在效率或解决方案的质量方面都遇到了挑战。

        在未来的工作中,为了进一步提高解决方案的质量,设计针对该E-CVRP问题的启发式方法将是有趣的。事实上,考虑到这项工作中提出的初步实验结果,在这些基准问题实例上还有很大的改进空间。

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

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

相关文章

【Vue3】setup参数细讲!computed计算属性和watch监听属性

setup参数细讲!computed计算属性和watch监听属性 setup细讲!setup参数,steup(props,context)参数1.props,负责接收父组件传过来的值参数2.contextcontext.attrscontext.emitcontext.slots, 插槽…

MySQL(六)主从复制

MySQL系列文章 MySQL(一)基本架构、SQL语句操作、试图 MySQL(二)索引原理以及优化 MySQL(三)SQL优化、Buffer pool、Change buffer MySQL(四)事务原理及分析 MySQL(五&a…

MySQL(详细)

目录 什么是数据库? 数据库操作 表操作 数据库约束 表的设计 聚合查询 分组查询 联合查询 (多表查询) 索引 事务 JDBC 什么是数据库? 数据库是一类软件 , 它是用来组织、保存、管理数据的.组织这些数据也是为了后续进行增删查改. MySQL 是一款开源免费的数据库. …

牛客网OR36 链表的回文结构

题目 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针head,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 链接:链表的回文结…

6.Java 修饰符

修饰符 (访问修饰符、非访问修饰符) 访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 default (即默认,什么也不写): 在同一包内可见&#xff…

前端|CSS(二)| pink老师

参考视频:黑马程序员前端CSS3基础教程,前端必备基础 目录 📚CSS 布局的三种机制 🐇普通流 🐇浮动 ⭐️浮动介绍 ⭐️浮动(float)的应用 ⭐️浮动(float)的扩展 ⭐️清除浮动 🐇定位 ⭐️定位 ⭐️…

检测到目标Referrer-Policy响应头缺失

详细描述 Web 服务器对于 HTTP 请求的响应头中缺少 Referrer-Policy,这将导致浏览器提供的安全特性失效。 当用户在浏览器上点击一个链接时,会产生一个 HTTP 请求,用于获取新的页面内容,而在该请求的报头中,会包含一个…

sparkSQL UDF

sparksql只能创建UDF,使用 SparkSession.udf.register() def num_count(num):return num*10#自定义方法名,调用的函数(包含逻辑),返回值 udf2 spark.udf.register("udf1",num_count,IntegerType())#第二个参数是udf的处理逻辑&am…

Spring Security 构建基于 JWT 的登录认证

一言以蔽之,JWT 可以携带非敏感信息,并具有不可篡改性。可以通过验证是否被篡改,以及读取信息内容,完成网络认证的三个问题:“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全,使用它需要采用 …

全网最完整,接口测试总结彻底打通接口自动化大门,看这篇就够了......

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试 前言 所谓接口,是指同一个系统中模块与模块间的数据传递…

高数笔记4(第一章函数 极限 连续-极限的计算2)

目录 概述(5)利用夹逼准则求极限(后面几个方法一般用来求数列极限)例66例68(结论,需要记住)例69(上题的运用,需要数形结合,找出各个区间最大的)例…

栈和队列详解

目录 一,栈的概念及其结构 二,栈的方法及其实现 2.1 栈 2.2 push(int val) - 进栈 2.3 pop() - 出栈 2.4 peek() - 得到栈顶元素 2.5 size() - 栈的大小 2.6 empty() 2.7 isFull() 三,队列的概念及其结构 四,队列的方法及…

面试题之MySQL事物的特性和锁

在关系性数据库管理系统配置,一个逻辑工作要成为事物,必须要满足4个特性,即所谓的ACID:原子性(Atomicity),一致性(Consistency)、隔离性(lsolation)和持久性(Durability)。 原子性: 原子性:事物作为一个整体被执行,包含在其中对…

Maven安装步骤

Maven官网下载安装包: https://maven.apache.org/download.cgi Maven下载官网 解压安装包 在环境变量中配置 MAVEN_HOME 和 Path 打开cmd,输入mvn -v查看安装成功

用Inno Setup6.2.1对Pyinstaller打包的python可执行文件exe做代码签名,签名工具用微软件SignTool

说明:使用本博文的前提条件是,你已经将代码打包成可执行文件exe,现在是用Inno Setup6.2.1做安装包,以及给exe、及安装包exe、卸载exe做代码签名 一、准备工具 1、下载 下载 https://visualstudio.microsoft.com/zh-hans/visual-…

简单扫码登录原理分析与本地测试

前言 参考:https://www.cnblogs.com/johnlearning/p/16205875.html 前言:简单分析扫码登录流程。 场景:以网页版微信为例,我们在 PC 端点击二维码登录后,浏览器页面会弹出二维码图片,此时打开手机微信扫…

本地存储之indexedDB的操作api -- localforage的使用

文章目录 概述增删改查操作工具类封装前端api前端关键接口调用(以年度举例,其他维度类似)列表获取添加内容修改内容 概述 本地存储有好几种,每种的优缺点本文就不赘述了,一搜一大堆。 本文只介绍indexedDB的使用。 能…

Redis实现分页+多条件模糊查询组合方案

导言 Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊条件查询,在面对一些需要分页、排序以及条件查询的场景时(如评论&…

spring boot 集成dubbo

本demo使用spring boot 2.4.1版本集成 dubbo 2.7.15 1.创建maven项目及其子模块 父工程pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.ap…

个人微信开发API,微信机器人开发

安卓微信的api&#xff0c;个人微信开发API协议&#xff0c;微信 ipad &#xff0c;微信ipad协议&#xff0c;微信web版接口api&#xff0c;微信网页版接口&#xff0c;微信开发sdk&#xff0c;微信开发API&#xff0c;微信协议&#xff0c;微信接口文档&#xff0c;网页个人微…