鸡群算法python代码
时间: 2023-10-27 16:08:23 浏览: 47
以下是一个简单的鸡群算法的 Python 代码实现:
```python
import random
# 鸡群算法的参数
POPULATION_SIZE = 20 # 种群大小
DIMENSIONS = 2 # 搜索空间的维度
ITERATIONS = 100 # 迭代次数
C1 = 0.5 # 学习因子1
C2 = 0.5 # 学习因子2
W = 0.9 # 惯性权重
# 定义搜索空间
BOUND_LOW, BOUND_UP = -10, 10
# 初始化种群
class Chicken:
def __init__(self):
self.position = [random.uniform(BOUND_LOW, BOUND_UP) for _ in range(DIMENSIONS)]
self.velocity = [random.uniform(BOUND_LOW, BOUND_UP) for _ in range(DIMENSIONS)]
self.fitness = float("inf")
self.best_position = self.position.copy()
self.best_fitness = float("inf")
def evaluate(self, cost_function):
self.fitness = cost_function(self.position)
if self.fitness < self.best_fitness:
self.best_position = self.position.copy()
self.best_fitness = self.fitness
class ChickenSwarm:
def __init__(self, cost_function):
self.cost_function = cost_function
self.population = [Chicken() for _ in range(POPULATION_SIZE)]
self.best_chicken = min(self.population, key=lambda chicken: chicken.fitness)
def optimize(self):
for i in range(ITERATIONS):
for chicken in self.population:
# 更新速度和位置
for j in range(DIMENSIONS):
r1, r2 = random.random(), random.random()
chicken.velocity[j] = W * chicken.velocity[j] + \
C1 * r1 * (chicken.best_position[j] - chicken.position[j]) + \
C2 * r2 * (self.best_chicken.best_position[j] - chicken.position[j])
chicken.position[j] += chicken.velocity[j]
# 确保位置在搜索空间内
if chicken.position[j] < BOUND_LOW:
chicken.position[j] = BOUND_LOW
elif chicken.position[j] > BOUND_UP:
chicken.position[j] = BOUND_UP
# 计算适应度
chicken.evaluate(self.cost_function)
# 更新全局最优解
if chicken.fitness < self.best_chicken.fitness:
self.best_chicken = chicken
print(f"Iteration {i+1}: Best fitness = {self.best_chicken.best_fitness}")
return self.best_chicken.best_position
# 测试鸡群算法
def sphere_function(x):
return sum([xi**2 for xi in x])
swarm = ChickenSwarm(sphere_function)
best_position = swarm.optimize()
print(f"Best position: {best_position}")
```