鲸鱼算法python
时间: 2023-08-12 07:05:53 浏览: 138
鲸鱼算法(Whale Optimization Algorithm,简称WOA)是一种基于仿生学思想的优化算法,灵感来自于鲸鱼群体的觅食行为。该算法可以用于求解数值优化问题。
以下是一个简单的使用Python实现的鲸鱼算法示例:
```python
import numpy as np
def objective_function(x):
# 定义目标函数,这里以 Rosenbrock 函数为例
return sum(100.0 * (x[1:] - x[:-1]**2.0)**2.0 + (1 - x[:-1])**2.0)
def woa_search(max_iter, num_whales, num_dimensions, lb, ub):
# 初始化鲸鱼群体的位置
positions = np.random.uniform(lb, ub, (num_whales, num_dimensions))
# 初始化最佳位置和最佳适应度
best_position = None
best_fitness = float('inf')
for t in range(max_iter):
a = 2.0 - t * ((2.0) / max_iter) # 控制收缩参数
a2 = -1 + t * ((-1) / max_iter) # 控制线性递减
for i in range(num_whales):
# 更新位置
r1 = np.random.random()
r2 = np.random.random()
A = 2 * a * r1 - a
C = 2 * r2
l = (a2 - 1) * np.random.random() + 1 # 控制参数l
p = np.random.random() # 随机选择一个鲸鱼
if p < 0.5:
if abs(A) >= 1:
rand_leader_index = np.random.randint(0, num_whales)
X_rand = positions[rand_leader_index]
D_X_rand = abs(C * X_rand - positions[i])
new_position = X_rand - A * D_X_rand
else:
D_Leader = abs(C * best_position - positions[i])
new_position = best_position - A * D_Leader
else:
distance_to_leader = abs(best_position - positions[i])
new_position = distance_to_leader * np.exp(b * l) * np.cos(2 * np.pi * l) + best_position
# 边界处理
new_position = np.clip(new_position, lb, ub)
# 更新最佳位置和最佳适应度
fitness = objective_function(new_position)
if fitness < best_fitness:
best_fitness = fitness
best_position = new_position
positions[i] = new_position
return best_position, best_fitness
# 使用示例
max_iter = 100 # 最大迭代次数
num_whales = 50 # 鲸鱼数量
num_dimensions = 10 # 问题的维度
lb = -10 # 变量的下界
ub = 10 # 变量的上界
best_position, best_fitness = woa_search(max_iter, num_whales, num_dimensions, lb, ub)
print("最佳位置:", best_position)
print("最佳适应度:", best_fitness)
```
上述代码演示了如何使用鲸鱼算法求解一个简单的数值优化问题。通过定义目标函数和设置算法参数,可以得到最佳位置和最佳适应度作为优化结果。
希望这个示例对你有帮助!如果有任何问题,请随时提问。
阅读全文