群智能算法-粒子群1

一.基本理念

粒子群算法(PSO),最早由两位外国科学家在1995年提出,该算法源自对鸟类捕食问题的研究。

我们将鸟类补食性原则分为一下三个基数,每组基数对应一个粒子,而每组粒子我们将其称之为种群。所以我们将其在细分具体,基数一,为我们当前粒子的位置,基数二,为我们当前粒子的速度,基数三,为我们当前粒子的适应度值(这里的适应度值则是由我们当前的位置和速度综合求解得出的结果,对于每一个问题的自适应度值的求解过程都是不一样的)。

我们的每一个粒子都将其放入解空间中,在我们的解空间中,我们的粒子的每一代都得保留最优个体(Pbest),和最优种群值(Gbest),通过跟踪我们的最优粒子来更新最优位置,这里我们解释一个Pbest,是我们个体对应最优适应度值的最优位置,而Gbest是指种群中最优适应度值对应的最优位置。

我们对于每次的更新过程是通过比较新粒子的适应度值和个体极值,群体极值的适应度值更新最优个体(Pbest)和群里最优值(Gbest)。

 二.更新函数

其中V是我们的每一次迭代更新的速度,X是每一次要更新的位置,Pid,和Pgd分别为个体最优值,和群体最优值。w,c1,c2为常数。这里的w是一个很关键的值,它在迭代更进过程会随着迭代次数的变化而变化,会导致两边的权值发生差异。但目前我们只将其设为常数,不考虑权值的变化。

 三.具体实验步骤

 四.样例举例

一元函数的优化过程

1.初始化过程

我们设定x=1:0.01:2  这是我们x的取值范围和移动精度。

设定y=sin(10*pi*x)./x    这是我们对应的函数移动趋向。

我们当前要解决的问题我们要求出对应精度,y的最大值,所以我们的最优值,求的就是x在y上的最大分布。

参数初始化

c1=1.49445     c2=1.49445   这里的两个参数,我们是随便定义的。

maxgen=50  sizepop=10   分别定义我们的进化次数和种群规模

Vmin=-0.5    Vmax=0.5   速度的偏移范围

popmin=1   popmax=2   x也就是我们位置的范围变化

初始化粒子基数(生成我们第一代粒子的位置和速度)

for i=1:sizepop
   %%我们随机产生一个种群
   pop(i,:)=(rands(1)+1)/2+1;%%这里的随机数生成方式是为了保证我们生成的数能够在我们的位置范围中。
   %%我们的pop中的每一行都保留一个个体的当前的x位置
   V(i,:)=0.5*rand %%这里我们随机化每个粒子的速度
   %%V这里的每一行我们表示当前粒子的速度
   fitness(i)=sin(10*pop(i,:)./pop(i,:))
   %%在这里我们的自适应度值就是我们当前位置对应的函数值
end

个体最优值和群体最优值的初始化更新

%%bestfitness我们的群体最优适应度的值
%%bestindex ↑其对应的下标
[bestfitness,bestindex]=max(fitness);%%我们得出我们的最大适应度和其下标
%%zbest 这里是我们的全局最佳个体
%%gbest 这里是我们的每个个体对应的最优值
zbest=pop(bestindex,:)
gbest=pop
fitnesszbest=bestfitness  %%群体中的最优适应度值
fitnessgbest=fitness %%每个个体的最优适应度值

2.进化代数寻优过程

for i=1:maxgen %%最大代数寻优
    for j=i:sizepop
    %%我们先进行速度的更新
    %%根据我们的速度公式
    V(j,:)=V(j,:)+c1*rand*(gbest(j,:)-pop(j,:))+c2*rand*(zbest-pop(j,:))
    %%c1*rand*(gbest(j,:)-pop(j,:))%%个体最优位置减去每个个体的位置 
    %%c2*rand*(zbest(j,:)-pop(j,:))%%群体最优位置减去每个个体的位置
    %%为了保证我们个体速度的范围
    V(j,find(V(j,:)>Vmax))=Vmax;
    V(j,find(V(j,:)<Vmin))=Vmin;
    %%种群位置的更新 (速度和位置先后更新次序不可颠倒)
    pop(j,:)=pop(j,:)+V(j,:);%%更据我们的公式我们得出
    %%同时我们保证位置的范围是否超出
    pop(j,find(pop(j,:)>popmax)) = popmax;%%局限最大
    pop(j,find(pop(j,:)<popmin)) = popmin;%%局限最小
    fitness(j)=fun(pop(j,:));%%对于每一个位置的适应度更新
    %%这里我们的fun函数返回就是x对于在y上的位置
    end
    for j=1:sizepop
    %%在我们将个体位置,群体位置,还有每个位置的适应度得出后,我们还有对个体最优进行更新
       if fitness(j)>fitnessgbest(j)
         gbest(j,:)=pop(j,:)%%保留最优位置%%每个个体
         fitnessgbest(j)=fitness(j);%%保留最优适应度值%%每个个体
       end
    %%在将gbest和fitnessgbest更新完毕之后我们在将群体最优位置和群体最优适应度更新了
       if fitness(j)>fitnesszbest
         zbest=pop(j,:);
         fitnesszbest=fitness(j);
       end
    end
    hold on
    plot(gbest,fitnessgbest,'r*')%%将粒子的走向绘出
    yy(i)=fitnesszbest%%保留种群最优值,之后将其绘图用于识别适应代数和适应度变化的趋势
end

3.将结果进行绘图用于直观的看出粒子的走向和,进化代数和适应度的变化

hold on
plot(zbest,fitnessbest,'r*')%%输出我们群体最优值的对于的点


figure
%%直观的查看每一代的适应度是如何变化的
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

4. 数据绘图

1.初始函数绘图

2.每代最优粒子分布情形

3.每代种群最优适应度的变化 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
模拟退火-粒子群自适应优化算法是一种结合了模拟退火和粒子群优化算法的混合优化算法。模拟退火算法是一种概率性搜索算法,用于求解具有多个局部最优解的问题。粒子群优化算法是一种基于群体智能的优化算法,通过不断迭代和更新粒子的速度和位置来寻找最优解。自适应优化算法则是根据问题的性质和当前状态,动态调整算法的参数,以提高算法的效率和精度。 模拟退火-粒子群自适应优化算法的主要步骤包括: 1. 初始化:设置初始温度、温度下降率、粒子群规模、粒子速度和位置等参数,以及一个解的初始群体。 2. 评估:对每个粒子进行评估,得到当前解的质量。 3. 更新:根据粒子群的位置和速度,更新粒子的速度和位置,生成新的解。 4. 接受/拒绝:根据接受概率,对新的解进行接受或拒绝。接受概率与解的质量和当前温度有关,随着温度的降低而减小。 5. 温度衰减:随着算法的进行,温度逐渐降低,直到达到预设的终止条件(如达到最大迭代次数或温度降至预设值)。 6. 输出:输出最优解以及对应的性能指标。 该算法的特点包括: * 结合了模拟退火算法粒子群优化算法的优势,能够处理具有多个局部最优解的问题。 * 自适应调整参数,根据问题的性质和当前状态动态调整算法的参数,提高算法的效率和精度。 * 适用于连续或离散的目标函数优化,可以处理大规模问题。 * 具有良好的鲁棒性和全局搜索能力。 不过需要注意的是,该算法的具体实现和参数设置可能会因问题而异,需要根据具体问题进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B程洪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值