多目标粒子群matlab代码【精品文档】(完整版)

合集下载

有约束多目标粒子群算法matlab程序

有约束多目标粒子群算法matlab程序

有约束多目标粒子群算法matlab程序摘要:一、多目标粒子群优化算法(MOPSO)概述二、MOPSO 的原理及应用三、MATLAB 实现MOPSO 的步骤四、MOPSO 在多目标优化问题中的优势与局限性五、总结与展望正文:一、多目标粒子群优化算法(MOPSO)概述多目标粒子群优化算法(Multi-objective Particle Swarm Optimization,MOPSO)是一种基于粒子群优化算法的多目标优化方法。

它通过模拟鸟群觅食的自然现象,搜索最优解空间中的全局最优解。

MOPSO 在处理多目标优化问题时,具有较强的全局搜索能力和适应性。

二、MOPSO 的原理及应用MOPSO 的基本原理是在粒子群优化算法的基础上,引入多目标优化问题的特性,即多个目标函数。

在MOPSO 中,每个粒子对应一个解,粒子群通过速度和位置的不断更新,寻找满足多个目标函数的最优解。

MOPSO 广泛应用于各种多目标优化问题,如配电网储能选址、非线性优化问题、多目标路径规划等。

通过MATLAB 实现MOPSO,可以方便地解决这些领域的多目标优化问题。

三、MATLAB 实现MOPSO 的步骤1.构建MOPSO 模型:包括定义目标函数、选择优化算法、设置粒子群参数等。

2.初始化粒子群:随机生成粒子群的位置和速度。

3.迭代更新:根据粒子群优化算法更新粒子的速度和位置。

4.判断收敛:当达到预设的最大迭代次数或满足其他收敛条件时,结束迭代。

5.输出结果:输出满足多个目标函数的最优解。

四、MOPSO 在多目标优化问题中的优势与局限性MOPSO 的优势在于其全局搜索能力和适应性,能够处理复杂的多目标优化问题。

同时,MOPSO 算法简单易懂,易于实现和调试。

然而,MOPSO 也存在一定的局限性。

由于多目标优化问题的特殊性,MOPSO 容易陷入局部最优解,导致算法收敛速度较慢。

此外,MOPSO 对初始粒子群的选择较为敏感,可能会影响算法的性能。

粒子群_Matlab程序代码

粒子群_Matlab程序代码

粒子群优化算法(panicle swarm optimization ,PSO)是kennedy 和Eberhart 在研究鸟类和鱼类的群体行为基础上于1995年提出的一种群智能算法,其思想米源予人工生命和演化计算理论,模仿鸟群飞行觅食行为,通过鸟集体协作使群体达到最优。

1.粒子群算法的原理PSO 中,每个优化问题的解看作搜索空间中的一只鸟(即粒子),所有的粒子都有一个被优化的函数决定的适应值,并且有一个速度决定它们飞翔的方向和速率,粒子们追随当前的最优粒子在解空间中搜索。

算法首先初始化一群随机粒子,然后通过迭代找到最优解。

在每一次迭代中,粒子通过跟踪两个“极值”即个体极值和全局极值来更新自己的速度与位置。

在D 维目标搜索空间中,由种群数为m 的粒子组成粒子群,其中第f 个粒子在第d 维的位置为Xid ,其飞行速度为Vid ,该粒子当前搜索到的最优位置为Pid(goodvalue)和整个粒子群当前的最优位置Pgd(bestvalue)。

每维的速度与位置更新公式如下112(1)()(1)()(1)id id id id id id v v c rand p x c rand g x ω+=⨯+⨯⨯-+⨯⨯-L 11(2)id id id x x v ++=+LW 为惯性权重,C1和C2为学习因子,rand ()——[0,1]范围内变化的随机数。

2.参数介绍与设置(1)ww 是保持粒子运动惯性的参数,能使种群扩展搜索空间,获得较好的求解效果。

较大的w 有利于群体在更大的范围内进行搜索。

而较小的w 能够保证群体收敛到最优位置,所以w 的选择及在迭代中的变化对搜索能力和跳出局优能力具有重要影响。

一般将w 设定为0.8左右。

(1)加速因子c1和c2c1和c2用于调整粒子自身经验和社会经验在其运动中的作用,表示将每个粒子拉向pbest 和gbest 位置的随机加速项的权重,低的值允许粒子在被拉回前可以在目标区域外徘徊, 而高的值则导致粒子突然冲向或越过目标区域。

(完整word版)基本粒子群算法的原理和matlab程序.doc

(完整word版)基本粒子群算法的原理和matlab程序.doc

基本粒子群算法的原理和matlab 程序作者—— niewei120 (nuaa)一、粒子群算法的基本原理粒子群优化算法源自对鸟群捕食行为的研究,最初由Kennedy 和 Eberhart 提出,是一种通用的启发式搜索技术。

一群鸟在区域中随机搜索食物,所有鸟知道自己当前位置离食物多远,那么搜索的最简单有效的策略就是搜寻目前离食物最近的鸟的周围区域。

PSO 算法利用这种模型得到启示并应用于解决优化问题。

PSO 算法中,每个优化问题的解都是粒子在搜索空间中的位置,所有的粒子都有一个被优化的目标函数所决定的适应值,粒子还有一个速度值决定它们飞翔的方向和距离,然后粒子群就追随当前的最优粒子在解空间中搜索。

PSO 算法首先在给定的解空间中随机初始化粒子群,待优化问题的变量数决定了解空间的维数。

每个粒子有了初始位置与初始速度。

然后通过迭代寻优。

在每一次迭代中,每个粒子通过跟踪两个“极值”来更新自己在解空间中的空间位置与飞翔速度。

第一个极值就是单个粒子本身在迭代过程中找到的最优解粒子,这个粒子叫做个体极值。

另一个极值是种群所有粒子在迭代过程中所找到的最优解粒子,这个粒子是全局极值。

上述的方法叫全局粒子群算法。

如果不用种群所有粒子而只用其中一部分作为该粒子的邻居粒子,那么在所有邻居粒子中的极值就是局部极值,该方法称为局部PSO 算法。

速度、位置的更新方程表示为:每个粒子自身搜索到的历史最优值p i,p i=(p i1 ,p i2 ,....,p iQ ), i=1,2,3,....,n 。

所有粒子搜索到的最优值p g, p g=(p g1 ,p g2,....,p gQ ),注意这里的p g只有一个。

是保持原来速度的系数,所以叫做惯性权重。

是粒子跟踪自己历史最优值的权重系数,它表示粒子自身的认识,所以叫“认知”。

通常设置为 2 。

是粒子跟踪群体最优值的权重系数,它表示粒子对整个群体知识的认识,所以叫做“社会知识”,经常叫做“社会”。

粒子群算法matlab程序

粒子群算法matlab程序

粒子群算法matlab程序粒子群算法(PSO)是一种基于群体智能的求解优化问题的算法。

其通过模拟鸟群等大规模群体行为,实现全局搜索和基于群体协作的局部搜索。

在PSO中,通过一组粒子(每个粒子代表一个解)来搜索问题的解空间,在搜索过程中,粒子的位置表示该解在解空间中的位置,速度表示该解在该方向(即属性)上的变化速率,最终达到全局最优解或局部最优解。

PSO算法有着简单易懂、实现简便、计算速度快以及易于与其他算法结合等优点。

下面我将介绍一下如何使用matlab编写简单的粒子群算法程序。

程序主要分为以下步骤:1.初始化在程序开始之前需要对粒子进行初始化操作,其中需要确定粒子群的大小、每个粒子的位置、速度等初始参数。

2.计算适应值计算每个粒子的适应值,即根据当前位置计算该解的适应值。

适应值可以根据实际问题进行定义,如最小化目标函数或最大化收益等。

3.更新粒子速度和位置这一步是PSO算法的核心步骤,通过改变粒子的速度和位置来找到更优的解。

其核心公式为:v(t+1) = w * v(t) + c1 * rand() * (pbest - x(t)) + c2 * rand() * (gbest - x(t)) x(t+1) = x(t) + v(t+1)其中w是惯性权重,c1、c2是学习因子,pbest是该粒子的历史最优解,gbest 是当前全局最优解。

4.更新pbest和gbest在每次更新位置之后需要更新每个粒子自己的历史最优解以及全局最优解。

5.停止条件判断设定停止条件,如最小适应值误差、迭代次数、最大迭代次数等,如果达到了停止条件,则程序结束,输出全局最优解。

下面是一份简单的PSO算法的matlab代码:function [best_fit, best_x] = pso(func, dim, lb, ub, max_iter, swarm_size, w, c1, c2)%初始化粒子v = zeros(swarm_size, dim);x = repmat(lb, swarm_size, 1) + repmat(ub - lb, swarm_size, 1) .* rand(swarm_size, dim);pbest = x;[best_fit, best_idx] = min(func(x));gbest = x(best_idx,:);%开始迭代for iter = 1 : max_iter%更新速度和位置v = w * v + c1 * rand(swarm_size, dim) .* (pbest - x) + c2 * rand(swarm_size, dim) .* repmat(gbest, swarm_size, 1) - x;x = x + v;%边界处理x = max(x, repmat(lb, swarm_size, 1));x = min(x, repmat(ub, swarm_size, 1));%更新pbest和gbestidx = func(x) < func(pbest);pbest(idx,:) = x(idx,:);[min_fit, min_idx] = min(func(pbest));if min_fit < best_fitbest_fit = min_fit;best_x = pbest(min_idx,:);endendend在使用上述代码时,需要定义适应值函数(func)、解空间维度(dim)、每个维度的上界(ub)与下界(lb)、最大迭代次数(max_iter)、粒子群大小(swarm_size)、惯性权重(w)、学习因子(c1、c2)等参数。

