粒子群优化算法

PSO中,每个优化问题的解都是搜索空间中的一只鸟。称之为“粒子(Particle)”。所有的粒子都有一个由被优化的函数决定的适应值,每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当 前的最优粒子在解空间中搜索。
PSO 初始化为一群随机粒子。然后通过叠代找到最优解。在每一次叠代中,粒子通过跟踪两个"极值" 来更新自己。第一个就是粒子本身所找到的最优解。 这个解叫做个体极值pBest,另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外, 也可以不用整个种群而只是用其中一部分的邻居。
n个粒子在d维的搜索空间中,每个粒子的位置按如下公式进行变化:
在这里插入图片描述
粒子群初始位置和速度随机产生,然后按公式(1)(2)进行迭代,直至找到满意的解。
下面以一个简单的优化问题为例,实现粒子群优化算法。
问题:min Y = X1 ** 2 + X2 **2(X1 >= -10,X2 <= 10)

import numpy as np
import random as rd

# min y = X1 * X1 + X2 * X2
# X1 >= -10
# X2 <= 10

def update(location,speed,pBest,gBest):      #更新粒子群的位置和速度
    for i in range(len(location)):
        for j in range(len(speed[0])):
            speed[i][j] = 0.5 * speed[i][j] + 2.0 * rd.random() * (pBest[i][j] - location[i][j]) + 2.0 * rd.random() * (gBest[j] - location[i][j])
            location[i][j] += speed[i][j]
            if location[i][j] < -10:
                location[i][j] = -10
            if location[i][j] > 10:
                location[i][j] = 10

def objFunction(X1,X2):                    #计算目标函数值
    f = X1 ** 2 + X2 ** 2
    return f

def assess(location,pBest,gBest):         #更新粒子的历史最优与全局最优
    for i in range(len(location)):
        if objFunction(location[i][0],location[i][1]) < objFunction(pBest[i][0],pBest[i][1]):
            pBest[i][0] = location[i][0]
            pBest[i][1] = location[i][1]
    for i in range(len(pBest)):
        if objFunction(pBest[i][0],pBest[i][1]) < objFunction(gBest[0],gBest[1]):
            gBest[0] = pBest[i][0]
            gBest[1] = pBest[i][1]

def init():                              #随机初始化5个粒子的位置和速度
    location,speed= [],[]
    for i in range(5):
        X1 = rd.uniform(-10, 10)
        X2 = rd.uniform(-10,10)
        V1 = rd.uniform(-5,5)
        V2 = rd.uniform(-5,5)
        location.append([X1,X2])
        speed.append([V1,V2])
    return location,speed

if __name__ == '__main__':
    location,speed = init()
    pBest = location
    min = float("inf")
    gBest = [0,0]
    iters = 10000              #迭代次数
    for i in range(len(pBest)):
        if objFunction(pBest[i][0],pBest[i][1]) < min :
            min = objFunction(pBest[i][0],pBest[i][1])
            gBest[0] = pBest[i][0]
            gBest[1] = pBest[i][1]
    for i in range(iters):
        update(location, speed, pBest, gBest)
        assess(location, pBest, gBest)
    print("最优解:" + str(gBest))
    print("目标函数最优值:" + str(objFunction(gBest[0],gBest[1])))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
求解最优化问题一直是遗传算法的经典应用领域,但是对于不同的最优化问题,遗传算法往往要重新设计“交叉”、“变异”算子,甚至要开发新的进化操作;另外遗传算法不容易理解、操作复杂、大多数情况下效率比较低。所以,寻求新的解决最优问题的算法一直是研究热点。对约束优化问题的求解,已有许多算法被提出。传统的方法有梯度映射法、梯度下降法、惩罚函数法、障碍函数法等,但是单纯使用这些方法不是效率很低就是适用范围有限。而进化计算由于其求解过程不依赖于目标函数的解析性质,同时又能以较大的概率收敛于全局最优解,所以用进化算法求解约束优化问题已是一个很有意义的研究方向。用进化计算求解约束优化问题时,最基本的思想就是:首先设法把个体带入可行域,然后再在可行域内找到尽可能好的解。求解约束优化问题最困难的主要是对约束条件的处理。目前,使用最广泛的对约束条件的处理方法是惩罚函数法。基于惩罚函数的进化算法一般来说都包含有许多惩罚系数,在实际应用时,只有正确设置这些系数才可能获得可行解,而要获得适当的惩罚系数则需要大量的实验为基础。在科学实践、工程系统设计及社会生产和经济发展中还有一类很常见到优化问题:多目标优化问题,因此研究多目标优化问题具有十分重要的意义。由于多目标优化问题不存在唯一的全局最优解,所以求解多目标优化问题实际上就是要寻找一个解的集合。传统的多目标优化方法是将多目标问题通过加权求和转化为单目标问题来处理的。但是,这种方法要求对问题本身有很强的先验认识,难以处理真正的多目标问题。进化计算由于其是一种基于种群操作的计算技术,可以隐并行的搜索解空间中的多个解,并能利用不同解之间的相似性来提高其并发求解的效率,因此进化计算比较合求解多目标优化问题。 粒子群优化(Particle Swarm Optimization, PSO)经济论文www.youzhiessay.com。 算法是由Kennedy和Eberhart于1995年提出的一种优化算法。它是对生物群体的社会行为进行的一种模拟,它最早源于对鸟群觅食行为的研究。在生物群体中存在着个体与个体、个体与群体间的相互作用、相互影响的行为,这种行为体现的是一种存在于生物群体中的信息共享的机制。PSO算法就是对这种社会行为的模拟,即利用信息共享机制,使得个体间可以相互借鉴经验,从而促进整个群体的发展。 PSO算法和遗传算法(Genetic Algorithm,GA)类似,也是一种基于迭代的优化工具,系统初始化为一组随机解,通过某种方式迭代寻找最优解。但PSO没有GA的“选择”、“交叉”、“变异”算子,编码方式也比GA简单。并且很多情况下要比遗传算法更有效率,所以基于粒子群算法处理优化问题中的是一个很有意义的研究方向。由于PSO算法容易理解、易于实现,所以PSO算法发展很快。在函数优化、系统控制、神经网络训练等领域得到广泛应用。 因此,本文在PSO算法基础上对PSO算法处理优化问题的能力及基于PSO算法,毕业论文网www.594wm.com,求解约束优化问题和多目标优化问题进行了深入研究。主要体现在以下几个方面:第一、介绍了有关粒子群优化算法的背景知识,阐述了算法产生的基础。 接着讨论了粒子群优化算法的发展和基本原理,并给出了算法的流程。通过对算法公式和参数设置进行的综合分析以及和其它优化算法进行比较,给出了粒子群优化算法实际使用时的指导原则。并讨论了算法在一些领域中的成功应用。第二、就粒子群优化算法在求解最优化问题中的应用,对无约束和有约束最优化问题分别设计了基于粒子群优化算法的不同的求解方法。对于无约束优化问题,本文直接用目标函数作为适应度函数,采用实数编码。对于约束优化问题,本文采用一种惩罚函数作为粒子群优化算法的适应度函数。 对两种问题分别应用了不同的测试函数对其进行了测试,结果表明了粒子群优化算法求解最优化问题的可行性。第三、针对约束优化问题本文在引入了半可行域的概念的基础上提出了竞争选择的新规则,并改进了基于竞争选择和惩罚函数的进化算法的适应度函数。并且本文规定了半可行解性质:半可行解优于不可行解,但劣于可行解。在半可行域内个体可直接用目标函数来评价。第四、结合粒子群优化算法本身的特点,本文设计了选择算子对半可行域进行操作,从而提出了利用PSO算法求解约束优化问题的新的进化算法。 第五、由于多目标优化问题和单目标优化问题是有本质的区别的:前者一般是一组或几组连续解的集合,而后者只是单个解或一组连续的解,所以PSO算法不能直接应用于多目标优化问题。因此本文对PSO全局极值和个体极值选取方式做了改进,提出了最优解评估选取的PSO算法,用于对多目标优化问题的非劣最优解集的搜索。实验结果证明了算法的有效性。粒子群算法的收敛性、基于粒子群算法求解不连续、多可行域的约束优化问题、基于粒子群算法求解高维多目标优化问题是本文的后续研究工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值