高斯协同粒子群优化算法的实现

合集下载

如何实现粒子群优化算法求解二次规划问题

如何实现粒子群优化算法求解二次规划问题
i ma g e 1 . c a n v a s . 1 i n e t o ( O , 2 7 0 ) ;
i ma g e1 . c a n v a s . Mo v e T o( 1 9 9 , O ) : i ma g e1 . c a n v a s . 1 i n e t o ( 1 9 9 , 2 7 0 ) ;
置 ,并求 出适 应 度 值 。
从上 述 过 程 可知 ,粒 子 通 过跟 踪 两 个 “ 极 值 ”来 更新 自己 .
∥ 上 面 代 码 将 让 程 序 显 示 出 最 佳 值
有 兴 趣 的朋 友 ,快 快 试 一 下 吧 。 ( 作 者 :倪 慧 刚 )
第 一 个 就 是 粒 子 本 身 所 找 到 的 最 优 解 ,这 个 解 叫 做 个 体 极 值
l l l I 最雌
/ / 防止 f l o a t p i o n t d i v i s i o n b y z e r o出 现
i f( a b s ( s t r t o f 1 0 a t ( I a b eI 2 6. Ca p t i on ) 一 3. 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 ) <a b s ( s t r t o f l o a t 《 l a b e I 2 7 . C a p t i o n ) 一3 . 1 41 5 9 2 65 3 5 8 9 7 9 3 2 3 8 4 6 2 6) )
口 p a t r i e l e _ l o c _ f i t 。 2 )在 迭 代 过 程 中 , 根 据 粒 子 群 优 化 算 法 公 式 ( 见 网络 资
/ / 因为 f l o a t 的数 值 太 小 ,

高斯过程回归超参数自适应选择粒子群优化算法

高斯过程回归超参数自适应选择粒子群优化算法

高斯过程回归超参数自适应选择粒子群优化算法曹文梁; 康岚兰【期刊名称】《《合肥工业大学学报(自然科学版)》》【年(卷),期】2019(042)011【总页数】6页(P1479-1484)【关键词】超参数; 高斯过程回归(GPR); 粒子群优化(PSO); 自适应变异【作者】曹文梁; 康岚兰【作者单位】东莞职业技术学院计算机工程系广东东莞 523808; 江西理工大学应用科学学院江西赣州 341000【正文语种】中文【中图分类】TP1810 引言高斯过程回归(Gaussian process regression,GPR)是近几来发展起来的一种基于贝叶斯理论及统计学理论的全新机器学习方法[1]。

在处理高维度、小样本、非线性等复杂分类及回归问题中,GPR表现出良好的适应性和较强的泛化能力,在时间序列预测分析[2]、动态系统模型辨识[3]、系统控制[4]等多个领域得到广泛应用,并取得良好效果。

然而,当前GPR方法仍存在许多问题,主要包括如下2个方面:一是计算量大;二是受高斯噪声分布假设的局限。

针对上述2个方面问题,研究人员在完善与发展GPR方法过程中发现,“超参数”的选择对GPR性能有着重要的影响。

较优的超参数值可减少GPR学习的迭代次数,提高模型拟合精度以及泛化能力,超参数优化已成为机器学习中的一个重要课题[5-6]。

目前,超参数优化在实际的应用中,常采用实验试凑、经验选择、大范围网格搜索等方法实现对超参数的优化。

但这类方法在先验经验不足时并不是一个好的选择,同时,这类方法也存在计算代价过高等问题。

文献[7]对高斯核函数中的超参数分别采用交叉-验证法、Bayesian等方法进行了实验对比分析,结果表明,由于迭代过程引发了大量计算开销,限制了这些超参数选择方法的应用;文献[8]采用了梯度下降法(Gradient Descent)对多个超参数实现最优选择;文献[9]、文献[10]分别采用了拟牛顿法(Quasi-Newton Methods)、混合蒙特卡罗(Hybrid Monte Carlo)对超参数实现了自动选择。

粒子群优化算法 程序

粒子群优化算法 程序

粒子群优化算法程序粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体智能的优化算法,它模拟了鸟群或鱼群等生物群体的行为,用于解决各种优化问题。

下面我将从程序实现的角度来介绍粒子群优化算法。

首先,粒子群优化算法的程序实现需要考虑以下几个关键步骤:1. 初始化粒子群,定义粒子的数量、搜索空间的范围、每个粒子的初始位置和速度等参数。

2. 计算适应度,根据问题的特定适应度函数,计算每个粒子的适应度值,以确定其在搜索空间中的位置。

3. 更新粒子的速度和位置,根据粒子的当前位置和速度,以及粒子群的最优位置,更新每个粒子的速度和位置。

4. 更新全局最优位置,根据所有粒子的适应度值,更新全局最优位置。

5. 终止条件,设置终止条件,如最大迭代次数或达到特定的适应度阈值。

基于以上步骤,可以编写粒子群优化算法的程序。

下面是一个简单的伪代码示例:python.# 初始化粒子群。

def initialize_particles(num_particles, search_space):particles = []for _ in range(num_particles):particle = {。

'position':generate_random_position(search_space),。

'velocity':generate_random_velocity(search_space),。

'best_position': None,。

'fitness': None.}。

particles.append(particle)。

return particles.# 计算适应度。

def calculate_fitness(particle):# 根据特定问题的适应度函数计算适应度值。

particle['fitness'] =evaluate_fitness(particle['position'])。

基于粒子群优化与高斯过程的协同优化算法

基于粒子群优化与高斯过程的协同优化算法

基于粒子群优化与高斯过程的协同优化算法1. 引言协同优化算法是一种结合多种优化算法的集成优化方法,通过合理的组合和协同,克服单一算法在优化问题上的局限性,提高优化效果。

本文将介绍一种基于粒子群优化和高斯过程的协同优化算法,通过利用粒子群算法的全局搜索特性和高斯过程的回归能力,实现更精确、高效的优化过程。

2. 粒子群优化算法粒子群优化算法(Particle Swarm Optimization, PSO)是一种模拟鸟群飞行行为的优化算法,通过模拟粒子在解空间的搜索和迭代过程,寻找最优解。

其基本原理是每个粒子通过跟踪自身历史最佳解(pbest)和整个种群的最佳解(gbest),根据经验和全局信息进行位置调整和速度更新,直到达到最优解或迭代次数达到设定值。

3. 高斯过程高斯过程(Gaussian Process)是一种常用的非参数模型,用于回归和分类问题。

它基于贝叶斯思想,通过对样本数据进行分析和建模,得到一个关于未知函数的概率分布。

高斯过程的主要特点是可以根据已有数据进行预测,同时给出了预测结果的不确定性。

4. 算法设计基于粒子群优化和高斯过程的协同优化算法将PSO和高斯过程相结合,通过以下步骤实现优化过程:4.1 初始化设定粒子的位置和速度的初始值,设定高斯过程的初始参数,设定迭代次数和停止条件。

4.2 粒子群优化利用PSO算法进行全局搜索,更新粒子的位置和速度,根据目标函数的值更新粒子的pbest和gbest。

4.3 高斯过程拟合根据粒子的位置和目标函数的值,使用高斯过程拟合出函数的概率分布,并获取每个位置处的函数均值和方差。

4.4 选择下一个位置根据粒子的速度和上一步得到的高斯过程拟合结果,选择下一个位置。

4.5 更新参数根据新的位置和目标函数的值更新高斯过程的参数。

4.6 终止条件判断判断是否达到设定的迭代次数或满足停止条件,若满足则终止优化过程,否则返回步骤4.2。

5. 算法优势基于粒子群优化和高斯过程的协同优化算法具有以下优势:5.1 全局搜索能力强通过引入粒子群优化算法,可以实现全局搜索,寻找到更接近最优解的位置。

粒子群优化算法(PSO)Python实现

粒子群优化算法(PSO)Python实现

粒子群优化算法(PSO)Python实现粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体智能的优化算法,它模拟了鸟群或鱼群等群体协同的行为。

PSO算法通过模拟每个个体(粒子)在解空间中的移动,以找到最优解。

在PSO算法中,粒子的位置和速度表示解空间中的一个点,而每个粒子的局部最优解和全局最优解则用来指导粒子的方向。

下面是一个简单的PSO算法的Python实现:```pythonimport random#定义粒子类class Particle:def __init__(self, dimensions, min_values, max_values):self.dimensions = dimensionsself.min_values = min_valuesself.max_values = max_valuesself.position = [random.uniform(min_values[i], max_values[i]) for i in range(dimensions)]self.velocity = [random.uniform(-(max_values[i] -min_values[i]), max_values[i] - min_values[i]) for i inrange(dimensions)]self.best_position = self.position.copydef update_velocity(self, global_best_position,inertia_weight, cognitive_weight, social_weight):for i in range(self.dimensions):r1 = random.randomr2 = random.randomdef update_position(self):for i in range(self.dimensions):self.position[i] += self.velocity[i]if self.position[i] < self.min_values[i]:self.position[i] = self.min_values[i]elif self.position[i] > self.max_values[i]:self.position[i] = self.max_values[i]def update_best_position(self):if objective_function(self.position) <objective_function(self.best_position):self.best_position = self.position.copy#定义目标函数(此处仅为示例,实际应用中需根据问题进行定义)def objective_function(position):return sum(position)def pso(num_particles, dimensions, min_values, max_values, num_iterations, inertia_weight, cognitive_weight, social_weight): particles = [Particle(dimensions, min_values, max_values)for _ in range(num_particles)]global_best_position = particles[0].position.copyfor _ in range(num_iterations):for particle in particles:particle.update_velocity(global_best_position,inertia_weight, cognitive_weight, social_weight)particle.update_positionparticle.update_best_positionif objective_function(particle.best_position) <objective_function(global_best_position):global_best_position = particle.best_position.copyreturn global_best_position#示例使用num_particles = 30dimensions = 2min_values = [-5, -5]max_values = [5, 5]num_iterations = 100inertia_weight = 0.5cognitive_weight = 0.8social_weight = 0.8best_position = pso(num_particles, dimensions, min_values, max_values, num_iterations, inertia_weight, cognitive_weight, social_weight)print("最优解:", best_position)print("最优值:", objective_function(best_position))```在上面的代码中,首先定义了一个`Particle`类来表示粒子。

基于高斯扰动的量子粒子群优化算法

基于高斯扰动的量子粒子群优化算法
王 小 根 海侠 ,龙 ,孙 俊
( 南大学 a 江 .教 育 学院 ;b 信 息工程 学 院,江 苏 无锡 2 4 2 ) . 1 12 摘 要 :针对 量子粒 子群优 化 ( P O) Q S 算法在优 化过 程 中面 临早 熟 问题 , 出 了在 粒 子 的平 均 位置 或 全局 最 优 提
o h wal ft e s rn.Thedit r a c o d ef ci eyprv n h tgn to ft e p ril sa d t r f r d h m s a h o a su b n e c ul fe tv l e e tt e sa ain o h a c e n he eo ema e t e e c pet e lc l t
第2 7卷 第 6期
21 0 0年 6 月
计 算 机 应 用 研 究
Ap l a in Re e r h o o u e s p i t s a c fC mp t r c o
Vo . 7 No 6 12 .
Jn 2 0 u . 01
基 高 扰 动 的量 子粒 子 群 优化 算 法 于 斯
位 置上加 入 高斯扰动 的 Q S Pቤተ መጻሕፍቲ ባይዱO算 法 , 可以有效 地 阻止粒 子 的停 滞 , 因此 较 容 易地使 粒子 避 免 陷入局 部 最 优 。为
了评 估 算法的性 能 , 用标准测 试 函数对 标准 P O算 法、 P O算法 以及基 于 高斯 扰动 的 Q S 利 S QS P O算 法进 行 了比较 测试 。其 结果表 明 , 该算 法具有 较 强的全局 搜 索能力 和较 快的收 敛速度 。 关键 词 :量子 粒子群优 化 算法 ;平 均位置 ; 全局 最优 位 置 ;高斯扰 动

高斯扰动粒子群算法的数据库查询优化

高斯扰动粒子群算法的数据库查询优化

高斯扰动粒子群算法的数据库查询优化李国芳;李静【期刊名称】《计算机系统应用》【年(卷),期】2014(000)008【摘要】In order to solve the defect of quantum particle swarm algorithm, mutation operator of the genetic algorithm is introduced into quantum particle swarm optimization algorithm. It produces a novel query optimization method of database(GM-QPSO). Firstly, the mathematic model is established for database query optimization problems. And then the optimal scheme of database query optimization problems is found by the sharing message of quantum particle. Finally, the simulation experiments is carried out on Matlab 2012. The results show that the proposed algorithm has solved the defect of quantum particle swarm algorithm, and improved query speed of database and can obtain better query scheme.%针对量子粒子群算法存在的不足,将变异算子引入其中,提出一种高斯变异量子粒子群算法(GM-QPSO),并将其应用于数据库查询优化中。

l-m算法和粒子群算法

l-m算法和粒子群算法

l-m算法和粒子群算法L-M算法L-M算法是一种非线性最小二乘法的算法,它是将高斯-牛顿算法与牛顿-拉弗森算法相结合的一种优化算法。

在非线性最小二乘问题中,我们要找到一组未知参数,使得该组参数下的函数值与实际观测值的误差平方和最小。

L-M算法的基本思想是:在进行参数更新计算时,先利用高斯-牛顿算法求得近似解,然后再利用牛顿-拉弗森算法对高斯-牛顿算法得到的近似解进行改进。

具体步骤如下:1.初始化参数向量和衰减系数;2.求得残差向量和雅可比矩阵;3.利用高斯-牛顿算法得到近似解;4.计算新的目标函数值和残差向量,判断误差减少的程度是否满足要求;5.如果误差减少的程度较小,则调整衰减系数,回到第4步,否则转入第6步;6.利用牛顿-拉弗森算法改进当前的近似解;7.计算新的目标函数值和残差向量,判断误差减少的程度是否满足要求;8.如果误差减少的程度较小,则调整衰减系数,回到第7步,否则输出结果。

L-M算法的特点是:具有牛顿-拉弗森算法的高精度和收敛速度快的特点,并且还能自适应地调整步长,避免算法陷入局部最优解。

但是,L-M算法对初始参数设置要求较高,容易陷入局部极值。

粒子群算法是一种基于群体智能的随机搜索算法,通过模拟鸟群或鱼群等生物的群体行为来搜索最优解。

在粒子群算法中,搜索空间中的每个点都被看作一个粒子,每个粒子都有一个位置和速度,算法通过不断调整粒子的位置和速度来搜索最优解。

具体步骤如下:1.初始化粒子群的位置和速度;2.计算每个粒子的适应度值,选择当前最优的粒子作为全局最优解;3.按照既定规则更新所有粒子的位置和速度;4.计算新的适应度值,更新全局最优解;5.检查终止条件是否满足,如果满足则输出结果,否则回到第3步。

粒子群算法的优点是:具有良好的全局搜索能力和收敛性能,能够快速搜索到全局最优解。

同时,算法不需要计算复杂的梯度信息,可以在高维空间中寻找最优解。

粒子群算法的缺点是:容易陷入局部最优解,需要多次随机初始化计算。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告题目:多尺度协同变异的粒子群优化算法的实现学院:信息科学与技术学院专业:计算机技术年级:2016级研究生课程:计算智能_作业4姓名:学号:备注:一、实验内容1.问题描述粒子群算法(Particle Swarm Optimizer,PSO)是由Kennedy 和Eberhart 博士提出的一种基于群体智能的优化算法,其基本思想是受到他们早期对许多鸟类的群体行为进行建模与仿真研究的启发.粒子群算法的优势在于其简单容易实现,没有很多参数需要调整,是非线性连续优化问题、组合优化问题和混合整数非线性优化问题的有效优化工具.由于PSO 算法概念简单、实现容易,在函数优化和神经网络权值训练等方面都有很好的表现.由于其又具有深刻的智能背景,既适合科学研究,又特别适于工程应用,因此在近年来得到了飞速的发展.其应用涉及系统控制、人工智能、模式识别、计算机、通信工程等各个领域.粒子群优化算法问世以来受到了广泛的重视,经过十几年的研究,其不论在应用方面还是在优化性能方面都得到了很大的发展.然而,研究人员仍然无法解决一直困扰该算法的两个难题:早熟和收敛速度慢.在避免早熟收敛的研究中,一些学者提出了控制种群多样性来提高性能的办法.其思想主要分为两个方面:(1)从PSO 参数以及其拓扑结构研究的角度.(2)从与遗传算法相结合的角度.对于第一个角度,一些学者提出解决微粒间的冲突和聚集,分析微粒和种群最优位置的距离,种群随机多代初始化的思想.而对于第二个角度,主要是通过引入遗传算法中的变异操作实现的,其中文献通过对微粒引入一个小概率随机变异操作来增加种群多样性(dissipative PSO 简称DPSO),这样做虽然可以更好的搜索粒子群的解空间,但如变异率控制不当则极容易导致原始种群的混乱,致使在算法的后期达不到精确的局部搜索目的;在此基础上,进一步提高搜索性能,文献给出了一种令变异操作随时间变化的自适应层次PSO 算法(self-organizinghierarchical PSO,简称HPSO),为了使其能够适应变异操作,还确定了自适应参数的选择方式.但由于该算法没有考虑速度公式中惯性因素的影响,因此将发生变异的条件设置为微粒的速度为0,从而使得该算法仍然未能迅速有效的逃离局部极小值.文献为了提高种群多样性和搜索速度间的平衡,对阈值设定进行了改进并结合群体自动分家机制,提出一种自适应逃逸的微粒群算法(Self-Adaptive Escape PSO,简称AEPSO).然而上述算法在实现变异的时候,均采用单一的均匀变异机制,其逃逸能力大大减弱,进而使改进的PSO 算法在有限的迭代次数内无法实现最优解的探索,因此如何提高算法的逃逸能力,使其在快速定位到最优解区域同时提高最优解的精度值得我们进一步研究.鉴于此,本文提出一种多尺度协同变异的微粒群算法(MAEPSO).该算法利用不同大小方差的高斯变异机制实现解空间的探索,这种多个或大或小的变异机制,能促使整个种群以尽量分散的变异尺度来对解空间进行更加详尽的探索.同时高斯变异的范围随着适应值的变小也逐渐降低,在算法后期有利于提高最优解的精度;在利用不同大小变异算子提高局部精确搜索能力的同时,该算法同样利用均匀算子维护种群多样性.利用试验对不同评测函数进行测试均验证新算法优良的优化性能.2.解决思路提出一种多尺度协同变异的微粒群优化算法,其中算法的逃逸能力取决于不同尺度方差的高斯变异算子,不同尺度的变异有助于算法在搜索空间中进行分散式的搜索,同时变异尺度随着适应度的提升而逐渐减少,这样可以在保证逃逸能力的同时, 在算法后期提高了最优解的精度保证了算法的收敛性能.3. 实验平台本实验采用的是windows10 + Visual Studio 2013运用的win32的运行平台。

二、算法分析1.基本理论和方法我们把一个优化问题看作是在空中觅食的鸟群,那么在空中飞行的一只觅食的“鸟”就是PSO 算法在解空间中进行搜索的一个“粒子”(Particle),也是优化问题的一个解.“食物"就是优化问题的最优解.粒子在搜索空间中以一定的速度飞行,这个速度根据它本身的飞行经验和同伴的飞行经验来动态调整.所有的粒子都知道自己到目前为止发现的最好位置T,这个可以看作是粒子自己的飞行经验.此外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置即g P (也称为gbest,gbest 是在pbest 中的最好值),这个可以看作是粒子的同伴的经验.在由这样一群随机初始化形成的粒子而组成的一个种群中,以迭代的方式进行的速度与位置的更新公式为:作为问题近似最优解。

其中, 1 r 和2 r 为两个在[0,1]范围内服从均匀分布的随机变量,用来保持群体的多样性. 1 c 和2 c 为学习因子,也称加速因子,其使粒子具有自我总结和向群体中优秀个体学习的能力,从而向自己的历史最优点以及群体的历史最优点靠近. w为惯性权重,它起着权衡局部最优能力和全局最优能力的作用.公式中右项中的三个部分分别称为:惯性部分、认知部分(代表粒子对自身的学习)、社会部分(代表着粒子间的协作).这三个部分之间的相互平衡决定了算法的主要性能.2.具体算法通过多尺度高斯变异算子就可以保证无论最优解存在何处,算法进化到何处,都能够准确定位到最优解区域.算法具体描述如下:设尺度个数为M ,首先初始化多尺度高斯变异算子的初始方差。

初始时,方差一般设定为优化变量的取值范围,随着迭代次数的增加,多尺度高斯变异算子的方差会随之进行调整,具体调整方式如下所示,首先根据适应值的大小对种群中的微粒进行由小到大排序,然后对其进行组合,生成M 个子群,每一个子群的微粒个数为 P = N /M , K 是当前迭代次数,计算每一个子群的适应度:其中f 是微粒的适应值计算函数,不同变异尺度之间相互竞争,根据适应能力的不同而设置不同的变异能力,因此第m 个变异算子的标准差为:由于变异算子的进化是一个递归过程,排在后面的变异算子可能很大,因此对变异算子的标准差做如下规范:如果σi(k)>W / 4,则W 为待优化变量空间的宽度,重复使用上式,直到满足σi(k)<W / 4, 为了能最大范围的实现空间勘探能力,在进行完多尺度高斯变异后,同时进行一次均匀变异操作,比较后取所有变异后适应值最好的位置作为新的逃逸点,均匀变异算子实现同式(6).不同尺度算子随迭代次数的变化如图1 所示,通过本文的多尺度变异算子能实现整个搜索空间的覆盖,其中大尺度有利于实现解空间的粗搜索,可以快速定位到最优解区域,小尺度能在进化后期实现局部精确解的搜索.我们知道任何一种进化算法都存在勘探和开采两类不同的操作,PSO 算法随着迭代次数的增加粒子群会收敛于某个最优个体,粒子群个体的多样性逐渐丧失.为了防止PSO 算法陷入局部极小点,上述算法通过增加变异操作改善种群多样性来提高算法的全局解搜索能力,然而在算法的后期,变异操作往往会使微粒群不能进行精确的局部搜索无法保证算法的收敛性能.因此如何能协调勘探和开采能力是进化算法性能提高的关键.为此,本文算法采用两种方式实现勘探和开采能力间的均衡.首先,本文算法采用HPSO 的公式(4)实现PSO 进化,该公式消除了速度的惯性部分,这样就使得PSO 进化只负责整个算法的开采能力,当速度小于一定阈值时,给予速度一个变异操作——逃逸运动,描述如下:其中, f 是适应值函数,由于PSO 算法的进化公式中消除的惯性部分,使得微粒的速度快速下降,这样在有限的迭代次数内能够进行多次的逃逸运动,提高了算法的种群多样性,增强了算法全局解搜索性能.另外,由于本文算法的逃逸运动采用了多尺度高斯变异方式,较小的尺度同样能保证精确解的局部搜索能力,避免了HPSO 算法中由于下降过快且采用的均匀变异算法,使其在进化后期无法进行详细局部搜索的不足.另外,式(14)中阈值的大小将会对算法的执行效果有一定影响:如果阈值过大会导致逃逸次数增加从而打乱PSO 种群进化的原有结构,使算法无法进行局部深度搜索,开采能力有所下降;阈值过小会将导致微粒速度需要较长时间达到逃逸条件,在有限次的迭代次数内,无法进行有效地全局搜索,降低了算法搜索速度,勘探能力下降.为此结合文献[18]本文给出一个自适应的阈值设定方法.设微粒各维速度间相互独立,并对每维速度均给予一个不同的阈值,当该维度中有多个微粒速度达到这个值时,阈值就自动下降,通过自动调整每一维速度的阈值的方式达到动态调整微粒速度的目的.具体描述如下:其中, k1、k2 为常数, Size为种群大小,频率G (t) d 表示种群第d 维速度曾经发生逃逸的总次数; k1 标记调整阈值d T 和频率G (t) d 的条件值; 2 k 用来控制阈值速度下降的幅度.通过控制微粒飞行速度的方式,不仅能保证算法的全局解空间勘探性能,防止算法陷入局部最优,同时在算法后期能使粒子群进行精确的局部搜索,保证算法的收敛速度.3.算法流程图三、实验结果1.输入没有需要输入的数据,但是有三个评价函数。

如下:2.输出输出包含如下几个内容:每次更新迭代的sigma,以及最优解。

TABLET:Quadric:Rosenbrock:四、结果分析与比较1.结论本文提出一种新的多尺度协同变异的微粒群算法,利用不同大小初始方差的高斯变异机制实现解空间的探索,这种多个或大或小的变异机制,能促使整个种群以尽量分散的变异尺度来对解空间进行更加详尽的探索.同时高斯变异的范围随着适应值的变小也逐渐降低,有利于提高最优解的精度;在利用不同大小变异算子提高局部精确搜索能力的同时,该算法同样利用均匀变异算子维护种群多样性.通过6 个benchmark 数据进行测试,实验结果表明新算法能够在算法初期就能够快速定位到搜索空间的最优解区域,进而使得微粒通过进化PSO 及小尺度变异算子向着最优精确解空间逼近,使其在进化过程中保持局部最优解空间开采的能力,加快了算法的收敛速度.其中不同尺度个数对本文算法性能的影响将是本课题下一阶段研究的重点。

// MAEPSO.cpp : 定义控制台应用程序的入口点。

//#include"stdafx.h"#include<iostream>#include<math.h>#include<time.h>#include<random>#include<string.h>using namespace std;const int groupSize = 20; //种群数量const int dimNum = 30; //变量维度const int M = 5; //子群数量const int N = 6000; //迭代次数const int P = groupSize / M;const double W = 50;const int c1 = 1.4;const int c2 = 1.4;double group[groupSize][dimNum];// 粒子群double pid[groupSize][dimNum];//存放最适宜的值double pgd[dimNum];double v[groupSize][dimNum]; //粒子速度double T[dimNum]; // 每个维度上的阈值double sigma[M]; //方差int TC[dimNum]; //论文中的Gdouble w; //惯性double Tablet(double a[dimNum]) {int i = 1;double sum;sum = pow(10, 6)*a[0] * a[0];while (i < dimNum) {sum += a[i] * a[i];i++;}return sum;}double Quadric(double a[dimNum]) { //Tablet函数double sum, value = 0;for (int i = 0; i < dimNum; i++) {sum = 0;for (int j = 0; j < i; j++) {sum += a[j];}value += sum*sum;}return value;}double Rosenbrock(double a[dimNum]) {double value = 0;for (int i = 0; i < dimNum - 1; i++) {value += 100 * (a[i + 1] - a[i] * a[i])*(a[i + 1] - a[i] * a[i]) + (a[i] - 1)*(a[i] - 1);}return value;}double FitX(int m) { //求子群的平均适应度double sum = 0;for (int i = 0; i < P; i++) {sum += Tablet(group[m*P + i]);}sum = sum / P;return sum;}double MaxFitX() { //求所有子群的平均适应度的最大值double max = DBL_MIN;for (int i = 0; i < M; i++) {if (max < FitX(i)) {max = FitX(i);}}return max;}double MinFitX() { //求所有子群的平均适应度的最小值double min = DBL_MAX;for (int i = 0; i < M; i++) {if (min > FitX(i)) {min = FitX(i);}}return min;}void Gsort() { //对粒子进行排序double temp[dimNum];for (int i = 0; i < groupSize; i++) {for (int j = i; j < groupSize; j++) {if (Tablet(group[i]) > Tablet(group[j])) {memcpy(temp, group[i], sizeof(temp));memcpy(group[i], group[j], sizeof(group[i]));memcpy(group[j], temp, sizeof(temp));memcpy(temp, pid[i], sizeof(temp));memcpy(pid[i], pid[j], sizeof(pid[i]));memcpy(pid[j], temp, sizeof(temp));}}}}void updateSigma() { //论文中的2.1double sum = 0;for (int i = 0; i < M; i++) {sum += FitX(i);}for (int i = 0; i < M; i++) {sigma[i] = sigma[i] * exp((M*FitX(i) - sum) / (MaxFitX() - MinFitX()));while (sigma[i] > W / 4) {sigma[i] = abs(W / 4 - sigma[i]);}cout << sigma[i] <<" ";}}double sampleNormal() { //随机符合N[0,1]的正态分布double u = ((double)rand() / (RAND_MAX)) * 2 - 1;double v = ((double)rand() / (RAND_MAX)) * 2 - 1;double r = u * u + v * v;if (r == 0 || r > 1) return sampleNormal();double c = sqrt(-2 * log(r) / r);return u * c;}void updateSpeed() { //更新速度V和粒子群double Vmax, minf, mintemp, temp;for (int i = 0; i < M; i++) { //迭代每一个粒子群for (int j = 0; j < P; j++) { //迭代每一个粒子for (int z = 0; z < dimNum; z++) { //迭代每一个维度if (v[i*P + j][z] == 0) { //HPSO 中的(4)double r1 = rand()*1.0 / RAND_MAX;int r2 = 1;if (r1 > 0.5) {r2 = -1;}v[i*P + j][z] = r1*r2*pow(0.1, 12);}if (v[i*P + j][z] < T[z]) { //论文中的(14)TC[z]++;temp = group[i*P + j][z]; //用来暂存更新前的Xidminf = DBL_MAX; //最小适应度for (int k = 0; k < M; k++) {group[i*P + j][z] = temp + sampleNormal()*sigma[k];if (minf > Tablet(group[i*P + j])) {minf = Tablet(group[i*P + j]);mintemp = group[i*P + j][z];}}Vmax = W - abs(temp);group[i*P + j][z] = temp + (rand()*2.0 / RAND_MAX - 1)*Vmax;if (minf < Tablet(group[i*P + j])) {v[i*P + j][z] = mintemp - temp;}else {v[i*P + j][z] = group[i*P + j][z] - temp;}group[i*P + j][z] = temp;}v[i*P + j][z] = w*v[i*P + j][z] + c1*(rand()*1.0 / RAND_MAX)*(pid[i*P + j][z] - group[i*P + j][z]) + c2*(rand()*1.0 / RAND_MAX)*(pgd[z] - group[i*P + j][z]); //PSO group[i*P + j][z] += v[i*P + j][z]; //进行种群更新if (Tablet(group[i*P + j]) < Tablet(pid[i*P + j])) {memcpy(pid[i*P + j], group[i*P + j], sizeof(group[i*P + j]));if (Tablet(pid[i*P + j]) < Tablet(pgd))memcpy(pgd, pid[i*P + j], sizeof(pgd));}}}}}void updateT() {int k1 = 5, k2 = 10;for (int i = 0; i < dimNum; i++) {if (TC[i] > k1){T[i] = T[i] / k2;TC[i] = 0;}}}void initial() {for (int i = 0; i < groupSize; i++){for (int j = 0; j < dimNum; j++) {group[i][j] = (rand()*2.0 / RAND_MAX - 1)*W;pid[i][j] = group[i][j];v[i][j] = 0;}}Gsort();memcpy(pgd, pid[0], sizeof(pgd));for (int i = 0; i < M; i++) {sigma[i] = 2*W;}for (int i = 0; i < dimNum; i++) {T[dimNum] = 0.5;TC[dimNum] = 0;}}int main(){srand(time(0));initial();for (int i = 0; i < N; i++) {w = 0.95 - 0.55*i / N;cout <<"第"<< i <<"次迭代的SIGMA为:";updateSigma();updateSpeed();updateT();cout <<"得出最优解适应度为:";cout << Tablet(pgd) << endl;}cout <<"得出最优解为:"<< endl; for (int j = 0; j < dimNum; j++) { cout << pgd[j] << endl;}cout <<"得出最优解适应度为:";cout << Tablet(pgd) << endl;return 0;}。

相关文档
最新文档