论文研读_多目标部署优化:无人机在能源高效无线覆盖中的应用(ImMOGWO)精简版

  • 此篇文章为Multi-objective Deployment Optimization of
    UAVs for Energy-Efficient Wireless Coverage
    的论文学习笔记,只供学习使用,不作商业用途,侵权删除。并且本人学术功底有限如果有思路不正确的地方欢迎批评指正!

创新点

RD算法

混合解初始化算法

改进的多目标灰狼优化(ImMOGWO)算法

在本节中,我们首先介绍所提出的改进的多目标灰狼优化(ImMOGWO)算法的动机。随后,将介绍作为ImMOGWO算法第一部分的角色确定(RD)算法。最后,ImMOGWO算法的第二部分包括混合解初始化(HSI)算法和基于Levy飞行与正余弦方法(LSCMGA)的解决方案更新操作。

D. 整体算法设计与复杂度分析

提出的 ImMOGWO 算法的整体过程如算法 4 所示。我们的算法旨在通过优化无人机(UAV)的数量、三维位置和速度,以实现良好的覆盖率和低能耗。首先,基于移动地面用户(GU)的分布,我们设计了 RD 算法对地面用户进行聚类,为无人机的数量和位置初始化做准备。接着,由于优化变量的多样性,我们提出了 HSI 算法来初始化所有变量,以提高算法的收敛效果。此外,我们应用 LSC 方法在LSCMGA算法中避免局部最优并加速收敛。考虑到每个时间段用户的移动性,上述三部分将在每个时间段优化无人机的部署位置。由于RD算法和HSI算法克服了随机初始化造成的缺点, ImMOGWO 算法的收敛速度相对较快,这也表明提出的 ImMOGWO 算法具有良好的收敛性能。我们提出的算法不仅可以应用于本文中的多无人机部署场景,还可以应用于移动边缘计算中无人机作为边缘服务器的通信和位置优化场景。

N G U N_{GU} NGU 表示GU(基站用户)的数量, N c N_c Nc 表示簇的数量。单个时间槽中RD(资源分配)的计算复杂度为 O ( N i t ⋅ N G U ⋅ N c ) O(N_{it} \cdot N_{GU} \cdot N_c) O(NitNGUNc),其中 N i t N_{it} Nit 是收敛所需的迭代次数。当变量数量为 n v n_v nv 时,单个时间槽中HSI(互联网卫星)的计算复杂度为 O ( n v ⋅ K ) O(n_v \cdot K) O(nvK),其中 K K K 是无人机的数量。设 k k k N p N_p Np 分别表示优化目标的数量和种群大小。当帕累托存档的大小与种群 N p N_p Np 相同时,LSCMGA算法中对帕累托存档中的 N p N_p Np 个解进行排序的计算复杂度为 O ( k ⋅ N p ⋅ log ⁡ ( N p ) ) O(k \cdot N_p \cdot \log(N_p)) O(kNplog(Np))。因此,所提出的 ImMOGWO 在 N T N_T NT 个时间槽期间的整体计算复杂度为 O ( N T ( N i t ⋅ N G U ⋅ N c + n v ⋅ K + k ⋅ N p ⋅ log ⁡ ( N p ) ) ) O(N_T (N_{it} \cdot N_{GU} \cdot N_c + n_v \cdot K + k \cdot N_p \cdot \log(N_p))) O(NT(NitNGUNc+nvK+kNplog(Np)))

