智能优化算法之松鼠算法(Squirrel search algorithm)

article/2025/9/11 1:05:19

文章目录

  • 背景
  • Squirrel search algorithm(SSA)
    • SSA
    • Random initialization(随机初始化)
    • Fitness evaluation(适应值评价)
    • Sorting, declaration and random selection(排序、声明和随机选择)
    • Generate new locations(生成新位置)
      • 第一种情况(橡树->山核桃树)
      • 第二种情况(普通树->橡树)
      • 第三种情况(普通树->山核桃树)
    • Aerodynamics of gliding(滑翔空气动力学)
    • Seasonal monitoring condition(季节变化条件)
      • 计算季节常量
      • 计算季节变化条件
    • Random relocation at the end of winter season(冬季末随机搬迁)
    • Stopping criterion(算法停止标准)
    • 算法步骤
  • 引用

背景

优化是在给定情况下为特定问题寻找最佳解决方案的过程。

受自然启发的算法可以大致分为三大类:进化算法(EA),群体智能算法(SI)和基于物理的算法(PB)。

  • EAs模仿自然界中生物的进化行为。GA以及差分进化算法可被视为EA的最标准形式。
  • 基于群体智能的技术,主要是模仿动物群体的智能社交行为。
    • 基于群体智能的算法会随着算法的发展而收集和利用有关搜索空间的全部信息。
    • PSO、ACO和ABC是SIs的代表性算法。

在这里插入图片描述

按照“no free lunch”(NFL)定理,没有一种自然启发式的优化技术可以最优地解决所有优化问题。这就意味着优化算法可以解决某些问题,但对其他类别的问题无效。


飞行松鼠被认为是空气动力学上最复杂的物种,它有一个类似降落伞的膜,可以帮助松鼠改变升力和阻力,在高空中从一棵树滑翔到另一棵树。

飞行松鼠不会飞行,而是采用滑翔方式快速和有效地跨越很长的距离。松鼠之所以要滑翔,是为了躲避捕食者,寻找捕食的最佳地点和以较小的代价进行捕食

在这里插入图片描述


Squirrel search algorithm(SSA)

当飞行松鼠开始觅食时,搜寻过程就开始了。飞行松鼠通过从一棵树滑行到另一棵树了来寻找食物;通过改变位置,搜索不同的森林区域

季节变化会显著影响飞行松鼠的觅食活动,松鼠在低温条件下会损失大量热量。因为它们的体温高、体型小,导致觅食过程的代价很大,并且由于天敌的存在而具有风险。在SSA算法中,通过检查季节变化条件,防止算法陷入局部最优。


1、森林中有n只飞行松鼠,假设一只松鼠在一棵树上

2、每只飞行松鼠都通过自己的动态觅食行为来寻找食物。

3、在森林中,只有三种类型的树:普通树、橡树和山核桃树。(normal tree\oak tree and hickory tree)

4、考虑森林区域被认为包含三个橡树和一个山核桃树


考虑松鼠数量n为50只

1棵山核桃树和3棵橡树是4个食物资源,其他46棵普通树没有食物资源(Number of Food)。也就是说,松鼠总数的92%生活在普通树上,其余的8%生活在有食物资源的树上。然而,食物资源的数量可以根据不用的约束$1<N_{fs}<n ,N_{fs} \in Z >0 $而变化

SSA

飞行松鼠的位置在SSA算法中由向量表示,每个向量有多个维度。因此,飞行松鼠可以在一维、二维、三维或超维搜索空间中滑行来改变自身的位置。

Random initialization(随机初始化)

森林中有n只飞鼠(FS),第i只飞鼠的位置可以通过一个矢量来确定。

