中科院1区顶刊Expert Systems with Applications ESO:增强型蛇形算法,性能不错
Snake Optimizer(SO)是一种优化效果良好的新颖算法,但由于自然规律的限制,在探索和开发阶段参数更多是固定值,因此SO算法很快陷入局部优化并慢慢收敛。本文通过引入新颖的基于对立的学习策略和新的动态更新机制(参数动态更新策略、正弦余弦复合扰动因子、帐篷混沌&柯西突变)提出了一种增强型Snake Optimizer(ESO)以实现更好的性能。于2023年发表在中科院1区顶刊Expert Systems with Applications上,
2. 蛇优化器
Snake Optimizer (SO) 是一种受蛇类交配行为启发的优化算法,通过模拟蛇类的交配行为并构建相应的模型来解决优化问题。蛇类的交配过程主要受温度和食物数量的限制。当温度低且食物充足时,蛇可以交配。因此,在SO中,当食物不足时,蛇的主要任务是寻找食物,这被认为是优化算法的探索阶段。当食物充足时,它是优化算法的探索阶段。探索阶段分为两种情况。当温度高时,蛇不能交配,必须等待配偶的到来。当温度低时,蛇进入交配阶段。由于可能存在比雌性更多的雄性,交配阶段具有战斗模式和交配模式。雄性与雌性竞争以获得交配权。当交配行为完成时,雌性产卵并孵化成新蛇,从而完成种群更新。
每种优化方法都必须有一个初始种群。SO的初始种群由随机均匀分布生成,生成规则如下公式(1)所示:
S i = S min + rand i × ( S max − S min ) S_i = S_{\text{min}} + \text{rand}_i \times (S_{\text{max}} - S_{\text{min}}) Si=Smin+randi×(Smax−Smin)
其中, S i S_i Si表示第 i i i次迭代时种群个体的位置, rand d \text{rand}_d randd表示第 i i i次迭代时的随机值,介于(0, 1)之间, S max S_{\text{max}} Smax和 S min S_{\text{min}} Smin表示种群的最大和最小边界。
在获得初始种群后,根据性别分布开始计算雌性和雄性个体的数量。通常,雄性和雌性的数量相等。因此,雌性和雄性个体的数量可以通过公式(2)计算:
N m = N f = N all 2 N_m = N_f = \frac{N_{\text{all}}}{2} Nm=Nf=2Nall
其中 N all N_{\text{all}} Nall是总种群大小, N m N_m Nm和 N f N_f Nf分别表示雄性和雌性蛇的数量。
在SO中,温度和食物数量是影响蛇行为的两个关键因素,可以通过公式(3)和公式(4)定义:
Temp = e − t / T \text{Temp} = e^{-t/T} Temp=e−t/T
F Q = c 1 × e ( t − T ) / T FQ = c_1 \times e^{(t-T)/T} FQ=c1×e(t−T)/T
其中 t t t表示当前迭代次数, T T T表示总迭代次数, c 1 c_1 c1是一个固定常数0.5。
在探索阶段,当 F Q < 0.25 FQ < 0.25 FQ<0.25时,蛇随机寻找食物并更新位置。因此,公式(5)和公式(6)可以模拟探索阶段:
S i m ( t + 1 ) = S i m ( t ) ⊕ c 2 × e − f rand m / f i m × S i = { ( S i m ( t ) + c 2 × e − f rand m / f i m × S i ) ( S i m ( t ) − c 2 × e − f rand m / f i m × S i ) S_i^m(t + 1) = S_i^m(t) \oplus c_2 \times e^{-f_{\text{rand}}^m/f_i^m} \times S_i = \left\{ \begin{array}{ll} (S_i^m(t) + c_2 \times e^{-f_{\text{rand}}^m/f_i^m} \times S_i) \\ (S_i^m(t) - c_2 \times e^{-f_{\text{rand}}^m/f_i^m} \times S_i) \end{array} \right. Sim(t+1)=Sim(t)⊕c2×e−frandm/fim×Si={(Sim(t)+c2×e−frandm/fim×Si)(Sim(t)−c2×e−frandm/fim×Si)
S i f ( t + 1 ) = S i f ( t ) ⊕ c 2 × e − f rand f / f i f × S i = { ( S i f ( t ) + c 2 × e − f rand f / f i f × S i ) ( S i f ( t ) − c 2 × e − f rand f / f i f × S i ) S_i^f(t + 1) = S_i^f(t) \oplus c_2 \times e^{-f_{\text{rand}}^f/f_i^f} \times S_i = \left\{ \begin{array}{ll} (S_i^f(t) + c_2 \times e^{-f_{\text{rand}}^f/f_i^f} \times S_i) \\ (S_i^f(t) - c_2 \times e^{-f_{\text{rand}}^f/f_i^f} \times S_i) \end{array} \right. Sif(t+1)=Sif(t)⊕c2×e−frandf/fif×Si={(Sif(t)+c2×e−frandf/fif×Si)(Sif(t)−c2×e−frandf/fif×Si)
其中 S i m S_i^m Sim表示第 i i i次迭代时雄性蛇的位置, S i f S_i^f Sif表示第 i i i次迭代时雌性蛇的位置, f rand m f_{\text{rand}}^m frandm是第 i i i次迭代时雄性蛇的适应度, f i m f_i^m fim是第 i i i次迭代时雄性蛇的适应度, S i f S_i^f Sif表示第 i i i次迭代时雌性蛇的位置, f rand f f_{\text{rand}}^f frandf是第 i i i次迭代时雌性蛇的适应度, f i f f_i^f fif是第 i i i次迭代时雌性蛇的适应度, c 2 c_2 c2是一个固定常数0.05, ⊕ \oplus ⊕表示求和方向操作符。
在探索阶段,当 F Q > 0.25 FQ > 0.25 FQ>0.25且 Temp > 0.6 \text{Temp} > 0.6 Temp>0.6时,蛇只吃食物而不进行交配。该过程可以用公式(7)表示:
S i m ( t + 1 ) = { S food + c 3 × Temp × rand i × ( S food − S i m ( t ) ) S food − c 3 × Temp × rand i × ( S food − S i m ( t ) ) S_i^m(t + 1) = \left\{ \begin{array}{ll} S_{\text{food}} + c_3 \times \text{Temp} \times \text{rand}_i \times (S_{\text{food}} - S_i^m(t)) & \\ S_{\text{food}} - c_3 \times \text{Temp} \times \text{rand}_i \times (S_{\text{food}} - S_i^m(t)) \end{array} \right. Sim(t+1)={Sfood+c3×Temp×randi×(Sfood−Sim(t))Sfood−c3×Temp×randi×(Sfood−Sim(t))
其中 S i m , f S_i^{m,f} Sim,f是雄性或雌性个体的位置, S food S_{\text{food}} Sfood是最优个体的位置, c 3 c_3 c3是一个固定常数2。
当 F Q > 0.25 FQ > 0.25 FQ>0.25且 Temp ≤ 0.6 \text{Temp} \leq 0.6 Temp≤0.6时,蛇进入交配阶段,因为雄性和雌性个体都想与具有更高适应度的个体交配,因此雄性和雌性个体之间存在竞争。胜利者可以选择交配伙伴,因此交配模式由公式(8)和公式(9)表示:
S i m ( t + 1 ) = S i m ( t ) + c 3 × e − f best m / f i × rand i × ( F Q × S best m − S i m ( t ) ) S_i^m(t + 1) = S_i^m(t) + c_3 \times e^{-f_{\text{best}}^m/f_i} \times \text{rand}_i \times (FQ \times S_{\text{best}}^m - S_i^m(t)) Sim(t+1)=Sim(t)+c3×e−fbestm/fi×randi×(FQ×Sbestm−Sim(t))
S i f ( t + 1 ) = S i f ( t ) + c 3 × e − f best f / f i × rand i × ( F Q × S best f − S i f ( t ) ) S_i^f(t + 1) = S_i^f(t) + c_3 \times e^{-f_{\text{best}}^f/f_i} \times \text{rand}_i \times (FQ \times S_{\text{best}}^f - S_i^f(t)) Sif(t+1)=Sif(t)+c3×e−fbestf/fi×randi×(FQ×Sbestf−Sif(t))
其中 S i m S_i^m Sim表示第 i i i次迭代时雄性蛇的位置, S i f S_i^f Sif表示第 i i i次迭代时雌性蛇的位置, S best m S_{\text{best}}^m Sbestm表示雄性蛇中最优个体的位置, S best f S_{\text{best}}^f Sbestf表示雌性蛇中最优个体的位置, f best m f_{\text{best}}^m fbestm是雄性蛇中最优个体的适应度, f best f f_{\text{best}}^f fbestf是雌性蛇中最优个体的适应度, f i f_i fi是个体的适应度。
交配模式由公式(10)和公式(11)表示:
S i m ( t + 1 ) = S i m ( t ) + c 3 × e − m i f / f i m × rand i × ( F Q × S i f ( t ) − S i m ( t ) ) (10) S_i^m(t + 1) = S_i^m(t) + c_3 \times e^{-m_i^f/f_i^m} \times \text{rand}_i \times \left( FQ \times S_i^f(t) - S_i^m(t) \right) \tag{10} Sim(t+1)=Sim(t)+c3×e−mif/fim×randi×(FQ×Sif(t)−Sim(t))(10)
S i f ( t + 1 ) = S i f ( t ) + c 3 × e − m i m / f i f × rand i × ( F Q × S i m ( t ) − S i f ( t ) ) (11) S_i^f(t + 1) = S_i^f(t) + c_3 \times e^{-m_i^m/f_i^f} \times \text{rand}_i \times \left( FQ \times S_i^m(t) - S_i^f(t) \right) \tag{11} Sif(t+1)=Sif(t)+c3×e−mim/fif×randi×(FQ×Sim(t)−Sif(t))(11)
其中 S i m S_i^m Sim是雄性蛇中第 i i i个个体的位置, S i f S_i^f Sif是雌性蛇中第 i i i个个体的位置, m i m m_i^m mim表示交配模式中第 i i i个雄性个体的适应度, m i f m_i^f mif表示交配模式中第 i i i个雌性个体的适应度。
完成交配行为后,雌性蛇将产卵并孵化新蛇以获得新种群,dep^3表示替换原始种群中最差的雄性/雌性个体并替换为新蛇。替换过程由公式(12)和公式(13)表示:
rand i × ( S max − S min ) \text{rand}_i \times (S_{\text{max}} - S_{\text{min}}) randi×(Smax−Smin)
rand i × ( S max − S min ) \text{rand}_i \times (S_{\text{max}} - S_{\text{min}}) randi×(Smax−Smin)
其中 S worst m S_{\text{worst}}^m Sworstm表示雄性中最差的个体, S worst f S_{\text{worst}}^f Sworstf表示雌性中最差的个体。
3. 提出的ESO
作为一种启发式算法,SO算法在解决优化问题方面取得了良好的效果,但由于其新颖的模仿思想,生物行为的局限性使其仍然存在快速陷入局部最优和精度不足的缺点。本节提出了ESO算法,基于SO的不足提出了四种增强策略。
3.1 新颖的动态更新机制
在SO算法中,食物数量对于决定算法处于探索阶段还是开发阶段至关重要。在公式(4)中, c 1 c_1 c1的值被设置为固定常数0.5,这使得算法在探索阶段缺乏随机游走的能力,因此本文在原始基础上添加了扰动因子,以实现 c 1 c_1 c1的新动态更新。新的 c 1 n e w c_1^{new} c1new根据公式(14)计算:
c 1 n e w = c 1 + 1 10 × cos ( r 1 d × π 2 ) (14) c_1^{new} = c_1 + \frac{1}{10} \times \cos(r_1^d \times \frac{\pi}{2}) \tag{14} c1new=c1+101×cos(r1d×2π)(14)
其中 r 1 r_1 r1是介于(0, 1)之间的随机数。
在探索阶段,位置更新通过公式(5)和公式(6)计算,用于雄性和雌性蛇寻找食物。然而,在上述公式中, c 3 c_3 c3的固定值设置为0.05,这不利于更新蛇的位置,由于固定值设置,无法跳出局部最优,使算法快速陷入局部最优。在本文中,基于原始公式(5)和公式(6),添加扰动因子以获得 c 2 c_2 c2的新动态更新。新的 c 2 n e w c_2^{new} c2new根据公式(15)计算:
c 2 n e w = c 2 + 1 1000 × cos ( r 2 d × π 2 ) (15) c_2^{new} = c_2 + \frac{1}{1000} \times \cos(r_2^d \times \frac{\pi}{2}) \tag{15} c2new=c2+10001×cos(r2d×2π)(15)
其中 r 2 r_2 r2是介于(0, 1)之间的随机数。
在探索阶段,雄性和雌性蛇的位置通过公式(7)-(11)计算。然而,上述公式中 c 3 c_3 c3的值被设置为固定常数2。由于固定值设置,蛇的位置更新缓慢,降低了算法的收敛速度并增加了收敛时间。在本文中,基于原始公式,添加正弦因子以加速算法基于原始的收敛速度。新的动态更新 c 3 c_3 c3获得。新的 c 3 n e w c_3^{new} c3new根据公式(16)计算:
c 3 n e w = c 3 − 2 × sin ( t T ) 4 × π 2 (16) c_3^{new} = c_3 - 2 \times \sin \left( \frac{t}{T} \right)^4 \times \frac{\pi}{2} \tag{16} c3new=c3−2×sin(Tt)4×2π(16)
3.2 基于凸透镜成像的镜像成像策略
对立学习(Tizhoosh, 2005)是一种有效的优化策略,旨在通过计算当前位置的对立解来扩展搜索范围,从而找到更优的解。作为一种对立学习,透镜成像学习策略(Long et al., 2022)起源于凸透镜成像的光学定律,该定律通过凸透镜将物体从凸透镜的一侧反射到另一侧以获得更多凸透镜成像解。受凸透镜成像机制和镜像成像原理(Xu et al., 2014)的启发,本文提出了一种新的基于对立学习的策略,即镜像成像策略。该策略基于镜像成像原理获得新的对立解,从而扩展凸透镜成像的对立解范围,使优化过程更容易跳出局部最优。

基于凸透镜成像的镜像成像策略如图1所示。在二维空间中,解的搜索范围在x轴上是[LB, UB],在y轴上是[UB, LB],y轴的正半轴是凸透镜区域(蓝色)。y轴的负半轴是平面镜区域(黄色)。假设蛇的个体 ( s ) (s) (s)在原始镜像区域中,其投影 ( X ) (X) (X)在x轴和高度 ( X ′ ) (X') (X′)上。可以通过凸透镜获得蛇的个体 ( s ) (s) (s),其投影 ( X ′ ) (X') (X′)在x轴和高度 H ′ H' H′上,从该位置获得对立个体 ( s ∗ ) (s^*) (s∗),然后通过平面镜成像原理,对立个体 ( s ∗ ) (s^*) (s∗)被镜像以获得新的对立个体 ( s ∗ ∗ ) (s^{**}) (s∗∗),其中 ∣ X ∗ ∗ ∣ = ∣ X ∗ ∣ |X * *| = |X *| ∣X∗∗∣=∣X∗∣。最后,通过将 ( X ∗ ∗ ) (X^{**}) (X∗∗)和 H ′ H' H′的投影与原始个体 ( s ) (s) (s)的投影 ( X ) (X) (X)和高度 H H H结合,可以获得对立个体 ( s ∗ ∗ ) (s^{**}) (s∗∗)。
根据凸透镜成像原理,个体 ( s ) (s) (s)以坐标原点(O)为基点获得对立点 ( s ∗ ) (s^*) (s∗),点的坐标可以通过公式(17)计算:
X ∗ = ( U B + L B ) / 2 − X X ∗ − ( U B + L B ) / 2 = H H ∗ (17) X^* = \frac{(UB + LB)/2 - X}{X^* - (UB + LB)/2} = \frac{H}{H^*} \tag{17} X∗=X∗−(UB+LB)/2(UB+LB)/2−X=H∗H(17)
其中 U B UB UB是上限, L B LB LB是下限,令 δ = H H ∗ \delta = \frac{H}{H^*} δ=H∗H。
KaTeX parse error: \tag works only in display equations
在透镜成像中,不同透镜厚度的个体凸透镜成像投影点在x轴上获得。可以通过动态调整凸透镜的厚度(缩放因子 δ \delta δ)获得更多的凸透镜成像解。本文采用非线性动态缩放因子策略。在算法迭代的早期阶段,可以获得较大的值,使算法在不同维度空间中显著搜索并提高种群的多样性。在算法迭代的后期阶段,可以获得较小的值,并在最优个体附近执行精细搜索以提高局部搜索能力。非线性动态缩放因子通过公式(19)计算:
δ = δ max × [ ( δ max − δ min ) − 2 × ( t T ) 2 ] (19) \delta = \delta_{\text{max}} \times \left[ (\delta_{\text{max}} - \delta_{\text{min}}) - 2 \times \left( \frac{t}{T} \right)^2 \right] \tag{19} δ=δmax×[(δmax−δmin)−2×(Tt)2](19)
其中 δ max \delta_{\text{max}} δmax是最大缩放因子, δ min \delta_{\text{min}} δmin是最小缩放因子, T T T是最大迭代次数。这里 δ max = 10 \delta_{\text{max}} = 10 δmax=10, δ min = 9 \delta_{\text{min}} = 9 δmin=9。
将公式(18)扩展到k维空间得到表达式:
X k ∗ = U B k + L B k 2 + U B k + L B k − X k 2 δ (20) X_k^* = \frac{UB_k + LB_k}{2} + \frac{UB_k + LB_k - X_k}{2\delta} \tag{20} Xk∗=2UBk+LBk+2δUBk+LBk−Xk(20)
由于雄性和雌性蛇在蛇优化器中同样重要,因此基于凸透镜成像的镜像成像策略用于两个个体。
3.3 正弦-余弦复合扰动因子
在标准SO算法中,当食物充足且温度低时,蛇将进入交配阶段,因为雄性和雌性个体都希望与具有更高适应度的个体交配,因此雄性和雌性个体之间存在竞争。此外,交配模式和战斗模式都可以选择交配伙伴,因此战斗模式在交配阶段更为重要,这种模式有助于选择最佳个体。然而,这种模式也有一定的缺点,即最优个体位置更新直接决定了算法找到最佳解的效率和准确性。因此,对最优个体的强烈依赖不利于算法跳出局部最优,也不容易找到最佳解。为了解决这一缺点,本文提出了新的扰动因子,利用正弦和余弦的随机扰动,使算法跳出局部最优并提高其优化搜索能力,以避免陷入局部最优。考虑到雄性和雌性蛇的扰动因子不同,定义如公式(21)和公式(22)所示。500次迭代的扰动因子图如图3所示:
λ 1 = 1 + 1 1000 × ( sin ( a × 4 π × t ) + cos ( a × 6 π × t ) ) × e ( − t T ) (21) \lambda_1 = 1 + \frac{1}{1000} \times (\sin(a \times 4\pi \times t) + \cos(a \times 6\pi \times t)) \times e^{\left( -\frac{t}{T} \right)} \tag{21} λ1=1+10001×(sin(a×4π×t)+cos(a×6π×t))×e(−Tt)(21)
λ 2 = 1 + 1 1000 × ( cos ( a × 4 π × t ) + sin ( a × 6 π × t ) ) × e ( − t T ) (22) \lambda_2 = 1 + \frac{1}{1000} \times (\cos(a \times 4\pi \times t) + \sin(a \times 6\pi \times t)) \times e^{\left( -\frac{t}{T} \right)} \tag{22} λ2=1+10001×(cos(a×4π×t)+sin(a×6π×t))×e(−Tt)(22)

正弦和余弦扰动因子的动态变化不确定性用于以不同程度扰乱雄性和雌性蛇在战斗模式下的位置更新,从而使雄性和雌性蛇具有更全面的区域可搜索性。搜索算法的尺度可以扩展,以提高算法跳出局部极值的能力。添加扰动因子后,雄性和雌性蛇在战斗模式下的位置更新规则如公式(23)、(24)所示:
S i m ( t + 1 ) = λ 1 × S i m ( t ) + c 3 × e − f best m / f i × rand i × ( F Q × S best m − S i m ( t ) ) (23) S_i^{m}(t + 1) = \lambda_1 \times S_i^{m}(t) + c_3 \times e^{-f_{\text{best}}^m/f_i} \times \text{rand}_i \times \left( FQ \times S_{\text{best}}^{m} - S_i^{m}(t) \right) \tag{23} Sim(t+1)=λ1×Sim(t)+c3×e−fbestm/fi×randi×(FQ×Sbestm−Sim(t))(23)
S i f ( t + 1 ) = λ 2 × S i f ( t ) + c 3 × e − f best f / f i × rand i × ( F Q × S best f − S i f ( t ) ) (24) S_i^{f}(t + 1) = \lambda_2 \times S_i^{f}(t) + c_3 \times e^{-f_{\text{best}}^f/f_i} \times \text{rand}_i \times \left( FQ \times S_{\text{best}}^{f} - S_i^{f}(t) \right) \tag{24} Sif(t+1)=λ2×Sif(t)+c3×e−fbestf/fi×randi×(FQ×Sbestf−Sif(t))(24)
3.4 帐篷混沌和柯西突变
在蛇优化器中,经过雄性和雌性蛇的交配行为后,雌性蛇将产卵并孵化出新蛇。新蛇将取代劣质个体以重新填充种群并开始新的迭代周期。在新的迭代中,为了防止算法陷入局部最优并尽可能加快收敛速度,本文引入了帐篷混沌(Bharti and Singh, 2016, Ibrahim et al., 2018, Xu et al., 2014)和柯西突变策略(Li et al., 2017, Wang et al., 2020, Zhao et al., 2022)来提高算法跳出局部的能力。通过比较个体适应度与种群平均适应度,使用帐篷混沌扰动的个体适应度低于平均适应度,使用柯西扰动的个体适应度高于平均适应度。最后,比较突变前后的新旧个体,选择最优个体保留在种群中。
混沌(Vieira & Mosna, 2022)是自然界中常见的非线性现象。由于混沌变量的随机性、遍历性和规律性,它不仅能有效维持种群的多样性,还能帮助算法跳出局部最优并提高全局搜索能力。许多学者已将其应用于优化搜索问题。混沌扰动通过帐篷混沌映射生成混沌变量 Z T Z_T ZT,将混沌变量带入问题求解空间,并最终混沌扰动个体。帐篷混沌映射如公式(25)所示,解空间如公式(26)所示,混沌扰动规则如公式(27)所示:
z i , j = − ( 2 z i ) mod 1 + rand × 1 N T (25) z_{i,j} = -(2z_i) \text{mod} 1 + \text{rand} \times \frac{1}{N_T} \tag{25} zi,j=−(2zi)mod1+rand×NT1(25)
其中 N T N_T NT是混沌序列中的粒子数, rand \text{rand} rand是介于(0, 1)之间的随机数。
Y new d = d min + ( d max − d min ) × Z d (26) Y_{\text{new}}^d = d_{\text{min}} + (d_{\text{max}} - d_{\text{min}}) \times Z_d \tag{26} Ynewd=dmin+(dmax−dmin)×Zd(26)
其中 d min d_{\text{min}} dmin和 d max d_{\text{max}} dmax是d维变量 Y new d Y_{\text{new}}^d Ynewd的最小值和最大值。
Y i , n e w d = Y d + Y new d 2 (27) Y_{i,new}^d = \frac{Y^d + Y_{\text{new}}^d}{2} \tag{27} Yi,newd=2Yd+Ynewd(27)
其中 Y d Y^d Yd是要混沌扰动的个体, Y new d Y_{\text{new}}^d Ynewd是混沌扰动后个体的量, Y i , n e w d Y_{i,new}^d Yi,newd是混沌扰动后的个体。
柯西突变源自柯西分布,其特征是峰值小且从峰值到零值的下降缓慢,这可以使突变范围更均匀。通过将柯西算子引入目标位置更新,增强了柯西算子在目标位置更新中的调整能力。
位置更新中,柯西算子的调整能力如公式(28)所示:
mutation ( m ) = m × ( 1 + tan ( π × ( rand − 0.5 ) ) ) (28) \text{mutation}(m) = m \times (1 + \tan(\pi \times (\text{rand} - 0.5))) \tag{28} mutation(m)=m×(1+tan(π×(rand−0.5)))(28)
其中 m m m是原始个体的位置, mutation ( m ) \text{mutation}(m) mutation(m)是柯西突变后个体的位置, rand \text{rand} rand是介于(0, 1)之间的随机数。
通过将上述提出的策略与原始SO算法相结合,并替换SO算法中的不合理部分和链接,可以有效提高原始SO的优化能力和效率。增强型蛇优化算法的伪代码如算法2所示。

相关文章:
中科院1区顶刊Expert Systems with Applications ESO:增强型蛇形算法,性能不错
Snake Optimizer(SO)是一种优化效果良好的新颖算法,但由于自然规律的限制,在探索和开发阶段参数更多是固定值,因此SO算法很快陷入局部优化并慢慢收敛。本文通过引入新颖的基于对立的学习策略和新的动态更新机制&#x…...
zk(Zookeeper)实现分布式锁
Zookeeper实现分布式锁 1,zk中锁的种类: 读锁:大家都可以读,要想上读锁的前提:之前的锁没有写锁 写锁:只有得到写锁的才能写。要想上写锁的前提是:之前没有任何锁 2,zk如何上读锁 创…...
自我生成,自我训练:大模型用合成数据实现“自我学习”机制实战解析
目录 自我生成,自我训练:大模型用合成数据实现“自我学习”机制实战解析 一、什么是自我学习机制? 二、实现机制:如何用合成数据实现自我训练? ✅ 方式一:Prompt强化生成 → 自我采样再训练 ✅ 方式二…...
【Vue】从 MVC 到 MVVM:前端架构演变与 Vue 的实践之路
个人博客:haichenyi.com。感谢关注 一. 目录 一–目录二–架构模式的演变背景三–MVC:经典的分层起点四–MVP:面向接口的解耦尝试五–MVVM:数据驱动的终极形态六–Vue:MVVM 的现代化实践 二. 架构模…...
prototype`和`__proto__`有什么区别?如何手动修改一个对象的原型?
在 JavaScript 中,prototype 和 __proto__ 都与原型链相关,但它们的角色和用途有本质区别: 1. prototype 和 __proto__ 的区别 特性prototype__proto__归属对象仅函数对象拥有(如构造函数)所有对象默认拥有࿰…...
Flask+Influxdb+grafna构建电脑性能实时监控系统
Influx下载地址,这里下载了以下版本influxdb-1.8.5_windows_amd64.zip 运行前需要先启动Influx数据库: 管理员方式运行cmd->F:->cd F:\influxdb\influxdb-1.8.5-1->influxd -config influxdb.conf,以influxdb.conf配置文件启动数…...
关于链接库
在 C# 中,链接库主要分为两种类型:托管链接库和非托管链接库,以下为你详细介绍它们的特点和导入方式: 托管链接库 特点 托管链接库通常是用 .NET 兼容的语言(如 C#、VB.NET 等)编写的,运行在…...
若伊微服务版本教程(自参)
第一步 若伊官网下载源码 https://ruoyi.vip/ RuoYi-Cloud: 🎉 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统,同时提供了 Vue3 的版本 git clone 到 本地 目录如下: 第二部 参考官网 运行部署说明 环境部署…...
数据库性能优化(sql优化)_分布式优化思路01_yxy
数据库性能优化_分布式优化思路01 1 分布式数据库的独特挑战2 分布式新增操作符介绍2.1 数据交换操作符(ESEND/ERECV):2.2 数据迭代操作符GI:3 核心优化策略(一)_分区裁剪优化3.1 普通分区裁剪3.2 动态分区裁剪1 分布式数据库的独特挑战 在分布式数据库系统中,核心为数据被…...
ESP32与STM32哪种更适合初学者?
目录 1、ESP32:物联网时代的“网红” 2、STM32:工业界的“常青树” 3、到底谁更容易? 无论是刚入坑的小白,还是想扩展技术栈的老鸟,在选择主力 MCU 时,学习曲线绝对是重要的考量因素。ESP32 以其强大的 …...
秒杀秒抢系统开发:飞算 JavaAI 工具如何应对高并发难题?
秒杀、秒抢活动已成为电商促销与吸引流量的常用手段。然而,此类活动所带来的高并发访问,对系统性能构成了巨大挑战。如何确保系统在高并发场景下依然能够稳定、高效运行,成为开发者亟待解决的关键问题。飞算 JavaAI 工具作为一款功能强大的开…...
未启用CUDA支持的PyTorch环境** 中使用GPU加速解决方案
1. 错误原因分析 根本问题:当前安装的PyTorch是CPU版本,无法调用GPU硬件加速。当运行以下代码时会报错:model YOLO("yolov8n.pt").to("cuda") # 或 .cuda()2. 解决方案步骤 步骤1:验证CUDA可用性 在Pyth…...
C# 将Excel格式文件导入到界面中,用datagridview显示
界面按钮不做介绍。 主要代码: //用于获取从上一个页面传过来datagridview标题 public DataTable GetHeader { get; set; } private void UI_EXPINFO_Load(object sender, EventArgs e) { //页面加载显示listbox1中可…...
Spring Boot整合难点?AI一键生成全流程解决方案
在当今的软件开发领域,Spring Boot 凭借其简化开发流程、快速搭建项目的优势,成为了众多开发者的首选框架。然而,Spring Boot 的整合过程并非一帆风顺,常常会遇到各种难点。而飞算 JavaAI 的出现,为解决这些问题提供了…...
分享一下这几天在公司学到的东西
这几天我学到了很多东西 (1)我自己原来写项目,前后端联调用的都是postman,然后直接测试接口,然后连一下就完了。这几天我接触到了apifox的Mock这个东西!我知道了一个前端工程师进行前后端链条的时候&#…...
Java转Go日记(一):Slice解密
1.切片通过函数,传的是什么? package mainimport ("fmt""reflect""unsafe" )func main() {s : make([]int, 5, 10)PrintSliceStruct(&s)test(s) }func test(s []int) {PrintSliceStruct(&s) }func PrintSliceStr…...
MySQL 锁机制全景图:分类、粒度与示例一图掌握
✅ 一、按粒度分类(锁的范围大小) 1. 表级锁(Table Lock) 锁住整张表粒度大,开销小,并发性差常见于:MyISAM 引擎 📌 示例: LOCK TABLES user WRITE; -- 会锁住整个 u…...
STM32江科大----------PID算法
声明:本人跟随b站江科大学习,本文章是观看完视频后的一些个人总结和经验分享,也同时为了方便日后的复习,如果有错误请各位大佬指出,如果对你有帮助可以点个赞小小鼓励一下,本文章建议配合原视频使用❤️ 如…...
架构师面试(二十九):TCP Socket 编程
问题 今天考察网络编程的基础知识。 在基于 TCP 协议的网络 【socket 编程】中可能会遇到很多异常,在下面的相关描述中说法正确的有哪几项呢? A. 在建立连接被拒绝时,有可能是因为网络不通或地址错误或 server 端对应端口未被监听&#x…...
基础学习(4): Batch Norm / Layer Norm / Instance Norm / Group Norm
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1 batch normalization(BN)2 Layer normalization (LN)3 instance normalization (IN)4 group normalization (GN)总结 前言 对 norm/batch/instance/group 这…...
局域网内Docker镜像共享方法
在局域网内将Docker镜像构建并传输到另一台电脑,可以通过以下几种方法实现。以下是具体步骤及注意事项,结合不同场景的适用方案: 方法一:使用 docker save 和 docker load 传输镜像文件 步骤说明 在构建机上保存镜像 通过 docker…...
Idea集成AI:CodeGeeX开发
当入职新公司,或者调到新项目组进行开发时,需要快速熟悉项目代码 而新的项目代码,可能有很多模块,很多的接口,很复杂的业务逻辑,更加有与之前自己的代码风格不一致的现有复杂代码 更别提很多人写代码不喜…...
HTTP HTTPS RSA
推荐阅读 小林coding HTTP篇 文章目录 HTTP 80HTTP 响应码1xx:信息性状态码(Informational)2xx:成功状态码(Success)3xx:重定向状态码(Redirection)4xx:客户端…...
【深度学习与大模型基础】第10章-期望、方差和协方差
一、期望 ——————————————————————————————————————————— 1. 期望是什么? 期望(Expectation)可以理解为“长期的平均值”。比如: 掷骰子:一个6面骰子的点数是1~6&#x…...
Elasticvue-轻量级Elasticsearch可视化管理工具
Elasticvue一个免费且开源的 Elasticsearch 在线可视化客户端,用于管理 Elasticsearch 集群中的数据,完全支持 Elasticsearch 版本 8.x 和 7.x. 功能特色: 集群概览索引和别名管理分片管理搜索和编辑文档REST 查询快照和存储库管理支持国际…...
危化品经营单位安全生产管理人员备考要点
危化品经营单位安全生产管理人员备考要点 📌 考试核心内容 ✅ 必考法规: 《危险化学品安全管理条例》重点条款(如经营许可条件) GB 18218-2018《重大危险源辨识》新标准 安全生产法律责任(罚款金额/刑事责任&…...
【python】OpenCV—Tracking(10.6)—People Counting
文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数6、参考来自 更多有趣的代码示例,可参考【Programming】 1、功能描述 借助 opencv-python,用 SSD 人形检测模型和质心跟踪方法实现对人群的计数 基于质心的跟踪可以参考 【pyt…...
使用KeilAssistant代替keil的UI界面
目录 一、keil Assistant的优势和缺点 二、使用方法 (1)配置keil的路径 (2)导入并使用工程 (3)默认使用keil自带的ARM编译器而非GUN工具链 一、keil Assistant的优势和缺点 在日常学…...
FreeRTOS菜鸟入门(五)·空闲任务与阻塞延时的实现
目录 1. 实现空闲任务 1.1 定义空闲任务的栈 1.2 定义空闲任务的任务控制块 1.3 创建空闲任务 2. 实现阻塞延时 2.1 vTaskDelay()函数 2.2 修改 vTaskSwitchContext()函数 3. SysTick 中断服务函数 4. SysTick 初始化函数 通过之前我们了解知道,任…...
Doris部署生产集群最低要求的部署方案
Doris生产集群最低部署方案(2025年4月版) 一、节点规划与数量 1. FE节点(Frontend) 数量:至少 3个节点(1个Follower 2个 Observer),确保高可用(HA)。角色分…...
