Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Matlab 非线性有约束规划的粒子群算法「建议收藏」

Matlab 非线性有约束规划的粒子群算法「建议收藏」

作者头像
全栈程序员站长
发布于 2022-09-05 03:33:12
发布于 2022-09-05 03:33:12
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

Matlab 非线性有约束规划的粒子群算法


粒子群算法的基本认识

简单介绍:通过群体中个体之间的协作和信息共享来寻找最优解。

适用于连续函数极值问题,对于非线性,多峰问题均有较强的全局搜索能力。

主要掌握两点
1.粒子的速度和位置

速度代表移动的快慢,位置代表移动的方向。 位置对应每个自变量,速度一般设置为变量范围的10%~20%。

2.粒子的更新规则

具体实例


matlab代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clear;close;clc
%% 约束条件和目标函数构建
fun = @(x) x(1)^2 + x(2)^2 + x(3)^2 + 8;
bind1 = @(x) x(1)^2 - x(2) + x(3)^2 >= 0;
bind2 = @(x) x(1) + x(2)^2 + x(3)^2 <= 20;
% 不太适合等式约束
ekc = 1e-10;
bind3 = @(x) abs(-x(1) - x(2)^2 + 2) <= ekc;
bind4 = @(x) abs(x(2) + 2*x(3)^2 - 3) <= ekc;

%% 初始化
popsize = 500; % 粒子个数
dim = 3; % 维度
max_iter = 100; % 最大迭代次数
xlimit_max = [2 3 20]'; % 由等式约束推出位置边界
xlimit_min = zeros(dim,1); 
vlimit_max = 1*ones(dim,1);
vlimit_min = -1*ones(dim,1);
w = 0.6; % 惯性权重
c1 = 0.5;c2 = 1.5;
pr = 0.4; % 变异率
pop_x = zeros(dim,popsize);  % 当前粒子位置
pop_v = zeros(dim,popsize); % 当前粒子速度
fitness_pop = zeros(1,popsize); % 粒子群当前位置适应度函数
fitness_lbest = zeros(1,popsize); % 个体粒子的历史最优极值
rand('state',sum(clock));

for j = 1:popsize 
    % 位置初始化
    pop_x(1,j) = xlimit_min(1) + rand*(xlimit_max(1) - xlimit_min(1));
    pop_x(2,j) = sqrt(2-pop_x(1,j));
    pop_x(3,j) = sqrt((3 - pop_x(2,j))/2);
    % 速度初始化
    for  i = 1:dim
        pop_v(i,j) = vlimit_min(i) + rand*(vlimit_max(i) - vlimit_min(i));
    end
end
%% 初始化个体极值
lbest = pop_x; % 个体历史最佳极值记录
for j =1: popsize 
    if bind1(pop_x(:,j))
        if bind2(pop_x(:,j))
            fitness_lbest(j) = fun(pop_x(:,j));
        else fitness_lbest(j) = 500;
        end
    else fitness_lbest(j) = 500;
    end
end

%% 初始化全局极值
popbest = pop_x(:,1);
fitness_popbest = fitness_lbest(1);
for j = 2:popsize 
    if fitness_lbest(j) < fitness_popbest
        fitness_popbest = fitness_lbest(j);
        popbest = pop_x(:,j);
    end
