交通 | 应用Benders分解方法解决多车生产路由问题

news2024/11/27 14:31:38

在这里插入图片描述

论文解读​ 曲晨辉,王飞龙

1 知识补充和文章贡献

2.1 IRP (Inventory routing problems)

IRP关注的是在一个给定的规划范围内,从一个设施到一组客户的单一产品分配。客户以给定的速度消费产品,并可将产品的库存维持在一个特定的水平上。一组相同的车辆可用于产品的配送。目标是最小化总配送成本,计算为路线成本和库存持有成本的总和,同时不造成任何客户的缺货。

库存路由问题 (简称IRP)作为物流配送系统的基础理论问题,主要研究的是为供应商制定给若干客户配送产品的计划,需要同时决策客户配送方案和车辆配送路线,在满足多项约束的情况下最终实现总开销最低的目标。

在IRP中,库存控制和路由决策必须同时做出。

2.2 PRP (production routing problem)

生产路线问题 (PRP)同时考虑了供应链中的各种决策,包括生产、库存管理和路由决策。 一般来说,在一个多时期的范围内,这些综合供应链问题要求人们确定生产和访问每个客户的时期,相应的生产和交付给客户的数量,以及车辆的详细路线计划。

2.3 IRP中的三种补货策略

在IRP问题中,主要有以下三种策略为网络中的客户配送货物:

•第一种策略称为“Order-up-to-level” (OU) 策略,车辆在每次访问某个客户时,为客户配送的货量均使得客户达到最大的库存水平
•第二种策略称为“maximum-level” (ML)策略,这种策略是对OU策略的一种放松,车辆到达客户时配送的货量可以介于客户当前货量和最大库存水平之间
•第三种策略称为“replenishment” (RP)策略,这种策略对ML策略进一步放松,允许车辆为客户配送任意非负货量

2.4 文章贡献

本文研究了多车PRP (MVPRP),并使用OU策略为客户进行货物配送;为了精确求解MVPRP,文章基于Benders分解,提出了一种精确算法框架,将模型划分为一个主问题(master problem)和一个子问题(slave problem),其中子问题又可以进一步划分为多个CVRP问题,并构建基于路径的模型进行求解;文章同时对MVPRP最优解的下界进行了分析,从而生成初始最优割约束,用于加快模型收敛速度。最终,借助MVPRP和VMIRP的算例验证了精确算法的有效性。

2 问题定义

为工厂附近长度为 l l l的离散规划周期的所有顾客提供单一货物。在每个周期开始的时候,生产工厂可以生产最多 C C C单位的产品,其中固定支出是 f f f,单位产品支出是 u u u。节点 i , i ∈ N i,i\in N i,iN L i L_i Li单位的仓库容量以及一个库存单位支出 h i h_i hi。节点 i i i最开始在规划区域持有的产品数量为 I i 0 I_{i0} Ii0。顾客 i ∈ N c i\in N_c iNc在周期 t t t需要 d i t d_{it} dit单位的产品,并且可以在每个周期最多被访问一次。容量为 Q Q Q m m m辆相同车辆在仓库可用。

其中,MVPRP包括同时决定:

•工厂何时生产和生产多少产品
•何时向每个客户交货以及交货数量
•在规划范围内的每个周期使用什么路线

目标是在规划期内使生产、库存和路由成本的总和最小化,而不造成任何客户的缺货。

在本文中,以OU政策为补充政策。此外,正如文献中通常的假设,每个周期在工厂的生产在交付前进行,在客户的交付在该时间段的开始时执行。

3 数学模型

在这里插入图片描述
在这里插入图片描述

3.1 符号定义

T T T: 时间周期 1 , . . . , l {1,...,l} 1,...,l集合。为简化模型,引入一个虚拟的周期 l + 1 l+1 l+1,并定义 T ′ = T ∪ { l + 1 } T'=T\cup \{l+1\} T=T{l+1}; g i v t g_{ivt} givt: 当顾客 i i i在周期 t t t被访问的总运输数量,并且当前访问是在周期 v v v,计算如下:

e i v t e_{ivt} eivt:当顾客 i i i在周期 t t t被访问的总库存持有成本,并且当前访问是在周期 v v v,计算如下:

μ ( i , t ) \mu (i,t) μ(i,t): 当顾客 i i i下一次可以在不发生缺货的情况下补货的,在周期 t t t后的最近的周期,计算公式为:

π ( i , t ) \pi(i,t) π(i,t): 当顾客 i i i下一次可以在不发生缺货的情况下补货的,在周期 t t t前的最早的周期,计算公式为:

p t p_t pt: 非负连续变量,表示在周期 t t t的生产数量

I i t I_{it} Iit: 非负连续变量,代表在周期 t t t末尾节点 i i i的库存水平

y t y_t yt: 0-1变量,表示在周期 t t t工厂是否进行生产

z i t z_{it} zit: 0-1变量,表示节点 i , i ∈ N C i,i\in N_C i,iNC是否在周期 t t t被访问

s t s_t st: 非负整数变量,表示周期 t t t使用的车辆数量

x i j t x_{ijt} xijt: 整数变量,可能取值在 { 0 , 1 } , { i , j } ∈ E , t ∈ T \{0,1\},\{i,j\}\in E,t\in T {0,1},{i,j}E,tT,和 { 0 , 1 , 2 } , { 0 , j } ∈ E , t ∈ T \{0,1,2\},\{0,j\}\in E,t\in T {0,1,2},{0,j}E,tT

λ i v t \lambda_{ivt} λivt: 0-1变量,表示节点 i i i是否在周期 t t t被访问,当前访问是周期 v v v

E ( S ) E(S) E(S): 两个点都在集合 S S S中的边集,即 E ( S ) = { { i , j } ∈ E : i , j ∈ S , S ⊆ N } E(S)=\{\{i,j\}\in E: i,j\in S, S\subseteq N\} E(S)={{i,j}E:i,jS,SN}

δ ( S ) \delta(S) δ(S): 与集合 S S S中的一个节点相关联的边集,即 δ ( S ) = { { i , j } ∈ E : i ∈ S , j ∉ S   o r   i ∉ S , j ∈ S } \delta(S)=\{\{i,j\}\in E: i\in S, j\notin S~or~i\notin S,j\in S\} δ(S)={{i,j}E:iS,j/S or i/S,jS} S S S也可以是单独的一个节点 i i i

补充解释:在比如 λ i v t \lambda_{ivt} λivt中,v和t都是访问i的周期。

4 Benders分解​

4.1 基于逻辑的Benders模型重构

BMP(工厂生产、计划配送周期、配送产品的量)

BSP(进行运输,相当于 l l l个周期的CVRP)

于是,给定一个解 ( p ∗ , I ∗ , y ∗ , z ∗ , λ ∗ , ω ∗ ) (p^*,I^*,y^*,z^*,\lambda^*,\omega^*) (p,I,y,z,λ,ω)
有三种可能的情况:

•给定 ( z ∗ , λ ∗ ) (z^*,\lambda^*) (z,λ)BSP不可行,BMP中加入infeasibility cut:

•给定 ( z ∗ , λ ∗ ) (z^*,\lambda^*) (z,λ)BSP可行,但是 ϕ ( z ∗ , λ ∗ ) > ∑ t ∈ T ω t ∗ \phi(z^*,\lambda^*)>\sum_{t\in T}\omega_t^* ϕ(z,λ)>tTωt ,那么就需要加入optimality cut,在BMP中:

•其中 L B R LB_R LBR ϕ ( z , λ ) \phi(z,\lambda) ϕ(z,λ)的下界值。

