微电网作为分布式能源系统的重要组成部分,其优化调度直接关系到运行经济性和可靠性。基于YALMIP工具箱构建的微电网优化调度模型,通过数学建模将复杂的调度问题转化为可求解的优化问题,为实际工程应用提供了有力工具。
这个模型的核心价值在于:
在YALMIP中,我们首先需要定义决策变量。这些变量代表了调度过程中需要优化的关键参数:
matlab复制% 时间周期定义(假设24小时调度)
T = 24;
% 电网交互功率(双向)
P_grid = sdpvar(T,1,'full');
% 蓄电池充电功率(单向)
P_bat_charge = sdpvar(T,1,'full');
% 蓄电池放电功率(单向)
P_bat_discharge = sdpvar(T,1,'full');
% 电池荷电状态(State of Charge)
SoC = sdpvar(T,1,'full');
变量定义时的几个关键考虑:
'full'参数确保变量是连续型而非整数型模型需要输入以下关键参数:
matlab复制% 分时电价设置(示例)
buy_price = [0.5*ones(8,1); % 谷时段(0-8点)
1.2*ones(8,1); % 峰时段(8-16点)
0.8*ones(8,1)]; % 平时段(16-24点)
% 售电价格(固定值)
sell_price = 0.7;
% 电池参数
battery_capacity = 30; % kWh
max_charge_rate = 5; % kW
max_discharge_rate = 5; % kW
charge_efficiency = 0.9;
discharge_efficiency = 0.9;
目标函数需要最小化系统总成本,包含三个主要部分:
matlab复制% 购电成本计算(仅当P_grid>0时计入)
purchase_cost = sum(buy_price.*P_grid.*(P_grid>0));
% 售电收入计算(仅当P_grid<0时计入)
sale_income = sum(sell_price*P_grid.*(P_grid<0));
% 电池损耗成本(简化模型)
battery_degradation = 0.1*sum(P_bat_charge + P_bat_discharge);
% 总目标函数
total_cost = purchase_cost - sale_income + battery_degradation;
在实际建模中,我们发现:
.*(P_grid>0)比引入二进制变量更高效蓄电池的物理特性需要通过约束条件精确描述:
matlab复制constraints = [];
% 初始状态约束
constraints = [constraints, SoC(1) == 20 + ...
charge_efficiency*P_bat_charge(1) - ...
P_bat_discharge(1)/discharge_efficiency];
% 动态状态更新
for t = 2:T
constraints = [constraints,
SoC(t) == SoC(t-1) + ...
charge_efficiency*P_bat_charge(t) - ...
P_bat_discharge(t)/discharge_efficiency,
% SOC上下限约束
SoC(t) >= 0.2*battery_capacity, % 最小20%容量
SoC(t) <= 0.9*battery_capacity]; % 最大90%容量
end
确保蓄电池不会同时充放电:
matlab复制% 充放电功率非负
constraints = [constraints,
P_bat_charge >= 0,
P_bat_discharge >= 0];
% 互斥约束(非线性)
constraints = [constraints,
P_bat_charge.*P_bat_discharge == 0];
% 充放电功率限制
constraints = [constraints,
P_bat_charge <= max_charge_rate,
P_bat_discharge <= max_discharge_rate];
电网连接需要满足物理限制:
matlab复制% 购售电功率限制
constraints = [constraints,
-5 <= P_grid <= 10]; % 最大售电5kW,购电10kW
% 功率平衡约束(假设已知负荷PL和光伏出力PPV)
constraints = [constraints,
P_grid + P_bat_discharge - P_bat_charge + PPV == PL];
matlab复制% 优化选项设置
options = sdpsettings('verbose',1,'solver','cplex');
% 问题求解
optimize(constraints, total_cost, options);
% 结果提取
P_grid_opt = value(P_grid);
P_charge_opt = value(P_bat_charge);
P_discharge_opt = value(P_bat_discharge);
SoC_opt = value(SoC);
通过分析24小时调度结果,我们可以观察到:
电价高峰时段(8-16点):
电价低谷时段(0-8点):
经济效益:
不确定性处理:
matlab复制% 鲁棒优化示例
P_load = sdpvar(T,1);
constraints = [constraints,
uncertain(P_load),
P_load >= 0.9*forecast_load,
P_load <= 1.1*forecast_load];
多时间尺度优化:
求解失败分析:
性能优化技巧:
在实际项目应用中,有几个关键经验值得分享:
参数敏感性分析:
代码优化技巧:
matlab复制% 使用向量化操作替代循环
SOC = cumsum([initial_SOC;
charge_eff*P_charge(2:end) - ...
P_discharge(2:end)/discharge_eff]);
可视化实现:
matlab复制figure;
subplot(3,1,1);
plot(P_grid_opt); title('电网交互功率');
subplot(3,1,2);
plot(P_charge_opt,'g'); hold on;
plot(-P_discharge_opt,'r'); title('蓄电池功率');
subplot(3,1,3);
plot(SoC_opt); title('荷电状态');
这套模型经过多个实际微电网项目的验证,在保证精度的同时具有较好的计算效率。对于初学者,建议从简化模型开始,逐步增加复杂性,同时要特别注意约束条件的物理意义和数学表达之间的正确对应关系。