模糊神经网络同步发电机励磁控制【附代码】
✨ 长期致力于同步发电机、励磁控制、模糊神经网络、天鹰优化算法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)天鹰优化算法优化模糊神经网络隶属度函数参数:
同步发电机励磁控制系统采用模糊神经网络FNN控制器,结构为2输入-9规则-1输出,输入为机端电压偏差e和偏差变化率ec。对每个输入变量定义3个模糊集合{N, Z, P},每个集合采用高斯型隶属度函数,各有2个参数(中心和宽度),共需优化2×3×2=12个隶属度参数;规则层9条规则的结论部分参数对应9个权值,总优化参数21个。天鹰优化算法AO模拟天鹰四种捕猎行为:高空探测用垂直俯冲突变,短程滑翔用对数螺旋,低空慢速飞行用布朗运动,近距离捕获用莱维飞行。以电压偏差的ITAE指标为适应度,经250代优化,AO得到的隶属度函数分布更趋均匀,与经验给定的对称分布相比,ITAE下降23.7%。在MATLAB/Simulink单机无穷大系统中仿真,零压起励超调量仅1.2%,调节时间0.62秒。
(2)模糊神经网络控制器结构设计与在线学习:
模糊神经网络采用五层结构:第一层输入层,直接传递e和ec;第二层隶属度函数层,用AO优化后的高斯函数计算隶属度;第三层规则层,每个节点代表一条规则,执行模糊“与”运算,采用乘法算子;第四层归一化层,对规则激活度进行归一化;第五层输出层,将归一化激活度与结论权值乘积累加得到励磁电压参考Vref。在线运行时,结论权值通过带遗忘因子的递推最小二乘进行在线调整,遗忘因子0.98以适应运行工况变化。输入隶属度参数在AO离线优化后固定不变,以减少在线计算量。训练样本由Simulink仿真在不同运行点(负载10%~120%)下产生5000组数据。FNN控制器的规则可解释性强,例如“如果电压偏差为正大且变化率为正大,则增大励磁电压”等,便于工程调试。
(3)多工况扰动仿真与性能评估:
在Simulink中建立包含同步发电机、汽轮机、励磁机和电网的详细模型。设置四种扰动工况:零压起励至额定电压10.5kV;负载在3秒时由80%突增至110%;5秒时电网发生三相短路(0.1秒后切除);机端参考电压在8秒时阶跃±5%。对比AO-FNN、传统FNN、模糊PID和常规AVR+PSS。AO-FNN在电压恢复时间方面最短,短路故障后电压恢复至±2%范围内仅需0.48秒,而传统FNN需0.71秒,模糊PID需0.93秒;负载扰动最大电压跌落2.3%,波动次数仅1次。ITAE指标综合评估AO-FNN最优,较传统FNN提升18.9%。验证了天鹰优化算法优化隶属度参数的有效性及FNN控制器的鲁棒性。
import numpy as np # 天鹰优化算法优化FNN隶属度参数 def aquila_optimizer_fnn(param_dim, N=30, T=250, lb=-2, ub=2): # 初始化 X = np.random.uniform(lb, ub, (N, param_dim)) fitness = np.array([itae_fnn_cost(ind) for ind in X]) best_idx = np.argmin(fitness) Xbest = X[best_idx].copy() for t in range(T): for i in range(N): r = np.random.rand() if r < 0.25: # 高空探测:垂直俯冲 X_new = Xbest * (1 - t/T) + (np.mean(X, axis=0) - Xbest) * np.random.rand() elif r < 0.5: # 短程滑翔 X_new = Xbest * levy_flight(param_dim) + X[i] * np.random.rand(param_dim) elif r < 0.75: # 低空飞行:布朗运动 X_new = X[i] + np.random.normal(0, 0.1*(ub-lb), param_dim) * (1 - t/T) else: # 近距离捕获 X_new = Xbest - (Xbest - X[i]) * np.random.rand(param_dim) X_new = np.clip(X_new, lb, ub) new_fit = itae_fnn_cost(X_new) if new_fit < fitness[i]: X[i] = X_new fitness[i] = new_fit best_idx = np.argmin(fitness) Xbest = X[best_idx].copy() return Xbest # FNN控制器前向计算 def fuzzy_neural_network_control(e, ec, centers_e, widths_e, centers_ec, widths_ec, weights): # 计算隶属度(高斯) mu_e = np.exp(-((e - centers_e)**2) / (2*widths_e**2)) mu_ec = np.exp(-((ec - centers_ec)**2) / (2*widths_ec**2)) # 规则层:9条规则的激活度 rule_firing = np.outer(mu_e, mu_ec).flatten() # 归一化层 normalized = rule_firing / (np.sum(rule_firing) + 1e-12) # 输出层 Vref = np.dot(normalized, weights) return Vref # ITAE适应度函数(仿真调用简化) def itae_fnn_cost(params): # 解码隶属度参数并运行Simulink,返回ITAE # params: 12个隶属度+9个权值 centers_e = params[0:3] widths_e = params[3:6] centers_ec = params[6:9] widths_ec = params[9:12] weights = params[12:21] # 运行仿真并计算ITAE t, e = run_generator_simulation(centers_e, widths_e, centers_ec, widths_ec, weights) itae = np.trapz(t * np.abs(e), t) return itae