end
tic
%% 粒子群迭代
iter = 1; % 当前迭代次数
record = zeros(max_iter,1); % 记录每次迭代的全局极小值
format long;
while iter <= max_iter
    for j = 1:popsize 
        % 更新速度 边界处理
        pop_v(:,j) = w*pop_v(:,j) + c1*rand*(lbest(:,j) - pop_x(:,j)) +...
            c2*rand*(popbest - pop_x(:,j));
        for i = 1:dim 
            if pop_v(i,j) > vlimit_max(i)
                pop_v(i,j) = vlimit_max(i);
            elseif pop_v(i,j) < vlimit_min(i) 
                pop_v(i,j) = vlimit_min(i);
            end
        end
        % 更新位置 边界处理 修正位置 (等式约束)
        pop_x(:,j) = pop_x(:,j) + pop_v(:,j);
        for i = 1:dim 
            if pop_x(i,j) > xlimit_max(i)
                pop_x(i,j)  = xlimit_max(i);
            elseif pop_x(i,j) < xlimit_min(i)
                pop_x(i,j) = xlimit_min(i);
            end
        end
        
        % 进行自适应变异
        if rand < pr 
            i = ceil(dim*rand);
            pop_x(i,j) = xlimit_min(i) + rand*(xlimit_max(i) - xlimit_min(i));
        end
        % 约束条件限制 类似罚函数法
        if bind1(pop_x(:,j))
            if bind2(pop_x(:,j))
                if bind3(pop_x(:,j))
                    if bind4(pop_x(:,j))
                        fitness_pop(j) = fun(pop_x(:,j));
                    else fitness_pop(j) = 500;
                    end
                else fitness_pop(j) = 500;
                end
            else fitness_pop(j) = 500;
            end
        else fitness_pop(j) = 500;
        end
        % 当前适应度与个体历史最佳适应度作比较
        if fitness_pop(j) < fitness_lbest(j)
            lbest(:,j) = pop_x(:,j);
            fitness_lbest(j) = fitness_pop(j);
        end
        % 个体历史最佳适应度与种群历史最佳适应度作比较
        if fitness_popbest > fitness_lbest(j)
            fitness_popbest = fitness_lbest(j);
            popbest = lbest(:,j);
        end
    end
    record(iter) = fitness_popbest;
    iter = iter + 1;
    
end
toc
%% 输出解
minx = popbest
miny = fitness_popbest
plot(record,'r-');
title('粒子群算法迭代过程');
xlabel('迭代次数');
ylabel('当前迭代最佳函数值');

结果:

从以上结果可以看出,粒子群算法几乎一开始就保持收敛,说明对于小规模的粒子群,它收敛的迅速

Lingo求解全局最小值比较:


