PSO的matlab源程序
- 格式:doc
- 大小:43.00 KB
- 文档页数:7
PSO标准算法其中w c1 c2 a可以改变%包含初始化函数迭代函数还有总体的PSO算法函数function[Result,OnLine,OffLine,MinMaxMeanAdapt]=PSO_Stand(SwarmSize,ParticleSize,ParticleScope, IsStep,IsDraw,LoopCount,IsPlot)%function[Result,OnLine,OffLine,MinMaxMeanAdapt]=PSO_Stand(SwarmSize,ParticleSize,ParticleScope, InitFunc,StepFindFunc,AdaptFunc,IsStep,IsDraw,LoopCount,IsPlot)%功能描述:一个循环n次的PSO算法完整过程,返回这次运行的最小与最大的平均适应度,以及在线性能与离线性能%[Result,OnLine,OffLine,MinMaxMeanAdapt]=PsoProcess(SwarmSize,ParticleSize,ParticleSco pe,InitFunc,StepFindFunc,AdaptFunc,IsStep,IsDraw,LoopCount,IsPlot)%输入参数:SwarmSize:种群大小的个数%输入参数:ParticleSize:一个粒子的维数%输入参数:ParticleScope:一个粒子在运算中各维的范围;%ParticleScope格式:%3维粒子的ParticleScope格式:%[x1Min,x1Max%x2Min,x2Max%x3Min,x3Max]%%输入参数:InitFunc:初始化粒子群函数%输入参数:StepFindFunc:单步更新速度,位置函数%输入参数:AdaptFunc:适应度函数%输入参数:IsStep:是否每次迭代暂停;IsStep=0,不暂停,否则暂停。
粒子群算法matlab本文旨在介绍粒子群算法Matlab。
粒子群算法是一种全局搜索和优化技术,它的目的是通过可重复的迭代搜索来找到搜索空间中的最优解。
本文详细阐述了粒子群算法的基本原理,讨论了它的设计思想和参数设置,以及如何将粒子群算法应用于Matlab中。
最后,本文介绍了若干数值实例,来验证粒子群算法的可行性。
关键词:子群算法;Matlab;全局优化;迭代搜索1.论粒子群算法(Particle Swarm Optimization,PSO)是一种动态优化算法,它能自动识别全局最优解。
它结合了群众智慧和机器学习,是一种运用群体智能手段实现全局优化的有效方法。
由于其计算代价低廉,计算时间短,解决问题效果良好,因此得到了广泛的应用。
Matlab是屡获殊荣的数值计算软件,它能够对各类数据进行可视化分析和仿真模拟。
由于Matlab具有丰富的工具箱,可以快速准确地解决复杂的科学问题,因此它已经成为科学计算的标准软件。
本文将主要介绍如何将粒子群算法应用于Matlab中。
2.法原理粒子群算法是由Kennedy和Eberhart在1995年提出的,它也被称为Zebra算法,是建立在群体智能概念上的,由群体中全局优化算法之一。
粒子群算法以群体中的每个个体的最优位置和最优速度为基础,通过可重复的迭代搜索来找到搜索空间中的最优解。
算法的设计基本思想是:建立一组虚拟粒子,每个粒子代表一个可能的解决方案,每个粒子有一个位置和一个速度。
算法通过不断迭代,让这些粒子像鱼群一样游动,从而找到最优解。
3.法设计粒子群算法由三个参数组成:全局最优系数(cg)、社会系数(cs)和惯性权重(w)。
cg和cs是粒子群算法的两个基本系数,它们分别代表了粒子群对全局最优和社会最优的响应程度。
w是惯性权重,它代表了粒子群对历史最优位置的惯性搜索能力。
通常情况下,系数cg和w会在一定范围内不断变化,使得算法能够更快地找到最优解。
4. Matlab实现为了在Matlab中实现粒子群算法,需要对Matlab的调用进行必要的设置。
粒子群算法(1)----粒子群算法简介一、粒子群算法的历史粒子群算法源于复杂适应系统(Complex Adaptive System,CAS)。
CAS理论于1994年正式提出,CAS中的成员称为主体。
比如研究鸟群系统,每个鸟在这个系统中就称为主体。
主体有适应性,它能够与环境及其他的主体进行交流,并且根据交流的过程“学习”或“积累经验”改变自身结构与行为。
整个系统的演变或进化包括:新层次的产生(小鸟的出生);分化和多样性的出现(鸟群中的鸟分成许多小的群);新的主题的出现(鸟寻找食物过程中,不断发现新的食物)。
所以CAS系统中的主体具有4个基本特点(这些特点是粒子群算法发展变化的依据):首先,主体是主动的、活动的。
主体与环境及其他主体是相互影响、相互作用的,这种影响是系统发展变化的主要动力。
环境的影响是宏观的,主体之间的影响是微观的,宏观与微观要有机结合。
最后,整个系统可能还要受一些随机因素的影响。
粒子群算法就是对一个CAS系统---鸟群社会系统的研究得出的。
粒子群算法(Particle Swarm Optimization,PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。
设想这样一个场景:一群鸟在随机搜寻食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪里,但是它们知道当前的位置离食物还有多远。
那么找到食物的最优策略是什么呢?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。
PSO算法就从这种生物种群行为特性中得到启发并用于求解优化问题。
在PSO中,每个优化问题的潜在解都可以想象成d维搜索空间上的一个点,我们称之为“粒子”(Particle),所有的粒子都有一个被目标函数决定的适应值(Fitness Value),每个粒子还有一个速度决定他们飞翔的方向和距离,然后粒子们就追随当前的最优粒子在解空间中搜索。
Reynolds对鸟群飞行的研究发现。
MATLAB 智能算法30 个案例分析(终极版)1基于遗传算法的TSP算法(王辉)2 基于遗传算法和非线性规划的函数寻优算法(史峰)3基于遗传算法的BP神经网络优化算法(王辉)4设菲尔德大学的MATLAB遗传算法工具箱(王辉)5基于遗传算法的LQR空制优化算法(胡斐)6 遗传算法工具箱详解及应用(胡斐)7 多种群遗传算法的函数优化算法(王辉)8 基于量子遗传算法的函数寻优算法(王辉)9多目标ParetO最优解搜索算法(胡斐)10基于多目标ParetO的二维背包搜索算法(史峰)11 基于免疫算法的柔性车间调度算法(史峰)12 基于免疫算法的运输中心规划算法(史峰)13 基于粒子群算法的函数寻优算法(史峰)14 基于粒子群算法的PID 空制优化算法(史峰)15基于混合粒子群算法的TSP寻优算法(史峰)16 基于动态粒子群算法的动态环境寻优算法(史峰)17 粒子群算法工具箱(史峰)18 基于鱼群算法的函数寻优算法(王辉)佃基于模拟退火算法的TSP算法(王辉)20 基于遗传模拟退火算法的聚类算法(王辉)21基于模拟退火算法的HEV能量管理策略参数优化(胡斐)22蚁群算法的优化计算一一旅行商问题(TSP优化(郁磊)23 基于蚁群算法的二维路径规划算法(史峰)24 基于蚁群算法的三维路径规划算法(史峰)25 有导师学习神经网络的回归拟合——基于近红外光谱的汽油辛烷值预测(郁磊)26 有导师学习神经网络的分类——鸢尾花种类识别(郁磊)27 无导师学习神经网络的分类——矿井突水水源判别(郁磊)28 支持向量机的分类——基于乳腺组织电阻抗特性的乳腺癌诊断(郁磊)29 支持向量机的回归拟合——混凝土抗压强度预测(郁磊)30 极限学习机的回归拟合及分类——对比实验研究(郁磊)智能算法是我们在学习中经常遇到的算法,主要包括遗传算法,免疫算法,粒子群算法,神经网络等,智能算法对于很多人来说,既爱又恨,爱是因为熟练的掌握几种智能算法,能够很方便的解决我们的论坛问题,恨是因为智能算法感觉比较“玄乎” ,很难理解,更难用它来解决问题。
基于改进PSO的BP网络的研究及应用的开题报告一、课题研究的背景和意义BP神经网络作为一种传统的人工神经网络模型,其具有强大的非线性拟合能力和适应性,因此在许多领域得到了广泛的应用。
但是,BP神经网络也存在一些不足,如易陷入局部最优解、收敛速度慢等问题。
粒子群优化(PSO)算法是一种优化算法,在全局搜索和寻找最优解方面具有很强的优势。
因此,将PSO算法应用于BP神经网络的训练中,可以有效地克服BP神经网络的不足,提高其训练的效率和精度。
本课题旨在研究改进PSO算法,并将其应用于BP神经网络的训练中,以求解神经网络中的权值和阈值,以达到更快、更准确的训练目的。
在此基础上,进一步探索改进PSO算法在其他优化问题中的应用,为实际问题的求解提供更加高效的优化手段。
二、研究内容和方案(一)研究内容1、分析传统BP神经网络存在的问题,介绍PSO算法及其原理。
2、详细介绍改进PSO算法,根据PSO算法的缺陷,提出一种改进的PSO算法,如加入惯性因子、多目标优化等策略,提高算法的全局搜索能力。
3、将改进PSO算法应用于BP神经网络的训练中。
利用改进的PSO 算法训练BP神经网络,对比传统BP神经网络和改进后的BP神经网络的性能,如收敛速度和精度等指标。
4、进一步探索改进PSO算法在其他优化问题中的应用。
(二)研究方案1、收集相关文献,对传统BP神经网络和PSO算法进行了解,了解两种算法的优点、缺点和改进方法。
2、设计改进PSO算法的策略。
根据文献综述,结合实际问题,提出加入惯性因子、多目标优化等策略,提高算法的全局搜索能力。
3、实现改进PSO算法。
基于Matlab或Python平台,编写改进PSO算法的程序代码,验证其有效性。
4、应用改进PSO算法训练BP神经网络。
基于Matlab或Python平台,编写BP神经网络的训练程序,利用改进PSO算法和传统PSO算法训练BP神经网络,比较两者的性能,并进行分析。
5、探索改进PSO算法在其他优化问题中的应用。
使用Matlab进行时间序列预测的方法引言:时间序列预测是一种重要的数据分析方法,用于预测未来时间点上的数值变化趋势。
在许多领域,如经济学、金融学、气象学等,时间序列预测都发挥着重要的作用。
本文将介绍使用Matlab进行时间序列预测的方法,包括数据准备、模型选择、模型训练和预测结果评估等方面。
一、数据准备:在进行时间序列预测之前,首先需要准备好数据。
一般来说,时间序列数据应该具有以下几个特点:趋势性、季节性、周期性和随机性。
我们可以从实际问题中获得数据,或者使用Matlab提供的样例数据进行分析。
在Matlab中,读取时间序列数据可以使用readtable函数或csvread函数。
读取数据后,可以使用plot函数进行可视化,以了解数据的整体特征。
此外,还可以使用acf函数和pacf函数绘制自相关图和偏相关图,以判断时间序列的平稳性和是否存在滞后相关。
二、模型选择:选择适合的模型对于时间序列预测至关重要。
常用的时间序列模型包括ARIMA模型、GARCH模型、VAR模型等。
ARIMA模型是一种常用的自回归移动平均模型,适用于具有平稳性的时间序列数据。
在Matlab中,可以使用arima函数来拟合ARIMA模型,并使用estimate 函数估计模型的参数。
GARCH模型是一种用于处理时间序列波动性的模型,适用于具有异方差性的时间序列数据。
在Matlab中,可以使用garch函数来拟合GARCH模型,并使用estimate函数估计模型的参数。
VAR模型是一种多变量自回归模型,适用于多个相关变量的时间序列预测。
在Matlab中,可以使用var函数来拟合VAR模型,并使用estimate函数估计模型的参数。
根据时间序列数据的特点和实际问题的需求,选择适合的模型是非常重要的。
可以根据模型的AIC和BIC值进行模型选择,其中较小的值说明模型更好地拟合数据。
三、模型训练:在选择好模型之后,接下来就是进行模型的训练。
方便大家使用的最小二乘法曲线拟合的Matlab程序非常方便用户使用,直接按提示操作即可;这里我演示一个例子:(红色部分为用户输入部分,其余为程序运行的结果,结果图为Untitled.fig,Untitled2.fig) 请以向量的形式输入x,y.x=[1,2,3,4]y=[3,4,5,6]通过下面的交互式图形,你可以事先估计一下你要拟合的多项式的阶数,方便下面的计算.polytool()是交互式函数,在图形上方[Degree]框中输入阶数,右击左下角的[Export]输出图形回车打开polytool交互式界面回车继续进行拟合输入多项式拟合的阶数m = 4Warning: Polynomial is not unique; degree >= number of data points. > In polyfit at 72In zxecf at 64输出多项式的各项系数a = 0.0200000000000001a = -0.2000000000000008a = 0.7000000000000022a = 0.0000000000000000a = 2.4799999999999973输出多项式的有关信息 SR: [4x5 double]df: 0normr: 2.3915e-015Warning: Zero degrees of freedom implies infinite error bounds.> In polyval at 104In polyconf at 92In zxecf at 69观测数据拟合数据x y yh1.0000 3.0000 3.00002.0000 4.0000 4.00003 5 54.0000 6.0000 6.0000剩余平方和 Q = 0.000000标准误差 Sigma = 0.000000相关指数 RR = 1.000000请输入你所需要拟合的数据点,若没有请按回车键结束程序.输入插值点x0 = 3输出插值点拟合函数值 y0 = 5.0000>>结果:untitled.figuntitled2.fig一些matlab优化算法代码的分享代码的目录如下:欢迎讨论1.约束优化问题:minRosen(Rosen梯度法求解约束多维函数的极值)(算法还有bug) minPF(外点罚函数法解线性等式约束)minGeneralPF(外点罚函数法解一般等式约束)minNF(内点罚函数法)minMixFun(混合罚函数法)minJSMixFun(混合罚函数加速法)minFactor(乘子法)minconPS(坐标轮换法)(算法还有bug)minconSimpSearch(复合形法)2.非线性最小二乘优化问题minMGN(修正G-N法)3.线性规划:CmpSimpleMthd(完整单纯形法)4.整数规划(含0-1规划)DividePlane(割平面法)ZeroOneprog(枚举法)5.二次规划QuadLagR(拉格朗日法)ActivedeSet(起作用集法)6.辅助函数(在一些函数中会调用)minNT(牛顿法求多元函数的极值)Funval(求目标函数的值)minMNT(修正的牛顿法求多元函数极值)minHJ(黄金分割法求一维函数的极值)7.高级优化算法1)粒子群优化算法(求解无约束优化问题)1>PSO(基本粒子群算法)2>YSPSO(待压缩因子的粒子群算法)3>LinWPSO(线性递减权重粒子群优化算法)4>SAPSO(自适应权重粒子群优化算法)5>RandWSPO(随机权重粒子群优化算法)6>LnCPSO(同步变化的学习因子)7>AsyLnCPSO(异步变化的学习因子)(算法还有bug)8>SecPSO(用二阶粒子群优化算法求解无约束优化问题)9>SecVibratPSO(用二阶振荡粒子群优化算法求解五约束优化问题)10>CLSPSO(用混沌群粒子优化算法求解无约束优化问题)11>SelPSO(基于选择的粒子群优化算法)12>BreedPSO(基于交叉遗传的粒子群优化算法)13>SimuAPSO(基于模拟退火的粒子群优化算法)2)遗传算法1>myGA(基本遗传算法解决一维约束规划问题)2>SBOGA(顺序选择遗传算法求解一维无约束优化问题)3>NormFitGA(动态线性标定适应值的遗传算法求解一维无约束优化问题)4>GMGA(大变异遗传算法求解一维无约束优化问题)5>AdapGA(自适应遗传算法求解一维无约束优化问题)6>DblGEGA(双切点遗传算法求解一维无约束优化问题)7>MMAdapGA(多变异位自适应遗传算法求解一维无约束优化问题)自己编写的马尔科夫链程序A 代表一组数据序列一维数组本程序的操作对象也是如此t=length(A); % 计算序列“A”的总状态数B=unique(A); % 序列“A”的独立状态数顺序,“E”E=sort(B,'ascend');a=0;b=0;c=0;d=0;for j=1:1:ttLocalization=find(A==E(j)); % 序列“A”中找到其独立状态“E”的位置for i=1:1:length(Localization)if Localization(i)+1>tbreak; % 范围限定elseif A(Localization(i)+1)== E(1)a=a+1;elseif A(Localization(i)+1)== E(2)b=b+1;elseif A(Localization(i)+1)== E(3)c=c+1;% 依此类推,取决于独立状态“E”的个数elsed=d+1;endendT(j,1:tt)=[a,b,c,d]; % “T”为占位矩阵endTT=T;for u=2:1:ttTT(u,:)= T(u,:)- T(u-1,:);endTT; % 至此,得到转移频数矩阵Y=sum(TT,2);for uu=1:1:ttTR(uu,:)= TT(uu,:)./Y(uu,1);endTR % 最终得到马尔科夫转移频率/概率矩阵% 观测序列马尔科夫性质的检验:N=numel(TT);uuu=1;Col=sum(TT,2); % 对列求和Row=sum(TT,1); % 对行求和Total=sum(Row); % 频数总和for i=1:1:ttfor j=1:1:ttxx(uuu,1)=sum((TT(i,j)-(Row(i)*Col(j))./Total).^2./( (Row(i)*Col(j)). /Total));uuu=uuu+1; % 计算统计量x2endendxx=sum(xx)。
MATLAB中的遗传算法与粒子群优化联合优化技术介绍:近年来,优化算法在解决实际问题中发挥着越来越重要的作用。
遗传算法(Genetic Algorithm, GA)和粒子群优化算法(Particle Swarm Optimization, PSO)是两种常见的优化算法。
本文将介绍如何将这两种算法联合应用,以达到更高效、更精确的优化效果。
一、遗传算法的原理与应用遗传算法是一种基于生物进化理论的优化算法。
它通过模拟自然选择、遗传变异等过程,不断演化出越来越优秀的解。
遗传算法的基本步骤包括:初始化种群、选择、交叉、变异和替换。
通过不断迭代,遗传算法能够找到全局最优解或接近最优解的解。
在MATLAB中,遗传算法的应用非常广泛。
例如,在工程领域中,我们可以使用遗传算法来优化机器学习模型的超参数选择,以提高模型的性能。
另外,在组合优化问题中,如旅行商问题(TSP)、背包问题等,遗传算法也可以发挥良好的优化效果。
二、粒子群优化算法的原理与应用粒子群优化算法是一种基于鸟群或鱼群行为模型的优化算法。
它通过模拟粒子的群体行为,不断更新粒子的位置和速度,最终找到最优解。
粒子群优化算法的基本步骤包括:初始化粒子群、计算粒子的适应度、更新粒子的速度和位置。
在MATLAB中,粒子群优化算法也被广泛应用于各个领域。
比如在电力系统中,可以利用粒子群优化算法来优化电力系统的输电线路配置,以降低功率损耗和改善电力系统的稳定性。
此外,粒子群优化算法也可用于图像处理、机器学习等方面,具有良好的应用潜力。
三、遗传算法与粒子群优化的结合遗传算法和粒子群优化算法各自具有一定的优势,但也存在一些不足。
为了克服这些不足,研究者开始将两种算法结合起来,形成了遗传算法与粒子群优化的联合优化技术。
将遗传算法与粒子群优化算法相结合的方法有很多种。
一种常见的方法是将遗传算法作为粒子群优化算法的选择器。
即通过遗传算法选择出适应度高的粒子,然后使用粒子群优化算法来更新这些粒子的位置和速度。
基于时变ARMA和EMD-PSO-LSSVM算法的非平稳下击暴流风速预测李春祥;迟恩楠;何亮;李正农【摘要】根据非平稳过程的进化谱理论,导出基于TARMA模型的非平稳脉动风速模拟式。
基于模拟解析式,得到一些空间点非平稳下击暴流风速的模拟时间序列;运用经验模式分解(EMD)和基于粒子群优化(PSO)的最小二乘支持向量机(LSSVM)(简称为PSO-LSSVM)算法,经MATLAB平台编制程序,根据上下空间点风速样本预测出中间高度处的非平稳下击暴流风速时程。
通过功率谱、自相关和互相关函数预测值与模拟值的比较及平均误差(AE )、均方根误差(MSE)和相关系数(R)的评价,验证了基于时变ARMA模型和EMD-PSO-LSSVM算法的下击暴流风速模拟与预测的可行性。
%Using the theory of evolutionary power spectral density for nonstationary processes,the formula of thetime-varying auto regressive moving average (TARMA ) model was derived to simulate nonstationary downburst wind velocity.The simulation of nonstationary downburst wind velocity time histories at some space points was conducted using TARMA.Adopting the empirical mode decomposition (EMD)and the particle swarm optimization (PSO)based least squares support vector machines (LSSVM) making a programming with MATLAB,the prediction of nonstationary downburst wind velocity time histories at middle space points was accomplished using the nonstationary downburst wind velocity samples at upper and lower two spacepoints.Through comparing the simulated values and the predicted ones of the power spectrum,autocorrelation and cross-correlationfunctions,respectively,it was shown that the TARMA and EMD-PSO-LSSVM algorithm-based simulation and prediction are feasible for nonstationary downburst wind velocity.【期刊名称】《振动与冲击》【年(卷),期】2016(035)017【总页数】7页(P33-38,51)【关键词】下击暴流;预测;时变ARMA;经验模式分解;最小二乘支持向量机【作者】李春祥;迟恩楠;何亮;李正农【作者单位】上海大学土木工程系,上海 200072;上海大学土木工程系,上海200072;上海大学土木工程系,上海 200072;湖南大学土木工程学院,长沙410082【正文语种】中文【中图分类】TU311下击暴流为雷暴天气中强烈的下沉气流猛烈撞击地面,并由撞击点向四周沿地表传播的极具突发性和破坏性的一种强风。
基本粒子群优化算法Matlab源程序 这个程序就是最基本的粒子群优化算法程序,用Matlab实现,非常简单。只有几十行代码。 下面是主函数的源程序,优化函数则以m文件的形式放在fitness.m里面,对不同的优化函数只要修改fitness.m就可以了通用性很强。 主函数源程序(main.m)
%------基本粒子群优化算法(Particle Swarm Optimization)----------- %------名称:基本粒子群优化算法(PSO) %------作用:求解优化问题 %------说明:全局性,并行性,高效的群体智能算法 %------作者:孙明杰(dreamsun2001@126.com) %------单位:中国矿业大学理学院计算数学硕2005 %------时间:2006年8月17日 %------------------------------------------------------------------ %------初始格式化-------------------------------------------------- clear all; clc; format long; %------给定初始化条件---------------------------------------------- c1=1.4962; %学习因子1 c2=1.4962; %学习因子2 w=0.7298; %惯性权重 MaxDT=1000; %最大迭代次数 D=10; %搜索空间维数(未知数个数) N=40; %初始化群体个体数目 eps=10^(-6); %设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)------------ for i=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end %------先计算各个粒子的适应度,并初始化Pi和Pg---------------------- for i=1:N p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end pg=x(1,:); %Pg为全局最优 for i=2:N if fitness(x(i,:),D)pg=x(i,:); end end %------进入主要循环,按照公式依次迭代,直到满足精度要求------------ for t=1:MaxDT for i=1:N v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:),D)p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end if p(i)pg=y(i,:); end end Pbest(t)=fitness(pg,D); end %------最后给出计算结果 disp('*************************************************************') disp('函数的全局最优位置为:') Solution=pg' disp('最后得到的优化极值为:') Result=fitness(pg,D) disp('*************************************************************') %------算法结束---DreamSun GL & HF-----------------------------------
适应度函数源程序(fitness.m) function result=fitness(x,D) sum=0; for i=1:D sum=sum+x(i)^2; end result=sum;
粒子群算法(PSO)源代码 作者:swjtu 来源:转载http://www.blog.edu.cn/user5/283105/archives/2008/2098583.shtml 发布时间:2008-4-17 8:36:46
减小字体 增大字体 %%#################################################################### %%#### Particle swarm optimization %%#### With linkage operator %%#### Deepak devicharan july 2003 %%#################################################################### %%## to apply this to different equations do the following %%## generate initial particles in a search space close to actual soln %%## fool around with no of iterations, no of particles, learning rates %%## for a truly generic PSO do the following %%## increase the number of particles , increase the variance %%## i.e let the particles cover a larger area of the search space %%## then fool around as always with the above thins %declare the parameters of the optimization max_iterations = 1000; no_of_particles = 50; dimensions = 1; delta_min = -0.003; delta_max = 0.003; c1 = 1.3; c2 = 1.3; %initialise the particles and teir velocity components for count_x = 1:no_of_particles for count_y = 1:dimensions particle_position(count_x,count_y) = rand*10; particle_velocity(count_x,count_y) = rand; p_best(count_x,count_y) = particle_position(count_x,count_y); end end %initialize the p_best_fitness array for count = 1:no_of_particles p_best_fitness(count) = -1000; end %particle_position %particle_velocity %main particle swrm routine for count = 1:max_iterations %find the fitness of each particle %change fitness function as per equation requiresd and dimensions for count_x = 1:no_of_particles %x = particle_position(count_x,1); %y = particle_position(count_x,2); %z = particle_position(count_x,3); %soln = x^2 - 3*y*x + z; %x = particle_position(count_x); %soln = x^2-2*x+1; x = particle_position(count_x); soln = x-7; if soln~=0 current_fitness(count_x) = 1/abs(soln); else current_fitness =1000; end end %decide on p_best etc for each particle for count_x = 1:no_of_particles if current_fitness(count_x) > p_best_fitness(count_x) p_best_fitness(count_x) = current_fitness(count_x); for count_y = 1:dimensions p_best(count_x,count_y) = particle_position(count_x,count_y); end end end %decide on the global best among all the particles [g_best_val,g_best_index] = max(current_fitness); %g_best contains the position of teh global best for count_y = 1:dimensions g_best(count_y) = particle_position(g_best_index,count_y); end %update the position and velocity compponents for count_x = 1:no_of_particles for count_y = 1:dimensions p_current(count_y) = particle_position(count_x,count_y); end for count_y = 1:dimensions particle_velocity(count_y) = particle_velocity(count_y) + c1*rand*(p_best(count_y)-p_current(count_y)) + c2*rand*(g_best(count_y)-p_current(count_y));