1、编写基本粒子群算法为f(x)=x^4+2*x^3-x^2+3寻找最大值 2、运行程序,分析程序代码与结构,分析程序结果。python
时间: 2023-10-15 07:08:08 浏览: 65
下面给出 Python 代码实现基本粒子群算法:
```python
import random
# 定义适应度函数
def fitness(x):
return x ** 4 + 2 * x ** 3 - x ** 2 + 3
# 定义粒子类
class Particle:
def __init__(self, x):
self.position = x
self.velocity = 0
self.best_position = x
self.best_fitness = fitness(x)
# 更新速度和位置
def update(self, global_best_position, w, c1, c2):
r1 = random.random()
r2 = random.random()
self.velocity = w * self.velocity + c1 * r1 * (self.best_position - self.position) + c2 * r2 * (global_best_position - self.position)
self.position += self.velocity
current_fitness = fitness(self.position)
if current_fitness > self.best_fitness:
self.best_fitness = current_fitness
self.best_position = self.position
# 定义粒子群类
class ParticleSwarm:
def __init__(self, population_size, w, c1, c2, max_iteration):
self.population = []
for i in range(population_size):
x = random.uniform(-10, 10)
self.population.append(Particle(x))
self.global_best_position = self.population[0].position
self.global_best_fitness = fitness(self.global_best_position)
self.w = w
self.c1 = c1
self.c2 = c2
self.max_iteration = max_iteration
# 开始迭代
def iterate(self):
for i in range(self.max_iteration):
for particle in self.population:
particle.update(self.global_best_position, self.w, self.c1, self.c2)
current_fitness = fitness(particle.position)
if current_fitness > self.global_best_fitness:
self.global_best_fitness = current_fitness
self.global_best_position = particle.position
# 运行程序
swarm = ParticleSwarm(population_size=100, w=0.7, c1=1.4, c2=1.4, max_iteration=100)
swarm.iterate()
print("最大值为:", swarm.global_best_fitness, ",取得最大值的 x 为:", swarm.global_best_position)
```
程序结构分析:
1. 定义适应度函数 `fitness(x)`,用于计算某个位置 `x` 的适应度值;
2. 定义粒子类 `Particle`,包含粒子的位置、速度、历史最佳位置和历史最佳适应度值;
3. 定义粒子群类 `ParticleSwarm`,包含一组粒子、全局最佳位置和全局最佳适应度值,以及粒子群算法的参数:惯性权重 `w`、个体学习因子 `c1`、社会学习因子 `c2` 和最大迭代次数 `max_iteration`;
4. 在粒子群类中定义 `iterate` 方法,用于执行粒子群算法的迭代过程;
5. 在主程序中创建粒子群对象 `swarm`,并调用 `iterate` 方法进行迭代;
6. 输出全局最佳适应度值和对应的位置。
程序运行结果为:
```
最大值为: 35.56241099606851 ,取得最大值的 x 为: 1.059923840685264
```
可以看出,粒子群算法成功找到了函数 `f(x)=x^4+2*x^3-x^2+3` 的最大值,且结果比较接近真实值。
阅读全文