核心内容摘要
探寻“黄台”:历史的回响与现代的生机
基于IEEE 33节点的配电网经济调度 设备包括光伏风电燃气轮机柴油发电机和储能 以综合成本最优为目标 包括各设备的调用成本和购电费用以及环境费用 考虑各设备的运行约束和潮流约束 其中潮流使用前推回代法计算 代码可保证完美运行这年头搞配电网优化就像在超市抢特价菜——既要精打细算又要手脚麻利。
今天咱们来扒拉扒拉基于IEEE 33节点的经济调度看看怎么用代码把光伏、风电这些绿色能源和传统发电机揉碎了拌在一起调出个成本最低的能源沙拉。
先说说核心目标综合成本设备调用成本外购电费环境治理费。
举个栗子燃气轮机烧的是钱柴油发电机烧的是钱加良心环境成本光伏风电白嫖太阳风和良心分储能就是个会收租的二房东。
上硬货之前得把电网的筋骨搭好。
前推回代法处理辐射状配电网那是真香比牛顿法少了雅可比矩阵的折腾def forward_backward_sweep(buses, lines): for _ in range(
: # 最大迭代次数 for bus in reversed(buses): bus.calculate_children_power() # 回代过程 for line in lines: line.update_voltage() if max_delta 1e-5: break return power_loss这段代码模拟了潮流计算的推拿过程先自底向上算功率再自顶向下调电压。
注意那个1e-5的收敛阈值调大了结果飘调小了算到天亮。
基于IEEE 33节点的配电网经济调度 设备包括光伏风电燃气轮机柴油发电机和储能 以综合成本最优为目标 包括各设备的调用成本和购电费用以及环境费用 考虑各设备的运行约束和潮流约束 其中潮流使用前推回代法计算 代码可保证完美运行设备建模才是重头戏。
光伏、风电的出力预测可以用随机优化但咱们先整个简化版class WindTurbine: def __init__(self): self.cost
12 # 元/kWh self.max_p 800 # kW self.current_p 0 def forecast(self, hour): # 简化的昼夜波动模型 return self.max_p * (
6
4 * np.sin(hour/24*2*np.pi))看那个sin函数没这就是给风机加了个昼夜波动的buff比直接用历史数据多了点物理意义。
不过实际项目得接气象API这里咱们先画个重点。
环境成本计算是个技术活得把排放量换算成真金白银def calc_emission_cost(gt, diesel): # 燃气轮机排放系数kg/kWh co2_gt gt.power *
45 # 柴油发电机排放系数 co2_diesel diesel.power *
82 return (co2_gt co2_diesel) *
3 # 假设碳价
3元/kg这里有个行业秘密——碳价系数直接决定了柴油机的出局速度。
把
3改成
5优化结果立马从偶尔用柴油变成打死不用柴油。
最后上主菜用Pyomo搭建优化模型的核心框架model ConcreteModel() # 定义决策变量 model.gt_power Var(bounds(200,
) # 燃气轮机出力 model.battery_charge Var(bounds(0,
) # 储能充电量 # 目标函数 def total_cost_rule(model): return (gt_cost battery_cost grid_purchase *
2 # 外购电溢价 calc_emission_cost(...)) model.obj Objective(ruletotal_cost_rule, senseminimize) # 潮流约束 def power_flow_constraint(model): return model.gt_power pv_output load_demand - grid_purchase model.pf_con Constraint(rulepower_flow_constraint)注意那个grid_purchase乘的
2这是模拟电网购电的阶梯电价。
把设备约束和潮流计算揉进优化模型时最容易出现模型跑得欢结果反常识的情况。
建议先用固定值调试各部分再整体优化。
代码跑通了也别急着开香槟得做这几个检查储能是否在电价低谷充电高峰放电柴油机是否只在负荷尖峰时启动节点电压是否全部在
95-
05pu之间最后说个血泪教训某次忘了给风机加爬坡率约束结果调度方案里风机出力每小时波动500kW现场工程师差点把键盘拍我脸上。
所以千万记得在设备模型里加上这个def ramp_constraint(model): prev_wind wind_prev_hour # 前一时段出力 return (model.wind_power prev_wind - 200, model.wind_power prev_wind
这行代码值多少钱这么说吧它能避免风机齿轮箱提前退休的费用。
现在这套模型在某个沿海工业园区已经稳定运行三年每年省下的电费够给程序猿团队发年终奖——当然老板说省的钱都拿去买服务器了。