基于广义正态分布优化算法的函数寻优算法

2023-11-06 08:50

本文主要是介绍基于广义正态分布优化算法的函数寻优算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、理论基础
    • 1、广义正态分布优化算法
      • (1)局部开发
      • (2)全局探索
    • 2、GNDO算法伪代码
  • 二、仿真实验与结果分析
  • 三、参考文献

一、理论基础

1、广义正态分布优化算法

广义正态分布优化(Generalized normal distribution optimization, GNDO)算法受到正态分布理论的启发。正态分布又称高斯分布,是描述自然现象的重要工具。正态分布可以定义如下:假设一个随机变量 x x x服位置参数 μ \mu μ和尺度参数 δ \delta δ的概率分布,其概率密度函数可以表示为: f ( x ) = 1 2 π δ exp ⁡ ( − ( x − μ ) 2 2 δ 2 ) (1) f(x)=\frac{1}{\sqrt{2\pi\delta}}\exp\left(-\frac{(x-\mu)^2}{2\delta^2}\right)\tag{1} f(x)=2πδ 1exp(2δ2(xμ)2)(1)其中, x x x被称为正态随机变量,这个分布可以称为正态分布,也就是 x ∼ N ( μ , δ 2 ) x\sim N(\mu,\delta^2) xN(μ,δ2)。根据式(1),正态分布包括两个变量,即位置参数 μ \mu μ和尺度参数 δ \delta δ。位置参数 μ \mu μ和尺度参数 δ \delta δ分别用来表示随机变量的均值和标准差。
GNDO中设计的信息共享策略包括局部开发和全局探索。局部开发基于建立的广义正态分布模型,该模型由当前平均位置和当前最优位置引导;全局探索涉及三个随机选择的个体。这两种学习策略的详细解释如下:

(1)局部开发