•给定 ( z ∗ , λ ∗ ) (z^*,\lambda^*) (z,λ)BSP可行,但是 ϕ ( z ∗ , λ ∗ ) = ∑ t ∈ T ω t ∗ = ∑ t ∈ T ∑ { i , j } ∈ E c i j x i j t ∗ \phi(z^*,\lambda^*)=\sum_{t\in T}\omega_t^*=\sum_{t\in T}\sum_{\{i,j\}\in E}c_{ij}x_{ijt}^* ϕ(z,λ)=tTωt=tT{i,j}Ecijxijt ( s ∗ , x ∗ ) (s^*,x^*) (s,x)是BSP的最优解。那么MVPRP问题的最优值就是:

基于上述模型的精确算法如下:

•初始化。计算 L B R LB_R LBR,并令 L B = 0 , U B = ∞ LB=0,UB=\infty LB=0,UB=

•当 L B LB LB

  1. 解BMP。如果BMP不可行,说明原问题不可行,就结束计算。否则,令 ( p ∗ , I ∗ , y ∗ , z ∗ , λ ∗ , ω ∗ ) (p^*,I^*,y^*,z^*,\lambda^*,\omega^*) (p,I,y,z,λ,ω)为原问题最优解的成本 z ‾ \overline{z} z,并令 L B = z ‾ LB=\overline{z} LB=z

  2. 解BSP。可能会出现两种情况:

    a). BSP不可行。加入infeasibility cut

    b). BSP可行且是整数解,满足 ϕ ( z ∗ , λ ∗ ) > ∑ t ∈ T ω t ∗ \phi(z^*,\lambda^*)>\sum_{t\in T}\omega_t^* ϕ(z,λ)>tTωt。加入optimality cut

  3. ( p ∗ , I ∗ , y ∗ , z ∗ , λ ∗ , ω ∗ ) (p^*,I^*,y^*,z^*,\lambda^*,\omega^*) (p,I,y,z,λ,ω)为原问题可行解的成本 z ‾ \overline{z} z,并令 U B = m i n { U B , z ‾ } UB=min\{UB,\overline{z}\} UB=min{UB,z}

上述算法每一次迭代中,LB都代表着原问题最优值的有效下界,最后会和UB重合,即收敛。

4.2 解BSP

给定BMP问题的解 ( p ‾ , I ‾ , y ‾ , z ‾ , λ ‾ , ω ‾ ) (\overline{p},\overline{I},\overline{y},\overline{z},\overline{\lambda},\overline{\omega}) (p,I,y,z,λ,ω)

BSP(进行运输,相当于l个周期的CVRP)

