2026/4/17 1:12:37
网站建设
项目流程
网站网站设计,网站建设需要多少钱小江网页设计,wordpress能采集,vps主机怎么建设网站[1]粒子群算法mppt(四个粒子)#xff0c;代码注释清晰#xff0c;
[2]含有两个仿真模型#xff0c;一个模型是查看自己所设置的阴影光照下对应的最大功率点#xff0c;另一个模型则是用粒子群算法来追踪最大功率点。
其他详情可见图。
[3]负载变化也能实现最大功率点追踪代码注释清晰 [2]含有两个仿真模型一个模型是查看自己所设置的阴影光照下对应的最大功率点另一个模型则是用粒子群算法来追踪最大功率点。 其他详情可见图。 [3]负载变化也能实现最大功率点追踪能够看到迭代次数占空比趋于稳定的一个值粒子群这玩意儿搞MPPT是真有意思前两天在光伏系统里折腾了个四粒子版本的代码。咱先看核心部分——粒子群算法的迭代逻辑。下面这段代码直接把粒子群的运动规律写活了class Particle: def __init__(self): self.position np.random.uniform(0,0.8) # 初始位置随机对应占空比0-0.8 self.velocity 0 self.best_pos self.position self.best_power 0 # PSO参数 particles [Particle() for _ in range(4)] # 四个活蹦乱跳的粒子 global_best_pos 0 w 0.6 # 惯性权重相当于粒子运动的惯性这里有个小技巧占空比范围限制在0-0.8是考虑到实际电路中的占空比限制。适应度计算直接拿电压电流传感器读数相乘def update_power(particle): duty particle.position inverter.set_duty(duty) # 设置硬件PWM占空比 time.sleep(0.001) # 等电路稳定 v, i sensor.read() # 读取实时数据 return v * i # 功率作为适应度仿真模型这边先搞了个静态特性扫描。通过扫遍所有占空比找最大功率点这相当于给粒子群算法提供参考答案% 光伏阵列特性扫描 for duty 0:0.01:0.8 set_duty(duty); pause(0.1); power v * i; if power max_power max_power power; end end动态追踪模型才是重头戏。粒子们在迭代中不断逼近最大点的过程就像猎犬追兔子似的。看这段更新逻辑for particle in particles: current_power update_power(particle) if current_power particle.best_power: particle.best_power current_power particle.best_pos particle.position # 更新个体最优 if current_power global_best_power: global_best_power current_power global_best_pos particle.position # 更新群体最优 # 速度更新公式核心中的核心 particle.velocity w*particle.velocity c1*random()*(particle.best_pos - particle.position) c2*random()*(global_best_pos - particle.position) particle.position particle.velocity # 位置更新负载突变时的处理最见功力。当检测到功率变化超过阈值时算法会重新初始化粒子位置相当于让猎犬们重新闻味儿if abs(current_power - last_power) threshold: print(负载突变重新初始化粒子) for p in particles: p.position np.random.uniform(0,0.8) p.best_pos p.position last_power current_power实际跑起来的仿真曲线特别有意思。刚开始粒子们到处乱窜占空比变化跟过山车似的。迭代到第15次左右四个占空比数值开始往0.56附近收敛功率曲线也稳稳地趴在了最高点。这时候就算故意给负载加个阶跃扰动算法也能在5个迭代周期内重新锁定新位置。有个坑得提醒惯性权重w别设太大不然粒子冲过头半天收敛不了。但太小了又容易陷入局部最优调参时得拿着仿真结果反推参数这过程跟老中医把脉似的全靠经验积累。