这个伪代码描述的是“ImMOGWO算法”,其由以下几个部分组成:

  1. 输入(第1行):输入参数是时间槽的数量 N T N_T NT
  2. 时间槽循环(第2-10行)
    • 对于每个时间槽 t t t 1 ≤ t ≤ N T 1 \leq t \leq N_T 1tNT),执行以下步骤(第2行)。
    • 每个地面用户(GU)随机改变其位置(第3行)。
    • 利用算法1获得当前时间槽的群集分布 χ [ t ] \chi[t] χ[t](第4行)。
    • 基于群集分布,通过算法2初始化无人机(UAV)的数量、位置和速度(第5行)。
    • 接着执行算法3进行优化处理(第6行)。
    • 如果 t ≥ 1 t \geq 1 t1且当前时间槽的群集分布与前一时间槽相同( χ [ t ] = χ [ t − 1 ] \chi[t] = \chi[t-1] χ[t]=χ[t1]),则中断循环(第7-9行)。
  3. 输出(第11行):输出结果是在良好覆盖和高能效要求下的无人机部署方案。
    总结来说,ImMOGWO算法通过在不同时间槽内调整无人机的数量、位置和速度,以响应地面用户的位置变化,从而达到优化无人机部署的目的,关注于覆盖范围的最大化和能源效率的提高。

A. 动机

多目标优化与单目标优化不同,在多目标优化问题(MOP)中比较解决方案较为困难,因为多目标空间具有多重目标比较度量。MOGWO算法通过狼的狩猎规则接近目标[44]。每只灰狼的位置代表解空间中的一个可行解。在群体中,三只灰狼占据最佳位置,分别命名为α、β、δ。其余非领导狼统一命名为ω。在狩猎过程中,这三只狼将带领其余狼移动并捕捉猎物,直到找到猎物(最优解)。
提出了ImMOGWO算法以解决上述缺点,其中RD算法旨在克服随机初始化引起的算法低效问题。由于混合解被求解,HSI用于初始化混合解。然后,我们使用基于MOGWO算法的LSC方法增加解决方案的多样性并提高算法效率。
加权切比雪夫方法[45]可以提供一个最优帕累托点。然而,使用均匀加权切比雪夫方法获得的解通常不是均匀分布的。为解决这个问题,改进的加权切比雪夫方法增加了参数ρ。但是,参数ρ难以设置。一个值可能会导致计算困难,而较大的值可能会导致一些非支配点被忽视。此外,我们的优化问题中考虑了混合物理因素,如用户移动性、无人机的数量、位置和速度,它们相互影响。每个个体包含所有无人机的信息,这是一个多维变量。

B. 地面用户(GUs)角色确定算法

鉴于地面用户(GUs)可以随机移动且分布不均,使用无人机(UAV)的随机初始位置初始化是非常低效的。为了防止无人机随机初始化导致的算法效率低下,我们设计了用于无人机位置初始化的角色确定(RD)算法。然后,对于一些传统的聚类算法,例如K-means算法[46],需要预先给定簇的数量。此外,聚类结果严重受到初始聚类中心选择的影响[47]。**为了弥补传统聚类算法的不足,RD算法旨在将地面用户划分为几个簇,并根据簇内用户的 数量和距离 预测无人机的数量和位置。**在每个时间段内,地面用户被视为静止的,使用RD算法确定每个时间段的簇分布。当地面用户的位置随着时间段的变化而变化时,RD算法将再次运行。

每个基站用户(GU)可以决定其角色,即作为簇中心或非簇中心。簇分布表示为 χ = { χ 1 , χ 2 , . . . , χ N } \chi = \{\chi_1, \chi_2, ..., \chi_N\} χ={χ1,χ2,...,χN} ,其中 χ i ∈ { 0 , 1 } \chi_i \in \{0,1\} χi{0,1} 。当 χ i = 0 \chi_i = 0 χi=0时,表示第 i i i 个 GU 作为簇中心。当 χ i = 1 \chi_i = 1 χi=1 时,表示第 i i i 个 GU 是非簇中心。对于给定的簇分布 χ \chi χ ,适应度函数 F i t ( χ ) Fit(\chi) Fit(χ) 被定义为反映簇内个体的身份以及不同簇之间的差异,其表达方式为:

其中 N ( χ ) N(\chi) N(χ) 是簇的数量。 R χ ( i ) R_\chi(i) Rχ(i) 表示最小的组间距离与组内距离的比率,用于评估配置 χ \chi χ 的聚类效果,其定义为。这里 R χ ( i ) = min ⁡ j ≠ i m i j e i + e j . e j \begin{aligned}R_\chi(i)=\min_{j\neq i}\frac{m_{ij}}{e_i+e_j}.e_j\end{aligned} Rχ(i)=j=iminei+ejmij.ej e j e_j ej 是第 j j j 个簇中基站用户(GU)与该簇中心之间的平均距离, e i e_i ei 是第 i i i 个簇中的 GU 与其簇中心之间的平均距离。 m i j m_{ij} mij 则是第 i i i 个簇和第 j j j 个簇的中心之间的距离。

其中 B 是一个正常数。为了获得最优的簇分布,必须最大化适应度函数 F i t ( χ ) Fit(\chi) Fit(χ)。设X代表所有可行的 χ \chi χ 的集合,即:

所提出的RD算法在每个时间槽的过程如算法1所示。

每个GU都会随机地初始化其角色,无论是否充当聚类中心。此时, G U n GU_n GUn 将广播其包括角色和位置信息在内的信息,并接收其他GU的信息。当所有 GU 都接收到其他 GU 的信息后,每个GU将根据欧几里得距离加入最近的聚类。这时将获得聚类分布 χ \chi χ 。同时,每个 GU 计算 R χ ( i ) ( i = 1 , 2 , . . . , N ( χ ) ) R_{\chi}(i)(i=1,2,...,N(\chi)) Rχ(i)(i=1,2,...,N(χ)) F i t ( χ ) Fit(\chi) Fit(χ) 。然后,每个 GU 生成一个遵循指数分布的随机数,该分布的平均值为正。**GU将基于生成的随机数进行衰减。**在衰减至零后,GU将根据概率 p χ ^ χ p_{\hat{\chi}\chi} pχ^χ 改变当前角色。也就是说,**GU的角色将从非聚类中心变为聚类中心,或从聚类中心变为非聚类中心。**GU将根据概率 1 − p χ ^ χ 1-p_{\hat{\chi}\chi} 1pχ^χ保持当前角色。如果GU没有改变其角色,它将再次生成一个遵循指数分布的随机数并进行衰减。

如果GU改变了当前的角色状态,它将向其他用户广播新角色,并生成一个新的随机数以重新启动衰减过程。当其他GU接收到新角色时,它们可能会退出当前聚类并加入一个新的聚类。这时将获得新的聚类分布 χ ^ \hat{\chi} χ^。再次计算 R χ ^ ( i ) ( i = 1 , 2 , . . . , N ( χ ^ ) ) R_{\hat{\chi}}(i)(i=1,2,...,N(\hat{\chi})) Rχ^(i)(i=1,2,...,N(χ^))。然后,每个GU继续其衰减过程。在GU的衰减过程结束时,将基于聚类分布 χ ^ \hat{\chi} χ^重新计算改变角色的概率。迭代结束直到适应度函数 F i t m Fit_m Fitm​收敛,可以获得聚类分布的结果。RD算法通过将GU分组到聚类中,为混合解初始化算法(HSI)做准备,以提高算法的收敛效果。

  1. 主循环(第2-12行):
    • 这个模块是算法的核心,包括所有主要的处理步骤。
      • 角色选择与信息广播(第3行):每个GU(群体单元)随机选择其角色并广播其信息。
      • 集群分布获取(第4行):在接收到其他GUs的角色后,GU n n n 可以得到当前的集群分布 χ \chi χ
      • 角色评估与适应度计算(第5行):GU n n n 计算 R χ ( i ) R_{\chi}(i) Rχ(i)(对于 i = 1 , 2 , . . . , N ( χ ) i = 1,2,...,N(\chi) i=1,2,...,N(χ))和 Fit ( χ ) \text{Fit}(\chi) Fit(χ),即集群的适应度。
      • 计时器生成与倒计时(第6行):GU n n n 生成一个遵循指数分布的计时器,并开始倒计时。
      • 角色变更决策(第7行):计时器到期后,GU n n n 根据概率 p χ χ ^ p_{\chi \hat{\chi}} pχχ^ 改变其角色或以 1 − p χ χ ^ 1 - p_{\chi \hat{\chi}} 1pχχ^ 的概率保持其角色。
      • 角色更新与新集群配置(第8行):如果GU n n n 改变了其角色,它将广播新角色并获取新的集群配置 χ ^ \hat{\chi} χ^
      • 新配置下的适应度计算(第9行):其他GUs在新的集群配置 χ ^ \hat{\chi} χ^ 下计算 Fit ( χ ^ ) \text{Fit}(\hat{\chi}) Fit(χ^)
      • 新计时器生成与重复过程(第10-11行):GU n n n 生成一个新的计时器并重复步骤7-10。
  2. 输出结果(第13行):
    • 这个模块负责输出最终的集群配置 χ \chi χ,集群数量 N cluster = N ( χ ) N_{\text{cluster}} = N(\chi) Ncluster=N(χ),每个集群中GU的数量 C j , num C_{j,\text{num}} Cj,num,以及每个集群中心的位置 po cc → \overrightarrow{\text{po}_{\text{cc}}} pocc
      每个模块都是算法的一个关键部分,共同协作以实现角色决策(RD)算法的目标。

