智能优化算法:供需优化算法
摘要:供需优化(supply-demand-based optimization,SDO)算法是 Zhao 等于 2019 年受经济学供需机制的启发而提出的一种新型元启发式优化算法。该算法在数学上模拟了消费者的需求关系和生产者的供给关系,通过将供求机制之稳定模式和非稳定模式引入到 SDO 算法中,利用两种模式在给定空间中进行局部搜索和全局搜索求解待优化问题。与传统群智能算法相比,SDO 算法收敛速度快、寻优精度高、调节参数少,具有较好的探索和开发能力。
1.算法原理
SDO 数学描述简述如下:
(1) SDO 算法初始化。假设有
n
n
n 个市场,每个市场有
d
d
d 种不同的商品,每种商品都有一定的数量和价格。市场中
d
d
d 种商品价格表示优化问题
d
d
d 维变量的一组候选解,同时将市场中
d
d
d 种商品数量作为一组可行解进行评估,如果可行解优于候选解,则可行解替换候选解。
n
n
n 个市场商品价格和商品数量分别用
X
X
X、
Y
Y
Y 两个矩阵表示:
X
=
[
x
1
x
2
.
.
.
x
n
]
=
[
x
11
x
12
.
.
.
x
1
d
x
21
x
22
.
.
.
x
2
d
.
.
.
x
n
1
x
n
2
.
.
.
x
n
d
]
(1)
X = \left[\begin{matrix}x_1\\x_2\\...\\x_n\end{matrix}\right]=\left[\begin{matrix}x_{11}&x_{12}&...&x_{1d}\\x_{21}&x_{22}&...&x_{2d}\\...\\x_{n1}&x_{n2}&...&x_{nd}\end{matrix}\right]\tag{1}
X=⎣⎢⎢⎡x1x2...xn⎦⎥⎥⎤=⎣⎢⎢⎡x11x21...xn1x12x22xn2.........x1dx2dxnd⎦⎥⎥⎤(1)
Y = [ y 1 y 2 . . . y n ] = [ y 11 y 12 . . . y 1 d x 21 y 22 . . . y 2 d . . . y n 1 y n 2 . . . y n d ] (2) Y = \left[\begin{matrix}y_1\\y_2\\...\\y_n\end{matrix}\right]=\left[\begin{matrix}y_{11}&y_{12}&...&y_{1d}\\x_{21}&y_{22}&...&y_{2d}\\...\\y_{n1}&y_{n2}&...&y_{nd}\end{matrix}\right]\tag{2} Y=⎣⎢⎢⎡y1y2...yn⎦⎥⎥⎤=⎣⎢⎢⎡y11x21...yn1y12y22yn2.........y1dy2dynd⎦⎥⎥⎤(2)
式中: x i x_i xi 和 y i y_i yi分别为第 i i i个商品价格和数量; x i j x_{ij} xij 和 y i j y_{ij} yij分别为第 j j j个商品在第 i i i 个市场中的价格和数量。
利用适应度函数分别对每个市场中的商品价格和数量进行评估,对于
n
n
n个市场,商品价格和商品数量的适应度分别为:
{
F
x
=
(
F
x
1
,
F
x
2
,
.
.
.
,
F
x
3
)
F
y
=
(
F
y
1
,
F
y
2
,
.
.
.
,
F
y
n
)
(3)
\begin{cases}F_x = (F_{x1},F_{x_2},...,F_{x3})\\ F_y = (F_{y1},F_{y2},...,F_{yn}) \end{cases}\tag{3}
{Fx=(Fx1,Fx2,...,Fx3)Fy=(Fy1,Fy2,...,Fyn)(3)
(2)商品均衡数量与均衡价格。假设每种商品的均衡价格
x
0
x_0
x0和均衡数量
y
0
y_0
y0在每次迭代过程中都是可变的,从每个市场商品数量集合中选择一种商品数量作为其数量均衡向量,其市场适应度值越大,表示每个市场所选商品数量的概率就越大。同时,每个市场也可以根据其概率从商品价格集合中选择一种商品价格或以所有市场商品价格的平均值作为均衡价格。商品均衡数量
y
0
y_0
y0表示如下:
y
0
=
y
k
,
k
=
R
(
Q
)
(4)
y_0=y_k,k=R(Q)\tag{4}
y0=yk,k=R(Q)(4)
其中:
Q
=
F
y
∑
i
=
1
n
∣
F
y
i
−
∑
i
=
1
n
F
y
i
/
n
∣
Q=\frac{F_y}{\sum_{i=1}^n|F_{yi}-\sum_{i=1}^nF_{yi}/n|}
Q=∑i=1n∣Fyi−∑i=1nFyi/n∣Fy
F y i = { 1 1 + f ( y i ) , f ( y i ) > 0 1 1 − f ( y i ) , e l s e Fy_i=\begin{cases}\frac{1}{1+f(y_i)},f(y_i)>0\\ \frac{1}{1-f(y_i)},else\end{cases} Fyi={1+f(yi)1,f(yi)>01−f(yi)1,else
式中: f ( y i ) f(y_i ) f(yi)为商品数量 y i y_i yi 的适应度值; R ( . ) R(.) R(.)为比选算子(roulette wheel selection)。
商品均衡价格
x
0
x_0
x0表示如下:
x
0
=
{
r
∑
i
=
1
n
x
i
/
n
,
r
<
0.5
x
k
,
k
=
R
(
P
)
,
r
1
≥
0.5
(5)
x_0 = \begin{cases}r\sum_{i=1}^nx_i/n ,r<0.5\\ x_k,k=R(P),r_1\geq0.5\end{cases}\tag{5}
x0={r∑i=1nxi/n,r<0.5xk,k=R(P),r1≥0.5(5)
其中:
P
=
F
x
/
∑
i
=
1
n
∣
F
x
i
−
∑
i
=
1
n
F
x
i
∣
P=F_x/\sum_{i=1}^n|F_{xi}-\sum_{i=1}^nF_{x_i}|
P=Fx/i=1∑n∣Fxi−i=1∑nFxi∣
F y i = { 1 1 + f ( x i ) , f ( x i ) > 0 1 1 − f ( x i ) , e l s e Fy_i=\begin{cases}\frac{1}{1+f(x_i)},f(x_i)>0\\ \frac{1}{1-f(x_i)},else\end{cases} Fyi={1+f(xi)1,f(xi)>01−f(xi)1,else
式中: f ( x i ) f(x_i) f(xi)为商品价格 x i x_i xi的适应度值; r 、 r 1 r、r_1 r、r1 为[0,1]中的随机数。
供给函数和需求函数。依据均衡数量
y
0
y_0
y0、均衡价格
x
0
x_0
x0分别给出供给函数和需求函数:
y
i
,
t
+
1
=
y
0
−
α
(
x
i
,
t
−
x
0
)
(6)
y_{i,t+1}=y_0-\alpha(x_{i,t}-x_0)\tag{6}
yi,t+1=y0−α(xi,t−x0)(6)
x i , t + 1 = x 0 + β ( y i , t − y 0 ) (7) x_{i,t+1}=x_0+\beta(y_{i,t}-y_0)\tag{7} xi,t+1=x0+β(yi,t−y0)(7)
式中: x i , t x_{i,t} xi,t 和 y i , t y_{i,t} yi,t分别为第 t t t 次迭代第 i i i个商品价格和数量; α α α 和 β β β 分别为需求权重和供给权重,通过调整 α 、 β α、β α、β 对均衡价格和均衡数量进行更新。
将式(6)插入式(7)中,可以将需求算式重写为:
x
i
,
t
+
1
=
x
0
−
α
β
(
x
i
,
t
−
x
0
)
(8)
x_{i,t+1}=x_0-\alpha\beta(x_{i,t}-x_0)\tag{8}
xi,t+1=x0−αβ(xi,t−x0)(8)
供应权重
α
α
α 和需求权重
β
β
β 分别为:
α
=
2
(
T
−
t
+
1
)
T
s
i
n
(
2
π
r
)
(9)
\alpha = \frac{2(T-t+1)}{T}sin(2\pi r)\tag{9}
α=T2(T−t+1)sin(2πr)(9)
β = 2 c o s ( 2 π r ) (10) \beta = 2cos(2\pi r) \tag{10} β=2cos(2πr)(10)
式中:
T
T
T为最大迭代次数。用变量
L
L
L表示供应权重
α
α
α和需求权重
β
β
β的乘积,可以得到:
L
=
α
β
=
4
(
T
−
t
+
1
)
T
s
i
n
(
2
π
r
)
c
o
s
(
2
π
r
)
(11)
L = \alpha \beta=\frac{4(T-t+1)}{T}sin(2\pi r)cos(2\pi r) \tag{11}
L=αβ=T4(T−t+1)sin(2πr)cos(2πr)(11)
变量
L
L
L有助于 SDO 算法在勘探和开发之间平稳过渡。
L
<
1
L<1
L<1 属稳定模式,通过调整供应权重
α
α
α 和需求权重
β
β
β 得到均衡价格
x
0
x_0
x0 周围不同的商品价格,这些商品价格可以通过随机数
r
r
r 在当前价格和均衡价格之间随机变化,稳定模式机制强调“开发”以改善SDO 算法的局部勘探能力。
L
>
1
L>1
L>1 属非稳定模式,它允许任何市场中的商品价格远离均衡价格,非稳定模式机制迫使每个市场在搜索空间中加强“勘探”未知区域以提高 SDO 算法的全局搜索能力。
算法步骤:
step1:设置 SDO 算法市场群体数 N N N,最大迭代次数 T T T,问题维度,搜索空间。随机初始化商品价格 x i x_i xi 和商品数量 y i y_i yi ,令当前迭代次数 t=0。
step2:计算商品价格 x i x_i xi和商品数量 y i y_i yi的适应度值 F x i F_{xi} Fxi和 F y i F_{yi} Fyi ,如果 F y i F_{yi} Fyi 优于 F x i F_{xi} Fxi,则用 y i y_i yi 代替 x i x_i xi ,保存 x b e s t x_{best} xbest 为当前最优解。
step3确定供应权重 α α α和需求权重 β β β
step4:对于每个市场,利用式(4)确定均衡数量 y 0 y_0 y0 ;利用式(5)确定均衡价格 x 0 x _0 x0。
step5:利用式(6) 更新商品数量 y i y_i yi;利用式(7)更新商品价格 x i x_i xi 。基于式(14)计算商品价格 x i x_i xi 和商品数量 y i y_i yi 的适应度值 F x i F_{xi} Fxi 和 F y i F_{yi} Fyi,如果 F y i F_{yi} Fyi 优于 F x i F_{xi} Fxi ,则用 y i y_i yi 代替 x i x_i xi ,保存 x b e s t x_{best} xbest 为当前最优解。
step6:令 t=t+1。判断算法是否达到终止条件,若是,输出最优解 x best ,算法结束;否则重复step2~step6。
2.实验结果
3.参考文献
[1] Engineering; Hebei University of Engineering Details Findings in Engineering (Supply-demand-based Optimization: a Novel Economics-inspired Algorithm for Global Optimization)[J]. Journal of Engineering,2019,{4}{5}:
[1]崔东文,李代华.基坑变形预测的改进供需优化算法-指数幂乘积模型[J].水利水电科技进展,2020,40(04):43-50.
4.Matlab
个人资料介绍