python萤火虫算法_萤火虫算法-python实现

FAIndividual.py

import numpy as np

import ObjFunction

class FAIndividual:

'''

individual of firefly algorithm

'''

def __init__(self, vardim, bound):

'''

vardim: dimension of variables

bound: boundaries of variables

'''

self.vardim = vardim

self.bound = bound

self.fitness = 0.

self.trials = 0

def generate(self):

'''

generate a random chromsome for firefly algorithm

'''

len = self.vardim

rnd = np.random.random(size=len)

self.chrom = np.zeros(len)

for i in xrange(0, len):

self.chrom[i] = self.bound[0, i] + \

(self.bound[1, i] - self.bound[0, i]) * rnd[i]

def calculateFitness(self):

'''

calculate the fitness of the chromsome

'''

self.fitness = ObjFunction.GrieFunc(

self.vardim, self.chrom, self.bound)

FA.py

import numpy as np

from FAIndividual import FAIndividual

import random

import copy

import matplotlib.pyplot as plt

class FireflyAlgorithm:

'''

The class for firefly algorithm

'''

def __init__(self, sizepop, vardim, bound, MAXGEN, params):

'''

sizepop: population sizepop

vardim: dimension of variables

bound: boundaries of variables

MAXGEN: termination condition

param: algorithm required parameters, it is a list which is consisting of [beta0, gamma, alpha]

'''

self.sizepop = sizepop

self.MAXGEN = MAXGEN

self.vardim = vardim

self.bound = bound

self.population = []

self.fitness = np.zeros((self.sizepop, 1))

self.trace = np.zeros((self.MAXGEN, 2))

self.params = params

def initialize(self):

'''

initialize the population

'''

for i in xrange(0, self.sizepop):

ind = FAIndividual(self.vardim, self.bound)

ind.generate()

self.population.append(ind)

def evaluate(self):

'''

evaluation of the population fitnesses

'''

for i in xrange(0, self.sizepop):

self.population[i].calculateFitness()

self.fitness[i] = self.population[i].fitness

def solve(self):

'''

evolution process of firefly algorithm

'''

self.t = 0

self.initialize()

self.evaluate()

best = np.max(self.fitness)

bestIndex = np.argmax(self.fitness)

self.best = copy.deepcopy(self.population[bestIndex])

self.avefitness = np.mean(self.fitness)

self.trace[self.t, 0] = (1 - self.best.fitness) / self.best.fitness

self.trace[self.t, 1] = (1 - self.avefitness) / self.avefitness

print("Generation %d: optimal function value is: %f; average function value is %f" % (

self.t, self.trace[self.t, 0], self.trace[self.t, 1]))

while (self.t < self.MAXGEN - 1):

self.t += 1

self.move()

self.evaluate()

best = np.max(self.fitness)

bestIndex = np.argmax(self.fitness)

if best > self.best.fitness:

self.best = copy.deepcopy(self.population[bestIndex])

self.avefitness = np.mean(self.fitness)

self.trace[self.t, 0] = (1 - self.best.fitness) / self.best.fitness

self.trace[self.t, 1] = (1 - self.avefitness) / self.avefitness

print("Generation %d: optimal function value is: %f; average function value is %f" % (

self.t, self.trace[self.t, 0], self.trace[self.t, 1]))

print("Optimal function value is: %f; " %

self.trace[self.t, 0])

print "Optimal solution is:"

print self.best.chrom

self.printResult()

def move(self):

'''

move the a firefly to another brighter firefly

'''

for i in xrange(0, self.sizepop):

for j in xrange(0, self.sizepop):

if self.fitness[j] > self.fitness[i]:

r = np.linalg.norm(

self.population[i].chrom - self.population[j].chrom)

beta = self.params[0] * \

np.exp(-1 * self.params[1] * (r ** 2))

# beta = 1 / (1 + self.params[1] * r)

# print beta

self.population[i].chrom += beta * (self.population[j].chrom - self.population[

i].chrom) + self.params[2] * np.random.uniform(low=-1, high=1, size=self.vardim)

for k in xrange(0, self.vardim):

if self.population[i].chrom[k] < self.bound[0, k]:

self.population[i].chrom[k] = self.bound[0, k]

if self.population[i].chrom[k] > self.bound[1, k]:

self.population[i].chrom[k] = self.bound[1, k]

self.population[i].calculateFitness()

self.fitness[i] = self.population[i].fitness

def printResult(self):

'''

plot the result of the firefly algorithm

'''

x = np.arange(0, self.MAXGEN)

y1 = self.trace[:, 0]

y2 = self.trace[:, 1]

plt.plot(x, y1, 'r', label='optimal value')

plt.plot(x, y2, 'g', label='average value')

plt.xlabel("Iteration")

plt.ylabel("function value")

plt.title("Firefly Algorithm for function optimization")

plt.legend()

plt.show()

运行程序:

if __name__ == "__main__":

bound = np.tile([[-600], [600]], 25)

fa = FA(60, 25, bound, 200, [1.0, 0.000001, 0.6])

fa.solve()

pageRank算法 python实现

一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...

常见排序算法-Python实现

常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

kmp算法python实现

kmp算法python实现 kmp算法 kmp算法用于字符串的模式匹配,也就是找到模式字符串在目标字符串的第一次出现的位置比如abababc那么bab在其位置1处,bc在其位置5处我们首先想到的最简单 ...

KMP算法-Python版

KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...

压缩感知重构算法之IRLS算法python实现

压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

压缩感知重构算法之OLS算法python实现

压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

压缩感知重构算法之CoSaMP算法python实现

压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

压缩感知重构算法之IHT算法python实现

压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

压缩感知重构算法之SP算法python实现

压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

随机推荐

tcp的简单介绍

为什么会有TCP/IP协议 在 世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人 的口音,让他们无法合作 ...

R12&lowbar;专题知识总结提炼-AR模块

应收模块简介 应收模块是用来为企业提供应收款管理的模块. 当企业销售一笔商品或者发生其他影响收入和现金的业务的时候,需要在应收模块记账. 本文档以R12为例,11i可参考,只针对简单业务情况考虑,将应 ...

js禁止用户右键等操作

IE6-8支持css3属性

方法一.让IE6-8支持css3属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python实现萤火虫算法可以使用以下步骤: 1. 定义问题的目标函数,即需要优化的函数。 2. 初始化萤火虫的初始位置和亮度,可以随机生成或按照一定规则初始化。 3. 定义萤火虫之间的吸引度和排斥度函数,可以根据亮度和距离计算。 4. 迭代更新萤火虫的位置和亮度,根据吸引度和排斥度调整移动方向和速度。 5. 根据设定的停止条件,判断是否终止迭代。如果满足停止条件,则输出最优解;否则回到步骤4继续迭代。 下面是一个简单的示例代码,演示了如何使用Python实现萤火虫算法: ```python import numpy as np # 定义目标函数(示例为简单的二维函数) def objective_function(x): return x[0]**2 + x[1]**2 # 初始化萤火虫的位置和亮度 def initialize_fireflies(num_fireflies, num_dimensions): fireflies = np.random.uniform(-5, 5, (num_fireflies, num_dimensions)) intensities = np.zeros(num_fireflies) for i in range(num_fireflies): intensities[i] = objective_function(fireflies[i]) return fireflies, intensities # 计算吸引度 def attractiveness(intensity1, intensity2, distance): beta = 1 # 控制吸引度的参数 return intensity1 / (1 + beta * distance) # 计算排斥度 def repulsiveness(distance): gamma = 1 # 控制排斥度的参数 return np.exp(-gamma * distance**2) # 更新萤火虫的位置和亮度 def update_fireflies(fireflies, intensities): alpha = 0.2 # 控制移动步长的参数 for i in range(len(fireflies)): for j in range(len(fireflies)): if intensities[i] < intensities[j]: distance = np.linalg.norm(fireflies[i] - fireflies[j]) attraction = attractiveness(intensities[i], intensities[j], distance) repulsion = repulsiveness(distance) fireflies[i] += alpha * attraction * (fireflies[j] - fireflies[i]) + alpha * repulsion * np.random.uniform(-1, 1, len(fireflies[i])) intensities[i] = objective_function(fireflies
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值