C. 无人机的能源高效部署

为了增强传统的多目标灰狼优化( MOGWO )算法的性能并克服其面临的挑战,提出了==混合解初始化算法( HSI )==以初始化所有变量,从而改善算法的收敛效果。此外,为了避免局部最优并加速收敛, LSC 方法被应用于局部搜索聚类多目标遗传算法( LSCMGA ),该算法可以在每个时间槽中运行。

  1. 解决方案初始化:为此,我们提出了混合解初始化算法( HSI ),以初始化决策变量,加快收敛速度并提高个体初始化的多样性。在该算法中,所需无人机( UAV )的数量和每架无人机的位置被纳入我们的决策变量。当簇的数量过大时,每个簇对应一架无人机显然是不现实的。因此,我们提出==在一定概率下,一个簇由一架无人机相对应地覆盖。我们将无人机的状态定义为 U N cluster × 1 = [ U 1 , U 2 , . . . , U N cluster ] UN_{\text{cluster}} \times 1 = [U_1, U_2, ..., U_{N_{\text{cluster}}}] UNcluster×1=[U1,U2,...,UNcluster] ,且 U j ∈ { 0 , 1 } U_j \in \{0,1\} Uj{0,1} 。当 U j = 1 U_j = 1 Uj=1 时,表示第 j j j 架无人机需要覆盖第 j j j 个簇;否则,第 j j j 架无人机将不被考虑。这里我们定义第 j j j 个簇的重要性为。它与簇中用户 ϖ c c j , j ∈ { 1 , 2 , . . , N c l u s t e r } \begin{aligned}\varpi_{cc}^j,j\in\{1,2,..,N_{cluster}\}\end{aligned} ϖccj,j{1,2,..,Ncluster} 的数量成正比,可以表示为 ϖ c c j ∝ C j , n u m \varpi_{cc}^j\propto C_{j,num} ϖccjCj,num 。这意味着簇中 GU(基站用户)越多,该簇的重要性就越高==。然后,第 j j j 个候选无人机对应第 j j j 个簇的需求概率由簇的重要性和簇之间的距离决定,表达为:

其中, r j m i n = min ⁡ j ≠ i r i , j \begin{aligned}r_j^{min}&=\min_{j\neq i}r_{i,j}\end{aligned} rjmin=j=iminri,j 表示第 j j j 个簇与其他簇之间的最小距离。==簇的重要性越大且最小距离越长,相应的无人机被需要的概率就越高。==根据方程式(18),我们可以得到 [ U 1 , U 2 , . . . , U N cluster ] [U_1, U_2, ..., U_{N_{\text{cluster}}}] [U1,U2,...,UNcluster] 。因此,无人机的数量初始化为 K = ∑ i U i K = \sum_i U_i K=iUi
接着,每架所需无人机的位置通过相应簇中心位置进行初始化。我们使用正态分布来计算无人机在不同区域降落的概率。

