鲸鱼算法进行两个目标函数优化代码
时间: 2023-12-21 09:06:59 浏览: 138
以下是使用Python实现的鲸鱼算法进行两个目标函数优化的代码示例:
```python
import random
import numpy as np
# 目标函数1
def obj_func1(x):
return x[0]**2
# 目标函数2
def obj_func2(x):
return (x[0]-2)**2
# 鲸群类
class Whale:
def __init__(self, x_range):
self.position = np.array([random.uniform(x_range[0], x_range[1])])
self.fitness = np.array([0.0, 0.0])
self.velocity = np.array([0.0])
self.best_position = self.position.copy()
self.best_fitness = self.fitness.copy()
# 更新位置
def update_position(self):
self.position += self.velocity
# 计算适应度
def evaluate_fitness(self):
self.fitness[0] = obj_func1(self.position)
self.fitness[1] = obj_func2(self.position)
# 更新速度
def update_velocity(self, global_best_position, a, A):
r1 = random.uniform(0, 1)
r2 = random.uniform(0, 1)
C = 2 * r2
l = random.uniform(-1, 1)
p = random.uniform(0, 1)
D = np.abs(A * global_best_position - self.position)
self.velocity = np.exp(b * l) * np.sin(2 * np.pi * l) * D
+ a * C * (self.best_position - self.position)
+ a * p * (global_best_position - self.position)
# 更新最优解
def update_best(self):
if self.fitness[0] < self.best_fitness[0] and self.fitness[1] < self.best_fitness[1]:
self.best_position = self.position.copy()
self.best_fitness = self.fitness.copy()
# 鲸鱼算法类
class WhaleAlgorithm:
def __init__(self, obj_func1, obj_func2, x_range, whale_num, max_iter):
self.obj_func1 = obj_func1
self.obj_func2 = obj_func2
self.x_range = x_range
self.whale_num = whale_num
self.max_iter = max_iter
self.whales = []
self.global_best_position = None
self.global_best_fitness = np.array([float('inf'), float('inf')])
# 初始化鲸群
def init_whales(self):
self.whales = []
for i in range(self.whale_num):
whale = Whale(self.x_range)
whale.evaluate_fitness()
whale.update_best()
self.whales.append(whale)
# 更新全局最优解
def update_global_best(self):
for whale in self.whales:
if whale.best_fitness[0] < self.global_best_fitness[0] and whale.best_fitness[1] < self.global_best_fitness[1]:
self.global_best_position = whale.best_position.copy()
self.global_best_fitness = whale.best_fitness.copy()
# 运行算法
def run(self):
self.init_whales()
for i in range(self.max_iter):
for whale in self.whales:
a = 2 - i * (2 / self.max_iter)
A = 2 * a * random.uniform(0, 1) - a
b = 1
whale.update_velocity(self.global_best_position, a, A)
whale.update_position()
whale.evaluate_fitness()
whale.update_best()
self.update_global_best()
return self.global_best_position, self.global_best_fitness
# 测试
alg = WhaleAlgorithm(obj_func1, obj_func2, [-10, 10], 20, 100)
best_position, best_fitness = alg.run()
print("Best position:", best_position)
print("Best fitness:", best_fitness)
```
注意:该代码示例仅为演示鲸鱼算法进行多目标优化的基本思路,具体算法参数需要根据实际问题进行调整。