可以看做是CVRP(t),可以用一个无向图 G t = ( V t , E t ) G^t=(V^t,E^t) Gt=(Vt,Et)表示,其中 V t = { 0 } ∪ N c t V^t=\{0\}\cup N_c^t Vt={0}Nct(就是t周期的所有需要被服务的顾客节点以及工厂节点 N c t = { i ∈ N c : z ‾ i t = 1 } N_c^t=\{i\in N_c:\overline{z}_{it}=1\} Nct={iNc:zit=1} E t = { { i , j } : i , j ∈ V t E^t=\{\{i,j\}:i,j\in V^t Et={{i,j}:i,jVt i i i就是边集。边 { i , j } \{i,j\} {i,j}都有一个成本 c i j t = c i j c_{ij}^t=c_{ij} cijt=cij,每个顾客都有一个已知非负的需求 q i t = g i v ‾ i t q_{it}=g_{i{\overline{v}_i}t} qit=givit ,其中 v ‾ i \overline{v}_i vi是当 λ ‾ i v ‾ i t = 1 \overline{\lambda}_{i{\overline{v}_i}t}=1 λivit=1时确认的。有m量相同的车,每一辆都有一个容量 Q Q Q,在工厂可用。

该问题就包括了找到一组包含最多m条路的花费最少的路径。路由包括如下规则:
•每条路径都访问工厂
•每个顾客节点只被一条路径访问
•同一条路径被访问的顶点的需求和不能超过车辆容量Q

4.2.1 解CVRP(t)

为解决每个CVRP(t),使用了基于集合划分模型的精确算法。

为简化计算,省略了索引 t t t。令 R \mathcal{R} R为所有可行路径的索引集合, a i r a_{ir} air为二进制系数,表示顶点 i ∈ N c t i\in N_c^t iNct是否属于路径 r ∈ R r\in \mathcal{R} rR(对于任意路径来说, a 0 r = 1 a_{0r}=1 a0r=1)。每一条路径 r ∈ R r\in \mathcal{R} rR都有一个成本 b r b_r br,相当于路径r的TSP问题的最优值。令 ξ r \xi_r ξr为二进制变量,代表当且仅当 r ∈ R r\in \mathcal{R} rR属于最优解的时候其为1。模型如下:

CVRP(t)可能会infeasible,因为车辆可能不够。因此就要加入infeasibility cut。为检查其是否有可行解,可以通过解决装箱问题。有 ∣ N c t ∣ |N_c^t| Nct个物品,重量 { q i t } \{q_{it}\} {qit},最多有 m m m个箱子,容量为 Q Q Q。如果BPP是不可行的,那么就加入如下infeasibility cut:

该cut可以进一步加强。如果有这样一个解 λ i v t ≥ λ ‾ i v t , ∀ i ∈ N c , v = π ( i , t ) , . . . , t − 1 \lambda_{ivt}\geq\overline{\lambda}_{ivt},\forall i\in N_c, v=\pi(i,t),...,t-1 λivtλivt,iNc,v=π(i,t),...,t1,它也是不可行的。所以如下的infeasibility cut可以被加入BMP:

此时还有一种情况,对于一个给定的$i\in N_c ,可以得到 ,可以得到 ,可以得到g_{i{v_1}t}>g_{i{v_2}t},if~v_1 ,也就是说如果顾客 i 当前被访问的时间是 ,也就是说如果顾客i当前被访问的时间是 ,也就是说如果顾客i当前被访问的时间是[\pi(i,t),\overline{v}_i-1] ,那么在 t 周期内需要往 i 点运送的货物需求量就要大于其位于 ,那么在t周期内需要往i点运送的货物需求量就要大于其位于 ,那么在t周期内需要往i点运送的货物需求量就要大于其位于\overline{v}_i $的时候的量。因此如下被加强的infeasibility cut就可以得到:

如果BPP实例表明有可行解,那么就说明CVRP(t)有有限的最优解。于是可以使用基于路径枚举程序(2008, Baldacci, Christofides, and Mingozzi)和混合策略(2009, Pessoa, Uchoa, Poggi de Aragao, 2008, Pessoa, de Aragao, Uchoa)来解CVRP(t)。

4.2.2 更新BMP

CVRP(t)问题首先被检查是否可行,并加入infeasibility cut进BMP。如果至少有一个infeasibility cut被找到,程序终止,BMP重新被计算。否则,如果所有CVRP(t)都可行,那么问题就根据周期 ( t = 1 , 2 , . . . , l ) (t=1,2,...,l) (t=1,2,...,l)$用精确算法解CVRP(t),并加入optimality cut到BMP。如果有找到cut,程序终止,BMP重新计算。

如果没有cut被找到,那么CVRP(t)就都最优了。然后调用MVPRP的精确算法的step2.b.ii再检查一下是否有需要加入BMP的optimality cut。

4.3 计算路由成本的下界 L B R LB_R LBR

f i t , i ∈ N c , t ∈ T f_{it},i\in N_c,t\in T fit,iNc,tT为顾客 i i i必须在周期 t t t之前被访问的数目的下界, f i t = ⌈ q ‾ i t / m i n { Q , L i } ⌉ f_{it}=\lceil{\overline{q}_{it}/min\{Q,L_i\}}\rceil fit=qit/min{Q,Li}。对于每个 i ∈ N c , t ∈ T i\in N_c,t\in T iNc,tT,令 q ‾ i t \overline{q}_{it} qit为顾客 i i i在周期 t t t之前的累积需求量,计算 q ‾ i t = m a x { 0 , − I i 0 + ∑ v = 1 t d i v } , t = 1 , . . . , l . \overline{q}_{it}=max\{0,-I_{i0}+\sum_{v=1}^td_{iv}\},t=1,...,l. qit=max{0,Ii0+v=1tdiv},t=1,...,l.。另外, m L m_L mL m U m_U mU是在计划区域内车辆总数的下界和上界。令 q ^ i = ∑ t ∈ T d i t − I i 0 \hat{q}_i=\sum_{t\in T}d_{it}-I_{i0} q^i=tTditIi0是在计划区域内顾客 i ∈ N c 的总产品需求量。 i\in N_c的总产品需求量。 iNc的总产品需求量。 m L = ⌈ 1 Q ∑ i ∈ N c q ^ i ⌉ , m U = m ⋅ l m_L=\lceil{1\over Q}\sum_{i\in N_c}\hat{q}_i\rceil, m_U=m\cdot l mL=Q1iNcq^i,mU=ml 。 。 q i , ∀ i ∈ N c q_i,\forall i\in N_c qi,iNc 是在计划区域内的任意一次访问中传递给顾客 是在计划区域内的任意一次访问中传递给顾客 是在计划区域内的任意一次访问中传递给顾客i 的产品数量的下界, 的产品数量的下界, 的产品数量的下界, q i = m i n t ∈ T { d i t } q_i=min_{t\in T}\{d_{it}\} qi=mintT{dit}

定义一条路径为图G中经过工厂0号节点的最小成本simple cycle,使用需求 { q i } \{q_{i}\} {qi}计算的顾客访问总需求不会超过车辆容量 Q Q Q。令 R ~ \tilde{\mathfrak{R}} R~为所有路径的索引集合,令 a i r a_{ir} air为一个二进制系数,表示顶点 i ∈ N c i\in N_c iNc是否属于路径 r ∈ R ~ r\in \tilde{\mathfrak{R}} rR~,每条路径都有一个路径成本 b r b_r br

任意一个最优的MVPRP问题解的路径成本下界值都可以根据如下的整数规划问题的最优成本解得到:

下界 L B R LB_R LBR是根据一个bounding程序计算的,作为RF问题的线性规划松弛的一个近似最优对偶解。该程序和基于单纯形法的标准列生成问题不同,因为它用到了dual ascent启发式方法来解主问题。

5 优化BMP

这里主要是介绍如何加强BMP。

Aduyasak, Cordeau, and Jans在14年提出了很多加强F模型线性松弛界的方法,这里介绍了一个:

其中 t ′ t' t指的是工厂为了避免缺货必须生产的最早时间,计算如下:

我们还可以在BMP中加入如下不等式:

5.1 optimality cut的初始集合

介绍两种生成初始optimality cut的方式。

R ^ \hat{\mathfrak{R}} R^为周期 t t t所有可行路径的索引集合,其中顾客 i i i的需求 q i t q_{it} qit属于需求的离散集合 { g i v t : v = π ( i , t ) , . . . , t − 1 } \{g_{ivt}:v=\pi(i,t),...,t-1\} {givt:v=π(i,t),...,t1},也就是说,t周期内被访问的顾客 i i i的所有可能需求集合根据其潜在曾访问时期的集合 { π ( i , t ) , . . . , t − 1 } \{\pi(i,t),...,t-1\} {π(i,t),...,t1}确定。令 a i v r a_{ivr} aivr为二进制系数,表示当且仅当顾客 i i i属于路径 r r r,并且有一个等于 g i v t g_{ivt} givt的需求。CVRP(t)建模如下:

w i v ∈ R , ∀ i ∈ N c , v = π ( i , t ) , . . . , t − 1 , u 0 ≤ 0 w_{iv}\in R, \forall i\in N_c,v=\pi(i,t),...,t-1,u_0\leq0 wivR,iNc,v=π(i,t),...,t1,u00分别为约束(39)和(40)的对偶变量。CVRP(t)的线性松弛对偶模型如下所示:

5.1.1 Type 1 Cut

第一种cut是基于CVRP(t)得到的一个LP问题

w i v ≥ 0 , ∀ i ∈ N c , v = π ( i , t ) , . . . , t − 1 , u 0 ≤ 0 w_{iv}\ge0, \forall i\in N_c,v=\pi(i,t),...,t-1,u_0\leq0 wiv0,iNc,v=π(i,t),...,t1,u00分别为约束(41)和(42)的对偶变量。令 ( w ∗ , u 0 ∗ ) (w^*,u_0^*) (w,u0)为(T1)的对偶问题的可行解,基于proposition1,可以得到如下有效的optimality cut:

5.1.2 Type 2 Cut

第二个cut是基于从F模型中得到的LP问题。令 R t ^ \hat{\mathfrak{R}_t} Rt^为周期t所有可行路径的索引集合,其中顾客 i i i的需求 q i t q_{it} qit属于需求的离散集合 { g i v t : v = π ( i , t ) , . . . , t − 1 } \{g_{ivt}:v=\pi(i,t),...,t-1\} {givt:v=π(i,t),...,t1},也就是说,t周期内被访问的顾客 i i i的所有可能需求集合根据其潜在曾访问时期的集合 { π ( i , t ) , . . . , t − 1 } \{\pi(i,t),...,t-1\} {π(i,t),...,t1}确定。令 a i v r r a_{ivrr} aivrr为二进制系数,表示当且仅当顾客 i i i在周期t属于路径 r r r,并且有一个等于 g i v t g_{ivt} givt的需求。使用二进制变量 ξ r t \xi_{rt} ξrt的模型如下所示, ξ r t \xi_{rt} ξrt表示周期t时路径r是否在解中。

w i v t ∈ R , ∀ i ∈ N c , v = π ( i , t ) , . . . , t − 1 , u 0 ≤ 0 w_{ivt}\in R, \forall i\in N_c,v=\pi(i,t),...,t-1,u_0\leq0 wivtR,iNc,v=π(i,t),...,t1,u00分别为约束(44)和(45)的对偶变量。关于 ξ r t \xi_{rt} ξrt的对偶约束为:

令$(w*,u_0*) $为上述模型对偶可行解的变量。基于proposition1,如下不等式被加入:

6. 计算结果分析

文章将提出的算法(EXM)和Adulyasak, Cordeau, and Jans (2014)提出的三种Branch-and-cut算法在针对MVPRP算例和VMIPR算例的求解效果上进行了比较,Adulyasak, Cordeau, and Jans (2014)提出的三种Branch-and-cut算法如下所示:

  • Veh-Ind:在单线程上运行无车辆索引的模型
  • Non-Veh-Ind:在8个线程上运行无车辆索引的模型
  • 8c-Veh-Ind:在8个线程上运行带车辆索引的模型

文章限定EXM算法最长求解时间为2h,详细实验结果数据可见原文,实验结果总结如下:

  • EXM相对于Adulyasak, Cordeau, and Jans (2014)中最优的算法8c-Veh-Ind,能多求解21个算例到最优
  • EXM最大求解的算例规模为包含三个时间周期的40个客户的算例,相对于8c-Veh-Ind的最大求解规模多了15个客户
  • 对于没有求解到最优的算例,EXM收敛到的下界解和上界解之间的gap值相对较小

文章同样对EXM算法中不同组成成分的有效性进行了验证:

  • 使用type I和type I割,使用强化版本的不可行和线性割来初始化EXM对于EXM算法的求解性能影响很大
  • 如果不适用线性割了,则EXM算法调用CPLEX IP求解器的次数将会极大增加,从而减慢算法效率

对于VMIPR算例的实验结果总结如下:

  • 从求解算例的数量角度,EXM相对于Non-Veh-Ind算法求解的算例多,但相对于Veh-Ind和8c-Veh-Ind算法求解的算例要少一些
  • EXM相对于Non-Veh-Ind可以求解额外的四个算例到最优解,相对于8c-Veh-Ind,可以获得8个算例的更优的上界
  • EXM对于规划周期数量增长的适应度要更强,对于30个客户,6个周期的算例求解到了新的上界和下界。

7 总结和未来研究方向

文章针对MVPRP (使用OU补货策略)和VMIPR基于Benders分解提出了一种精确算法。通过算例实验证明了文章提出的精确算法相对于SOTA的算法在求解MVPRP的效果上要更优,最多求解3个周期下,使用3辆车辆,40个客户的算例;同时,文章提出的算法对于VMIPR算例,最多可以求解6个周期下,使用4辆车辆,30个客户的算例。

文章提出的算法基于分解的思想,可以较好地处理路径内的约束,后续研究可以通过设计更加复杂的模型和算法,在PRP中考虑时间窗和距离限制约束。

参考文献

Zhang, Z., Luo, Z., Baldacci, R., & Lim, A. (2021). A Benders decomposition approach for the multivehicle production routing problem with order-up-to-level policy. Transportation Science, 55(1), 160-178.

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

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

相关文章

HTB-SolidState

HTB-SolidState信息收集80端口Apache Jamesmindyrbash绕过mindy -> root总结信息收集 80端口 目录扫描 从/README.txt文件里知道他们在捣鼓一个新的秘密项目,这个新的秘密项目就是一个新的网页外观。 80端口先点到为止,免得进兔子洞。 Apache James …

基于SpringBoot技术点餐系统的设计与实现(论文+源码)_kaic

摘 要 饮食行业的发展推动了服务的提升,在线点餐服务模式随之产生。相比于传统点餐,在线点餐更加方便地浏览菜品,挑选菜品,有更好的用餐体验。系统的使用减少了人工成本,方便数据统计,便于提供更优质的服务…

大数据学习路线图(2023完整版)适合收藏

大数据开发是一门涉及处理和分析大规模数据的技术领域,随着大数据技术的不断发展和应用,对大数据开发人员的需求也在逐渐增加。就业前景相对较好,尤其在科技行业和数据驱动型企业中。大数据开发的前景还是有很多优势的,就业范围广…

Ubuntu14.04+ROS-indigo版本安装教程

ROS之indigo版本安装教程 1、Ubuntu14.04安装(indigo对应的ubuntu版本是14.04) Ubuntu14.04 的下载地址https://www.releases.ubuntu.com/14.04/ 64位的电脑下载如下图 在虚拟机上配置了该镜像(我用的是VMware虚拟机) 2、ROS …

mac苹果电脑运行慢卡顿如何释放内存?

苹果电脑受到大众追捧的大部分原因是她高效的运行速度,为我们带来了很大的方便。但是大家有没有发现经过几年时间后,现在自己的苹果电脑运行速度没有以前快了呢?导致苹果电脑变慢的原因有哪些?苹果电脑变慢了怎么办?小…

平凡的Python为什么能一跃成为世界排名第一的语言

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 作者:大周|慕课网讲师 一、前言 本文将结合个人经历为各位同学客观的分析是否有学习Python的必要、Python适合谁学、为什么…

webgl-画三角形

html <!DOCTYPE html> <head> <style> *{ margin: 0px; padding: 0px; } </style> </head> <body> <canvas id webgl> 您的浏览器不支持HTML5,请更换浏览器 </canvas> <script src"./main.js"></script&g…

007:Mapbox GL实现地图地点搜索定位功能

第007个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中实现地图地点搜索定位功能 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共68行)安装插件相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

linux 命名管道 mkfifo

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e;目录 前言 概述 原理介绍 接口说明 代码演示 结尾 前言 本专栏主要分享linux下并发编程…

HBU 2023 Simple problem set

目录 7-1 递推公式 7-2 存钱罐 7-3 买东西 7-4 双重子串 7-5 放小球 7-6 最短路径 7-7 统计子序列的个数 7-8 摆放灯笼 7-9 选零食 7-10 1还是2 7-11 最少的门禁数量 7-12 青春猪头之开学了要好好学习 7-13 青春猪头之毕设真头大 7-14 青春猪头之我没学过C语言 7-15 发射小球 7…

FreeRTOS 列表和列表项

文章目录一、什么是列表和列表项&#xff1f;二、列表和列表项初始化三、列表项插入四、列表项末尾插入五、列表项的删除六、列表的遍历七、列表项的插入和删除实验一、什么是列表和列表项&#xff1f; 1. 列表 列表是 FreeRTOS 中的一个数据结构&#xff0c;概念上和链表有点…

【九】springboot启动源码 - refreshContext结束后

afterRefresh 钩子函数,默认实现为空 listeners.started 执行实现SpringApplicationRunListener的started回调 通用处理 this.listeners在之前已经通过SPI加载 获取SpringApplicationRunListener的实现类 EventPublishingRunListener 推送ApplicationStartedEvent事件…

红队内网靶场

文章目录开篇介绍靶场介绍靶场下载以及配置Tomcat Get Shell突破DMZ防火墙拿下域内成员机器将内网机器上线到CS使用Adfind侦察子域信息控制子域DCRadmin登录子域进行权限维持(白银票据/ACL)子域bloodhound获取父域信息分析子域Krbtgt密钥创建跨域金票Dcsync父域PTH父域DC准备打…

Activity启动模式

Activity的启动模式 首先activity启动之后是放在任务栈中的&#xff0c;task stack&#xff0c;既然是栈&#xff0c;遵循先进后出原则。有玩家比喻oncreate是入栈&#xff0c;onDestroy是出栈。 同一个APP中&#xff0c;不同的activity可以设置为不同的启动模式。在manifest…

【深一点学习】我用CPU也能跟着沐神实现单发多框检测(SSD),从底层了解目标检测任务的实现过程,需要什么样的方法调用。《动手学深度学习》Yes,沐神,Yes

目标检测近年来已经取得了很重要的进展&#xff0c;主流的算法主要分为两个类型[1611.06612] RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation (arxiv.org)&#xff1a;&#xff08;1&#xff09;two-stage方法&#xff0c;如R-CNN系算法…

centos7.2-rh7.2安装docker的问题

目录1. 环境2. 问题排查2.1 failed to start daemon: error initializing graphdriver: overlay2: the backing xfs filesystem2.2 centos7.2内核bridge.ko问题2.3 kernel:unregister_netdevice: waiting for ... to become free. Usage count 12.4 离线安装依赖问题1. 环境 …

AC7811—FOC无感控制代码调试与测试

目录 滑膜观测器调试 开环调试 闭环调试 IF VF DIRECT IF VF DIRECT 磁链观测器 一次/两次预定位 脉冲注入 高频注入 直线or五段曲线 滑膜观测器调试 开环调试 PWM0 两通道接示波器后&#xff0c;屏幕上打印的是开环给定同步转速积分电角度和滑模观测器估计转子电…

【C++】从string开始了解STL

文章目录1.初识STL1.什么是STL2.STL的版本3.STL的六大组件2.string1.string类模板2.string类的构造函数3.string内部数据访问4.string的遍历5.string类的迭代器6.string的Capacity相关接口7.string的修改相关接口8.其他接口1.初识STL 1.什么是STL STL(standard template liba…

Kotlin在Android开发中的应用与实践

Kotlin在Android开发中的应用与实践 通过本篇文章你将了解到下面内容&#xff1a; 介绍Kotlin语言&#xff1a;简述Kotlin语言的背景、特点和优势&#xff0c;为什么Kotlin在Android开发中变得越来越流行。 Kotlin与Java的对比&#xff1a;对比Kotlin和Java在语法、编程范式、…

规模化敏捷框架:Scrum@Scale

Scrum 敏捷方法有助于团队成员之间更有效地合作&#xff0c;实现共同的业务目标。但是当一个组织想要扩展 Scrum 方法到更多的团队时&#xff0c;应该如何实施&#xff1f;Scrum 仅为单团队开发、交付和运维产品提供了一个框架&#xff0c;而 ScrumScale&#xff08;SS&#xf…