HSI算法的过程展示在算法2中。

  1. 初始化输入(第1行):
  2. 集群与无人机需求计算(第2-4行):
    • 根据算法第一步的输出,这个模块计算每个无人机被需要的概率(步骤3),以及实际所需无人机的数量(步骤4)。
  3. 无人机位置与安全距离检查(第5-12行):
    • 在这个模块中,每个所需的无人机根据一定概率找到其在对应集群中的初始水平位置(步骤6)。
  4. 能量方程与初始速度计算(第13行)
  5. 解决方案检查与循环(第15-17行):
    • 如果当前解决方案集为空,则返回步骤3重新计算。
  6. 输出结果(第18行):
    • 最终输出所有初始解决方案的集合 W ⃗ = [ K , X , Y , H , V ] \vec{W} = [K,X,Y,H,V] W =[K,X,Y,H,V],其中包括每个无人机的编号、位置和速度。

**最优解被视为α狼。β狼和δ狼分别是第二和第三优的解决方案。其余非领导狼均被统称为ω狼。**在我们提出的LSCMGA算法中,在根据适应度函数值选出前三个最优解后,我们采用了SCA的思想来接近猎物,以避免陷入局部优化。其公式如下:

其中 i = { 1 , 2 , 3 } i = \{1,2,3\} i={1,2,3} j = { α , β , δ } j = \{\alpha, \beta, \delta\} j={α,β,δ} r ⃗ i 1 \vec{r}_{i1} r i1决定了解决方案在当前解决方案与目的地之间空间中的下一个位置。 r ⃗ i 2 ∈ [ 0 , 2 π ] \vec{r}_{i2} \in [0,2\pi] r i2[0,2π],定义了向目的地移动或远离目的地的距离。 r ⃗ i 3 \vec{r}_{i3} r i3赋予目的地随机权重,以便在定义距离时随机加强( r ⃗ i 3 > 1 \vec{r}_{i3} > 1 r i3>1)或削弱( r ⃗ i 3 < 1 \vec{r}_{i3} < 1 r i3<1)目的地的影响。最后,参数 r ⃗ i 4 \vec{r}_{i4} r i4是[0,1]之间的随机数,控制正弦和余弦分量的选择。然后,对于每个搜索代理的位置更新,我们应用Levy飞行策略使狼群接近这三位领导者,即:

其中 W k → ( ℓ + 1 ) \overrightarrow{W_k}(\ell+1) Wk (+1) 是第 k k k 个 ω 狼在第 ( ℓ + 1 ) (\ell+1) (+1) 次迭代中的位置, r 5 r_5 r5 是 [0,1] 范围内的随机值。 a a a 是步长缩放因子。 ⊕ \oplus 表示元素间的乘法。 L e υ y ( β ^ ) Le\upsilon y(\hat{\beta}) Leυy(β^) 是服从 Levy 分布的随机步长,通过 L e v y ( β ^ ) = u ∣ v ∣ 1 β ^ \begin{aligned}\boldsymbol{Levy}(\hat{\beta})&=\frac u{|v|^{\frac1{\hat{\beta}}}}\end{aligned} Levy(β^)=vβ^1u 计算得出。 u ∼ N ( 0 , σ u 2 ) u \sim N(0,\sigma_u^2) uN(0,σu2) v ∼ N ( 0 , σ v 2 ) v \sim N(0,\sigma_v^2) vN(0,σv2),其中 σ v 2 = ( Γ ( 1 + β ^ ) s i n ( π β ^ 2 ) Γ ( 1 + β ^ 2 ) β ^ ⋅ 2 β ^ − 1 2 ) 1 β ^ , \begin{aligned}\sigma_v^2~=~(\frac{\Gamma(1+\hat{\beta})sin(\frac{\pi\hat{\beta}}{2})}{\Gamma(\frac{1+\hat{\beta}}{2})\hat{\beta}\cdot2^{\frac{\hat{\beta}-1}{2}}})^{\frac{1}{\hat{\beta}}},\end{aligned} σv2 = (Γ(21+β^)β^22β^1Γ(1+β^)sin(2πβ^))β^1, σ u 2 = 1 \sigma_u^2 = 1 σu2=1 β ^ ∈ ( 0 , 2 ] \hat{\beta} \in (0,2] β^(0,2] .

