微电网调度这活儿,表面上看就是安排几个发电设备干活,实际上每个环节都暗藏玄机。我去年接手一个海岛微电网项目,光调柴油机和光伏的配合就掉了不少头发——光伏发电看天吃饭,柴油机响应慢还费油,再加上分时电价和储能系统,整个一多维魔方。
遗传算法(GA)在这里的价值就凸显了:不需要求导、能处理离散变量、约束条件随便加。我用MATLAB实现的这套方案,经过三个月的实测调优,最终将运行成本压低了23%。下面就把代码拆碎了讲,重点分享那些官方文档里不会写的实战经验。
柴油机的成本构成最复杂,我们采用二次函数建模:
matlab复制fuel_cost = 0.8 * sum(diesel_power); % 燃料成本线性部分
maintenance = 0.1 * sum(diesel_power.^2); % 非线性维护成本
这里0.8元/度是当前油价,而0.1的二次项系数是通过历史维修记录拟合得到的。实测发现,当柴油机负载率超过80%时,维护成本会呈指数上升,用平方项已经算是简化模型了。
关键经验:柴油机最小出力建议设为额定容量的20%,低于这个值会产生积碳,长期运行反而增加维护成本。
光伏出力处理有个行业潜规则:
matlab复制pv_limit = sum(max(x(:,2)-pv_max',0)); % 弃光惩罚
光伏预测曲线pv_max通常留5%余量,因为:
购电成本的向量化计算是MATLAB的精华:
matlab复制time_price = [ones(1,7)*0.5, ones(1,10)*1.2, ones(1,7)*0.8];
grid_cost = grid_power' * time_price';
这种写法比for循环快20倍以上。注意电价时段划分要严格对应当地电力市场规则,我们遇到过因为少算了一个谷时段,导致整体策略失效的案例。
matlab复制penalty = 1e4*(p_balance_violation + diesel_limit + pv_limit + grid_limit);
这个1e4的系数是通过以下步骤确定的:
血泪教训:曾用1e6导致算法早熟收敛到伪最优解,后来发现当惩罚项超过目标函数100倍时,搜索能力会严重退化。
储能SOC处理是最大难点,我们采用线性约束矩阵:
matlab复制[A,b] = create_Aeq(); % 生成24×72矩阵
这个矩阵的构造逻辑是:
code复制第t时刻的SOC = 第t-1时刻SOC
+ 充电效率*充电功率*Δt
- 放电功率/放电效率*Δt
每个时刻对应一个等式约束,最终形成三对角矩阵。相比罚函数法,这种处理能严格保证SOC连续性。
matlab复制options = optimoptions('ga',...
'PopulationSize',50,... % 24小时问题取变量数的2倍左右
'MaxGenerations',200); % 通常100-300代足够
经过benchmark测试,在Intel i7-1185G7上:
matlab复制'MutationFcn',@mutationadaptfeasible
这个自适应变异算子会:
对比测试显示,比标准变异算子收敛速度快37%,特别是在处理柴油机爬坡约束时表现突出。
症状:前50代成本下降缓慢
解决方法:
matlab复制ub = [50*ones(24,1); pv_max'; 30*ones(24,1)]; % 上界
lb = [10*ones(24,1); zeros(24,1); -30*ones(24,1)]; % 下界
matlab复制'EliteCount',ceil(0.1*options.PopulationSize)
症状:最终解仍存在明显约束违反
排查步骤:
matlab复制'MutationFcn',{@mutationuniform, 0.1} % 变异概率提高到10%
考虑光伏预测误差的鲁棒版本:
matlab复制pv_uncertainty = 0.2; % 20%预测误差
robust_pv = pv_power .* (1 + pv_uncertainty*(2*rand(24,1)-1));
需要在目标函数中增加机会约束,但这会显著增加计算量。
当引入启停决策时,需要混合整数GA:
matlab复制IntCon = 1:24; % 柴油机启停状态
best_solution = ga(..., 'IntCon',IntCon);
这会使得计算时间增加3-5倍,建议先用松弛连续问题测试可行性。
启用多核并行:
matlab复制options.UseParallel = true;
parpool('local',4); % 启动4个工作线程
实测8核CPU可缩短40%运行时间,但要注意内存占用会翻倍。
经过半年多的现场调试,这套算法已在三个离网微电网稳定运行。最大的收获是:理论上的最优解往往不如80分的实用解,特别是在设备老化、天气突变等现实条件下。建议在实际部署时保留10%-15%的调节余量,毕竟再好的算法也斗不过海边突如其来的台风。