灰狼算法代码步骤
以下是灰狼算法的代码步骤:
-
初始化种群,包括灰狼个数和每只灰狼的位置和速度。
-
计算每只灰狼的适应度值。
-
找到当前种群中适应度最好的灰狼,称之为“领袖狼”。
-
根据领袖狼的位置和其他灰狼的位置,计算每只灰狼的位置和速度的更新值。
-
更新每只灰狼的位置和速度。
-
计算新位置的适应度值,如果比原来的适应度值更好,则更新灰狼的位置。
-
重复步骤2-6,直到达到最大迭代次数或者找到最优解。
-
返回最优解。
以下是一个简单的灰狼算法的 Python 代码实现:
import random
import math
# 初始化灰狼群体
def init_wolves(num_wolves, dim, lb, ub):
wolves_pos = [[random.uniform(lb, ub) for j in range(dim)] for i in range(num_wolves)]
wolves_vel = [[0 for j in range(dim)] for i in range(num_wolves)]
return wolves_pos, wolves_vel
# 计算适应度函数值
def fitness_func(x):
return sum([xi**2 for xi in x])
# 计算灰狼距离领袖狼的距离
def distance(pos, leader_pos):
return math.sqrt(sum([(pos[i] - leader_pos[i])**2 for i in range(len(pos))]))
# 灰狼算法主函数
def grey_wolf_algorithm(num_wolves, dim, lb, ub, max_iter):
# 初始化灰狼群体
wolves_pos, wolves_vel = init_wolves(num_wolves, dim, lb, ub)
# 记录当前最优解
best_fitness = float('inf')
best_pos = None
for i in range(max_iter):
# 计算每只灰狼的适应度值
fitness_values = [fitness_func(wolves_pos[j]) for j in range(num_wolves)]
# 找到领袖狼
leader_index = fitness_values.index(min(fitness_values))
leader_pos = wolves_pos[leader_index]
# 更新每只灰狼的位置和速度
for j in range(num_wolves):
a = 2 - 2 * (i / max_iter) # a是一个线性减小的参数
r1 = random.random()
r2 = random.random()
# 计算个体距离领袖狼的距离
dist_to_leader = distance(wolves_pos[j], leader_pos)
# 计算当前灰狼的位置和速度更新值
for k in range(dim):
c1 = 2 * r2
c2 = 2 * r1
d_alpha = abs(c1 * leader_pos[k] - wolves_pos[j][k])
x1 = leader_pos[k] - c1 * d_alpha
d_beta = abs(c2 * wolves_pos[leader_index][k] - wolves_pos[j][k])
x2 = wolves_pos[leader_index][k] - c2 * d_beta
x3 = (wolves_pos[leader_index][k] + leader_pos[k]) / 2
wolves_vel[j][k] = a * wolves_vel[j][k] + x1 + x2 + x3
wolves_pos[j][k] = wolves_pos[j][k] + wolves_vel[j][k]
# 更新最优解
if fitness_values[leader_index] < best_fitness:
best_fitness = fitness_values[leader_index]
best_pos = leader_pos
return best_fitness, best_pos
# 测试灰狼算法
num_wolves = 20
dim = 5
lb = -5.12
ub = 5.12
max_iter = 1000
best_fitness, best_pos = grey_wolf_algorithm(num_wolves, dim, lb, ub, max_iter)
print("Best fitness:", best_fitness)
print("Best position:", best_pos)
``
原文地址: https://www.cveoy.top/t/topic/f7lN 著作权归作者所有。请勿转载和采集!