获得的非支配解将被存储在存档中。值得注意的是,存档的容量是有限的,且容量大小是一个固定值。在迭代过程中,获得的新的非支配解将与存档中的解进行比较以更新存档。如果存档中没有空间,且新解支配了存档中的一个或多个解,则我们将启动网格机制,删除当前存档中的一个或多个解,以腾出空间存储新解。网格机制用于根据解的价值密度将目标空间划分为几个段。然后,我们将优先考虑最集中的段落,并从该段中提取并删除解决方案,以提供存储新解的空间。如果存档中有空间存储新解决方案,只有当新解决方案支配存档中的一个或多个解时,新解决方案才能成为存档的成员。还有一种特殊情况是新添加的解决方案位于所有段之外。那么,网格将被更新以包含新解决方案。

我们还需要通过比较解决方案来选择最佳领导者。为了避免在多目标搜索空间中选择与三位领导者相同的解决方案,我们使用领导者选择机制来寻找三个不同的领导者。如前所述,我们已经有一个存档,里面存放了到目前为止获得的非支配解。在网格机制将目标空间划分为几个段落后,领导者选择机制将采用轮盘赌方法,在最不集中的段落中选择一个解作为三位领导者之一,该段落具有最分散的函数值。如果最不集中的段落中的解决方案少于三个,则会寻找次不集中的段落来选择其他领导者,直到找到三个不同的领导者。因此,领导者选择机制防止了算法为α、β或δ狼选择相似领导者来更新 ω 狼的位置。
所提出的 LSCMGA 的伪代码显示在算法3中。

  1. 初始化(第1行):
    • 使用算法2初始化灰狼群体 X i ( i = 1 , 2 , . . . , n ) X_i (i = 1,2,...,n) Xi(i=1,2,...,n) 和计数器 τ = 1 \tau = 1 τ=1。这是算法开始的基础步骤,确保了每个灰狼的初始位置都是根据混合解决方案初始化算法设定的。
  2. 计算每个灰狼的目标值与非支配解初始化再存档(第2-3行)
  3. 领导者选择与位置记录(第4行):
    • 通过领导力选择机制从存档中找到领导者 α \alpha α β \beta β δ \delta δ 狼,并记录其位置 X α , X β , X δ X_\alpha, X_\beta, X_\delta Xα,Xβ,Xδ。这一步是为了后续的位置更新提供参考。
  4. 主循环(第5-20行):
    • 这是算法的核心部分,包括位置更新、参数更新、目标值计算、存档更新等步骤。
      • 位置更新(第6-8行):根据三位领导者的位置,更新当前搜索代理的位置,依据公式(23)-(24)。
      • 参数更新(第9行):更新算法中的参数,如 r i 1 , r i 2 , r i 3 , r i 4 , i = { 1 , 2 , 3 } , r 5 , a , β ^ r_{i1}, r_{i2}, r_{i3}, r_{i4}, i = \{1,2,3\}, r_5, a, \hat{\beta} ri1,ri2,ri3,ri4,i={1,2,3},r5,a,β^
      • 目标值计算与非支配解更新(第10-11行):为每个搜索代理计算目标值并找出非支配解,更新存档以反映获得的非支配解。
      • 存档管理(第12-17行)
  5. 迭代与存档返回(第19-21行):
    • 更新迭代计数器 τ \tau τ 并检查是否达到迭代次数 N iter N_{\text{iter}} Niter 的条件。如果没有,重复主循环。最终,返回存档作为算法的输出,存档包含了算法寻找到的最优解集。
      这个算法通过精心设计的循环和更新机制,确保了灰狼优化算法能够有效地搜索解空间,并通过存档机制保留最优的非支配解。

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

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

相关文章

