引力搜索算法:原理、案例与代码全解析
引力搜索算法(Gravitational Search Algorithm,GSA)是一种基于万有引力定律和物体运动定律的启发式优化算法。它模拟了宇宙中物体之间的引力相互作用,通过引力的吸引和物体的运动来寻找最优解,在解决复杂的优化问题中表现出了良好的性能。# 目标函数(Rosenbrock 函数)# 计算两个粒子之间的欧几里得距离# 引力搜索算法N = 50 # 粒子数量G0 = 100 # 初
·
一、引力搜索算法简介
引力搜索算法(Gravitational Search Algorithm,GSA)是一种基于万有引力定律和物体运动定律的启发式优化算法。它模拟了宇宙中物体之间的引力相互作用,通过引力的吸引和物体的运动来寻找最优解,在解决复杂的优化问题中表现出了良好的性能。
import numpy as np
# 目标函数(Rosenbrock 函数)
def objective_function(x, y):
return (1 - x)**2 + 100 * (y - x**2)**2
# 计算两个粒子之间的欧几里得距离
def euclidean_distance(x1, y1, x2, y2):
return np.sqrt((x1 - x2)**2 + (y1 - y2)**2)
# 引力搜索算法
def gravitational_search_algorithm():
N = 50 # 粒子数量
G0 = 100 # 初始引力常数
T_max = 200 # 最大迭代次数
lb_x, lb_y = -2, -2 # x和y的下限
ub_x, ub_y = 2, 2 # x和y的上限
# 初始化粒子位置
positions = np.random.uniform(low=[lb_x, lb_y], high=[ub_x, ub_y], size=(N, 2))
velocities = np.zeros((N, 2))
for t in range(T_max):
G = G0 * ((T_max - t) / T_max) # 引力常数随时间变化
# 计算适应度值
fitness_values = np.array([objective_function(pos[0], pos[1]) for pos in positions])
# 计算质量(这里简单地根据适应度值线性映射)
best_fitness = np.min(fitness_values)
worst_fitness = np.max(fitness_values)
masses = (fitness_values - worst_fitness) / (best_fitness - worst_fitness + 1e-8)
forces = np.zeros((N, 2))
for i in range(N):
for j in range(N):
if i!= j:
distance = euclidean_distance(positions[i][0], positions[i][1], positions[j][0], positions[j][1])
force_x = G * masses[i] * masses[j] / (distance + 1e-8) * (positions[j][0] - positions[i][0])
force_y = G * masses[i] * masses[j] / (distance + 1e-8) * (positions[j][1] - positions[i][1])
forces[i] += np.array([force_x, force_y])
accelerations = forces / np.array([masses]).reshape(-1, 1)
velocities = np.random.rand(N, 2) * velocities + accelerations
positions = positions + velocities
best_index = np.argmin(fitness_values)
return positions[best_index]
# 运行引力搜索算法并输出结果
result = gravitational_search_algorithm()
print("最优解:", result)
print("最优值:", objective_function(result[0], result[1]))
在上述代码中,我们首先定义了目标函数 objective_function
和计算欧几里得距离的函数 euclidean_distance
。gravitational_search_algorithm
函数实现了引力搜索算法的主要逻辑,包括粒子位置和速度的初始化、迭代过程中的质量计算、引力和加速度计算以及位置和速度更新。最后,我们运行算法并输出最优解和最优值。这个案例展示了引力搜索算法在简单函数优化问题中的应用,对于更复杂的优化问题,可根据实际情况对算法进行适当调整。
更多推荐
所有评论(0)