所有飞鼠的位置可以表示为如下矩阵:
F S = [ F S 1.1 F S 1.2 . . . . . . F S 1 , d F S 2.1 F S 2.2 . . . . . . F S 2 , d ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ F S n . 1 F S n . 2 . . . . . . F S n , d ] FS=\begin{bmatrix}FS_{1.1} & FS_{1.2} &... &... & FS_{1,d}\\ FS_{2.1} & FS_{2.2} &... &... & FS_{2,d}\\ \vdots & \vdots & \vdots & \vdots\\ \vdots & \vdots & \vdots & \vdots\\ FS_{n.1} & FS_{n.2} &... &... & FS_{n,d}\\ \end{bmatrix} FS=FS1.1FS2.1FSn.1FS1.2FS2.2FSn.2..................FS1,dFS2,dFSn,d

  • F S i , j FS_{i,j} FSi,j代表第i只松鼠在第j维上的值

下面等式均匀分布用来分配每个松鼠在森林中的初始位置。
F S i = F S L + U ( 0 , 1 ) × ( F S U − F S L ) FS_{i}=FS_{L}+U(0,1) \times(FS_U - FS_L) FSi=FSL+U(0,1)×(FSUFSL)

  • F S L FS_{L} FSL F S U FS_{U} FSU是第j维度上的第i个飞鼠的下界和上界
  • U ( 0 , 1 ) U(0,1) U(0,1)是在[0,1]范围内的均匀分布的随机数

Fitness evaluation(适应值评价)

通过将决策变量的值放入用户定义的适应度函数中,可以计算每个飞鼠的位置适应度。并将相应的适应度值存储在以下数组中:
f = [ f 1 ( [ F S 1.1 , F S 1.2 , . . . , F S 1 , d ] ) f 2 ( [ F S 2.1 , F S 2.2 , . . . , F S 2 , d ] ) ⋮ ⋮ f n ( [ F S n . 1 , F S n . 2 , . . . , F S n , d ] ) ] f=\begin{bmatrix} f_1([FS_{1.1},FS_{1.2},...,FS_{1,d}])\\ f_2([FS_{2.1},FS_{2.2},...,FS_{2,d}])\\ \vdots\\ \vdots\\ f_n([FS_{n.1},FS_{n.2},...,FS_{n,d}])\\ \end{bmatrix} f=f1([FS1.1,FS1.2,...,FS1,d])f2([FS2.1,FS2.2,...,FS2,d])fn([FSn.1,FSn.2,...,FSn,d])

  • 每只松鼠位置的适应度描述了食物源的等级,即最佳食物源(山核桃树)、正常食物源(橡树)和无食物来源(普通树)。

Sorting, declaration and random selection(排序、声明和随机选择)

在存储了每只松鼠的位置适应度后,数组==按升序排序==。

最小适应值的松鼠停留在山核桃树上,接下来的三只松鼠停留在橡树上,它们可以向山核桃树飞行,其余的松鼠停留在普通树上。通过随机选择方式,选择已经满足它们日常能量需求的松鼠朝着山核桃树移动;剩下的松鼠继续朝橡树移动来获取日常所需能量。

松鼠的觅食行为会受到捕食者的影响,松鼠具体采用哪种移动策略根据捕食者的出现概率( P d p P_{dp} Pdp)而定。

  • P d p = 0.1 P_{dp} = 0.1 Pdp=0.1

Generate new locations(生成新位置)

松鼠在动态觅食过程中可能会出现**三种情况**。

在每种情况下,假设在没有捕食者的情况下,松鼠会在整个森林中滑翔,并高效的搜寻它喜欢的食物,但因捕食者的存在使得它变得谨慎,被迫在小范围内随机行走来寻找附近的隐藏位置

第一种情况(橡树->山核桃树)

在橡树(acorn nut trees)的松鼠可以移动到山核桃树(hickory nut tree)。

