前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人工智能算法:基于Matlab的INFO向量加权平均优化算法的实现细节及其实现原理

人工智能算法:基于Matlab的INFO向量加权平均优化算法的实现细节及其实现原理

作者头像
用户1143655
发布2023-02-23 11:54:28
1.6K0
发布2023-02-23 11:54:28
举报
文章被收录于专栏:全栈之殇

!! ✨ Matlab版本为R2022b,与以前的版本兼容。本文摘录汇总于:INFO-An Efficient Optimization Algorithm based on Weighted Mean of Vectors-Expert Systems with Applications-ESWA-aliasgharheidaricom-2022.pdf。

向量加权平均(INFO, WeIghted meaN oF vectOrs)是一种改进的加权平均方法,其实现的核心内容即操作算子主要包括:

  • (1)向量位置的更新规则:基于均值法与收敛加速生成新的向量;
  • (2)向量组合:对获得向量与更新规则进行结合,得到一个有希望的解,以提高算法的全局搜索能力;
  • (3)局部搜索:有助于提高算法的精度与收敛性。

一、基于Matlab的INFO向量加权平均优化算法的实现细节

1.1 准备工作

为了实现INFO向量加权平均优化算法,首先需要安装如下两个Matlab第三方包:

1、Matlab INFO加权平均优化算法的第三方工具包

安装方法如下所示,首先如下图所示点击附加功能

在弹出的界面中输入INFO,如下图所示在其中找到INFO:Efficient Optimizer based on Weighted Mean of Vectors。注意,该第三方软件包封装好了INFO算法,可以很方便地通过INFO函数实现INFO加权平均优化问题的求解。

点击它,如下图所示在弹出的界面中依次点击添加

\to

添加到MATLAB

\to

同意,就完成了INFO算法的第三方Matlab工具包的安装。

如下图所示,INFO:Efficient Optimizer based on Weighted Mean of Vectors第三方工具包主要包括三个Matlab函数BenchmarkFunctions.mINFO.minitialization.m

2、Matlab 函数绘制的第三方工具包

附加资源管理器中输入plot_func,找到一个具有plot_func的第三方工具,我这里选择的是Grey Wolf Optimizer (GWO)

1.2 求解问题

本文以求解如下问题的最小值为例:

f(x) = -20 e^{-0.2 \sqrt{\frac{1}{n}\sum_{i=1}^n x_i^2}} - e^{\frac{1}{n}\sum_{i=1}^n \cos(2\pi x_i)} + 20 + e

该函数已经在安装好的INFO:Efficient Optimizer based on Weighted Mean of Vectors中的BenchmarkFunctions.m中的F10实现了,截取具体的实现代码如下图所示:

由上图可以看出,定义问题的边界为

[-32,32]

,维度为

D=30

1.3 INFO加权平均优化算法的Matlab实现代码

代码的实现与注释如下图所示:

代码语言:javascript
复制
% 1、初始参数设置
% (1)种群的个数
nP = 30;
% (2)测试函数名称
Func_name = 'F10';
% (3)最大迭代次数
MaxIt = 500;

% 2、使用BenchmarkFunctions实现测试函数,其返回值的含义如下所示:
% (1)lb:变量下边界;
% (2)ub:变量上边界;
% (3)dim:变量维度;
% (4)fobj:测试函数句柄
[lb,ub,dim,fobj] = BenchmarkFunctions(Func_name);

% 3、使用INFO函数对测试函数进行求解,得到其最小值,其返回值如下所示:
% (1)Best_fitness:目标函数的值;
% (2)Best_Positions:最佳变量值;
% (3)Convergence_curve:学习曲线。
[Best_fitness,Best_Positions,Convergence_curve] = INFO(nP,MaxIt,lb,ub,dim,fobj);

% 4、绘制结果
figure('Position', [290 206 648 287]); subplot(1,2,1);
func_plot(Func_name);
title('Test Function');
xlabel('x_1');  ylabel('x_2');  zlabel([Func_name, 'x_1, x_2'])
shading interp;  light;  lighting phong;  shading interp; box on;

subplot(1,2,2);  hold on
semilogy(Convergence_curve, 'Color', 'r', 'LineWidth', 2);
title('Convergence Curve')
xlabel('Iteration');  ylabel('Best Fitness Obtained So Far');
axis tight;  box on;  legend('INFO')

