微电网作为分布式能源系统的重要组成部分,其经济调度问题一直备受关注。与传统电网不同,微网中风电、光伏等可再生能源占比高,这些能源的间歇性和波动性给调度决策带来了巨大挑战。以风电为例,风速的随机变化会导致功率输出在短时间内出现剧烈波动,这种不确定性如果处理不当,轻则影响经济性,重则威胁系统安全。
在实际工程中,我们通常采用随机优化方法来应对这种不确定性。其核心思路是通过概率分布描述不确定性因素(如风电出力、光伏出力、负荷需求),然后生成大量可能的场景,最后通过优化算法找到在这些场景下都表现良好的调度方案。这种方法的关键在于两点:一是如何准确描述不确定性因素的概率特性,二是如何高效生成和筛选代表性场景。
负荷需求的变化通常服从正态分布,这是由中心极限定理决定的。在Matlab中,我们可以方便地使用normpdf函数来建立负荷的概率模型:
matlab复制% 负荷正态分布建模示例
load_mu = 500; % 平均负荷(kW)
load_sigma = 50; % 标准差(kW)
x = 300:1:700;
pdf_load = normpdf(x, load_mu, load_sigma);
figure;
plot(x, pdf_load, 'LineWidth', 2);
xlabel('负荷功率 (kW)');
ylabel('概率密度');
title('负荷需求正态分布');
grid on;
在实际项目中,我们需要根据历史数据来估计μ和σ参数。通常做法是:
注意:负荷的统计特性会随时间变化,建议每季度重新校准模型参数,特别是在商业区或工业区等负荷模式易变的场景。
风速分布通常呈现右偏特性,韦布尔分布因其灵活性成为首选模型。其概率密度函数为:
f(x) = (k/c)(x/c)^(k-1)exp(-(x/c)^k)
其中k是形状参数,c是尺度参数。在Matlab中实现如下:
matlab复制% 风速韦布尔分布建模
k = 2.5; % 形状参数
c = 8; % 尺度参数(m/s)
v = 0:0.1:25;
pdf_wind = wblpdf(v, c, k);
figure;
plot(v, pdf_wind, 'LineWidth', 2);
xlabel('风速 (m/s)');
ylabel('概率密度');
title('风速韦布尔分布');
grid on;
风电功率与风速的关系通常用分段函数表示:
在实际项目中,获取准确的参数需要:
拉丁超立方采样(LHS)是一种分层抽样技术,其核心思想是将每个输入变量的范围划分为等概率区间,然后在每个区间内随机取样,确保所有变量组合空间都被均匀覆盖。
matlab复制% 改进的LHS实现
n = 1000; % 场景数量
d = 3; % 变量维度(风电、光伏、负荷)
samples = zeros(n,d);
for i = 1:d
samples(:,i) = norminv((randperm(n)' - rand(n,1))/n, mu(i), sigma(i));
end
% 可视化前两个维度
figure;
scatter(samples(:,1), samples(:,2), 'filled');
xlabel('风电出力 (kW)');
ylabel('光伏出力 (kW)');
title('LHS生成场景分布');
相比简单随机抽样,LHS的优势在于:
实际中风电、光伏和负荷之间存在相关性,简单独立采样会导致场景不真实。解决方案是采用Cholesky分解引入相关性:
matlab复制% 考虑相关性的LHS
R = [1.0 0.6 -0.3;
0.6 1.0 -0.2;
-0.3 -0.2 1.0]; % 相关系数矩阵
L = chol(R, 'lower');
correlated_samples = samples * L';
% 对比相关性
subplot(1,2,1);
scatter(samples(:,1), samples(:,2));
title('独立采样');
subplot(1,2,2);
scatter(correlated_samples(:,1), correlated_samples(:,2));
title('考虑相关性');
实际工程中,相关系数需要通过历史数据分析获得,通常采用Pearson相关系数或Spearman秩相关系数。
快速前代法(Fast Forward Selection)的核心思想是迭代选择最具代表性的场景,具体步骤:
matlab复制function [reduced_scenarios, weights] = fast_forward(original_scenarios, K)
% 输入:original_scenarios - 原始场景矩阵(n×d)
% K - 要保留的场景数
% 输出:reduced_scenarios - 削减后场景
% weights - 场景权重
[n, d] = size(original_scenarios);
reduced_scenarios = zeros(K, d);
weights = zeros(K, 1);
% 初始化:选择概率密度最大的场景
[~, idx] = max(prod(normpdf(original_scenarios), 2));
reduced_scenarios(1,:) = original_scenarios(idx,:);
weights(1) = 1;
original_scenarios(idx,:) = [];
for k = 2:K
distances = pdist2(original_scenarios, reduced_scenarios(1:k-1,:));
min_distances = min(distances, [], 2);
[~, idx] = max(min_distances);
reduced_scenarios(k,:) = original_scenarios(idx,:);
weights(k) = sum(exp(-min_distances/mean(min_distances)));
original_scenarios(idx,:) = [];
end
weights = weights/sum(weights);
end
削减后的场景集需要评估其代表性,常用指标:
matlab复制% 评估场景削减质量
full_mean = mean(full_scenarios);
reduced_mean = reduced_scenarios' * weights;
full_cov = cov(full_scenarios);
reduced_cov = zeros(size(full_cov));
for i = 1:size(reduced_scenarios,1)
reduced_cov = reduced_cov + weights(i)*(reduced_scenarios(i,:)'-reduced_mean)*...
(reduced_scenarios(i,:)'-reduced_mean)';
end
disp(['均值误差:', num2str(norm(full_mean - reduced_mean))]);
disp(['协方差误差:', num2str(norm(full_cov - reduced_cov, 'fro'))]);
工程经验:通常保留50-100个场景即可在计算效率和精度间取得良好平衡。对于特别复杂的系统,可以考虑两阶段削减:先用快速方法粗削减,再用精确方法细调。
微网动态经济调度通常采用两阶段随机优化:
数学模型简化为:
min Σ(cᵢxᵢ) + E[Q(x,ξ)]
s.t. Ax ≤ b
x ∈ X
其中Q(x,ξ)是第二阶段问题的值函数。
matlab复制% 基于场景的随机优化示例
scenario_weights = weights; % 来自场景削减
n_scenarios = size(reduced_scenarios,1);
% 定义优化变量
x = optimvar('x', n_generators, 'LowerBound', 0);
y = optimvar('y', n_generators, n_scenarios, 'LowerBound', 0);
% 构建优化问题
prob = optimproblem;
% 目标函数
cost = sum(startup_cost.*u + gen_cost.*x);
for s = 1:n_scenarios
cost = cost + scenario_weights(s)*sum(adjust_cost.*y(:,s));
end
prob.Objective = cost;
% 约束条件
prob.Constraints.power_balance = sum(x) == sum(reduced_scenarios(s,1:3));
for s = 1:n_scenarios
prob.Constraints.(['adjust_' num2str(s)]) = ...
sum(x + y(:,s)) == sum(reduced_scenarios(s,:));
end
% 求解
options = optimoptions('fmincon', 'Display', 'iter');
[sol, fval] = solve(prob, 'Options', options);
成本系数设置:
约束条件处理:
求解器选择:
问题表现:
解决方案:
问题表现:
解决方案:
问题表现:
解决方案:
在实际项目中,我们通常会建立完整的测试验证流程:
微网动态经济调度是一个复杂的系统工程问题,场景生成与削减只是其中的关键技术环节之一。根据我们在多个微网项目的实施经验,成功的调度系统需要将先进算法与工程实践紧密结合,同时考虑当地电网政策、用户需求等实际因素。建议在实际应用中采用迭代开发的方式,先建立基础模型,再逐步加入更多细节和优化。