局部开发是指在包含所有个体当前位置的搜索空间周围找到更好解决方案的过程。基于个体在种群中的分布与正态分布之间的关系,可以通过以下方法建立优化的广义正态分布模型: v i t = μ i + δ i × η , i = 1 , 2 , ⋯ , N (2) \boldsymbol v_i^t=\mu_i+\delta_i\times\eta,\,\,i=1,2,\cdots,N\tag{2} vit=μi+δi×η,i=1,2,,N(2)其中, v i t \boldsymbol v_i^t vit是第 i i i个个体在时间 t t t的轨迹向量, μ i \mu_i μi是第 i i i个个体的广义平均位置, δ i \delta_i δi是广义标准差, η \eta η是惩罚因子。 μ i \mu_i μi δ i \delta_i δi η \eta η可以定义为: μ i = 1 3 ( x i t + x Best t + M ) (3) \mu_i=\frac13(\boldsymbol x_i^t+\boldsymbol x_{\text{Best}}^t+\boldsymbol M)\tag{3} μi=31(xit+xBestt+M)(3) δ i = 1 3 [ ( x i t − μ ) 2 + ( x Best t − μ ) 2 + ( M − μ ) 2 ] (4) \delta_i=\sqrt{\frac13[(\boldsymbol x_i^t-\mu)^2+(\boldsymbol x_{\text{Best}}^t-\mu)^2+(\boldsymbol M-\mu)^2]}\tag{4} δi=31[(xitμ)2+(xBesttμ)2+(Mμ)2] (4) η = { − log ⁡ ( λ 1 ) × cos ⁡ ( 2 π λ 2 ) , if a ≤ b − log ⁡ ( λ 1 ) × cos ⁡ ( 2 π λ 2 + π ) , otherwise (5) \eta=\begin{dcases}\sqrt{-\log(\lambda_1)}\times\cos(2\pi\lambda_2),\quad\quad\,\,\,\,\,\text{if}\,\,a\leq b\\[2ex]\sqrt{-\log(\lambda_1)}\times\cos(2\pi\lambda_2+\pi),\quad\text{otherwise}\end{dcases}\tag{5} η=log(λ1) ×cos(2πλ2),ifablog(λ1) ×cos(2πλ2+π),otherwise(5)其中, a a a b b b λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2是介于0和1之间的随机数, x Best t \boldsymbol x_{\text{Best}}^t xBestt是当前最佳位置, M \boldsymbol M M是当前种群的平均位置。 M \boldsymbol M M计算如下: M = ∑ i = 1 N x i t N (6) \boldsymbol M=\frac{\sum_{i=1}^N\boldsymbol x_i^t}{N}\tag{6} M=Ni=1Nxit(6)

  • 广义平均位置 μ i \mu_i μi。当前最佳个体 x Best t \boldsymbol x_{\text{Best}}^t xBestt包含与全局最优解相关的有用信息。因此,第 i i i个个体 x i t \boldsymbol x_i^t xit被拉向当前最佳个体 x Best t \boldsymbol x_{\text{Best}}^t xBestt的方向,后者有更多机会找到更好的解决方案。请注意,当 x Best t \boldsymbol x_{\text{Best}}^t xBestt陷入局部最优时,所有个体仍会朝 x Best t \boldsymbol x_{\text{Best}}^t xBestt的方向移动,这将导致整个种群过早收敛。为了解决这个问题,引入了当前种群的平均位置 M \boldsymbol M M,如式(6)所示。种群中的个体可以朝着最佳个体 x Best t \boldsymbol x_{\text{Best}}^t xBestt和平均位置 M \boldsymbol M M之间的方向移动。平均位置 M \boldsymbol M M在迭代过程中会发生变化,这有利于找到更好的解决方案。因此,在设计的局部开发策略中引入了平均位置 M \boldsymbol M M,在一定程度上提高了避免局部最优的机会。
  • 广义标准差 δ i \delta_i δi。广义标准差 δ i \delta_i δi用于增强所提出的GNDO的局部搜索能力。基于式(3)和(4),广义标准差 δ i \delta_i δi可以被视为一个随机序列,在广义平均位置 μ i \mu_i μi周围进行局部搜索。此外,根据式(4),第 i i i个个体 x i t \boldsymbol x_i^t xit的位置和平均位置 M \boldsymbol M M与最佳个体 x Best t \boldsymbol x_{\text{Best}}^t xBestt的位置之间的距离越大,生成的随机序列的波动越大。也就是说,当个体 x i t \boldsymbol x_i^t xit的适应度值非常差时,个体找到更好的解决方案的可能性很小。因此,具有强波动的随机序列可以帮助个体寻找更好的解。当个体 x i t \boldsymbol x_i^t xit具有良好的适应值时,个体很有可能在其周围找到更好的解决方案。因此,具有弱波动的随机序列可以帮助个体获得更好的解。
  • 惩罚因子 η \eta η。在GNDO算法中,惩罚因子 η \eta η用于进一步增强生成的广义标准差的随机性。图1显示了由式(5)产生的随机序列。如图1所示,大多数惩罚因子位于-1和1。请注意,生成的广义标准差均为正值。因此,惩罚因子可以增加GNDO的搜索方向,从而提高GNDO的搜索能力。
    在这里插入图片描述
    图1 由式(5)生成的随机序列

(2)全局探索

全局探索是在全局范围内搜索一个有希望的区域。GNDO的全局探索基于三个随机选择的个体,可以表示为: v i t = x i t + β × ( ∣ λ 3 ∣ × v 1 ) ⏟ Local information sharing + ( 1 − β ) × ( ∣ λ 4 ∣ × v 2 ) ⏟ Global information sharing (7) \boldsymbol v_i^t=\boldsymbol x_i^t+\underbrace{\beta\times(|\lambda_3|\times\boldsymbol v_1)}_{\text{Local information sharing}}+\underbrace{(1-\beta)\times(|\lambda_4|\times\boldsymbol v_2)}_{\text{Global information sharing}}\tag{7} vit=xit+Local information sharing β×(λ3×v1)+Global information sharing (1β)×(λ4×v2)(7)其中, λ 3 \lambda_3 λ3 λ 4 \lambda_4 λ4是服从标准正态分布的两个随机数,称为调整参数的β是介于0和1之间的随机数, v 1 \boldsymbol v_1 v1 v 2 \boldsymbol v_2 v2是两个轨迹向量。 v 1 \boldsymbol v_1 v1 v 2 \boldsymbol v_2 v2可通过以下公式计算: v 1 = { x i t − x p 1 t , if f ( x i t ) < f ( x p 1 t ) x p 1 t − x i t , otherwise (8) \boldsymbol v_1=\begin{dcases}\boldsymbol x_i^t-\boldsymbol x_{p1}^t,\quad\text{if}\,\,f(\boldsymbol x_i^t)<f(\boldsymbol x_{p1}^t)\\[2ex]\boldsymbol x_{p1}^t-\boldsymbol x_i^t,\quad\text{otherwise}\end{dcases}\tag{8} v1=xitxp1t,iff(xit)<f(xp1t)xp1txit,otherwise(8) v 2 = { x p 2 t − x p 3 t , if f ( x p 2 t ) < f ( x p 3 t ) x p 3 t − x p 2 t , otherwise (9) \boldsymbol v_2=\begin{dcases}\boldsymbol x_{p2}^t-\boldsymbol x_{p3}^t,\quad\text{if}\,\,f(\boldsymbol x_{p2}^t)<f(\boldsymbol x_{p3}^t)\\[2ex]\boldsymbol x_{p3}^t-\boldsymbol x_{p2}^t,\quad\text{otherwise}\end{dcases}\tag{9} v2=xp2txp3t,iff(xp2t)<f(xp3t)xp3txp2t,otherwise(9)其中, p 1 p1 p1 p 2 p2 p2 p 3 p3 p3是从1到 N N N中选择的三个随机整数,且满足 p 1 ≠ p 2 ≠ p 3 p1\neq p2\neq p3 p1=p2=p3。给定式(8)和式(9),式(7)右侧的第二项可以称为局部学习项,这意味着个体 p 1 p1 p1与个体 i i i共享信息;式(7)右侧的第三项可以称为全局信息共享项,它表示个体 p 2 p2 p2 p 3 p3 p3向个体 i i i提供信息。调整参数 β \beta β用于平衡两种信息共享策略。此外, λ 3 \lambda_3 λ3 λ 4 \lambda_4 λ4是标准正态分布的随机数,这可以使GNDO在执行全局搜索的过程中拥有更大的搜索空间。

2、GNDO算法伪代码

GNDO算法伪代码如图2所示。
在这里插入图片描述

图2 GNDO算法伪代码

二、仿真实验与结果分析

以常用23个测试函数中的F1、F2(单峰函数/10维)、F9、F10(多峰函数/10维)、F14、F15(固定维度多峰函数/2维、4维)为例,实验设置种群规模为30,最大迭代次数为500,独立运行30次,结果显示如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数:F1
GNDO:最差值: 0.60223, 最优值: 1.0561e-07, 平均值: 0.038551, 标准差: 0.14564
函数:F2
GNDO:最差值: 1.0016, 最优值: 4.1065e-06, 平均值: 0.042532, 标准差: 0.18644
函数:F9
GNDO:最差值: 9.9497, 最优值: 0.99496, 平均值: 5.0774, 标准差: 1.9051
函数:F10
GNDO:最差值: 6.8825, 最优值: 2.3168, 平均值: 4.2981, 标准差: 1.5142
函数:F14
GNDO:最差值: 2.9821, 最优值: 0.998, 平均值: 1.0641, 标准差: 0.36225
函数:F15
GNDO:最差值: 0.020363, 最优值: 0.00030749, 平均值: 0.001679, 标准差: 0.0050817

实验结果表明:GNDO算法简单有效的算法,无需对初始参数进行任何微调,优化性能良好。

三、参考文献

[1] Yiying Zhang, Zhigang Jin, Seyedali Mirjalili. Generalized normal distribution optimization and its applications in parameter extraction of photovoltaic models[J]. Energy Conversion and Management, 2020, 224: 113301.

这篇关于基于广义正态分布优化算法的函数寻优算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/355635

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO