python开源代码算法_Python实现的粒子群优化算法源代码

本文介绍如何使用Python实现粒子群优化算法,通过Numpy库操作,只需修改f6函数即可适应不同自定义问题。详细讲解了算法参数设置和关键函数f6的实现,提供了一个完整的代码示例,包括初始化、迭代过程和结果展示。
摘要由CSDN通过智能技术生成

使用Python实现的粒子群优化算法,需要引用到Numpy,需要对自定义问题进行优化只需要更改f6函数即可,智能算法本身的参数亦可以自行设定,具体源代码如下:

from numpy import array

from random import random

from math import sin, sqrt

iter_max = 10000

pop_size = 100

dimensions = 2

c1 = 2

c2 = 2

err_crit = 0.00001

class Particle:

pass

def f6(param):

'''Schaffer's F6 function'''

para = param*10

para = param[0:2]

num = (sin(sqrt((para[0] * para[0]) + (para[1] * para[1])))) * \

(sin(sqrt((para[0] * para[0]) + (para[1] * para[1])))) - 0.5

denom = (1.0 + 0.001 * ((para[0] * para[0]) + (para[1] * para[1]))) * \

(1.0 + 0.001 * ((para[0] * para[0]) + (para[1] * para[1])))

f6 = 0.5 - (num/denom)

errorf6 = 1 - f6

return f6, errorf6;

#initialize the particles

particles = []

for i in range(pop_size):

p = Particle()

p.params = array([random() for i in range(dimensions)])

p.fitness = 0.0

p.v = 0.0

particles.append(p)

# let the first particle be the global best

gbest = particles[0]

err = 999999999

while i < iter_max :

for p in particles:

fitness,err = f6(p.params)

if fitness > p.fitness:

p.fitness = fitness

p.best = p.params

if fitness > gbest.fitness:

gbest = p

v = p.v + c1 * random() * (p.best - p.params) \

+ c2 * random() * (gbest.params - p.params)

p.params = p.params + v

i += 1

if err < err_crit:

break

#progress bar. '.' = 10%

if i % (iter_max/10) == 0:

print '.'

print '\nParticle Swarm Optimisation\n'

print 'PARAMETERS\n','-'*9

print 'Population size : ', pop_size

print 'Dimensions : ', dimensions

print 'Error Criterion : ', err_crit

print 'c1 : ', c1

print 'c2 : ', c2

print 'function : f6'

print 'RESULTS\n', '-'*7

print 'gbest fitness : ', gbest.fitness

print 'gbest params : ', gbest.params

print 'iterations : ', i+1

## Uncomment to print particles

#for p in particles:

# print 'params: %s, fitness: %s, best: %s' % (p.params, p.fitness, p.best)

发表评论

You must be logged in to post a comment.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值