蝗虫算法python代码。输出适应度迭代曲线、最优位置和最优解。
时间: 2024-10-16 13:12:09 浏览: 13
蝗虫算法是一种模拟蝗群觅食行为的优化搜索算法,它模仿了蝗虫寻找食物的过程,通过群体智慧找到全局最优解。以下是Python实现的基本框架,这里假设我们使用`numpy`库进行计算:
```python
import numpy as np
import matplotlib.pyplot as plt
class Flocking():
def __init__(self, n_flocks=50, n_individuals=50, max_iter=100, bounds=(-100, 100)):
self.n_flocks = n_flocks
self.n_individuals = n_individuals
self.max_iter = max_iter
self.bounds = bounds
self.position = np.random.uniform(self.bounds[0], self.bounds[1], (n_flocks, n_individuals, 2))
self.best_positions = None
def update(self):
# ...这里编写蝗虫移动规则,如随机选择目标点并调整方向...
# ...还包括速度更新、边界处理等...
def fitness_function(self, position):
# ...在这里定义适应度函数,例如欧氏距离到目标点...
fitness = np.sum((position - target)**2, axis=-1)
return fitness
def iterate(self):
for _ in range(self.max_iter):
self.update()
fitness = self.fitness_function(self.position)
if self.best_positions is None or np.min(fitness) < self.best_fitness:
self.best_positions = self.position.copy()
print("Iteration:", _, "Best Fitness:", np.min(fitness))
self.plot_results()
def plot_results(self):
best_positions = self.best_positions.reshape(-1, 2)
plt.scatter(best_positions[:, 0], best_positions[:, 1], c='red', label="Optimal Solutions")
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Fitness Iteration Curve')
plt.show()
# 使用示例
flocking = Flocking()
flocking.iterate()
```
在这个代码里,`update()`方法会模拟蝗虫移动过程,`fitness_function()`用于计算每个个体的适应度,`iterate()`函数会迭代整个过程,并记录最佳解的位置。最后通过`plot_results()`画出适应度随迭代的变化以及最优解的位置。
阅读全文