第十三届蓝桥杯嵌入式省赛程序设计详细题解

第十三届蓝桥杯嵌入式省赛题目相对于第十二届较为简单&#xff0c;没有那么多串口的数据处理以及判断&#xff01; 第十三届省赛主要是制作一个可由串口设置密码的密码锁。本实验中&#xff0c;我们将用到LED模块、按键模块、串口模块、定时器的PWM模块以及官方会提供源码的LC…

【HTML】HTML基础7.3(自定义列表)

目录 标签 效果 代码 注意 标签 <dl> <dt>自定义标题</dt><dd>内容1</dd><dd>内容2</dd><dd>内容3</dd> 。。。。。。 </dl> 效果 代码 <dl><dt>蜘蛛侠系列</dt><dd>蜘蛛侠1</dd…

LSTM实战:基于PyTorch的新冠疫情确诊人数预测

目录 引言 一、探索数据集 1、导入相关库文件 2、导入每日确诊人数数据集 3、清洗每日确诊人数数据集 4、每日累计确诊的人数及其数据集可视化 5、每日撤消累计后的确诊人数及其数据集可视化 6、查看总共有多少数据量 二、数据预处理 1、训练和测试数据集 2、数据放…

STM32用标准库做定时器定时1秒更新OLED的计数值(Proteus仿真)

首先新建proteus工程&#xff0c;绘制电路图&#xff1a; 然后赋值我之前文章中提到的文件夹OLED屏幕显示&#xff1a;&#xff08;没有的自己去那篇文章下载去&#xff09; 然后进入文件夹&#xff1a; 新建两个文件在Mycode文件夹中&#xff1a; 文件关系如下&#xff1a; 新…

CogCaliperTool卡尺工具

CogCaliperTool(卡尺工具) CogCaliperTool&#xff08;卡尺工具&#xff09;是一种用于测量直线特征的工具。该工具通常用于检测图像中的边缘、轮廓或其他直线特征&#xff0c;并提供精确的测量数据&#xff0c;如长度、角度和位置信息。 比如说我们需要测量下图工具的边缘对…