代码执行结果如下图所示:

由上图可以看出,如公式(1)所示的函数,INFO加权平均向量搜索的最小值的路径为上图的左边图所示,函数的最小值最终收敛到

0

[x_1, x_2]

的取值为

[0, 0]

!! 🚀 注意: 在INFO工具包中的BenchmarkFunctions的函数中实现了F1~F23个测试函数,可以用于测试INFO算法的不同性能。比如,我们可以通过将上面代码中的Func_name = 'F10';修改为Func_name = 'F1';,以查看INFO算法对F1函数计算最小值的结果。具体可以参考INFO-An Efficient Optimization Algorithm based on Weighted Mean of Vectors-Expert Systems with Applications-ESWA-aliasgharheidaricom-2022.pdf。该文献详细介绍了INFO加权平均优化算法原理及试验结果,感兴趣可以仔细阅读,本文在第二部分进行了简要翻译介绍。

二、INFO向量加权平均优化算法原理

2.1 向量加权平均的数学定义

一组向量的平均值可以理解为其位置

x_i

的平均值,并结合向量适应度

w_i

进行加权。下图表示了一组解(向量)的加权平均,其中权重大的解具有更高效的加权平均解。

加权平均可以表示为如下数学公式:

WM = \frac{\sum_{i=1}^N x_i \times w_i}{\sum_{i=1}^N w_i}

其中,

N

为向量的数量。且通过小波函数计算每个向量的权重,小波函数用于在优化过程中构建有效波动。本文使用的母小波如下所示:

w = \cos(x) \times \exp(-\frac{x^2}{\omega})

其中

\omega

表示膨胀系数(dilation parameter)。

如下图所示,(a)与(b)展示了三个向量,(c)展示了它们之间的不同。

三个向量的加权平均(WM, Weighted Mean)可以表示为如下公式:

WM = \frac{w_1 \times (x_1 - x_2) + w_2 \times (x_1 - x_3) + w_3 \times (x_2 - x_3)}{w_1 + w_2 + w_3}

其中,

w_1 = \cos((f(x_1) - f(x_2)) + \pi) \times (- \lvert \frac{f(x_1)-f(x_2)}{\omega} \rvert )
w_2 = \cos((f(x_1) - f(x_3)) + \pi) \times (- \lvert \frac{f(x_1)-f(x_3)}{\omega} \rvert )
w_3 = \cos((f(x_2) - f(x_3)) + \pi) \times (- \lvert \frac{f(x_2)-f(x_3)}{\omega} \rvert )

其中,

f(x)

表示

x

向量的适应函数。

2.2 INFO向量加权平均算法的原理

向量加权平均(INFO, WeIghted meaN oF vectOrs)是一种流行的优化算法,它通过在搜索空间计算一组向量的加权平均来实现。该算法的种群是由一组潜在解组成。INFO算法通过连续更新种群来得到问题的最优解。INFO算法主要包括三个操作算子:

  • 更新规则;
  • 向量组合;
  • 局部搜索。

INFO向量加权平均算法的主要步骤如下所示。

2.2.1 INFO算法初始化

D

维搜索空间中,INFO算法由包括

Np

个向量的种群

X_{lj}^g = {x_{l,1}^g, x_{l,2}^g, ..., x_{l,D}^g}, l = 1,2,...,Np

组成,其中

g

表示进化的代数。INFO算法使用一种成为随机生成的简单方法来生成初始向量。

另外,INFO算法的初始化过程中主要包括两个两个控制参数:

(1)加权权重因子

\delta

(2)比例因子

\sigma

用于缩放向量的加权平均值。

这两个参数可以根据种群的迭代过程动态的更新,不需要用户对其进行调整。

2.2.2 更新规则

1、更新规则整体思路

在INFO算法中,更新规则算子在搜索过程中增加了种群的多样性。更新规则使用向量加权平均值来创建新的向量。实际上,更新规则算子是INFO算法与其他算法的本质区别,它主要由两个部分组成:

  • (1)从一组随机向量的加权均值中提取基于均值的规则,并使用一组随机选择的向量加权均值信息移动到下一个解;
  • (2)进而提高算法的收敛速度,以尽快地收敛到最优解。

