文章目录

  • 一、理论基础
    • 1、供需优化算法
      • (1)SDO算法初始化
      • (2)商品均衡数量与均衡价格
      • (3)供给函数和需求函数
    • 2、SDO算法伪代码
  • 二、仿真实验与分析
    • 1、函数测试与数值分析
    • 2、求解焊接梁设计优化问题
    • 3、WSN覆盖优化
  • 三、参考文献

一、理论基础

1、供需优化算法

供需优化(Supply-demand-based optimization, SDO)算法是Zhao等于2019年受经济学供需机制的启发而提出的一种新型元启发式优化算法。该算法在数学上模拟了消费者的需求关系和生产者的供给关系,通过将供求机制之稳定模式和非稳定模式引入到SDO算法中,利用两种模式在给定空间中进行局部搜索和全局搜索求解待优化问题。与传统群智能算法相比,SDO算法收敛速度快、寻优精度高、调节参数少,具有较好的探索和开发能力。

(1)SDO算法初始化

假设有nnn个市场,每个市场有ddd种不同的商品,每种商品都有一定的数量和价格。市场中ddd种商品价格表示优化问题ddd维变量的一组候选解,同时将市场中d种商品数量作为一组可行解进行评估,如果可行解优于候选解,则可行解替换候选解。nnn个市场商品价格和商品数量分别用XXX、YYY两个矩阵表:X=[x1x2⋮xn]=[x11x12⋯⋯x1dx21x22⋯⋯x2d⋮⋮⋮⋮⋮xn1xn2⋯⋯xnd](1)X=\begin{bmatrix}x_1\\x_2\\\vdots\\x_n\end{bmatrix}=\begin{bmatrix} x_{1}^1 & x_{1}^2 & \cdots & \cdots & x_{1}^d \\x_{2}^1 & x_{2}^2 & \cdots & \cdots & x_{2}^d\\\vdots & \vdots & \vdots & \vdots & \vdots\\x_{n}^1 & x_{n}^2 & \cdots & \cdots & x_{n}^d \\\end{bmatrix}\tag{1}X=⎣⎢⎢⎢⎡​x1​x2​⋮xn​​⎦⎥⎥⎥⎤​=⎣⎢⎢⎢⎡​x11​x21​⋮xn1​​x12​x22​⋮xn2​​⋯⋯⋮⋯​⋯⋯⋮⋯​x1d​x2d​⋮xnd​​⎦⎥⎥⎥⎤​(1)Y=[y1y2⋮yn]=[y11y12⋯⋯y1dy21y22⋯⋯y2d⋮⋮⋮⋮⋮yn1yn2⋯⋯ynd](2)Y=\begin{bmatrix}y_1\\y_2\\\vdots\\y_n\end{bmatrix}=\begin{bmatrix} y_{1}^1 & y_{1}^2 & \cdots & \cdots & y_{1}^d \\y_{2}^1 & y_{2}^2 & \cdots & \cdots & y_{2}^d\\\vdots & \vdots & \vdots & \vdots & \vdots\\y_{n}^1 & y_{n}^2 & \cdots & \cdots & y_{n}^d \\\end{bmatrix}\tag{2}Y=⎣⎢⎢⎢⎡​y1​y2​⋮yn​​⎦⎥⎥⎥⎤​=⎣⎢⎢⎢⎡​y11​y21​⋮yn1​​y12​y22​⋮yn2​​⋯⋯⋮⋯​⋯⋯⋮⋯​y1d​y2d​⋮ynd​​⎦⎥⎥⎥⎤​(2)其中,xix_ixi​和yiy_iyi​分别为第iii个商品的价格和数量;xijx_i^jxij​和yijy_i^jyij​分别为第jjj个商品在第iii个市场中的价格和数量。
利用适应度函数分别对每个市场中的商品价格和数量进行评估,对于nnn个市场,商品价格的适应度为:Fx=[Fx1Fx2⋯Fxn]T(3)F_x=[F_{x_1}\,\,F_{x_2}\,\,\cdots\,\,F_{x_n}]^T\tag{3}Fx​=[Fx1​​Fx2​​⋯Fxn​​]T(3)商品数量的适应度为:Fy=[Fy1Fy2⋯Fyn]T(4)F_y=[F_{y_1}\,\,F_{y_2}\,\,\cdots\,\,F_{y_n}]^T\tag{4}Fy​=[Fy1​​Fy2​​⋯Fyn​​]T(4)

