笔者使用chatgpt生成了一个实现PSO算法的python代码,经验证,代码运行无bug。代码及相关解释如下:
代码:
import numpy as np
# 定义适应度函数
def fitness(x):
return np.sum(x ** 2)
# PSO算法
def PSO(fitness_func, num_particles, num_dimensions, max_iter, c1, c2, w):
# 初始化粒子位置和速度
pos = np.random.uniform(-10, 10, (num_particles, num_dimensions))
vel = np.random.uniform(-1, 1, (num_particles, num_dimensions))
pbest_pos = pos.copy()
pbest_val = np.zeros(num_particles)
gbest_pos = np.zeros((1, num_dimensions))
gbest_val = np.inf
# 迭代优化
for i in range(max_iter):
# 计算适应度值
for j in range(num_particles):
pbest_val[j] = fitness_func(pos[j])
if pbest_val[j] < gbest_val:
gbest_val = pbest_val[j]
gbest_pos = pbest_pos[j].reshape(1, -1).copy()
# 更新粒子速度和位置
for j in range(num_particles):
vel[j] = w * vel[j] + c1 * np.random.rand() * (pbest_pos[j] - pos[j]) + c2 * np.random.rand() * (
gbest_pos - pos[j])
pos[j] = pos[j] + vel[j]
# 粒子位置边界处理
for k in range(num_dimensions):
if pos[j][k] < -10:
pos[j][k] = -10
vel[j][k] = -vel[j][k] # 反弹
elif pos[j][k] > 10:
pos[j][k] = 10
vel[j][k] = -vel[j][k] # 反弹
return gbest_val, gbest_pos
# 测试PSO算法
if __name__ == '__main__':
gbest_val, gbest_pos = PSO(fitness, 50, 10, 100, 2, 2, 0.8)
print('Optimal solution: x = {}, f(x) = {}'.format(gbest_pos, gbest_val))
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/5d79b8078ccf489a2aff27ee11ad6f29.png)
部分numpy代码及整体代码解释:
![](https://i-blog.csdnimg.cn/blog_migrate/c0529c758bf029c223073282a04bac64.png)
![](https://i-blog.csdnimg.cn/blog_migrate/231c9f31f07c4b72ae596cecaebd946c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0e58518cd8283ff7f7dc71d3afd62b3d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/56796483444b8756cc3cc0006ed3b0b4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/822c6afc05162b828a6ad3ef81b9736a.png)
小结:
可见相比于查询相关社区和google、百度,直接询问chagpt一些问题显得会更方便直接地多。个人觉得chatgpt继续发展下去,可以打破资本对于教育的垄断,人类积累的所有数据库将会以一种更为生动直接的方式呈现在人们面前,它将会是我们在求知路上最忠诚的伙伴和老师。