松鼠的新位置:
F S a t t + 1 = { F S a t t + d g × G c × ( F S h t t − F S a t t ) , R 1 ≥ P d p R a n d o m l o c a t i o n , o t h e r w i s e FS_{at}^{t+1} =\begin{cases} FS_{at}^t + d_g \times G_c \times (FS_{ht}^t - FS_{at}^t), & R_1 \geq P_{dp}\\ Random location, & otherwise \end{cases} FSatt+1={FSatt+dg×Gc×(FShttFSatt),Randomlocation,R1Pdpotherwise

  • d g d_g dg is random gliding distance (随机滑翔距离)
  • R 1 R_1 R1是[0,1]的随机数
  • F S a t FS_{at} FSat代表松鼠在橡树上的位置
  • F S h t FS_{ht} FSht是松鼠到达山核桃树的位置
    • t表示当前迭代
  • G c G_c Gc为滑动系数
    • 可以实现全局和局部搜索之间的平衡
    • G c = 1.9 G_c=1.9 Gc=1.9

第二种情况(普通树->橡树)

在普通树(normal trees)的松鼠移动到橡树(acorn nut trees)获取日常的能源所需。

松鼠的新位置:
F S n t t + 1 = { F S n t t + d g × G c × ( F S a t t − F S n t t ) , R 2 ≥ P d p R a n d o m l o c a t i o n , o t h e r w i s e FS_{nt}^{t+1} =\begin{cases} FS_{nt}^t + d_g \times G_c \times (FS_{at}^t - FS_{nt}^t), & R_2 \geq P_{dp}\\ Random location, & otherwise \end{cases} FSntt+1={FSntt+dg×Gc×(FSattFSntt),Randomlocation,R2Pdpotherwise

  • R 2 R_2 R2是[0,1]的随机数
  • F S n t FS_{nt} FSnt代表松鼠在普通树上的位置

第三种情况(普通树->山核桃树)

有些在普通树(normal trees)上的松鼠,已经吃了橡果,它们可能会向山核桃树(hickory nut tree)移动以便储存山核桃来应对食物短缺

松鼠的新位置:
F S n t t + 1 = { F S n t t + d g × G c × ( F S h t t − F S n t t ) , R 3 ≥ P d p R a n d o m l o c a t i o n , o t h e r w i s e FS_{nt}^{t+1} =\begin{cases} FS_{nt}^t + d_g \times G_c \times (FS_{ht}^t - FS_{nt}^t), & R_3 \geq P_{dp}\\ Random location, & otherwise \end{cases} FSntt+1={FSntt+dg×Gc×(FShttFSntt),Randomlocation,R3Pdpotherwise

  • R 3 R_3 R3是[0,1]的随机数

在这里插入图片描述

Aerodynamics of gliding(滑翔空气动力学)

松鼠的滑翔机制是通过平衡滑行来描述的,升力(L)和阻力(D)之和产生一个合力®,该合力与松鼠的重力大小相等且方向相反。

因此,R以恒定速度(V)保证松鼠能够在直线上与水平面成一定角度 ϕ \phi ϕ下降滑行。

升阻比或滑行比:
L / D = 1 / tan ⁡ ϕ L/D = 1/\tan\phi L/D=1/tanϕ
松鼠可以通过减小下滑角来增加滑行路径长度,从而提高升阻比。升力是空气撞击膜产生了向下的偏转而产生的反推力的结果,定义为:
L = 1 / 2 ρ C L V 2 S L=1/2\rho C_L V^2 S L=1/2ρCLV2S

  • ρ = 1.204 k g m − 3 \rho=1.204 kgm^{-3} ρ=1.204kgm3是空气密度
  • C L C_L CL是升力系数
  • V = 5.25 m s − 1 V=5.25 ms^{-1} V=5.25ms1是速度
  • S = 154 c m 2 S=154 cm^2 S=154cm2是物体表面积

摩擦阻力定义为:
D = 1 / 2 ρ V 2 S C D ​ D=1/2\rho V^2 S C_D​ D=1/2ρV2SCD

  • C D C_D CD是摩擦阻力系数
    • 低俗移动时松鼠增加阻力
    • 高速移动时松鼠减小阻力

稳态下滑角为: ϕ = arctan ⁡ ( D L ) \phi = \arctan (\frac{D}{L}) ϕ=arctan(LD)

计算近似滑翔距离 d g = ( h g tan ⁡ ϕ ) d_g = (\frac{h_g}{\tan\phi}) dg=(tanϕhg)

  • h g = 8 m h_g=8m hg=8m是滑行后发生的高度减少量

松鼠可以根据着陆位置,简单地改变升阻比来改变其滑行路径长度或 d g d_g dg.

  • C L C_L CL是[0.675,1.5]之间的某个值
  • C D = 0.6 C_D=0.6 CD=0.6

松鼠通常在一次滑行中行进5到25m的水平距离,在SSA算法模型中,滑行距离载9~20米的范围内。 d g d_g dg的值过大会引起大的扰动,可能导致算法的性能不能令人满意。

因此,== d g / s f d_g/sf dg/sf d g d_g dg除以一个成为**比例因子(sf属于[16,37])**的非零值, s f = 18 sf=18 sf=18==使得 d g d_g dg在[0.5,1.11]区间内浮动。

sf有助于实现全局搜索和局部寻优之间的均衡状态。

Seasonal monitoring condition(季节变化条件)

季节变化对飞行松鼠觅食活动有显著影响,松鼠在低温条件下会损失大量热量。

在SSA中引入季节监测条件,避免算法陷入局部最优解。

计算季节常量

季节常量 S c S_c Sc
S c t = ∑ k = 1 d ( F S a t , k t − F S h t , k ) 2 S_c^t = \sqrt{\sum_{k=1}^d (FS_{at,k}^t - FS_{ht,k})^2} Sct=k=1d(FSat,ktFSht,k)2

  • t = 1 , 2 , 3 t=1,2,3 t=1,2,3

计算季节变化条件

监测季节变化条件 S c t < S m i n S_c^t < S_{min} Sct<Smin

S m i n S_{min} Smin是季节性常数计算的最小值
S m i n = 10 E − 6 ( 365 ) t / ( t m / 2.5 ) S_{min} = \frac{10 E^{-6}}{(365)^{t / (t_m /2.5)}} Smin=(365)t/(tm/2.5)10E6

  • t是当前迭代值
  • t m t_{m} tm是最大迭代值
  • S m i n S_{min} Smin值影响算法的全局和局部搜索能力
    • S m i n S_{min} Smin值较大会有利于全局搜索
    • 较小值有利于算法的局部搜索

如果季节变化条件得到满足(即冬季已过),对无法在森林中寻找最佳冬季食物来源的松鼠进行随机迁移(即随机改变松鼠位置)

Random relocation at the end of winter season(冬季末随机搬迁)

如前所述,由于觅食成本低,冬季的结束会使飞鼠活跃起来。

冬季无法在森林中寻找最佳食物来源而存活下来的鼯鼠可能会向新的方向觅食。在建模中结合这种行为可以提高所提出算法的探索能力。

假设只有那些无法找到山核桃食物来源而存活下来的松鼠才会为了寻找更好的食物来源而向不同的方向移动。

The relocation of such flying squirrels is modelled through the following equation:
F S n t n e w = F S L + L e ˊ v y ( n ) × ( F S U − F S L ) FS_{nt}^{new} = FS_L + Lévy(n) \times (FS_U - FS_L) FSntnew=FSL+Leˊvy(n)×(FSUFSL)
列维分布(Levy distribution)能够帮助算法更好的进行全局搜索。

列维飞行(Levy flight)帮助算法寻找远离当前最佳位置的新位置。列维飞行时一种随机改变步长的方法,其中步长是从列维分布中得出的。
$$
L(s) ~\mid s\mid ^{-1-\beta}\

0 < \beta \leq 2
$$

Lévy distribution
L ( s , γ , μ ) = { γ 2 π exp ⁡ [ − γ 2 ( s − μ ) ] 1 ( s − μ ) 3 / 2 0 < μ < s < ∞ 0 o t h e r w i s e L(s,\gamma,\mu) =\begin{cases} \sqrt{\frac{\gamma}{2 \pi}} \exp[-\frac{\gamma}{2(s - \mu)}] \frac{1}{(s - \mu)^{3/2}} & 0 <\mu < s < \infty\\ 0 & otherwise \end{cases} L(s,γ,μ)={2πγ exp[2(sμ)γ](sμ)3/2100<μ<s<otherwise

  • μ , γ > 0 \mu,\gamma > 0 μ,γ>0
    • γ \gamma γ是比例参数
    • μ \mu μ是转换参数

Lévy flight
L e ˊ v y ( x ) = 0.01 × r a × σ ∣ r b ∣ 1 β Lévy(x) = 0.01 \times \frac{r_a \times \sigma}{\mid r_b\mid ^{\frac{1}{\beta}}} Leˊvy(x)=0.01×rbβ1ra×σ

  • r a , r b r_a,r_b ra,rb是[0,1]区间上的两个正态分布随机数

  • β = 1.5 \beta=1.5 β=1.5

  • σ = ( Γ ( 1 + β ) × sin ⁡ ( π β 2 ) Γ ( 1 + β 2 ) × β × 2 β − 1 2 ) 1 / β \sigma =(\frac{\Gamma(1 + \beta) \times \sin(\frac{\pi \beta}{2})}{\Gamma(\frac{1 + \beta}{2}) \times \beta \times 2^{\frac{\beta -1}{2}}})^{1/\beta} σ=(Γ(21+β)×β×22β1Γ(1+β)×sin(2πβ))1/β

    • Γ ( x ) = ( x − 1 ) ! \Gamma(x) = (x-1)! Γ(x)=(x1)!

Stopping criterion(算法停止标准)

算法停止准则为最大迭代次数 t m t_m tm

算法步骤

在这里插入图片描述


算法步骤

(1)定义输入参数

(2)为n只松鼠生成随机位置

(3)评估每只松鼠位置的适应值

(4)根据飞行松鼠的适应值,按升序排序松鼠位置

(5)将松鼠分配到山核桃树、橡树和普通树

(6)随机选择一些在普通树上的松鼠向山核桃树移动,其余的向橡树移动

(7)While(不满足停止准则)

(8)t从1到n1(n1为橡树向山核桃树移动的松鼠数量),如果 R 1 ≥ P d p R_1 \geq P_{dp} R1Pdp,则执行公式 F S a t t + 1 = F S a t t + d g × G c × ( F S h t t − F S a t t ) FS_{at}^{t+1} =FS_{at}^t + d_g \times G_c \times (FS_{ht}^t - FS_{at}^t) FSatt+1=FSatt+dg×Gc×(FShttFSatt)

(9)t从1到n2(n2为普通树向橡树移动的松鼠数量),如果 R 2 ≥ P d p R_2 \geq P_{dp} R2Pdp,则执行公式 F S n t t + 1 = F S n t t + d g × G c × ( F S a t t − F S n t t ) FS_{nt}^{t+1} =FS_{nt}^t + d_g \times G_c \times (FS_{at}^t - FS_{nt}^t) FSntt+1=FSntt+dg×Gc×(FSattFSntt)

(10)t从1到n3(n3为普通树向山核桃树移动的松鼠数量),如果 R 3 ≥ P d p R_3 \geq P_{dp} R3Pdp,则执行公式 F S n t t + 1 = F S n t t + d g × G c × ( F S h t t − F S n t t ) FS_{nt}^{t+1} =FS_{nt}^t + d_g \times G_c \times (FS_{ht}^t - FS_{nt}^t) FSntt+1=FSntt+dg×Gc×(FShttFSntt)

(11)计算季节性常数。判断季节变化条件是否满足,满足则根据 F S n t n e w = F S L + L e ˊ v y ( n ) × ( F S U − F S L ) FS_{nt}^{new} = FS_L + Lévy(n) \times (FS_U - FS_L) FSntnew=FSL+Leˊvy(n)×(FSUFSL) L e ˊ v y ( x ) = 0.01 × r a × σ ∣ r b ∣ 1 β Lévy(x) = 0.01 \times \frac{r_a \times \sigma}{\mid r_b\mid ^{\frac{1}{\beta}}} Leˊvy(x)=0.01×rbβ1ra×σ更新普通树上松鼠位置

(12)根据 S m i n = 10 E − 6 ( 365 ) t / ( t m / 2.5 ) S_{min} = \frac{10 E^{-6}}{(365)^{t / (t_m /2.5)}} Smin=(365)t/(tm/2.5)10E6更新 S m i n S_{min} Smin的值

(13)直到循环结束,得到山核桃树上松鼠的位置和适应值

引用

[1]Jain M , Singh V , Rani A . A novel nature-inspired algorithm for optimization: Squirrel search algorithm[J]. Swarm and Evolutionary Computation, 2018:S2210650217305229.

加油加油加油☺️☺️☺️☺️


http://chatgpt.dhexx.cn/article/5QEnWIR2.shtml

相关文章

electron打包遇到 Making for target: squirrel - On platform: win32 - For arch: x64错误

上面横线处是出现错误的位置。报错的原因如下&#xff1a; 1、package.json的“author”和“description”在打包时是必填内容&#xff0c;随便填些内容即可打包成功。 2、和项目的绝对路径有关&#xff0c;项目的绝对路径不能出现中文&#xff0c;否则在红线处会报错。

WPF 使用Squirrel自动更新应用

前言 本文简单的介绍了如何使用 Squirrel 来为 WPF 客户端 进行自动检查更新。 Squirrel git 地址 &#xff1a;http:// https://github.com/Squirrel/Squirrel.Windows 本文使用了 Visual Studio 2022 进行演示讲解。 参考英文博客&#xff1a; https://intellitect.com/d…

SQuirrel SQL Client的安装

如果您的工作要求您在一天之中连接许多不同的数据库 &#xff08;oracle、DB2、mysql、postgresql、Sql Server等等&#xff09;&#xff0c;或者你经常需要在多个不同种类的数据库之间进行数导入导出。那么SQuirreL SQL Client 将会是比较理想的数据库客户端链接工具。 简单介…

数据库管理工具——SQuirreL SQL Client使用入门

如果您的工作要求您在一天之中连接许多不同的数据库 &#xff08;oracle、DB2、mysql、postgresql、Sql Server等等&#xff09;&#xff0c;或者你经常需要在多个不同种类的数据库之间进行数导入导出。那么SQuirreL SQL Client 将会是比较理想的数据库客户端链接工具。 简单介…

SQuirrel连接hive配置

1. 简介 最近由于大数据部门相关同事离职&#xff0c;不得不研究一下大数据相关组件&#xff0c;今天成功安装配置Hive&#xff0c;简单记录&#xff0c;一是为了加深印象&#xff0c;二是为以后备用&#xff0c;三是为大家提供参考&#xff0c;避免少踩坑。 在Hive的官网上…

FSM——squirrel状态机使用

FSM——squirrel状态机使用 1 FSM介绍 1.1 概念 FSM&#xff08;finite state machine&#xff09;:有限状态机 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。核心内容&#xff1a;有限个状态、通过外部操作引起状态的转移。用来对状态的流转进行解耦&a…

Squirrel SQL客户端使用图解

一、Squirrel简介 Squirrel是一个连接数据库的客户端工具&#xff0c;一般支持JDBC的数据库都可以用它来简介&#xff0c;如连接MySQL。 二、安装准备 下载jar包&#xff1a;squirrel-sql-3.7.1-standard.jar 三、安装 ①进入squirrel-sql-3.7.1-standard.jar文件所在的目录…

完成GitHub上squirrel 的运行(数据库的模糊测试)

文章目录 一、squirrel的介绍squirrel链接建议下载Ubuntu 18.04编译安装clang/llvm&#xff08;建议9.0以上&#xff09;将squirrel的文件下载到Ubuntu上下载docker&#xff08;建议按照dockerfile步骤直接在外部搭建环境&#xff09;Dockerfile创建镜像按照dockfile搭建时时有…

连接HiveServer2的图形化工具SQuirrel和Dbeaver

文章目录 SQuirrel SQL Client简介视频演示安装SQuirrel SQL Client启动hdfs和hiveserver2配置SQuirrel SQL Client使用SQuirrel SQL Client访问hive使用Cloudera提供的hive连接驱动进行连接Dbeaver的安装及使用 本文介绍的工具可以通过下面链接下载&#xff1a; 链接&#xff…

squirrel校园二手交易平台

##squirrel校园二手交易平台 &#xff08;适合寻找SSM项目练手的你。&#xff09; 问题汇总&#xff1a; &#xff08;朋友毕设用到了这个二手平台&#xff0c;他自己把后台优化了&#xff0c;我又帮忙实现了一部分功能&#xff0c;只能做到这里了。有兴趣的&#xff0c;自行优…

squirrel sql 使用

前置 安装jdk&#xff08;1.8版本即可&#xff09; 1、官网下载squirrel sql client jar https://sourceforge.net/projects/squirrel-sql/ 2 运行java -jar squirrel-sql-3.6-standard.jar安装 jar包 注意3.0的版本要JDK1.6以上 这里可以改安装目录 这里可以选择插件&#…

[squirrel使用]--Windows安装详解

squirrel在windows下的安装文档 一&#xff0e;下载安装 从网址http://www.squirrelsql.org/下载相应版本的squirrel的安装jar包&#xff0c;比如下载squirrel-sql-3.7-standard.jar双击安装&#xff0c;出现如下安装界面&#xff0c;下一步开始安装 二&#xff0e;配置连接p…

Squirrel状态机-从原理探究到最佳实践

作者&#xff1a;京东物流 郑朋辉 1 简介 Squirrel状态机是一种用来进行对象行为建模的工具&#xff0c;主要描述对象在它的生命周期内所经历的状态&#xff0c;以及如何响应来自外界的各种事件。比如订单的创建、已支付、发货、收获、取消等等状态、状态之间的控制、触发事件…

squirrel(松鼠)状态机的介绍及使用

squirrel&#xff08;松鼠&#xff09;状态机 依赖 <dependency><groupId>org.squirrelframework</groupId><artifactId>squirrel-foundation</artifactId><version>0.3.8</version> </dependency>状态机描述 参考&#xf…

将图片转换为base64编码

1、base64编码简介 Base64是一种可逆的编码方式&#xff0c;简单来讲就是一种将64个Ascii字符来表示成二进制数据的方法。主要用于将不可打印的字符转换成可打印字符&#xff0c;或者简单的说将二进制数据编码成Ascii字符。Base64是网络上最常用的传输8bit字节数据的编码方式之…

前端理解base64

一、背景&#xff1a;ascii码 字符>二进制 计算机中所有数据的存储都是以二进制模式&#xff0c;比如想要存储abcd需将其转化为二进制&#xff0c;具体用哪些二进制来表示哪个符号*&#xff0c;有一个统一的编码规则&#xff0c;这就是ascii。 ASCII 码使用指定的7 位或8…

Web 图片Base64编码

转载自: 【前端攻略】&#xff1a;玩转图片Base64编码 引言   图片处理在前端工作中可谓占据了很重要的一壁江山。而图片的 base64 编码可能相对一些人而言比较陌生&#xff0c;本文不是从纯技术的角度去讨论图片的 base64 编码。标题略大&#xff0c;不过只是希望通过一些…

base64编码解码器【C++】

在线编码解码工具https://base64.us/所有结果可以使用上述网站检验。 什么是base64编码&#xff1f; base64编码是一种编码方式 用64 1 个字符表示字符 本质是将三位8比特字符扩增为四位8比特字符&#xff0c;但是这么说开始可能很闷逼。 给个图&#xff0c;这个编码是以3字…

前端图片在线转换Base64 图片编码Base64

首先讲一下什么是图片Base64编码&#xff1a; 简单来说&#xff0c;图片的base64编码就是可以将一副图片数据编码成一串字符串&#xff0c;使用该字符串代替图像地址。 为什么要用Base64&#xff1f; 我们知道&#xff0c;我们所看到的网页上的每一个图片&#xff0c;都是需…

理解图片base64编码

什么是编码解码 编码&#xff1a;利用特定的算法&#xff0c;对原始内容进行处理&#xff0c;生成运算后的内容&#xff0c;形成另一种数据的表现形式&#xff0c;可以根据算法&#xff0c;再还原回来&#xff0c;这种操作称之为编码。 解码&#xff1a;利用编码使用的算法的…