(2)商品均衡数量与均衡价格

假设每种商品的均衡价格x0x_0x0​和均衡数量y0y_0y0​在每次迭代过程中都是可变的,从每个市场商品数量集合中选择一种商品数量作为其数量均衡向量,其市场适应度值越大,表示每个市场所选商品数量的概率就越大。同时,每个市场也可以根据其概率从商品价格集合中选择一种商品价格或以所有市场商品价格的平均值作为均衡价格。商品均衡数量y0y_0y0​表示如下:Ni=∣Fyi−1n∑i=1nFyi∣(5)N_i=\left|F_{y_i}-\frac1n\sum_{i=1}^nF_{y_i}\right|\tag{5}Ni​=∣∣∣∣∣​Fyi​​−n1​i=1∑n​Fyi​​∣∣∣∣∣​(5)Q=N∑i=1nNi(6)Q=\frac{N}{\displaystyle\sum_{i=1}^nN_i}\tag{6}Q=i=1∑n​Ni​N​(6)y0=yk,k=RouletteWheelSelection(Q)(7)y_0=y_k,\quad k=\text{RouletteWheelSelection}(Q)\tag{7}y0​=yk​,k=RouletteWheelSelection(Q)(7)商品均衡价格x0x_0x0​表示如下:Mi=∣Fxi−1n∑i=1nFxi∣(8)M_i=\left|F_{x_i}-\frac1n\sum_{i=1}^nF_{x_i}\right|\tag{8}Mi​=∣∣∣∣∣​Fxi​​−n1​i=1∑n​Fxi​​∣∣∣∣∣​(8)P=M∑i=1nMi(9)P=\frac{M}{\displaystyle\sum_{i=1}^nM_i}\tag{9}P=i=1∑n​Mi​M​(9)x0={r1⋅∑i=1nxinifrand<0.5xk,k=RouletteWheelSelection(P)ifrand≥0.5(10)x_0=\begin{dcases}r_1\cdot\frac{\displaystyle\sum_{i=1}^nx_i}{n}\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\,\, if \,\,rand<0.5\\x_k,\,\,k=\text{RouletteWheelSelection}(P)\quad if \,\,rand≥0.5\end{dcases}\tag{10}x0​=⎩⎪⎪⎪⎨⎪⎪⎪⎧​r1​⋅ni=1∑n​xi​​ifrand<0.5xk​,k=RouletteWheelSelection(P)ifrand≥0.5​(10)其中,r1r_1r1​是[0,1][0,1][0,1]中的随机数。

(3)供给函数和需求函数

依据均衡数量y0y_0y0​、均衡价格x0x_0x0​分别给出供给函数和需求函数:yi(t+1)=y0+α⋅(xi(t)−x0)(11)y_i(t+1)=y_0+\alpha\cdot(x_i(t)-x_0)\tag{11}yi​(t+1)=y0​+α⋅(xi​(t)−x0​)(11)xi(t+1)=x0−β⋅(yi(t+1)−y0)(12)x_i(t+1)=x_0-\beta\cdot(y_i(t+1)-y_0)\tag{12}xi​(t+1)=x0​−β⋅(yi​(t+1)−y0​)(12)其中,xi(t)x_i(t)xi​(t)和yi(t)y_i(t)yi​(t)分别为第ttt次迭代第iii个商品价格和数量;α\alphaα和β\betaβ分别为需求权重和供给权重,通过调整α\alphaα、β\betaβ对均衡价格和均衡数量进行更新。
将式(11)插入式(12)中,可以将需求算式重写为:xi(t+1)=x0−αβ⋅(xi(t)−x0)(13)x_i(t+1)=x_0-\alpha\beta\cdot(x_i(t)-x_0)\tag{13}xi​(t+1)=x0​−αβ⋅(xi​(t)−x0​)(13)可以发现,从这个方程中,商品价格实际上是根据均衡价格相对于其当前价格进行更新的。通过调整权重α\alphaα和β\betaβ的值,可以得到不同的商品价格向量。为了在SDO中进行勘探和开发,需要适当地给出供给权重α\alphaα和需求权重β\betaβ。这两个权重可以表示为:α=2⋅(T−t+1)T⋅sin⁡(2πr)(14)\alpha=\frac{2\cdot(T-t+1)}{T}\cdot\sin(2\pi r)\tag{14}α=T2⋅(T−t+1)​⋅sin(2πr)(14)β=2⋅cos⁡(2πr)(15)\beta=2\cdot\cos(2\pi r)\tag{15}β=2⋅cos(2πr)(15)其中,TTT为最大迭代次数,rrr为[0,1][0,1][0,1]中的随机数。用变量LLL表示供应权重α\alphaα和需求权重β\betaβ的乘积,可以得到:L=αβ=4⋅(T−t+1)T⋅sin⁡(2πr)⋅cos⁡(2πr)(16)L=\alpha\beta=\frac{4\cdot(T-t+1)}{T}\cdot\sin(2\pi r)\cdot\cos(2\pi r)\tag{16}L=αβ=T4⋅(T−t+1)​⋅sin(2πr)⋅cos(2πr)(16)变量LLL有助于SDO算法在勘探和开发之间平稳过渡。∣L∣<1|L|<1∣L∣<1属稳定模式,通过调整供应权重α\alphaα和需求权重β\betaβ得到均衡价格x0x_0x0​周围不同的商品价格,这些商品价格可以通过随机数r在当前价格和均衡价格之间随机变化,稳定模式机制强调“开发”以改善SDO算法的局部勘探能力。∣L∣>1|L|>1∣L∣>1属非稳定模式,它允许任何市场中的商品价格远离均衡价格,非稳定模式机制迫使每个市场在搜索空间中加强“勘探”未知区域以提高SDO算法的全局搜索能力。
图1描述了变量LLL迭代的值,其中最大迭代次数TTT设置为1000。如图所示,在早期迭代中,LLL值大于1或小于-1的概率很高。随着迭代次数的增加,这种高概率开始减少,函数值在[−1,1][-1,1][−1,1]中的概率也在增加。在以后的迭代中,LLL值在[−1,1][-1,1][−1,1]中的概率越来越高。显然,SDO在迭代的早期阶段得到了高度的探索,并在迭代的后期阶段平滑地切换到高度开发。

图1 LLL随迭代次数变化的值

2、SDO算法伪代码

SDO通过随机创建一组市场开始优化。在每次迭代中,市场的每个商品数量都会根据均衡价格和均衡数量进行更新,然后市场的每个商品价格都会根据均衡价格进行更新。均衡价格可以根据其在价格数组中的概率和商品价格的平均值在价格数组中选择的商品价格之间随机切换。均衡数量根据其概率从商品数量中选择。商品价格和数量的更新是通过调整α\alphaα和β\betaβ的权重值来实现的。为了进行探索或开发,变量LLL的值随随机波动而降低。当∣L∣>1| L |>1∣L∣>1时,市场商品价格倾向于偏离均衡价格,当∣L∣<1| L |<1∣L∣<1时,市场商品价格趋向于接近均衡价格。然后通过适应度函数对更新后的价格向量和数量向量进行评估。对于每个市场,如果其商品数量的适应度值优于其商品价格的适合度值,则其商品价格将替换为商品数量作为候选解决方案。最终,当满足停止标准时,返回市场的最佳商品价格向量,作为迄今为止找到的最佳解决方案。SDO算法的伪代码如图2所示。

图2 SDO算法伪代码

二、仿真实验与分析

1、函数测试与数值分析

将SDO与DE、CS和GSA进行对比,以文献[1]中的F1、F2(单峰函数/30维)、F10、F11(多峰函数/30维)、F18、F19(固定维度多峰函数/2维、3维)为例,种群规模设置为50,最大迭代次数设置为1000,每个算法独立运算30次。结果显示如下:

函数:F1
SDO:最差值: 0,最优值: 0,平均值: 0,标准差: 0
DE:最差值: 3.2459e-12,最优值: 5.1533e-13,平均值: 1.6181e-12,标准差: 7.0789e-13
CS:最差值: 0.018637,最优值: 0.0041907,平均值: 0.00925,标准差: 0.0035382
GSA:最差值: 3.6491e-17,最优值: 1.1564e-17,平均值: 2.1624e-17,标准差: 6.1163e-18
函数:F2
SDO:最差值: 1.3562e-221,最优值: 8.3254e-250,平均值: 7.4562e-223,标准差: 0
DE:最差值: 5.7666e-08,最优值: 2.3806e-08,平均值: 3.7317e-08,标准差: 7.4574e-09
CS:最差值: 3.9717,最优值: 0.57752,平均值: 1.4775,标准差: 0.79205
GSA:最差值: 3.266e-08,最优值: 1.6686e-08,平均值: 2.367e-08,标准差: 3.7802e-09
函数:F10
SDO:最差值: 8.8818e-16,最优值: 8.8818e-16,平均值: 8.8818e-16,标准差: 0
DE:最差值: 4.571e-07,最优值: 1.6143e-07,平均值: 3.3331e-07,标准差: 6.7617e-08
CS:最差值: 10.2657,最优值: 1.8735,平均值: 4.2762,标准差: 1.7889
GSA:最差值: 4.5218e-09,最优值: 2.813e-09,平均值: 3.6258e-09,标准差: 4.4603e-10
函数:F11
SDO:最差值: 0,最优值: 0,平均值: 0,标准差: 0
DE:最差值: 1.3385e-10,最优值: 2.8634e-12,平均值: 2.7485e-11,标准差: 3.4877e-11
CS:最差值: 0.16107,最优值: 0.031708,平均值: 0.10017,标准差: 0.029381
GSA:最差值: 7.3898,最优值: 2.1345,平均值: 4.2402,标准差: 1.4944
函数:F18
SDO:最差值: 3,最优值: 3,平均值: 3,标准差: 1.1516e-15
DE:最差值: 3,最优值: 3,平均值: 3,标准差: 1.9877e-15
CS:最差值: 3,最优值: 3,平均值: 3,标准差: 1.0066e-15
GSA:最差值: 3,最优值: 3,平均值: 3,标准差: 1.7897e-15
函数:F19
SDO:最差值: -3.8628,最优值: -3.8628,平均值: -3.8628,标准差: 2.7101e-15
DE:最差值: -3.8628,最优值: -3.8628,平均值: -3.8628,标准差: 2.7101e-15
CS:最差值: -3.8628,最优值: -3.8628,平均值: -3.8628,标准差: 2.7101e-15
GSA:最差值: -3.0822,最优值: -3.8628,平均值: -3.5463,标准差: 0.25706

结果表明,SDO算法能够在探索、开发、避免局部最优和收敛速度方面得到很好的结果。

2、求解焊接梁设计优化问题

焊接梁设计问题具体请参考这里。仿真实验中,5种算法的运行次数、种群规模和最大迭代次数都保持一致,即N=50,T=500N=50,T=500N=50,T=500,每种算法分别独立运行30次。结果显示如下:

DE:最差值: 3.3615,最优值: 1.9778,平均值: 2.7004,标准差: 0.39933,秩和检验: 3.0199e-11
CS:最差值: 1.7015,最优值: 1.6957,平均值: 1.6975,标准差: 0.0014562,秩和检验: 3.0199e-11
GSA:最差值: 4.1401,最优值: 2.0054,平均值: 2.9979,标准差: 0.55662,秩和检验: 3.0199e-11
SDO:最差值: 1.6952,最优值: 1.6952,平均值: 1.6952,标准差: 9.0225e-08,秩和检验: 1

实验结果表明:SDO在求解焊接梁设计约束优化问题时具有优越的性能。

3、WSN覆盖优化

本文采用0/1覆盖模型。设监测区域为50m×50m50 m×50 m50m×50m的二维平面,传感器节点个数N=35N=35N=35,其感知半径是Rs=5mR_s=5mRs​=5m,通信半径Rc=10mR_c=10mRc​=10m,迭代500次。初始部署、SDO优化覆盖、SDO算法覆盖率进化曲线如下图所示。
初始部署和最终部署的节点位置及对应的覆盖率分别为:

初始位置:
5.6582     37.4245
23.1577     34.8591
13.2724     24.4803
24.8642     12.5946
32.7883     46.4487
7.8353     18.4138
18.3774     3.5258
45.8099     36.9291
44.0056     21.116
18.9288     41.8486
3.3807     14.3399
26.4406     37.2905
45.614     47.6354
19.0823     6.0845
24.7767     48.3064
0.37507     23.0336
3.4123     46.5971
40.1028     0.58516
15.0606     38.449
7.1656     26.5867
18.9867     30.3204
19.7615     16.8684
44.2607     28.5768
18.9665     9.827
12.8224     36.2787
34.4507     24.5613
42.4493     39.2337
25.6159     26.5446
35.0056     35.9155
1.704     2.3365
22.2871     32.6603
28.7723     47.0198
12.7802     45.1629
48.4652     2.7958
38.0223     34.0163
初始覆盖率:0.71434
最优位置:
18.2297     17.9504
46.7946     27.2327
22.4647     1.391
40.6251     40.5068
33.4091     3.8476
27.6412     46.6652
27.3794     15.8952
20.737     38.5994
45.3512     18.2282
3.7902     5.3513
14.9054     31.161
17.3529     46.7079
36.5573     12.9072
33.2656     31.4272
29.3992     40.5606
9.3408     13.7054
46.8982     32.6605
11.3766     39.3557
9.9051     25.4657
12.6419     2.6447
4.1495     45.4464
40.237     24.8203
45.8554     10.4365
17.888     9.546
25.0576     21.2343
34.3161     21.9932
24.7155     31.6475
37.1252     46.899
3.5699     22.2425
42.872     5.7517
18.1397     25.8205
37.4114     34.7203
26.4583     9.4486
3.3356     35.3194
47.1419     45.7288
最优覆盖率:0.89081

实验结果表明,SDO能够有效提升WSN的覆盖率,使节点分布更加均匀。

三、参考文献

[1] W. Zhao, L. Wang, Z. Zhang. Supply-Demand-Based Optimization: A Novel Economics-Inspired Algorithm for Global Optimization[J]. IEEE Access, 2019, 7: 73182-73206.
[2] 崔东文, 李代华. 基坑变形预测的改进供需优化算法-指数幂乘积模型[J]. 水利水电科技进展, 2020, 40(4): 43-50.

基于供需优化算法的函数寻优及工程优化应用相关推荐

  1. 基于人工兔优化算法的函数寻优和工程优化

    文章目录 一.理论基础 1.人工兔优化算法 (1)绕道觅食(探索) (2)随机躲藏(开发) (3)能量收缩(从探索转向开发) 2.ARO算法伪代码 二.仿真实验与结果分析 1.函数寻优 2.工程优化 ...

  2. 基于人工蜂鸟算法的函数寻优及工程优化应用

    文章目录 一.理论基础 1.人工蜂鸟算法 (1)初始化 (2)引导觅食 (3)区域性觅食 (4)迁徙觅食 2.AHA伪代码 二.仿真实验与分析 1.函数测试与数值分析 2.求解压缩弹簧设计优化问题 3 ...

  3. 基于向量加权平均算法的函数寻优和工程优化

    文章目录 一.理论基础 1.向量加权平均算法 (1)更新规则阶段 (2)向量合并阶段 (3)局部搜索阶段 2.INFO算法伪代码 二.仿真实验与分析 1.函数优化 2.工程优化 三.参考文献 一.理论 ...

  4. 基于蚁群算法的函数寻优算法

    文章目录 一.理论基础 二.案例背景 1.问题描述 2.解题思路及步骤 三.MATLAB程序实现 1.清空环境变量 2.初始化参数 3.构建解空间和目标函数 4.迭代寻优 5.结果显示 6.绘图 四. ...

  5. 基于火鹰优化算法的函数寻优算法

    文章目录 一.理论基础 1.火鹰优化算法 2.FHO算法伪代码 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.火鹰优化算法 文献[1]提出了火鹰优化算法(Fire Hawk Optimize ...

  6. 简单粒子群优化算法的函数寻优

    原文链接:http://blog.csdn.net/on2way/article/details/44699223 一:关于粒子群算法 粒子群算法是一种智能优化算法.关于智能,个人理解,不过是在枚举法 ...

  7. 基于蛾群算法的函数寻优算法

    文章目录 一.理论基础 1.蛾群算法 (1)探路阶段 (2)勘探阶段 (3)观察阶段 2.MSA算法流程 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.蛾群算法 蛾群算法(Moth swar ...

  8. 基于沙猫群优化算法的函数寻优算法

    文章目录 一.理论基础 1.沙猫群优化算法 (1)初始化种群 (2)搜索猎物(探索) (3)攻击猎物(开发) (4)探索和开发 2.SCSO算法伪代码 二.仿真实验与结果分析 三.参考文献 一.理论基 ...

  9. 基于蜉蝣优化算法的函数寻优算法

    文章目录 一.理论基础 1.蜉蝣优化算法 (1)雄性蜉蝣的更新 (2)雌性蜉蝣的更新 (3)蜉蝣的交配过程 2.MA算法伪代码 二.仿真实验与结果分析 1.函数测试与数值分析 2.WSN三维覆盖优化 ...

  10. 基于金豺优化算法的函数寻优算法

    文章目录 一.理论基础 1.金豺优化算法 (1)搜索空间公式 (2)探索阶段或搜索猎物 (3)开发阶段或围捕和突袭猎物 (4)从探索转向开发 2.GJO伪代码 二.仿真实验与结果分析 三.参考文献 一 ...

最新文章

  1. [DeeplearningAI笔记]序列模型2.3-2.5余弦相似度/嵌入矩阵/学习词嵌入
  2. Settings(系统设置app)
  3. XML编辑器之XMLSpy2005
  4. 使用“override”声明的成员函数不能重写基类成员_C++日志(三十五)虚基类与其子类的构造函数...
  5. 使用 commander inquirer 构建专业的node cli
  6. 如何查询高考2021普体成绩,中考体育成绩对照表2020
  7. Android获取最新发送短信的基本信息,没有之一
  8. 《Python编程从入门到实践》记录之Python处理CSV文件数据
  9. 使用frp实现将内网映射到公网 无需花生壳
  10. java提示程序包有问题_如何解决安装java时出现程序包有问题不能运行的问题?...
  11. php7 libiconv,CentOS 7下编译libiconv
  12. BeanUtils与PropertyUtils区别
  13. 《工业设计史》第八章:20世纪20、30年代的流行风格
  14. 100m光纤测速多少正常_100M的光纤电信宽带,用手机测速时,为什么只有40M?
  15. BlenderProc安装bop_toolkit问题
  16. sql时间转换时分秒_sql秒转换成时分秒格式
  17. The machine learning algorithm cheat sheet
  18. k3s+traefik+cert-manager+letsencrypt实现web服务全https
  19. 用sort对vector排序(转载)
  20. caffe学习(4)数据层

热门文章

  1. Unity | 实现粘贴、复制功能
  2. java speex回声消除_android 利用speex 音频降噪,回声消除demo
  3. 计算三维空间中点到三角形平面的最短距离
  4. DBUtils工具类的使用方法详解
  5. 链表的实现(C语言)
  6. 要做飞思卡尔智能车要学哪些知识?
  7. 软件开发过程学习笔记(一)之软件开发流程
  8. Docker 清理数据卷 volumes
  9. QQ坦白说解密解决方案(二)
  10. CSS盒子模型、浮动+例子分析