发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137509.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于粒子群算法(PSO)的TSP(Python实现)
基于粒子群算法(Particle Swarm Optimization, PSO)的TSP(Traveling Salesman Problem,旅行商问题),求解方法源自对集体智慧的模拟,通过模拟鸟群在搜索食物时的协作行为,不断调整每个“粒子”的位置和速度,以寻找全局最优解。在TSP问题中,粒子代表可能的路径解,通过不断更新粒子的位置,寻找一条最短的路径来访问所有城市。
不去幼儿园
2024/12/03
2460
基于粒子群算法(PSO)的TSP(Python实现)
粒子群算法求函数最小值
主函数首先初始化种群,对于第1代种群,个体极值和全局极值都在本代种群中;之后进行迭代,每次迭代根据公式更新速度和位置,并更新个体极值和全局极值,重复此过程直至迭代结束。
mwangblog
2018/12/19
2.5K0
python粒子群算法的实现「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。 参考博客: http://blog.csdn.net/zuochao_2013/article/details/53431767?ref=myread htt
全栈程序员站长
2022/08/24
4780
python粒子群算法的实现「建议收藏」
Matlab粒子群算法(PSO)优化程序——经典实例
粒子群算法( Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。鸟群中有个体和群体,个体和群体的信息是可以互通的。个体在随机搜寻食物的过程中,只要跟踪离食物最近的群体,就能最有效地找到食物。
全栈程序员站长
2022/09/03
1.5K0
Matlab粒子群算法(PSO)优化程序——经典实例
MATLAB 粒子群算法,例题与常用模版
Particle Swarm Optimization ,粒子群优化算法,常用来找到方程的最优解。
全栈程序员站长
2022/08/14
7790
MATLAB 粒子群算法,例题与常用模版
【Simulink】粒子群算法(PSO)整定PID参数(附代码和讲解)
大家好,又见面了,我是你们的朋友全栈君。 目录 0.背景 1.粒子群算法 1.1.算法简介 1.2.算法步骤 1.3.算法举例 2.PID自整定 2.1.基于M文件编写的PID参数自整定 *2.2.复杂系统的PID自整定(基于simulink仿真) 2.2.1.PSO优化PID的过程详解 2.2.2.在PSO优化过程中修改参数价值权重 阅读前必看: 本代码基于MATLAB2017a版本,如果版本不同可能会报错 请从set_para.m文件开始运行,其他M文件(+下载的资源包里面的slx文件)放在
全栈程序员站长
2022/06/28
1.6K0
【Simulink】粒子群算法(PSO)整定PID参数(附代码和讲解)
粒子群优化算法(PSO)
粒子群算法的发展过程。粒子群优化算法(Partical Swarm Optimization PSO),粒子群中的每一个粒子都代表一个问题的可能解,通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。由于PSO操作简单、收敛速度快,因此在函数优化、 图像处理、大地测量等众多领域都得到了广泛的应用。 随着应用范围的扩大,PSO算法存在早熟收敛、维数灾难、易于陷入局部极值等问题需要解决,主要有以下几种发展方向。
全栈程序员站长
2022/06/28
6680
粒子群优化算法(PSO)
优化算法——粒子群算法(PSO)
    粒子群算法(PSO)属于群智能算法的一种,是通过模拟鸟群捕食行为设计的。假设区域里就只有一块食物(即通常优化问题中所讲的最优解),鸟群的任务是找到这个食物源。鸟群在整个搜寻的过程中,通过相互传递各自的信息,让其他的鸟知道自己的位置,通过这样的协作,来判断自己找到的是不是最优解,同时也将最优解的信息传递给整个鸟群,最终,整个鸟群都能聚集在食物源周围,即我们所说的找到了最优解,即问题收敛。
felixzhao
2019/02/13
4.5K0
粒子群优化算法的实现方式_matlab粒子群优化算法
粒子群优化算法属于进化算法的一种,通过追随当前搜索到的最优值来寻找全局最优。粒子群算法也称粒子群优化算法(Particle Swarm Optimization,PSO),PSO有几个关键概念:粒子、优化函数、适值(Fitness Value)、飞行方向、飞行距离。
全栈程序员站长
2022/11/10
1.9K0
粒子群优化算法的实现方式_matlab粒子群优化算法
pso粒子群优化算法_粒子群算法优化神经网络
粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。
全栈程序员站长
2022/09/27
7470
基于粒子群优化算法的函数寻优算法研究_matlab粒子群优化算法
粒子群算法(particle swarm optimization,PSO)是计算智能领域一种群体智能的优化算法。该算法最早由Kennedy和Eberhart在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单有效的策略就是搜寻当前距离食物最近的鸟的周围区域。PSO算法就是从这种生物种群行为特征中得到启发并用于求解优化问题的,算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值。粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子的移动经验进行动态调整,从而实现个体在可解空间中的寻优。 假设在一个 D D D维的搜索空间中,由 n n n个粒子组成的种群 X = ( X 1 , X 2 , ⋯   , X n ) \boldsymbol{X}=(X_1,X_2,\dotsm,X_n) X=(X1​,X2​,⋯,Xn​),其中第 i i i个粒子表示为一个 D D D维的向量 X i = ( X i 1 , X i 2 , ⋯   , X i D ) T \boldsymbol{X_i}=(X_{i1},X_{i2},\dotsm,X_{iD})^T Xi​=(Xi1​,Xi2​,⋯,XiD​)T,代表第 i i i个粒子在 D D D维搜索空间中的位置,亦代表问题的一个潜在解。根据目标函数即可计算出每个粒子位置 X i \boldsymbol{X_i} Xi​对应的适应度值。第 i i i个粒子的速度为 V = ( V i 1 , V i 2 , ⋯   , V i D ) T \boldsymbol{V}=(V_{i1},V_{i2},\dotsm,V_{iD})^T V=(Vi1​,Vi2​,⋯,ViD​)T,其个体最优极值为 P i = ( P i 1 , P i 2 , ⋯   , P i D ) T \boldsymbol{P_i}=(P_{i1},P_{i2},\dotsm,P_{iD})^T Pi​=(Pi1​,Pi2​,⋯,PiD​)T,种群的群体最优极值为 P g = ( P g 1 , P g 2 , ⋯   , P g D ) T \boldsymbol{P_g}=(P_{g1},P_{g2},\dotsm,P_{gD})^T Pg​=(Pg1​,Pg2​,⋯,PgD​)T。 在每次迭代过程中,粒子通过个体极值和群体极值更新自身的速度和位置,即 V i d k + 1 = ω V i d k + c 1 r 1 ( P i d k − X i d k ) + c 2 r 2 ( P g d k − X i d k ) (1) V_{id}^{k+1}=\omega V_{id}^k+c_1r_1(P_{id}^k-X_{id}^k)+c_2r_2(P_{gd}^k-X_{id}^k)\tag{1} Vidk+1​=ωVidk​+c1​r1​(Pidk​−Xidk​)+c2​r2​(Pgdk​−Xidk​)(1) X i d k + 1 = X i d k + V k + 1 i d (2) X_{id}^{k+1}=X_{id}^k+V_{k+1_{id}}\tag {2} Xidk+1​=Xidk​+Vk+1id​​(2)其中, ω \omega ω为惯性权重; d = 1 , 2 , ⋯   , n d=1,2,\dotsm,n d=1,2,⋯,n; k k k为当前迭代次数; V i d V_{id} Vid​为粒子的速度; c 1 c_1 c1​和 c 2 c_2 c2​是非负的常数,称为加速度因子; r 1 r_1 r1​和 r 2 r_2 r2​是分布于 [ 0 , 1 ] [0,1] [0,1]区间的随机数。为防止粒子的盲目搜索,一般建议将其位置和速度限制在一定的区间 [ − X m a x , X m a x ] [-X_{max},X_{max}] [−Xmax​,Xmax​]、 [ − V m a x , V m a x ] [-V_{max},V_{max}] [−Vmax​,Vmax​]。
全栈程序员站长
2022/11/10
6750
基于粒子群优化算法的函数寻优算法研究_matlab粒子群优化算法
粒子群优化算法python程序_粒子群算法的具体应用
粒子群优化算法(Particle Swarm Optimization, PSO)作为进化计算的一个分支,是由Eberhart和Kennedy于1995年提出的一种全局搜索算法,同时它也是一种模拟自然界的生物活动以及群体智能的随即搜索算法。 粒子群优化算法起源于鸟群觅食的过程,一个核心机制是每只小鸟各自觅食,并记住一个离食物最近的位置,通过和其他的小鸟交流,得到整个鸟群已知的最佳位置,引导鸟群朝着这个方向继续搜索。 还有两个关键设置:粒子历史最优位置(pBest向量)、群体历史最优位置(gBest向量)。 这里pBest向量是一组向量,它包含了每个粒子的历史最优位置,gBest向量为pBest向量中适应值最高的向量,即全局最优。 说明:算法中一般取要优化的目标函数作为适应值函数,评估适应值的大小,然后更新pBest向量和gBest向量。
全栈程序员站长
2022/11/07
8710
粒子群优化算法python程序_粒子群算法的具体应用
用 Python 实现粒子群算法
作者简介:Boblee,人工智能硕士毕业,擅长及爱好Python,基于Python研究人工智能、群体智能、区块链等技术,并使用Python开发前后端、爬虫等。
程序员小猿
2021/01/19
2.4K0
用 Python 实现粒子群算法
【智能算法】粒子群算法(PSO)原理及实现
1995年,James Kennedy和Russell Eberhart受到鸟群觅食行为的规律性启发,提出了粒子群优化算法(Particle Swarm Optimization, PSO) 。
小O的算法实验室
2024/03/05
1.4K3
【智能算法】粒子群算法(PSO)原理及实现
最优化算法之粒子群算法(PSO)
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解. PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
全栈程序员站长
2022/06/28
2.7K0
最优化算法之粒子群算法(PSO)
优化算法——粒子群算法(PSO)
一、粒子群算法的概述     粒子群算法(PSO)属于群智能算法的一种,是通过模拟鸟群捕食行为设计的。假设区域里就只有一块食物(即通常优化问题中所讲的最优解),鸟群的任务是找到这个食物源。鸟群在整个搜
felixzhao
2018/03/16
2.9K1
优化算法——粒子群算法(PSO)
详细讲解matlab-粒子群算法优化simulink中的pid参数
PSO(粒子群算法)在处理连续问题上有着较强的能力,因此很适合用来做参数优化,而PID控制器由三个参数组成,它们分别是:Kp 、Ki 、Kd 。
用户9925864
2022/07/27
4K0
详细讲解matlab-粒子群算法优化simulink中的pid参数
各种智能优化算法比较与实现(matlab版)
免疫算法是受生物免疫系统的启发而推出的一种新型的智能搜索算法。它是一种确定性和随机性选择相结合并具有“勘探”与“开采”能力的启发式随机搜索算法。免疫算法将优化问题中待优化的问题对应免疫应答中的抗原,可行解对应抗体(B细胞),可行解质量对应免疫细胞与抗原的亲和度。如此则可以将优化问题的寻优过程与生物免疫系统识别抗原并实现抗体进化的过程对应起来,将生物免疫应答中的进化过程抽象成数学上的进化寻优过程,形成一种智能优化算法。它具有一般免疫系统的特征,采用群体搜索策略,通过迭代计算,最终以较大的概率得到问题的最优解。相对于其他算法,免疫算法利用自身产生多样性和维持机制的特点,保证了种群的多样性,克服了一般寻优过程(特别是多峰值的寻优过程)的不可避免的“早熟”问题,可以求得全局最优解。免疫算法具有自适应性、随机性、并行性、全局收敛性、种群多样性等优点。 1.2 算法操作步骤 (1)首先进行抗原识别,即理解待优化的问题,对问题进行可行性分析,提取先验知识,构造出合适的亲和度函数,并制定各种约束条件。 (2)然后初始化抗体群,通过编码把问题的可行解表示成解空间中的抗体,在解的空间内随机产生一个初始种群。 (3)对种群中的每一个可行解进行亲和度评价。(记忆单元的更新:将与抗原亲和性高的抗体加入到记忆单元,并用新加入的抗体取代与其亲和性最高的原有抗体(抗体和抗体的亲和性计算)) (4)判断是否满足算法终止条件;如果满足条件则终止算法寻优过程,输出计算结果;否则继续寻优运算。 (5)计算抗体浓度和激励度。(促进和抑制抗体的产生:计算每个抗体的期望值,抑制期望值低于阈值的抗体;可以知道与抗原间具有的亲和力越高,该抗体的克隆数目越高,其变异率也越低) (6)进行免疫处理,包括免疫选择、克隆、变异和克隆抑制。 免疫选择:根据种群中抗体的亲和度和浓度计算结果选择优质抗体,使其活化; 克隆:对活化的抗体进行克隆复制,得到若干副本; 变异:对克隆得到的副本进行变异操作,使其发生亲和度突变; 克隆抑制:对变异结果进行再选择,抑制亲和度低的抗体,保留亲和度高的变异结果。 (7)种群刷新,以随机生成的新抗体替代种群中激励度较低的抗体,形成新一代抗体,转步骤(3)。 免疫算法运算流程图
全栈程序员站长
2022/08/31
2.6K0
各种智能优化算法比较与实现(matlab版)
数学建模暑期集训18:粒子群算法
下面将记录粒子群算法的框架和优化过程。 若要实际使用,可使用matlab自带的粒子群算法调用函数,详情见最后一节的使用案例。
zstar
2022/06/14
7730
数学建模暑期集训18:粒子群算法
深度学习经典算法 | 粒子群算法详解
粒子群(PSO)算法最早是由美国电气工程师Eberhart和社会心理学家Kennedy在1995年基于群鸟觅食提出来的。
墨明棋妙27
2022/09/23
2.1K0
相关推荐
基于粒子群算法(PSO)的TSP(Python实现)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验