【深度学习笔记】计算机视觉——FCN(全卷积网络

全卷积网络 sec_fcn 如 :numref:sec_semantic_segmentation中所介绍的那样&#xff0c;语义分割是对图像中的每个像素分类。 全卷积网络&#xff08;fully convolutional network&#xff0c;FCN&#xff09;采用卷积神经网络实现了从图像像素到像素类别的变换 :cite:Long.Sh…

校招中的“熟悉linux操作系统”一般是指达到什么程度?

校招中的“熟悉linux操作系统”一般是指达到什么程度&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&am…

归并排序总结

1.归并排序 归并排序的步骤如下&#xff1a; ①枚举中点&#xff0c;将区间分为左右两段&#xff1b; ②对左右两段区间分别排序&#xff1b; 这个过程以递归的方式进行。 ③合并两段区间。 是一个模拟的过程。用两个指针分别指向左右区间&#xff0c;判断当前哪个数小&…

基于机器学习的垃圾分类

1绪论 1.1问题背景 垃圾分类有减少环境污染、节省土地资源、再生资源的利用、提高民众价值观念等的好处&#xff0c;在倡导绿色生活&#xff0c;注重环境保护的今天&#xff0c;正确的垃圾分类和处理对我们的生态环境显得尤为重要。 在国外很多国家&#xff0c;经过了几十年…

VTK的编译和部署,配合c++和visual studio2022,VTK开发环境的配置

1.下载 在官网选择最新的版本 Download | VTK 下载之后进行解压&#xff0c;然后再里面创建build目录&#xff0c;方便后面使用cmake进行编译 2.对源码进行编译 打卡Cmake&#xff0c;如图操作 可以看到点击configure之后&#xff0c;cmake对我们的代码在进行处理 处理完成之…

基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(二)

学习后端CRUD操作 书接上文&#xff0c;我们学习了前后端分离项目的基础环境配置和用户管理模块的前后端基础搭建&#xff0c;以下链接是上一节教程内容详细步骤&#xff0c;友友们可以跟着步骤实操。本节课程我们在前面项目的基础上接着学习后端CRUD操作&#xff0c;真正打通数…

阿里云一键登录(号码认证服务)

前言 用户登录原来的登录方式如下 1. 手机号验证码 2. 账号密码 运营觉得操作过于复杂, 因此想引入阿里自动登录的逻辑, 也就是号码认证服务,所以才有了这篇问文章 注: 本文只是记录Java端的实现, app端的请自行查询文档实现 官方资料 文档 : 什么是号码认证服务_号码认证服务(…

SpringBoot中集成LiteFlow(轻量、快速、稳定可编排的组件式规则引擎)实现复杂业务解耦、动态编排、高可扩展

场景 在业务开发中&#xff0c;经常遇到一些串行或者并行的业务流程问题&#xff0c;而业务之间不必存在相关性。 使用策略和模板模式的结合可以解决这个问题&#xff0c;但是使用编码的方式会使得文件太多, 在业务的部分环节可以这样操作&#xff0c;在项目角度就无法一眼洞…

【洛谷 P9240】[蓝桥杯 2023 省 B] 冶炼金属 题解(二分答案)

[蓝桥杯 2023 省 B] 冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V V V&#xff0c; V V V 是一个正整数&#xff0c;这意味着消耗 V V V 个普通金属 O 恰好可以冶炼出一个特殊金属 X&#xff0c;当普…

产业园区如何实现数字化运营管理?

​在数字化浪潮席卷全球的今天&#xff0c;产业园区正经历着前所未有的变革&#xff0c;数字化运营管理成为各个园区转型升级的发力方向&#xff0c;它不仅能够提升园区的运营管理效率&#xff0c;还能够帮助园区提高服务效能、实现精准招商、增强决策效率&#xff0c;从而全面…

Redis实战—商户查询缓存

本博客为个人学习笔记&#xff0c;学习网站&#xff1a;黑马程序员Redis入门到实战 实战篇之商户查询缓存 目录 什么是缓存 添加Redis缓存 缓存更新策略 数据库缓存不一致解决方案 案例&#xff1a;给查询商铺的缓存添加超时剔除和主动更新策略 缓存穿透 案例&#xff1…

奇富科技:大数据任务从诊断到自愈的实践之路

一、为什么要做诊断引擎 毓数平台是奇富科技公司自主研发的一站式大数据管理、开发、分析平台&#xff0c;覆盖大数据资产管理、数据开发及任务调度、自助分析及可视化、统一指标管理等多个数据生命周期流程&#xff0c;让用户使用数据的同时&#xff0c;挖掘数据最大的价值。…

打造高效、安全的交易平台:开发流程与关键要素解析

在数字化时代&#xff0c;大宗商品交易平台开发/搭建已成为连接买家与卖家的桥梁&#xff0c;为无数企业和个人提供了便捷、高效的交易机会。然而&#xff0c;随着市场的竞争日益激烈&#xff0c;如何打造一个既符合用户需求又具备竞争力的交易平台&#xff0c;成为了众多开发者…

文件上传{session文件包含以及条件竞争、图片文件渲染绕过(gif、png、jpg)}

session文件包含以及条件竞争 条件&#xff1a; 知道session文件存储在哪里 一般的默认位置&#xff1a; /var/lib/php/sess_PHPSESSID /var/lib/php/sessions/sess_PHPSESSID /tmp/sess_PHPSESSID /tmp/sessions/sess_PHPSESSID ####在没做过设置的情况下一般都是存储在/var…

解决WordPress更新插件或者更新版本报WordPress 需要访问您网页服务器的权限的问题

文章目录 前言一、原因二、解决步骤总结 前言 当对WordPress的插件或者版本进行更新时报错&#xff1a;要执行请求的操作&#xff0c;WordPress 需要访问您网页服务器的权限。 请输入您的 FTP 登录凭据以继续。 如果您忘记了您的登录凭据&#xff08;如用户名、密码&#xff09…