麻雀搜索算法收敛曲线图代码
时间: 2024-12-04 18:13:54 浏览: 43
麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群体智能优化算法,灵感来源于麻雀的觅食行为。为了展示麻雀搜索算法的收敛过程,我们可以绘制其收敛曲线图。以下是一个使用Python绘制收敛曲线图的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 麻雀搜索算法模拟
def sparrow_search_algorithm(func, dim, pop_size, max_iter):
# 初始化种群
pos = np.random.uniform(-10, 10, (pop_size, dim))
fitness = np.apply_along_axis(func, 1, pos)
# 找到当前最优解
best_idx = np.argmin(fitness)
best_pos = pos[best_idx].copy()
best_fitness = fitness[best_idx]
# 记录收敛曲线
convergence_curve = []
for iter in range(max_iter):
# 更新位置
for i in range(pop_size):
# 随机选择一个麻雀
j = np.random.randint(pop_size)
while j == i:
j = np.random.randint(pop_size)
# 更新位置
r = np.random.rand()
if r < 0.5:
pos[i] += np.random.rand() * (pos[j] - pos[i])
else:
pos[i] += np.random.rand() * (best_pos - pos[i])
# 边界处理
pos[i] = np.clip(pos[i], -10, 10)
# 计算适应度
fitness = np.apply_along_axis(func, 1, pos)
# 更新最优解
current_best_idx = np.argmin(fitness)
if fitness[current_best_idx] < best_fitness:
best_pos = pos[current_best_idx].copy()
best_fitness = fitness[current_best_idx]
# 记录当前最优适应度
convergence_curve.append(best_fitness)
return best_pos, best_fitness, convergence_curve
# 测试函数(以Sphere函数为例)
def sphere(x):
return np.sum(x**2)
# 参数设置
dim = 10
pop_size = 30
max_iter = 100
# 运行麻雀搜索算法
best_pos, best_fitness, convergence_curve = sparrow_search_algorithm(sphere, dim, pop_size, max_iter)
# 绘制收敛曲线
plt.figure(figsize=(10, 6))
plt.plot(convergence_curve, label='Best Fitness')
plt.xlabel('Iteration')
plt.ylabel('Fitness')
plt.title('Convergence Curve of Sparrow Search Algorithm')
plt.legend()
plt.grid(True)
plt.show()
```
这段代码首先定义了一个麻雀搜索算法的模拟函数 `sparrow_search_algorithm`,然后使用Sphere函数作为测试函数进行优化。最后,使用Matplotlib库绘制了算法的收敛曲线图。
阅读全文