INFO算法通过基于最佳、较好与最差解的MeanRule指标来增加种群的多样性,MeanRule可以表示为如下数学公式:

MeanRule = r \times WM1_l^g + (1-r) \times WM2_l^g \ \ l = 1, 2, ..., Np

其中,

WM1_l^g = \delta \times \frac{w_1(x_{a1}-x_{a2})+w_2(x_{a1}-x_{a3})+w_3(x_{a2}-x_{a3})}{w_1 + w_2 + w_3 + \varepsilon} + \varepsilon \times randn, \ \ l = 1,2,...,Np
w_1 = \cos((f(x_{a1}-f(x_{a2}))+\pi) \times \exp \Big(-\lvert \frac{f(x_{a1}-f(x_{a2})}{\omega} \rvert \Big)
w_2 = \cos((f(x_{a1}-f(x_{a3}))+\pi) \times \exp \Big(-\lvert \frac{f(x_{a1}-f(x_{a3})}{\omega} \rvert \Big)
w_3 = \cos((f(x_{a2}-f(x_{a3}))+\pi) \times \exp \Big(-\lvert \frac{f(x_{a2}-f(x_{a3})}{\omega} \rvert \Big)
\omega = \max(f(x_{a1}), f(x_{a2}), f(x_{a3}))
WM2_l^g = \delta \times \frac{w_1(x_{bs}-x_{bt})+w_2(x_{bs}-x_{ws})+w_3(x_{bt}-x_{ws})}{w_1 + w_2 + w_3 + \varepsilon} + \varepsilon \times randn, \ \ l = 1,2,...,Np
w_1 = \cos((f(x_{bs}-f(x_{bt}))+\pi) \times \exp \Big(-\lvert \frac{f(x_{bs}-f(x_{bt})}{\omega} \rvert \Big)
w_2 = \cos((f(x_{bs}-f(x_{ws}))+\pi) \times \exp \Big(-\lvert \frac{f(x_{bs}-f(x_{ws})}{\omega} \rvert \Big)
w_3 = \cos((f(x_{bt}-f(x_{ws}))+\pi) \times \exp \Big(-\lvert \frac{f(x_{bt}-f(x_{ws})}{\omega} \rvert \Big)
\omega = f(x_{ws})

其中,

f(x)

表示目标函数值;

a1 \ne a2 \ne a3 \ne l

表示从

[1, NP]

区间随机选取的整数;

\varepsilon

表示一个非常小的常数;

randn

表示正态分布;

x_{bs}

x_{bt}

x_{ws}

分别表示在

g^{th}

代的种群中最优的、较好的与最差的解向量。

r

表示位于

[0, 0.5]

的一个随机数;

w_1

w_2

w_3

表示三个权重函数,用于计算加权平均向量,以实现INFO算法在全局解空间中搜寻最优解。

考虑到如下两个原因,本文根据小波理论,使用小波函数更新MeanRule空间:

  • (1)使得INFO算法可以在优化过程中有效地震荡,帮助算法更有效地搜索解空间,以获得最佳解;
  • (2)可以实现在小波函数中引入膨胀系数
\omega

对算法的权重函数的振幅进行微调。

2、INFO算法控制参数的更新方法

(1)加权权重因子

\delta

的更新方法如下所示

\delta = 2 \beta \times randn - \beta

其中,

\beta

为一个指数函数:

\beta = 2 e^{-4 \times \frac{g}{Maxg}}

其中,

Maxg

为最大的代数。

(2)比例因子

\sigma

的更新方法如下所示

\sigma = 2\alpha \times randn - \alpha

其中,

\alpha = c e^{-d \times \frac{g}{Maxg}}

其中,

c

d

分别为2和4。注意,较大的

\sigma

使得当前位置偏离加权平均向量;而较小的

\sigma

使得当前位置趋向加权平均向量。

3、INFO算法的收敛加速部分

INFO算法也加入了收敛加速部分(CA, Convergence Acceleration),以提高全局搜索能力,其使用最佳向量在搜索空间中移动当前向量。收敛加速部分可以表示为

CA = randn \times \frac{x_{bs} - x_{a1}}{f(x_{bs})-f(x_{a1}+\varepsilon)}

最终,新的向量可以通过如下公式进行计算:

z_l^g = x_l^g + \sigma \times MeanRule + CA

优化算法通常应该在全局进行搜索以得到搜索域中更优的解空间。相应的,基于

x_{bs}

x_{bt}

x_l^g

x_{a1}^g

的INFO算法的更新规则可以表示为如下两种情况:

rand < 0.5
z1_l^g = x_l^g + \sigma \times MeanRule + randn \times \frac{(x_{bs}-x_{a1}^g)}{(f(x_{bs})-f(x_{a1}^g)+1)}
z2_l^g = x_{bs} + \sigma \times MeanRule + randn \times \frac{(x_{a1}^g-x_{b}^g)}{(f(x_{a1}^g)-f(x_{a2}^g)+1)}
rand > 0.5
z1_l^g = x_a^g + \sigma \times MeanRule + randn \times \frac{(x_{a2}^g-x_{a3}^g)}{(f(x_{a2}^g)-f(x_{a3}^g)+1)}
z2_l^g = x_{bt} + \sigma \times MeanRule + randn \times \frac{(x_{a1}^g-x_{a2}^g)}{(f(x_{a1}^g)-f(x_{a2}^g)+1)}

其中,

z1_l^g

z2_l^g

为第

g^{th}

代的新向量。

2.2.3 向量组合

为了增加INFO的种群多样性,在

rand < 0.5

的情况下,根据如下公式将上面计算得到新向量

z1_l^g

z2_l^g

与向量

x_l^g

结合生成新的第

g^{th}

向量

u_l^g

rand < 0.5
u_l^g = z1_l^g + \mu \cdot \lvert z1_l^g - z2_l^g \rvert
rand > 0.5
u_l^g = z2_l^g + \mu \cdot \lvert z1_l^g - z2_l^g \rvert

其中,

\mu = 0.05 \times randn

2.2.4 局部搜索

有效的局波搜索能力可以防止INFO算法落入局部最优解的情况。INFO算法的局部搜索算子通过考虑全局最优位置

x_{bset}^g

与基于公式(2)的平均规则,对全局最优进一步进行搜索,以达到收敛到全局最优的目的。

基于上面的思路,如下所示,INFO算法生成了一个位于

x_{best}^g

附近的新颖的向量:

rand < 0.5
u_l^g = x_{bs} + randn \times (MeanRule + randn \times (x_{bs}^g-x_{a1}^g))
rand > 0.5
u_l^g = x_{rnd} + randn \times (MeanRule + randn \times (v_1 \times x_{bs} - v_2 \times x_{rnd}))

其中,

x_{rnd} = \phi \times x_{avg} + (1-\phi)\times (\phi \times x_{bt} + (1-\phi) \times x_{bs})
x_{avg} = \frac{x_a+x_b+x_3}{3}

其中,

\phi

表示一个

(0,1)

区间的随机数;

x_{rnd}

为一个随机组合了

x_{avg}

x{bt}

x_{bs}

的新解。这中处理过程增加了INFO算法的随机性,以达到更好的在解空间中进行搜索操作。

v_1

v_2

为两个如下所示的随机数:

v_1 = \begin{cases} 2 \times rand \ \ \ \ &\text{if} \ \ p >0.5 \newline 1 & \text{otherwise} \end{cases}
v_1 = \begin{cases} rand \ \ \ \ &\text{if} \ \ p >0.5 \newline 1 & \text{otherwise} \end{cases}

其中,

p

表示一个

(0,1)

区间一个随机数。

v_1

v_2

的引入增加了最佳位置对矢量的影响。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、基于Matlab的INFO向量加权平均优化算法的实现细节
    • 1.1 准备工作
      • 1.2 求解问题
        • 1.3 INFO加权平均优化算法的Matlab实现代码
        • 二、INFO向量加权平均优化算法原理
          • 2.1 向量加权平均的数学定义
            • 2.2 INFO向量加权平均算法的原理
              • 2.2.1 INFO算法初始化
              • 2.2.2 更新规则
              • 2.2.3 向量组合
              • 2.2.4 局部搜索
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档