粒子群算法matlab代码(PDF)

粒子群算法matlab代码(PDF)

粒子群算法(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多目标粒子群

matlab多目标粒子群

matlab多目标粒子群
多目标粒子群算法是一种基于群体智能的优化算法,它可以在多个目标函数之间寻找最优解。

在工程领域中,多目标优化问题往往需要同时考虑多个目标函数,例如在产品设计中需要同时考虑成本、质量、性能等多个指标。

因此,多目标粒子群算法在实际应用中具有广泛的应用前景。

在matlab中,可以通过调用相关函数来实现多目标粒子群算法的编写。

其中,主要的函数包括:
1. multiobj-PSO:该函数实现了多目标粒子群算法的主要流程,包括初始化种群、更新粒子位置和速度、评估适应度值等操作。

2. paretofront:该函数用于计算帕累托前沿,即所有非支配解的集合。

这些解在多目标优化问题中是最优解的候选者。

3. paretoSet:该函数用于计算帕累托解集,即所有非支配解的集合及其对应的目标函数值。

这些解在多目标优化问题中是最优解的集合。

在使用多目标粒子群算法解决实际问题时,需要注意以下几点:1. 粒子群的大小和迭代次数需要根据具体问题进行调整,以获得最优解。

2. 目标函数需要设计合理,既要能够反映实际问题,又要具有一定
的数学性质,如可微性、连续性等。

3. 在评估适应度值时,需要使用合适的评价指标,以确保得到的解能够满足实际需求。

4. 在实现算法时,需要注意代码的可读性和可维护性,以便进行后续的修改和优化。

多目标粒子群算法是一种有效的优化算法,可以在多目标优化问题中发挥重要作用。

在matlab中,通过调用相关函数,可以方便地实现多目标粒子群算法的编写和应用。

粒子群算法 matlab源代码

粒子群算法  matlab源代码

%相关参数的设置UB=600; %函数的上界LB=300; %函数的下界PopSize=40; %种群的大小Dim=10; %微粒的维数c1=2; %学习因子c2=2; %学习因子w_start=0.9;%惯性权重的开始值w_end=0.4;%惯性权重的最后值Vmax=100;%微粒的最大速度MaxIter=1500;%最大迭代次数Iter=0;%初始迭代次数%初始化群和速度X=rand(PopSize,Dim)*(UB-LB)+LB;%微粒位置随机初始化V=rand(PopSize,Dim);%微粒速度随机初始化;%测试函数:Griewank函数ind=repmat(1:Dim,PopSize,1);FX=sum(((X.^2)/4000)')'- prod(cos(X./sqrt(ind))')'+1;%设定当前位置为粒子的最好位置,并记录其最好值PBest=X;FPBest=FX;%找到初始微粒群体的最好微粒[Fgbest,r]=min(FX);CF=Fgbest;%记录当前全局最优值Best=X(r,:);%用于保存最优粒子的位置FBest=Fgbest;%循环while(Iter<=MaxIter)Iter=Iter+1;%更新惯性权重的值;w_now=((w_start-w_end)*(MaxIter-Iter)/MaxIter)+w_end;A=repmat(X(r,:),PopSize,1);%生成随机数R1=rand(PopSize,Dim);R2=rand(PopSize,Dim);%速度更新V=w_now*V+c1*R1.*(PBest-X)+c2*R2.*(A-X);%对进化后速度大于最大速度的微粒进行处理changeRows=V>Vmax;VStep(find(changeRows))=Vmax;%对进化后速度小雨最小速度的微粒进行处理changeRows=V<-Vmax;V(find(changeRows))=-Vmax;%微粒位置进行更新X=X+1.0*V;%重新计算新位置的适应度值ind=repmat(1:Dim,PopSize,1);FX=sum(((X.^2)/4000)')'- prod(cos(X./sqrt(ind))')'+1;%更新每个微粒的最好位置P=FX<FPBest;FPBest(find(P))=FX(find(P));%适应值更换PBest(find(P),:)=X(find(P),:)%粒子位置更换[Fgbest,g]=min(FPBest);%保存最好适应值if Fgbest<CF %如果本次适应值好于上次则保存[fBest,b]=min(FPBest);%最好适应值为fBestBest=PBest(b,:);%最好位置为BestendCF=Fgbest;%保留本次适应值准备与下次比较end %循环结束。

粒子群双目标优化matlab

粒子群双目标优化matlab

粒子群双目标优化matlab
粒子群算法(PSO)是一种基于群体智能的优化算法,它模拟了鸟群觅食的行为,通过不断地迭代更新粒子的位置和速度来搜索最优解。

双目标优化问题是指需要同时优化两个目标函数的问题,这在实际工程和科学研究中非常常见。

在本文中,我们将介绍如何使用Matlab实现粒子群双目标优化算法。

首先,我们需要定义两个目标函数,分别表示我们需要优化的两个目标。

然后,我们可以使用Matlab编写一个粒子群优化算法的函数,该函数将包括初始化粒子群、更新粒子位置和速度、评估目标函数值等步骤。

接下来,我们可以利用Matlab的优化工具箱来调用这个函数,进行双目标优化。

在实际应用中,粒子群双目标优化算法可以用于解决诸如工程设计、控制系统优化、金融投资组合优化等问题。

通过不断地调整粒子群的位置和速度,我们可以找到一组Pareto最优解,即在没有任何目标函数值得到改善的情况下,无法同时优化两个目标。

总之,粒子群双目标优化算法在Matlab中的实现为我们提供了
一个强大的工具,可以帮助我们解决实际中的复杂优化问题。

希望本文可以为对此感兴趣的读者提供一些帮助和启发。

有约束多目标粒子群算法matlab程序

有约束多目标粒子群算法matlab程序

有约束多目标粒子群算法matlab程序【实用版】目录一、多目标粒子群算法的概念和原理二、MATLAB 实现多目标粒子群优化算法的步骤三、多目标粒子群算法在配电网储能选址定容中的应用四、多目标粒子群优化算法的优缺点五、总结与展望正文一、多目标粒子群算法的概念和原理多目标粒子群算法(Multi-objective Particle Swarm Optimization,MOPSO)是一种基于启发式的多目标全局优化算法。

它起源于鸟群觅食的自然现象,通过模拟鸟群中个体的觅食行为,寻找全局最优解。

与传统的单目标粒子群算法不同,MOPSO 需要处理多个目标函数,因此需要在算法中加入目标函数权重的概念,以确定每个目标函数在优化过程中的重要性。

二、MATLAB 实现多目标粒子群优化算法的步骤1.确定优化问题:首先,需要明确优化问题的具体内容,包括目标函数、约束条件和搜索空间等。

2.初始化粒子群:根据搜索空间的大小和目标函数的个数,生成一定数量的粒子,并随机分配它们在搜索空间中的位置和速度。

3.更新粒子速度和位置:根据粒子群算法的更新规则,结合目标函数的梯度和约束条件,更新每个粒子的速度和位置。

4.评估适应度:根据目标函数的值,计算每个粒子的适应度,并选择最优的粒子作为全局最优解。

5.结束条件:当达到预设的最大迭代次数或全局最优解的适应度满足预设的标准时,结束优化过程。

6.输出结果:输出全局最优解及其对应的适应度。

三、多目标粒子群算法在配电网储能选址定容中的应用多目标粒子群算法在配电网储能选址定容问题中具有很好的应用前景。

该问题涉及到多个目标函数,如储能设备的投资成本、运行维护费用、电网的运行安全性等。

MOPSO 可以通过调整目标函数权重,很好地平衡这些目标之间的关系,从而找到最优的储能设备容量和位置。

四、多目标粒子群优化算法的优缺点MOPSO 的优点在于其全局搜索能力,能够处理多个目标函数,并在搜索过程中自动平衡各目标之间的关系。

有约束多目标粒子群算法matlab程序

有约束多目标粒子群算法matlab程序

有约束多目标粒子群算法matlab程序约束多目标粒子群算法(Constrained Multi-Objective Particle Swarm Optimization,CMOPSO)是一种用于处理多目标优化问题的进化算法。

以下是一个简单的MATLAB 示例程序,演示了如何实现CMOPSO。

请注意,这只是一个基本的框架,你可能需要根据你的具体问题进行适当的修改。

```matlabfunction [paretoFront, paretoSet] = cmopso(objectiveFunction, constraintFunction, nParticles, nIterations, nObjectives)% 参数设置nVariables = 2; % 例子中假设有两个变量w = 0.5; % 权重因子c1 = 2; % 学习因子1c2 = 2; % 学习因子2vMax = 0.2; % 最大速度nConstraints = 2; % 约束数量% 初始化粒子群particles.position = rand(nParticles, nVariables);particles.velocity = rand(nParticles, nVariables);particles.bestPosition = particles.position;particles.bestValue = inf(nParticles, nObjectives);% 迭代优化for iteration = 1:nIterations% 更新粒子位置和速度for i = 1:nParticles% 计算适应值fitness = objectiveFunction(particles.position(i, :));% 计算约束违反度constraintViolation = constraintFunction(particles.position(i, :));% 更新粒子最优解if all(constraintViolation <= 0) && dominates(fitness, particles.bestValue(i, :))particles.bestPosition(i, :) = particles.position(i, :);particles.bestValue(i, :) = fitness;end% 更新全局最优解if all(constraintViolation <= 0) && dominates(fitness, globalBestValue)globalBestPosition = particles.position(i, :);globalBestValue = fitness;end% 更新粒子速度和位置r1 = rand(1, nVariables);r2 = rand(1, nVariables);particles.velocity(i, :) = w * particles.velocity(i, :) + ...c1 * r1 .* (particles.bestPosition(i, :) - particles.position(i, :)) + ...c2 * r2 .* (globalBestPosition - particles.position(i, :));% 速度限制particles.velocity(i, :) = min(max(particles.velocity(i, :), -vMax), vMax);% 更新粒子位置particles.position(i, :) = particles.position(i, :) + particles.velocity(i, :);endend% 获取Pareto 前沿和Pareto 集paretoFront = [];paretoSet = [];for i = 1:nParticlesif all(constraintFunction(particles.position(i, :)) <= 0)isDominated = false;for j = 1:size(paretoFront, 1)if dominates(particles.bestValue(i, :), paretoFront(j, :))isDominated = true;break;elseif dominates(paretoFront(j, :), particles.bestValue(i, :))paretoFront(j, :) = [];break;endendif ~isDominatedparetoFront = [paretoFront; particles.bestValue(i, :)];paretoSet = [paretoSet; particles.bestPosition(i, :)];endendendendfunction result = dominates(a, b)% 判断a 是否支配bresult = all(a <= b) && any(a < b);end```请注意,这只是一个简单的示例,具体问题的约束函数和目标函数需要根据你的应用进行修改。

粒子群Matlab程序代码

粒子群Matlab程序代码

粒子群优化算法(panicle swarm optimization ,PSO)是kennedy 和Eberhart 在研究鸟类和鱼类的群体行为基础上于1995年提出的一种群智能算法,其思想米源予人工生命和演化计算理论,模仿鸟群飞行觅食行为,通过鸟集体协作使群体达到最优。

1.粒子群算法的原理PSO 中,每个优化问题的解看作搜索空间中的一只鸟(即粒子),所有的粒子都有一个被优化的函数决定的适应值,并且有一个速度决定它们飞翔的方向和速率,粒子们追随当前的最优粒子在解空间中搜索。

算法首先初始化一群随机粒子,然后通过迭代找到最优解。

在每一次迭代中,粒子通过跟踪两个“极值”即个体极值和全局极值来更新自己的速度与位置。

在D 维目标搜索空间中,由种群数为m 的粒子组成粒子群,其中第f 个粒子在第d 维的位置为Xid ,其飞行速度为Vid ,该粒子当前搜索到的最优位置为Pid(goodvalue)和整个粒子群当前的最优位置Pgd(bestvalue)。

每维的速度与位置更新公式如下112(1)()(1)()(1)id id id id id id v v c rand p x c rand g x ω+=⨯+⨯⨯-+⨯⨯-11(2)id id id x x v ++=+W 为惯性权重,C1和C2为学习因子,rand ()——[0,1]范围内变化的随机数。

2.参数介绍与设置(1)ww 是保持粒子运动惯性的参数,能使种群扩展搜索空间,获得较好的求解效果。

较大的w 有利于群体在更大的范围内进行搜索。

而较小的w 能够保证群体收敛到最优位置,所以w 的选择及在迭代中的变化对搜索能力和跳出局优能力具有重要影响。

一般将w 设定为0.8左右。

(1)加速因子c1和c2c1和c2用于调整粒子自身经验和社会经验在其运动中的作用,表示将每个粒子拉向pbest 和gbest 位置的随机加速项的权重,低的值允许粒子在被拉回前可以在目标区域外徘徊, 而高的值则导致粒子突然冲向或越过目标区域。

matlab 粒子群算法 多目标优化

matlab 粒子群算法 多目标优化

在所有的衍生品种中,粒子群算法(PSO)因其简单和有效的优化方法而备受关注。

粒子群算法可以用于解决复杂的多目标优化问题,并具有全局收敛能力。

在这篇文章中,我将深入探讨PSO在多目标优化中的应用,以及它对于解决实际问题的潜力。

1. 粒子群算法概述粒子群算法是一种基于群体智能的优化算法,受到鸟群觅食行为的启发。

在PSO中,解决方案被表示为一个粒子群,每个粒子都有一个位置和速度,它们根据自身经验和群体经验来调整自己的位置和速度。

通过迭代更新粒子的位置和速度,PSO试图搜索最优解。

2. PSO在多目标优化中的应用多目标优化是现实世界中常见的问题,例如在工程设计、金融投资和资源分配中。

PSO作为一种全局搜索算法,可以有效地应对多目标优化问题。

通过适当的参数设置和适应度函数设计,PSO可以在多目标空间中搜索出一组高质量的解,这些解代表了不同的权衡取舍。

3. PSO与多目标优化的挑战然而,PSO在处理多目标优化问题时也面临一些挑战。

如何设计适合多目标优化的适应度函数、如何平衡收敛速度和解的多样性等都是需要考虑的问题。

PSO在处理高维、非线性和离散的多目标优化问题时也存在一定的局限性。

4. 个人观点与理解在我看来,PSO作为一种全局搜索算法,在解决多目标优化问题时具有独特的优势。

其简洁的原理和易于实现的特点使得PSO在实际应用中具有广泛的可行性。

然而,我也认识到PSO在处理多目标优化问题时需要面对各种挑战,因此在实践中需要认真考虑算法参数的选择和适应度函数的设计。

总结回顾通过本文的探讨,我们了解了粒子群算法在多目标优化中的应用。

PSO作为一种全局搜索算法,具有较好的搜索性能和收敛能力,可用于发现多目标空间中的高质量解。

然而,PSO在处理多目标优化问题时也存在一些挑战,需要综合考虑算法参数和适应度函数设计等因素。

在未来的研究和应用中,可以进一步探索PSO在多目标优化中的潜力和改进空间。

总结起来,本文从PSO的基本原理、多目标优化的应用和挑战,以及个人观点和理解进行了全面的讨论。

粒子群算法matlab代码

粒子群算法matlab代码

一、粒子群主程序psize=20; %粒子个数的设置pd=12; %粒子的维数lz=zeros(psize,pd);for i=1:psize %随机生成粒子群,psize行pd列,pd维。

suiji=rand(1,pd);for j=1:pd/2if suiji(j)<0.5lz(i,j)=fix(unifrnd(0,100))*100;elselz(i,j)=fix(unifrnd(0,100)+1)*100;endendfor j=pd/2+1:1:pdif suiji(j)<0.5lz(i,j)=fix(unifrnd(0,45))/100;elselz(i,j)=fix(unifrnd(0,45)+1)/100;endendlz(i,1:pd/2)=sort(lz(i,1:pd/2));lz(i,pd/2+1:pd)=sort(lz(i,pd/2+1:pd));endlv=lz;goodvalue=lz; %每个粒子自己历史最好值初始化,psize行pd列。

vmax=20; %速度上限c1=2;c2=2; %学习因子w=0.729; %随机因子和惯性因子bestvalue=zeros(1,pd); %全局最好值初始化,1行pd列for j=1:pdbestvalue(1,j)=goodvalue(1,j);endfnew=zeros(1,psize);for j=1:psizefnew(j)=fpso(lz(1,:));endfold=fnew;flagstop=0; %终止标志k=0; %迭代次数记录f0=fpso(bestvalue); %适应值初始化while flagstop==0for i=1:psize %适应值比较,更新各自历史最好值(位置)fnew(i)=fpso(lz(i,:)); %记录每次每个粒子的适应值,便于以后设置终止条件if fnew(i)<fold(i)fold(i)=fnew(i); %fold记录每个粒子的最好历史值goodvalue(i,j)=lz(i,j);endendendfor i=1:psize%每个粒子历史最好值比较,更新全局最好值f1=fold(i);if f1<f0f0=f1;for j=1:pdbestvalue(1,j)=goodvalue(i,j);endendend%*********粒子趋一点终止条件*********%flagstop0=max(abs(fold)); %比较当次的所有粒子的适应值,flagstop1=min(abs(fold)); %若它们之间差别较小,则可以停止。

粒子群算法matlaB程序

粒子群算法matlaB程序
qu(k)=-160/100*(k-350)+1680;
end
for k=451:540
qu(k)=1520;
end
for k=541:700
qu(k)=1520+80/100*(k-540);
end
for k=701:800
qu(k)=qu(700);
legend('Expext Line','PID')
xlabel('时间/分')
subplot(2,2,4)
plot(qut(1:end-1)/3,r,'-.')
legend('r(t)')
xlabel('时间/分')
rou(k+1)=rou(k)+alpha*qu(k)-alpha*vf*(rou(k)-rou(k)^2/rou_jam)+alpha*r(k)/lambda;
end
%%
%显示构造的期望密度
figure(1)
subplot(2,2,1)
plot(qut/3,qu)
xlabel('时间/分')
end00)-90/100*(k-800);
end
for k=951:1100
qu(k)=qu(950);
end
for k=1101:1200
qu(k)=qu(950)+120/100*(k-1100);
end
qu(k)=qu(1520)+70/100*(k-1650);
end
for k=1701:1850

matlab多目标优化代码

matlab多目标优化代码

以下是一个简单的 MATLAB 多目标优化示例代码,使用内置的`paretosearch` 函数求解一个具有两个目标函数的问题:
```matlab
function [x, fval] = multiobjective_example()
% 定义目标函数
fun1 = @(x) -sum(x.^2);
fun2 = @(x) -sum(x.^3);
% 定义搜索空间
n = 10;
lb = zeros(n,1);
ub = ones(n,1);
% 调用 paretosearch 函数求解
options = optimoptions('paretosearch', 'PlotFcn', @gaplotpareto);
[x, fval] = paretosearch(fun1, fun2, lb, ub, [], [], [], options);
end
```
该示例代码定义了两个目标函数 `fun1` 和 `fun2`,它们分别计算向量 `x` 的平方和立方和的相反数。

搜索空间是一个包含 10 个维度的超矩形,其下界和上界分别为零向量和单位向量。

使用`paretosearch` 函数求解该问题,其中 `optimoptions` 函数用于设置优化选项,包括绘制帕累托前沿的函数 `gaplotpareto`。

最后,返回最优解向量 `x` 和对应的两个目标函数值 `fval`。

多目标粒子群matlab代码

多目标粒子群matlab代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 改进的多目标粒子群算法,包括多个测试函数% 对程序中的部分参数进行修改将更好地求解某些函数%ZDT1NP=cell(1,50);ZDT1FV=cell(1,50);ZDT1T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('ZDT1',0.1,50,100,2.0,1.0,0.4,200,30,zer os(1,30),ones(1,30));%--ZDT1elapsedTime=toc;ZDT1NP(i)={np};ZDT1FV(i)={fv};ZDT1T(i)=elapsedTime;display(strcat('ZDT1',num2str(i)));endzdt1fv=cell2mat(ZDT1FV');zdt1fv=GetLeastFunctionValue(zdt1fv);ZDT2NP=cell(1,50);ZDT2FV=cell(1,50);ZDT2T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('ZDT2',0.1,50,100,2.0,1.0,0.4,200,30,zer os(1,30),ones(1,30),[1,zeros(1,29)]);%--ZDT2elapsedTime=toc;ZDT2NP(i)={np};ZDT2FV(i)={fv};ZDT2T(i)=elapsedTime;display(strcat('ZDT2',num2str(i)));endzdt2fv=cell2mat(ZDT2FV');zdt2fv=GetLeastFunctionValue(zdt2fv); %%%%%%%%%%%%%%%%%%%%%%%%%%%5ZDT3NP=cell(1,50);ZDT3FV=cell(1,50);ZDT3T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('ZDT3',0.1,50,100,2.0,1.0,0.4,400,30,zeros(1,30 ),ones(1,30));%--ZDT3elapsedTime=toc;ZDT3NP(i)={np};ZDT3FV(i)={fv};ZDT3T(i)=elapsedTime;display(strcat('ZDT3',num2str(i)));endzdt3fv=cell2mat(ZDT3FV');zdt3fv=GetLeastFunctionValue(zdt3fv);ZDT4NP=cell(1,50);ZDT4FV=cell(1,50);ZDT4T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals]=ParticleSwarmOpt('ZDT4',0.1,50,100,2.0,1.0,0.4,200,10,[0,-5,-5,-5,-5,-5, -5,-5,-5,-5],[1,5,5,5,5,5,5,5,5,5],[1,0,0,0,0,0,0,0,0,0]);%--ZDT4elapsedTime=toc;ZDT4NP(i)={np};ZDT4FV(i)={fv};ZDT4T(i)=elapsedTime;display(strcat('ZDT4',num2str(i)));endzdt4fv=cell2mat(ZDT4FV');zdt4fv=GetLeastFunctionValue(zdt4fv); %%%%%%%%%%%%%%%%%%%%%%%%ZDT6NP=cell(1,50);ZDT6FV=cell(1,50);ZDT6T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('ZDT6',0.1,50,100,2.0,1.0,0.4,200,10,zer os(1,10),ones(1,10));%--ZDT6elapsedTime=toc;ZDT6NP(i)={np};ZDT6FV(i)={fv};ZDT6T(i)=elapsedTime;display(strcat('ZDT6',num2str(i)));endzdt6fv=cell2mat(ZDT6FV');zdt6fv=GetLeastFunctionValue(zdt6fv);CTP1NP=cell(1,50);CTP1FV=cell(1,50);CTP1T=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP1',0.1,50,100,2.0,1.0,0.4,1500,5,[0,-5,-5,-5, -5],[1,5,5,5,5],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--CTP1 elapsedTime=toc;CTP1NP(i)={np};CTP1FV(i)={fv};CTP1T(i)=elapsedTime;display(strcat('CTP1',num2str(i)));endctp1fv=cell2mat(CTP1FV');ctp1fv=GetLeastFunctionValue(ctp1fv);CTP1fmNP=cell(1,50);CTP1fmFV=cell(1,50);CTP1fmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP1',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--CTP1 elapsedTime=toc;CTP1fmNP(i)={np};CTP1fmFV(i)={fv};CTP1fmT(i)=elapsedTime;display(strcat('CTP1fm',num2str(i)));endctp1fmfv=cell2mat(CTP1fmFV');ctp1fmfv=GetLeastFunctionValue(ctp1fmfv);CTP2NP=cell(1,50);CTP2FV=cell(1,50);CTP2T=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP2',0.1,50,100,2.0,1.0,0.4,1500,5,[0,-5,-5,-5, -5],[1,5,5,5,5],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--CTP2 elapsedTime=toc;CTP2NP(i)={np};CTP2FV(i)={fv};CTP2T(i)=elapsedTime;display(strcat('CTP2',num2str(i)));endctp2fv=cell2mat(CTP2FV');ctp2fv=GetLeastFunctionValue(ctp2fv);CTP2fmNP=cell(1,50);CTP2fmFV=cell(1,50);CTP2fmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP2',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--CTP2 elapsedTime=toc;CTP2fmNP(i)={np};CTP2fmFV(i)={fv};CTP2fmT(i)=elapsedTime;display(strcat('CTP2fm',num2str(i)));endctp2fmfv=cell2mat(CTP2fmFV');ctp2fmfv=GetLeastFunctionValue(ctp2fmfv);CTP3NP=cell(1,50);CTP3FV=cell(1,50);CTP3T=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP3',0.1,50,100,2.0,1.0,0.4,1400,5,[0,-5,-5,-5, -5],[1,5,5,5,5],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--CTP3 elapsedTime=toc;CTP3NP(i)={np};CTP3FV(i)={fv};CTP3T(i)=elapsedTime;display(strcat('CTP3',num2str(i)));endctp3fv=cell2mat(CTP3FV');ctp3fv=GetLeastFunctionValue(ctp3fv);CTP3fmNP=cell(1,50);CTP3fmFV=cell(1,50);CTP3fmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP3',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--CTP3 elapsedTime=toc;CTP3fmNP(i)={np};CTP3fmFV(i)={fv};CTP3fmT(i)=elapsedTime;display(strcat('CTP3fm',num2str(i)));endctp3fmfv=cell2mat(CTP3fmFV');ctp3fmfv=GetLeastFunctionValue(ctp3fmfv);CTP4NP=cell(1,50);CTP4FV=cell(1,50);CTP4T=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP4',0.1,50,100,2.0,1.0,0.4,1400,5,[0,-5,-5,-5, -5],[1,5,5,5,5],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--CTP4 elapsedTime=toc;CTP4NP(i)={np};CTP4FV(i)={fv};CTP4T(i)=elapsedTime;display(strcat('CTP4',num2str(i)));endctp4fv=cell2mat(CTP4FV');ctp4fv=GetLeastFunctionValue(ctp4fv);CTP4fmNP=cell(1,50);CTP4fmFV=cell(1,50);CTP4fmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP4',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 1 0 0],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--CTP4 elapsedTime=toc;CTP4fmNP(i)={np};CTP4fmFV(i)={fv};CTP4fmT(i)=elapsedTime;display(strcat('CTP4fm',num2str(i)));endctp4fmfv=cell2mat(CTP4fmFV');ctp4fmfv=GetLeastFunctionValue(ctp4fmfv);CTP5NP=cell(1,50);CTP5FV=cell(1,50);CTP5T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP5',0.1,50,100,2.0,1.0,0.4,200,5,[0,-5 ,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0]);%--CTP5elapsedTime=toc;CTP5NP(i)={np};CTP5FV(i)={fv};CTP5T(i)=elapsedTime;display(strcat('CTP5',num2str(i)));endctp5fv=cell2mat(CTP5FV');ctp5fv=GetLeastFunctionValue(ctp5fv);CTP6NP=cell(1,50);CTP6FV=cell(1,50);CTP6T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP6',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5 ,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0]);%--CTP6elapsedTime=toc;CTP6NP(i)={np};CTP6FV(i)={fv};CTP6T(i)=elapsedTime;display(strcat('CTP6',num2str(i)));endctp6fv=cell2mat(CTP6FV');ctp6fv=GetLeastFunctionValue(ctp6fv);CTP7NP=cell(1,50);CTP7FV=cell(1,50);CTP7T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP7',0.1,50,100,2.0,1.0,0.4,1000,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[1 0 0 0 0]);%--CTP7elapsedTime=toc;CTP7NP(i)={np};CTP7FV(i)={fv};CTP7T(i)=elapsedTime;display(strcat('CTP7',num2str(i)));endctp7fv=cell2mat(CTP7FV');ctp7fv=GetLeastFunctionValue(ctp7fv);CONSTRNP=cell(1,50);CONSTRFV=cell(1,50);CONSTRT=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP8',0.1,50,100,2.0,1.0,0.4,200,2,[0.1, 0],[1,5]);%--CTP8,CONSTRelapsedTime=toc;CONSTRNP(i)={np};CONSTRFV(i)={fv};CONSTRT(i)=elapsedTime;display(strcat('CTP8',num2str(i)));endconstrfv=cell2mat(CONSTRFV');constrfv=GetLeastFunctionValue(constrfv);SRNNP=cell(1,50);SRNFV=cell(1,50);SRNT=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP9',0.1,50,100,2.0,1.0,0.4,200,2,[-20, -20],[20,20]);%--CTP9,SRNelapsedTime=toc;SRNNP(i)={np};SRNFV(i)={fv};SRNT(i)=elapsedTime;display(strcat('CTP9',num2str(i)));endsrnfv=cell2mat(SRNFV');srnfv=GetLeastFunctionValue(srnfv);TNKNP=cell(1,50);TNKFV=cell(1,50);TNKT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP10',0.1,50,100,2.0,1.0,0.4,1300,2,[0,0],[pi, pi],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',false));%--CTP10,TNK elapsedTime=toc;TNKNP(i)={np};TNKFV(i)={fv};TNKT(i)=elapsedTime;display(strcat('CTP10',num2str(i)));endtnkfv=cell2mat(TNKFV');tnkfv=GetLeastFunctionValue(tnkfv);TNKfmNP=cell(1,50);TNKfmFV=cell(1,50);TNKfmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP10',0.1,50,100,2.0,1.0,0.4,300,2,[0,0],[pi,pi],[],struct('isfmopso',true,'istargetdis',false,'stopatborder',false));%--CTP10,TNK elapsedTime=toc;TNKfmNP(i)={np};TNKfmFV(i)={fv};TNKfmT(i)=elapsedTime;display(strcat('CTP10fm',num2str(i)));endtnkfmfv=cell2mat(TNKfmFV');tnkfmfv=GetLeastFunctionValue(tnkfmfv);BNHNP=cell(1,50);BNHFV=cell(1,50);BNHT=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('BNH',0.1,50,100,2.0,1.0,0.4,200,2,zeros (1,2),[5,3]);%--BNHelapsedTime=toc;BNHNP(i)={np};BNHFV(i)={fv};BNHT(i)=elapsedTime;display(strcat('BNH',num2str(i)));endbnhfv=cell2mat(BNHFV');bnhfv=GetLeastFunctionValue(bnhfv);OSYNP=cell(1,50);OSYFV=cell(1,50);OSYT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('OSY',0.1,50,100,2.0,1.0,0.4,1500,6,[0,0,1,0,1,0 ],[10,10,5,6,5,10],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--OSY elapsedTime=toc;OSYNP(i)={np};OSYFV(i)={fv};OSYT(i)=elapsedTime;display(strcat('OSY',num2str(i)));endosyfv=cell2mat(OSYFV');osyfv=GetLeastFunctionValue(osyfv);OSYfmNP=cell(1,50);OSYfmFV=cell(1,50);OSYfmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('OSY',0.1,50,100,2.0,1.0,0.4,500,6,[0,0,1,0,1,0], [10,10,5,6,5,10],[],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--OSY elapsedTime=toc;OSYfmNP(i)={np};OSYfmFV(i)={fv};OSYfmT(i)=elapsedTime;display(strcat('OSYfm',num2str(i)));endosyfmfv=cell2mat(OSYfmFV');osyfmfv=GetLeastFunctionValue(osyfmfv);function [np,nprule,dnp,fv,goals,pbest] = ParticleSwarmOpt(funcname,unfitx,N,Nnp,cmax,cmin,w,M,D,lb,ub,x0,params)%待优化的目标函数:fitness%约束容忍度unfitx=0.01,逐步降到0%内部种群(粒子数目):N%外部种群(非劣解集):Nnp%学习因子1:cmax%学习因子2:cmin%惯性权重:w%最大迭代次数:M%问题的维数:D%目标函数取最小值时的自变量值:xm%目标函数的最小值:fv%迭代次数:cvformat long;NP=[];%非劣解集Dnp=[];%非劣解集距离if nargin < 13params = struct('isfmopso',false,'istargetdis',false,'stopatborder',true);endif (nargin < 12 || isempty(x0))x0=lb+(ub-lb).*rand([1,D]);endT=size(fitness(x0,funcname),2);goals=zeros(M,N,T);%记下N个粒子M次迭代T维目标变化%----初始化种群的个体--------///////第1步///////////////////////////////////x(1,:)=x0;v(1,:)=(ub-lb).*rand([1,D])*0.5;for i=2:Nfor j=1:Dx(i,j)=lb(j)+(ub(j)-lb(j))*rand; %随机初始化位置v(i,j)=(ub(j)-lb(j))*rand*0.5; %随机初始化速度endend%----计算目标向量----------%---速度控制vmax=(ub-lb)*0.5;vmin= -vmax;%-----求出初始NP-----------////////第2步///////////////////////////////////NP(1,:)=x(1,:);%第一个默认加入NPNPRule=[0,0,0];%非劣解集参数Dnp(1,1)=0;for i=2:Nfaix = GetFai(x(i,:),funcname,params);if faix<=unfitx[NP,NPRule,Dnp] = compare(x(i,:),NP,NPRule,Dnp,Nnp,funcname,params);endend%-----初始自身最好位置------///////第3步////////////////////////////////////pbest = x;%自身最优解%-----在确定每个粒子所对就的目标方格-------//第4步///////////////////////////%------进入主要循环,按照公式依次迭代------------for t=1:Mif mod(t,100)==0unfitx = 0.01-0.01*(t+200)/M;if unfitx <0unfitx =0 ;end% [x,v,pbest,NP,NPRule,Dnp]=ReInit(x,v,pbest,NP,NPRule,Dnp,Nnp,D,lb,ub,unfitx);endc = cmax - (cmax - cmin)*t/M;w1=w-(w-0.3)*t/M;%c = cmax;%c = cmax - (cmax - cmin)*mod(t,51)/50;%w1=w-(w-0.3)*mod(t,51)/50;%-----获得全局最优-------/////第5步/////////////////////////////////////////%if mod(t,3)==1%[gbest,NPRule] = GetGlobalBest(NP,NPRule,Dnp);%endfor i=1:N%-------------------更新粒子的位置和速度----------////第6步//////////////////%v(i,:)=w*v(i,:)+cmin*rand*(pbest(i,:)-x(i,:))+cmax*rand*(gbest-x(i,:));%[gbest,NPRule] = GetGlobalBest2(x(i,:),NP,NPRule);%%%%%12-17[gbest,NPRule] = GetGlobalBest(NP,NPRule,Dnp);%w1=Inf;%while(w1>1.2 || w1<0)% w1=0.8+randn*0.8;%end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%模糊向导粒子群算法if(params.isfmopso)nploc=x(i,:);npruleloc=[0,0,0];dnploc(1,1)=0;tempv=zeros(10,D);tempx=zeros(10,D);for k=1:10tempv(k,:)=w1*v(i,:)+c*rand*(pbest(i,:)-x(i,:))+c*rand*(gbest-x(i,:));for j=1:Dif tempv(k,j)>vmax(j)tempv(k,j)=vmax(j);elseif tempv(k,j)<vmin(j)tempv(k,j)=vmin(j);endendtempx(k,:)=x(i,:)+tempv(k,:);faix = GetFai(x(i,:),funcname,params);if faix<=unfitx[nploc,npruleloc,dnploc] = compare(tempx(k,:),nploc,npruleloc,dnploc,10,funcname,params);endendnnx=size(nploc,1);seltemp=randi([1,nnx]);ttv=nploc(seltemp,:)-x(i,:);x(i,:)=nploc(seltemp,:);if sum(abs(ttv))>0v(i,:)=ttv;endelse%%%%%%%%%%%%%%%%%%%v(i,:)=w1*v(i,:)+c*rand*(pbest(i,:)-x(i,:))+c*rand*(gbest-x(i,:));for j=1:Dif v(i,j)>vmax(j)v(i,j)=vmax(j);elseif v(i,j)<vmin(j)v(i,j)=vmin(j);endendx(i,:)=x(i,:)+v(i,:);funcname=upper(funcname);if(strcmp(funcname(1:3),'CTP'))x(i,:)=x(i,:)+v(i,:);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-------------------采取措施,避免粒子飞出空间----------////第7步/////////////%速度位置钳制if(params.stopatborder)%粒子随机停留在边界for j=1:Dif x(i,j)>ub(j)if(randi([0,0],1)==0)x(i,j)=ub(j);v(i,j)=-v(i,j);else x(i,j)=lb(j)+(ub(j)-lb(j))*rand; %随机初始化位置v(i,j)=(ub(j)-lb(j))*rand*0.5;endendif x(i,j)<lb(j)if(randi([0,0],1)==0)x(i,j)=lb(j);v(i,j)=-v(i,j);elsex(i,j)=lb(j)+(ub(j)-lb(j))*rand; %随机初始化位置v(i,j)=(ub(j)-lb(j))*rand*0.5;endendendelse %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for j=1:Dif x(i,j)>ub(j)%粒子飞出上边界x(i,j)=x(i,j)-v(i,j);v(i,j)=rand*(ub(j)-x(i,j));x(i,j)=x(i,j)+v(i,j);elseif x(i,j)<lb(j)%粒子飞出下边界x(i,j)=x(i,j)-v(i,j);v(i,j)=rand*(x(i,j)-lb(j));x(i,j)=x(i,j)-v(i,j);endendend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%------------------每个粒子的目标向量-----------------//第8步///////////////goals(t,i,:)=fitness(x(i,:),funcname,params);%----------------调整自身---------------------------//第10步/////////////////domiRel = DominateRel(pbest(i,:),x(i,:),funcname,params);%x,y的支配关系if domiRel==1%pbest支配新解continue;elseif domiRel==-1%新解支配pbestpbest(i,:) = x(i,:);elseif(randi([0,1],1)==0)%新解与pbest互相不支配pbest(i,:) = x(i,:);end%-----------------对NP进行更新和维护-----------------//第9步////////////////faix = GetFai(x(i,:),funcname,params);if faix<=unfitx[NP,NPRule,Dnp] = compare(x(i,:),NP,NPRule,Dnp,Nnp,funcname,params);endendendendnp = NP;%非劣解nprule=NPRule;dnp = Dnp;%非劣解之间的距离r=size(np,1);fv=zeros(r,T);for i=1:rfv(i,:)=fitness(np(i,:),funcname,params);endend%%%%%%%%%%%%%%%--------------主函数结束--------------%%%%%%%%%%%%%%%%%function [np_out,nprule_out,dnp_out] = compare(x,np,nprule,dnp,nnp,funcname,params)%np:现有非劣解%x:需要比较的量Nnp = nnp;%非劣解集空间r=size(np,1);%非劣解的个数np_out=np;%非劣解复本nprule_out = nprule;dnp_out = dnp;%非劣解集点之间距离if r==0return;endfor i=r:-1:1domiRel=DominateRel(x,np(i,:),funcname,params);if domiRel==1 %NP(i)被x支配np_out(i,:)=[];%非劣解剔除该解nprule_out(i,:)=[];dnp_out(i,:)=[];if ~isempty(dnp_out)dnp_out(:,i)=[];endelseif domiRel==-1 %x被NP(i)支配,返回不再比较return;endendr1=size(np_out,1);%现有非劣解的行列np_out(r1+1,:)=x;%与所有非支配集粒子比较均占优或不可比较,则NP中加入x faix = GetFai(x,funcname,params);if faix > 0nprule_out(r1+1,:)=[0,faix,0];elsenprule_out(r1+1,:)=[0,0,0];endif r1==0dnp_out=0;endfor j=1:r1dnp_out(r1+1,j)=GetDistance(np_out(j,:),x,funcname,params);dnp_out(j,r1+1)=dnp_out(r1+1,j);endif r1>=Nnp %未达到非劣解种群极限%---------移除密集距离最小的一个-------densedis = GetDenseDis(dnp_out);n_min = find(min(densedis)==densedis);%找出密度距离最小的一个tempIndex = randi([1,length(n_min)],1);np_out(n_min(tempIndex),:)=[];%非劣解剔除该解nprule_out(n_min(tempIndex),:)=[];dnp_out(n_min(tempIndex),:)=[];if ~isempty(dnp_out)dnp_out(:,n_min(tempIndex))=[];endendend%%%%%%%%%%%%%%-----------将粒子维护到外部种群----------%%%%%%%%%%%%%%%%%function dis=GetDistance(x,y,funcname,params)%求两向量之间的距离if(params.istargetdis)gx=fitness(x,funcname);gy=fitness(y,funcname);gxy=(gx-gy).^2;dis=sqrt(sum(gxy(:)));elseg=x-y;dis=sum(sum(g.^2));endendfunction densedis = GetDenseDis(dnp)%密集距离[r,c] = size(dnp);densedis=zeros(1,r);for i=1:rfirstmin=Inf;%secondmin=Inf;for j=1:cif dnp(i,j)~=0 && dnp(i,j)<firstminfirstmin = dnp(i,j);end% if dnp(i,j)~=0 && dnp(i,j)~=firstmin && dnp(i,j)<secondmin% secondmin = dnp(i,j);% endend% densedis(i)=(firstmin+secondmin)/2;densedis(i)=firstmin;endendfunction sparedis = GetSpareDis(dnp)%稀疏距离[r,c] = size(dnp);sparedis=zeros(1,r);for i=1:rfirstmin=Inf;secondmin=Inf;for j=1:cif dnp(i,j)~=0 && dnp(i,j)<firstminfirstmin = dnp(i,j);endif dnp(i,j)~=0 && dnp(i,j)~=firstmin && dnp(i,j)<secondminsecondmin = dnp(i,j);endendsparedis(i)=(firstmin+secondmin)/2;endend%%%%%%%%%%%%%%%%%-----------密集(稀疏)距离------------%%%%%%%%%%%%%%%%%%%function v = DominateRel(x,y,funcname,params)%判断x与y支配关系,返回1表示x支配y,返回-1表示y支配x,返回0表示互不支配v=0;faix = GetFai(x,funcname,params);faiy = GetFai(y,funcname,params);if faix>faiyv=-1;elseif faiy>faixv=1;endif v~=0 %x、y构成违反约束支配关系return;endgx = fitness(x,funcname,params);%x的目标向量gy = fitness(y,funcname,params);%y的目标向量len = length(gx);if sum(gx<=gy)==len%x的所有目标都比y小,x支配yv=1;elseif sum(gx>=gy)==len%y的所有目标都比x小,y支配xv=-1;endend%%%%%%%%%%%%%%%%%---------比较两粒子的相互支配关系-----------%%%%%%%%%%%%%function [gbest,nprule_out] = GetGlobalBest2(x,np,nprule)%按照一定原则随机取一个全局最优r=size(np,2);%非劣解的行列,r:非劣解集个数,c:维数%假定x被非劣解集np支配IsDominated=true;Mdom=[];%支配x的集合for i=1:rdomiRel=DominateRel(np(i,:),x,funcname,params);if domiRel==1%np(i)支配xMdom=[Mdom,i];%记下其在非劣解集中的编号elseIsDominated=false;break;endendnprule_out=nprule;if IsDominated%x被支配,从x的支配集中选出一个作为全局最优intem=randi([1,length(Mdom)],1);gbest=np(Mdom(intem),:);nprule_out(Mdom(intem),1)=nprule_out(Mdom(intem),1)+1; else%x不被支配,从所有非劣解集中选出一个作为全局最优nr=size(np,1);intem=randi([1,nr],1);gbest=np(intem,:);nprule_out(intem,1)=nprule_out(intem,1)+1;endendfunction [gbest,nprule_out] = GetGlobalBest(np,nprule,dnp_out)%随机取一个全局最优r=size(np,1);%非劣解的行列nprule_out=nprule;intem=1;if(randi([0,3],1)==0)if r==1gbest = np(1,:);elsesparedis = GetSpareDis(dnp_out);%[max1,max2] = find(max(max(dnp_out))==dnp_out);%intem=max1(randi([1,length(max1)],1));n_max=find(max(sparedis)==sparedis);intem=n_max(randi([1,length(n_max)],1));gbest = np(intem,:);endelse%rr=randi([1,r],1);%随机取一个作为全局最优%gbest = np(rr,:);tt=find(min(nprule(:,1))==nprule(:,1));intem=tt(randi([1,length(tt)],1));gbest = np(intem,:);endnprule_out(intem,1)=nprule_out(intem,1)+1;end%%%%%%%%%%%%%%%%%%%----------从部种群中找到全局最优-------%%%%%%%%%%%%%%%function[x,v,pbest,NP,NPRule,Dnp]=ReInit(x,v,pbest,NP,NPRule,Dnp,Nnp,D,lb,ub,unfitx,funcname,para ms)for i=1:10for j=1:Dx(i,j)=(ub(j)-lb(j))*rand; %随机初始化位置v(i,j)=(ub(j)-lb(j))*rand*0.5; %随机初始化速度pbest(i,j)=x(i,j);endendfor i=1:10faix = GetFai(x(i,:),funcname,params);if faix<=unfitx[NP,NPRule,Dnp] = compare(x(i,:),NP,NPRule,Dnp,Nnp,funcname,params);endendend%%%%%%%%%%%%%%%%%%%----------重新初始化部分粒子-------%%%%%%%%%%%%%%%function fv=fitness(x,funcname,params)%获得多目标的目标向量fvfv=[];switch upper(funcname)%------DTLZ1%------ZDT1case 'ZDT1'n=length(x);gv=1+9*sum(x(2:n))/(n-1);fv(1)=x(1);fv(2)=gv*(1-sqrt(x(1)/gv));%------ZDT2case 'ZDT2'n=length(x);gv=1+9*sum(x(2:n))/(n-1);fv(1)=x(1);fv(2)=gv*(1-(x(1)/gv).^2);%------ZDT3case 'ZDT3'n=length(x);gv=1+9*sum(x(2:n).^2)/(n-1);fv(1)=x(1);fv(2)=gv*(1-sqrt(x(1)/gv)-(x(1)/gv)*sin(10*pi*x(1))); %------ZDT4case 'ZDT4'n=length(x);gv=1+10*(n-1)+sum(x(2:n).^2-10*cos(4*pi*x(2:n)));fv(1)=x(1);fv(2)=gv*(1-sqrt(x(1)./gv));%------ZDT5case 'ZDT5'%------ZDT4case 'ZDT6'n=length(x);gv=1+9*(sum(x(2:n))/(n-1)).^0.25;fv(1)=1-exp(-4*x(1))*sin(6*pi*x(1)).^6;fv(2)=gv*(1-(fv(1)/gv).^2);%------CTP1case 'CTP1'n=length(x);cx=41+sum(x(2:n).^2-10*cos(2*pi*x(2:n)));fv(1)=x(1);fv(2)=cx*exp(-fv(1)/cx);%------CTP2,CTP3,CTP4,CTP5,CTP6,CTP7case {'CTP2','CTP3','CTP4','CTP5','CTP6','CTP7'}n=length(x);cx=41+sum(x(2:n).^2-10*cos(2*pi*x(2:n)));fv(1)=x(1);fv(2)=cx*(1-fv(1)/cx);%------CTP8,CONSTRcase {'CTP8','CONSTR'}fv(1)=x(1);fv(2)=(1+x(2))/x(1);%------CTP9,SRNcase {'CTP9','SRN'}fv(1)=(x(1)-2)^2+(x(2)-1)^2+2;fv(2)=9*x(1)-(x(2)-1)^2;%------CTP10,TNK,MOP-C4case {'CTP10','TNK','MOP-C4'}fv(1)=x(1);fv(2)=x(2);%-------MOP-C1,BNHcase {'MOP-C1','BNH'}fv(1)=4*x(1)^2+4*x(2)^2;fv(2)=(x(1)-5)^2+(x(2)-5)^2;%------MOP-C2,OSYcase {'MOP-C2','OSY'}fv(1)=-(25*(x(1)-2)^2+(x(2)-2)^2+(x(3)-1)^2+(x(4)-4)^2+(x(5)-1)^2);fv(2)=x(1)^2+x(2)^2+x(3)^2+x(4)^2+x(5)^2+x(6)^2;%------MOP-C3case 'MOP-C3'fv(1)=(x(1)-2)^2/2+(x(2)+1)^2/13+3;fv(2)=(x(1)+x(2)-3)^2/175+(2*x(2)-x(1))^2/17-13;fv(3)=(3*x(1)-2*x(2)+4)^2/8+(x(1)-x(2)+1)^2/27+15;endendfunction fai = GetFai(x,funcname,params)%构造约束函数switch upper(funcname)%---DTLZ1,...,DTLZ4函数case {'DTLZ1','DTLZ2','DTLZ3','DTLZ4'}fai=0;%---ZDT1,...,ZDT6函数case {'ZDT1','ZDT2','ZDT3','ZDT4','ZDT5','ZDT6'}fai=0;%------CTP1case 'CTP1'n=length(x);cx=41+sum(x(2:n).^2-10*cos(2*pi*x(2:n)));f1=x(1); f2=cx*exp(-f1/cx);g1=0.858*exp(-0.541*f1)-f2;g2=0.728*exp(-0.295*f1)-f2;fai=max(g1,0)+max(g2,0);%------CTP2,CTP3,CTP4,CTP5,CTP6,CTP7case {'CTP2','CTP3','CTP4','CTP5','CTP6','CTP7'}navars=[-0.2*pi,0.2,10,1,6,1;-0.2*pi,0.1,10,1,0.5,1;-0.05*pi,40,5,1,6,0;-0.2*pi,0.1,10,2,0.5,1;-0.1*pi,40,0.5,1,2,-2;-0.2*pi,0.75,10,1,0.5,1;];i=str2double(funcname(4))-1;%%选择的是第几个测试函数sita=navars(i,1);a=navars(i,2);b=navars(i,3);c=navars(i,4);d=navars(i,5);e=navars(i,6);n=length(x);cx=41+sum(x(2:n).^2-10*cos(2*pi*x(2:n)));f1=x(1); f2=cx*(1-f1/cx);g=a*abs(sin(b*pi*(sin(sita)*(f2-e)+cos(sita)*f1)^c))^d-(cos(sita)*(f2-e)-sin(sita)*f1);fai=max(g,0);%------CTP8,CONSTRcase {'CTP8','CONSTR'}g1=6-x(2)-9*x(1);g2=1+x(2)-9*x(1);fai=max(g1,0)+max(g2,0);%------CTP9,SRNcase {'CTP9','SRN'}g1=x(1)^2+x(2)^2-255;g2=x(1)-3*x(2)+10;fai=max(g1,0)+max(g2,0);%------CTP10,TNK,MOP-C4case {'CTP10','TNK','MOP-C4'}g1=-x(1)^2-x(2)^2+1+0.1*cos(16*atan(x(1)/x(2)));g2=(x(1)-0.5)^2+(x(2)-0.5)^2-0.5;fai=max(g1,0)+max(g2,0);%-------MOP-C1,BNH函数case {'MOP-C1','BNH'}g1=(x(1)-5)^2+x(2)^2-25;g2=7.7-(x(1)-8)^2-(x(2)+3);fai=max(g1,0)+max(g2,0);%------MOP-C2,OSY函数case {'MOP-C2','OSY'}g1=2-x(1)-x(2); g2=-6+x(1)+x(2);g3=-2-x(1)+x(2); g4=-2+x(1)-3*x(2);g5=-4-(x(3)-3)^2+x(4); g6=4-(x(5)-3)^2-x(6);fai = max(g1,0)+max(g2,0)+max(g3,0)+max(g4,0)+max(g5,0)+max(g6,0);%------MOP-C3case 'MOP-C3'g1=x(2)+4*x(1)-4;g2=x(1)-x(2)-2;fai = max(g1,0)+max(g2,0);endendfunction fvout=GetLeastFunctionValue(fvin)%将外部种群中的非支配集剔除fvout=fvin;n=size(fvout,1);i=1;while(i<=n)j=i+1;isdominated=false;while(j<=n)a=fvout(i,:);b=fvout(j,:);if((a(1)<b(1)&&a(2)<=b(2))||(a(1)<=b(1)&&a(2)<b(2)))fvout(j,:)=[];n=n-1;elseif((b(1)<a(1)&&b(2)<=a(2))||(b(1)<=a(1)&&b(2)<a(2)))isdominated=true;endj=j+1;endendif isdominatedfvout(i,:)=[];n=n-1;elsei=i+1;endendendfunction [SP,SP1,MS,GD,GD2]=GetEvaluDis(funcname,NP,stdfv)%计算所有评价指标的值if(iscell(NP))n=length(NP);SP=Inf*ones(1,n);SP1=Inf*ones(1,n);MS=Inf*ones(1,n);GD=Inf*ones(1,n);GD2=Inf*ones(1,n);for i=1:nnp=cell2mat(NP(i));[sp,sp1]=Spacing(funcname,np);ms=MaximumSpread(funcname,np);gd=GenerationalDistance(funcname,np,stdfv);gd2=GenerationalDistance2(funcname,np);SP(i)=sp;SP1(i)=sp1;MS(i)=ms;GD(i)=gd;GD2(i)=gd2;endelse[SP,SP1]=Spacing(funcname,NP);MS=MaximumSpread(funcname,NP);GD=GenerationalDistance(funcname,NP,stdfv);GD2=GenerationalDistance2(funcname,NP);endendfunction [SP,SP1]=Spacing(funcname,np)%分散性(Spacing,SP)n=size(np,1);m=size(fitness(np(1,:),funcname),2);f=zeros(n,m);for i=1:nf(i,:)=fitness(np(i,:),funcname);endn=size(f,1);%n:解的个数;dd=ones(1,n)*Inf;d=zeros(1,n);for i=1:nk=0;for j=1:nif j==icontinue;endk=k+1;dd(i,k)=sum(abs(f(i,:)-f(j,:)));endd(i)=min(dd(i,:));enddaver=mean(d);SP=sqrt(sum((d-daver).^2)/n);SP1=sqrt(sum((d-daver).^2)/(n-1))/daver;endfunction D=MaximumSpread(funcname,np) %最大散布范围(Maximum Spread,MS)n=size(np,1);m=size(fitness(np(1,:),funcname),2);f=zeros(n,m);if(n==1)D=0;return;endfor i=1:nf(i,:)=fitness(np(i,:),funcname);endfmax=Inf*ones(1,m);fmin=-Inf*ones(1,m);switch upper(funcname)%------ZDT1,'ZDT2',ZDT4case {'ZDT1','ZDT2','ZDT4'}fmax=[1,1;];fmin=[0,0;];%------ZDT3case 'ZDT3'fmax=[0.851701065645526,1];fmin=[0,-0.761625883165305]; %------ZDT6case 'ZDT6'fmax=[1,0.921164494015440];fmin=[0.280776612246391,0];case 'CTP1'fmax=[1,1];fmin=[0,0.542143003351532];case 'CTP2'fmax=[0.985582138027326,1];fmin=[0,0.287445806007632];case 'CTP3'fmax=[0.971176296100037,1];fmin=[0,0.295146218332835];case 'CTP4'fmax=[1,1.044724051472542];fmin=[0,0];case 'CTP5'case 'CTP6'case 'CTP7'。

粒子群算法的matlab代码实现

粒子群算法的matlab代码实现

粒子群算法的matlab代码实现function swarmwarning off MATLAB:divideByZero%%% Script Particle Swarm Optimization%%% Author: Ivan Candelas del Toro%%% e-mail: ivanct@%%%%%% Control variables%%%%%global numberOfParticles;numberOfParticles = 40;global numberOfNeighbors;numberOfNeighbors = 4;maxIterations = 1000;%% Limites para cambio de localizaciónglobal deltaMin;deltaMin = -4.0;global deltaMax;deltaMax = 4.0;%% individuality and socialityiWeight = 2.0;iMin = 0.0;iMax = 1.0;sWeight = 2.0;sMin = 0.0;sMax = 1.0;%%%%%%%%%%%%% Related variables to the problem space solutions %%%%%%%%%%%initialFitness = -100000;targetFitness = 0;global dimensions;dimensions = 4;%%%% Program Startglobal particles;for p = 1:numberOfParticlesfor d = 1:dimensionsparticles(p).next(d) = randint(1,10); %%%%%%%%%%%%%%%%%particles(p).velocity(d) =randint(deltaMin,deltaMax); %%%%%%%%%%%particles(p).current(d) = particles(p).next(d);endparticles(p).bestSoFar = initialFitness;endfor p = 1:numberOfParticlesneighborVector = getNeighborIndexVector(p,numberOfNeighbors);for n = 1:numberOfNeighborsparticles(p).neighbor(n) = neighborVector(n);endenditerations = 0;ticwhile iterations <= maxIterationsfor p = 1:numberOfParticlesfor d = 1:dimensionsparticles(p).current(d) = particles(p).next(d);endfitness = test(p);if fitness > particles(p).bestSoFar;particles(p).bestSoFar = fitness;for d = 1:dimensionsparticles(p).best(d) = particles(p).current(d);endendif fitness == targetFitnessX=particles(p).current(1)Y=particles(p).current(2)Z=particles(p).current(3)W=particles(p).current(4)total_time=tocdisp('Success!!');returnendendfor p = 1:numberOfParticlesn = getNeighborIndexWithBestFitness(p);for d = 1:dimensionsiFactor = iWeight * randint(iMin,iMax); %%%%%%%%%%%%%%sFactor = sWeight * randint(sMin,sMax); %%%%%%%%%%%%%pDelta(d) = particles(p).best(d) - particles(p).current(d); nDelta(d) = particles(n).best(d) - particles(p).current(d);delta = (iFactor * pDelta(d)) + (sFactor * nDelta(d));delta = particles(p).velocity(d) + delta;particles(p).velocity(d) = constrict(delta);particles(p).next(d) = particles(p).current(d) +particles(p).velocity(d);endenditerations = iterations + 1enddisp('Failure');%%%%%%%%%%%%% Support Functions%%%%%%%%%%%%-------------function fitness = test(p)global particles;x = particles(p).current(1);y = particles(p).current(2);z = particles(p).current(3);w = particles(p).current(4);f = 5 * (x^2) + 2 * (y^3) - (z/w)^2 + 4;if ( x * y ) == 0n = 1;elsen = 0;endfitness = 0 - abs(f) - n;%%-------------function d = constrict(delta)global deltaMin;global deltaMax;if delta < deltaMind = deltaMin;returnendif delta > deltaMaxd = deltaMax;returnendd = delta;%%--------function p = getNeighborIndex(pindex,n)global numberOfParticles;global dimensions;global particles;dista=zeros(1,numberOfParticles);for i = 1:numberOfParticlessuma = 0;for d = 1:dimensionssuma = suma + (particles(pindex).current(d) - particles(i).current(d))^2;enddista(i)=sqrt(suma);end[X,I] = sort(dista);p = I(n);%%--------function p = getNeighborIndexVector(pindex,n) global numberOfParticles;global dimensions;global particles;dista=zeros(1,numberOfParticles);for i = 1:numberOfParticlessuma = 0;for d = 1:dimensionssuma = suma + (particles(pindex).current(d) - particles(i).current(d))^2;enddista(i)=sqrt(suma);end[X,I] = sort(dista);p = I(1:n);%%---------function p = getNeighborIndexWithBestFitness(pindex) global dimensions;global particles;global numberOfNeighbors;fit = zeros(1,4);for d = 1:numberOfNeighbors;fit(d) = test(particles(pindex).neighbor(d));end[X,I] = sort(fit);p = particles(pindex).neighbor(I(1));%%-------------%%return a random integer between min and max%function num = randint(min,max)array = min:max;index = mod(floor(rand(1)*1000),size(array,2))+1; num = array(index);。

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 改进的多目标粒子群算法,包括多个测试函数% 对程序中的部分参数进行修改将更好地求解某些函数%ZDT1NP=cell(1,50);ZDT1FV=cell(1,50);ZDT1T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('ZDT1',0.1,50,100,2.0,1.0,0.4,200,30,zer os(1,30),ones(1,30));%--ZDT1elapsedTime=toc;ZDT1NP(i)={np};ZDT1FV(i)={fv};ZDT1T(i)=elapsedTime;display(strcat('ZDT1',num2str(i)));endzdt1fv=cell2mat(ZDT1FV');zdt1fv=GetLeastFunctionValue(zdt1fv);ZDT2NP=cell(1,50);ZDT2FV=cell(1,50);ZDT2T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('ZDT2',0.1,50,100,2.0,1.0,0.4,200,30,zer os(1,30),ones(1,30),[1,zeros(1,29)]);%--ZDT2elapsedTime=toc;ZDT2NP(i)={np};ZDT2FV(i)={fv};ZDT2T(i)=elapsedTime;display(strcat('ZDT2',num2str(i)));endzdt2fv=cell2mat(ZDT2FV');zdt2fv=GetLeastFunctionValue(zdt2fv); %%%%%%%%%%%%%%%%%%%%%%%%%%%5ZDT3NP=cell(1,50);ZDT3FV=cell(1,50);ZDT3T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('ZDT3',0.1,50,100,2.0,1.0,0.4,400,30,zeros(1,30 ),ones(1,30));%--ZDT3elapsedTime=toc;ZDT3NP(i)={np};ZDT3FV(i)={fv};ZDT3T(i)=elapsedTime;display(strcat('ZDT3',num2str(i)));endzdt3fv=cell2mat(ZDT3FV');zdt3fv=GetLeastFunctionValue(zdt3fv);ZDT4NP=cell(1,50);ZDT4FV=cell(1,50);ZDT4T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals]=ParticleSwarmOpt('ZDT4',0.1,50,100,2.0,1.0,0.4,200,10,[0,-5,-5,-5,-5,-5, -5,-5,-5,-5],[1,5,5,5,5,5,5,5,5,5],[1,0,0,0,0,0,0,0,0,0]);%--ZDT4elapsedTime=toc;ZDT4NP(i)={np};ZDT4FV(i)={fv};ZDT4T(i)=elapsedTime;display(strcat('ZDT4',num2str(i)));endzdt4fv=cell2mat(ZDT4FV');zdt4fv=GetLeastFunctionValue(zdt4fv); %%%%%%%%%%%%%%%%%%%%%%%%ZDT6NP=cell(1,50);ZDT6FV=cell(1,50);ZDT6T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('ZDT6',0.1,50,100,2.0,1.0,0.4,200,10,zer os(1,10),ones(1,10));%--ZDT6elapsedTime=toc;ZDT6NP(i)={np};ZDT6FV(i)={fv};ZDT6T(i)=elapsedTime;display(strcat('ZDT6',num2str(i)));endzdt6fv=cell2mat(ZDT6FV');zdt6fv=GetLeastFunctionValue(zdt6fv);CTP1NP=cell(1,50);CTP1FV=cell(1,50);CTP1T=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP1',0.1,50,100,2.0,1.0,0.4,1500,5,[0,-5,-5,-5, -5],[1,5,5,5,5],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--CTP1 elapsedTime=toc;CTP1NP(i)={np};CTP1FV(i)={fv};CTP1T(i)=elapsedTime;display(strcat('CTP1',num2str(i)));endctp1fv=cell2mat(CTP1FV');ctp1fv=GetLeastFunctionValue(ctp1fv);CTP1fmNP=cell(1,50);CTP1fmFV=cell(1,50);CTP1fmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP1',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--CTP1 elapsedTime=toc;CTP1fmNP(i)={np};CTP1fmFV(i)={fv};CTP1fmT(i)=elapsedTime;display(strcat('CTP1fm',num2str(i)));endctp1fmfv=cell2mat(CTP1fmFV');ctp1fmfv=GetLeastFunctionValue(ctp1fmfv);CTP2NP=cell(1,50);CTP2FV=cell(1,50);CTP2T=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP2',0.1,50,100,2.0,1.0,0.4,1500,5,[0,-5,-5,-5, -5],[1,5,5,5,5],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--CTP2 elapsedTime=toc;CTP2NP(i)={np};CTP2FV(i)={fv};CTP2T(i)=elapsedTime;display(strcat('CTP2',num2str(i)));endctp2fv=cell2mat(CTP2FV');ctp2fv=GetLeastFunctionValue(ctp2fv);CTP2fmNP=cell(1,50);CTP2fmFV=cell(1,50);CTP2fmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP2',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--CTP2 elapsedTime=toc;CTP2fmNP(i)={np};CTP2fmFV(i)={fv};CTP2fmT(i)=elapsedTime;display(strcat('CTP2fm',num2str(i)));endctp2fmfv=cell2mat(CTP2fmFV');ctp2fmfv=GetLeastFunctionValue(ctp2fmfv);CTP3NP=cell(1,50);CTP3FV=cell(1,50);CTP3T=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP3',0.1,50,100,2.0,1.0,0.4,1400,5,[0,-5,-5,-5, -5],[1,5,5,5,5],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--CTP3 elapsedTime=toc;CTP3NP(i)={np};CTP3FV(i)={fv};CTP3T(i)=elapsedTime;display(strcat('CTP3',num2str(i)));endctp3fv=cell2mat(CTP3FV');ctp3fv=GetLeastFunctionValue(ctp3fv);CTP3fmNP=cell(1,50);CTP3fmFV=cell(1,50);CTP3fmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP3',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--CTP3 elapsedTime=toc;CTP3fmNP(i)={np};CTP3fmFV(i)={fv};CTP3fmT(i)=elapsedTime;display(strcat('CTP3fm',num2str(i)));endctp3fmfv=cell2mat(CTP3fmFV');ctp3fmfv=GetLeastFunctionValue(ctp3fmfv);CTP4NP=cell(1,50);CTP4FV=cell(1,50);CTP4T=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP4',0.1,50,100,2.0,1.0,0.4,1400,5,[0,-5,-5,-5, -5],[1,5,5,5,5],[],struct('isfmopso',false,'istargetdis',false,'stopatborder',true));%--CTP4 elapsedTime=toc;CTP4NP(i)={np};CTP4FV(i)={fv};CTP4T(i)=elapsedTime;display(strcat('CTP4',num2str(i)));endctp4fv=cell2mat(CTP4FV');ctp4fv=GetLeastFunctionValue(ctp4fv);CTP4fmNP=cell(1,50);CTP4fmFV=cell(1,50);CTP4fmT=zeros(1,50);for i=1:50tic;[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP4',0.1,50,100,2.0,1.0,0.4,400,5,[0,-5,-5,-5,-5],[1,5,5,5,5],[0 0 1 0 0],struct('isfmopso',true,'istargetdis',false,'stopatborder',true));%--CTP4 elapsedTime=toc;CTP4fmNP(i)={np};CTP4fmFV(i)={fv};CTP4fmT(i)=elapsedTime;display(strcat('CTP4fm',num2str(i)));endctp4fmfv=cell2mat(CTP4fmFV');ctp4fmfv=GetLeastFunctionValue(ctp4fmfv);CTP5NP=cell(1,50);CTP5FV=cell(1,50);CTP5T=zeros(1,50);for i=1:50tic;%[np,nprule,dnp,fv,goals,pbest]=ParticleSwarmOpt('CTP5',0.1,50,100,2.0,1.0,0.4,200,5,[0,-5 ,-5,-5,-5],[1,5,5,5,5],[0 0 0 0 0]);%--CTP5elapsedTime=toc;CTP5NP(i)={np};CTP5FV(i)={fv};。

相关文档
最新文档