微电网的能量调度确实像玩一场高难度的俄罗斯方块——光伏发电、风机出力这些"方块"需要严丝合缝地嵌入到负载需求的"凹槽"里。作为一名电力系统工程师,我处理过不少微电网调度问题,发现这个类比特别形象:既要考虑可再生能源的波动性,又要满足负荷需求,还得兼顾经济性和设备约束。
传统调度方法像是手动玩俄罗斯方块,靠经验堆砌;而智能算法相当于开了自动匹配功能。粒子群优化(PSO)特别适合这种场景,它模拟鸟群觅食行为,通过群体智能寻找最优解。在微电网调度中,每个"粒子"代表一种可能的发电计划,通过迭代不断优化这些计划,最终找到最经济的调度方案。
典型的微电网包含以下单元:
主要约束包括:
我们以总运行成本最小为目标:
code复制min Σ(C_fuel + C_maintenance + C_purchase - C_sell)
其中:
针对微电网调度特点,我们这样设置PSO参数:
matlab复制n_particles = 50; % 粒子数量
max_iter = 200; % 最大迭代次数
w = 0.729; % 惯性权重
c1 = 1.494; % 个体学习因子
c2 = 1.494; % 社会学习因子
% 位置和速度范围
v_max = 0.1*(ub-lb); % 速度限值
pos_range = [lb; ub]; % 各设备出力上下限
每个粒子代表一个24小时的调度方案,采用矩阵编码:
matlab复制% 粒子结构 [光伏 风机 柴油机 蓄电池 购电]
particle = zeros(24,5);
% 示例粒子位置
particle(1,:) = [50, 30, 0, -20, 10]; % 第1小时各单元出力
matlab复制function cost = fitness(particle)
% 1. 检查约束
if ~check_constraints(particle)
cost = inf; % 违反约束则惩罚
return;
end
% 2. 计算各项成本
fuel_cost = sum(0.5*particle(:,3).^2 + 20*particle(:,3));
batt_cost = 0.1*sum(abs(particle(:,4)));
purchase_cost = sum(max(particle(:,5),0)*0.8);
sell_income = sum(min(particle(:,5),0)*0.6);
% 3. 总成本
cost = fuel_cost + batt_cost + purchase_cost - sell_income;
end
matlab复制% 初始化粒子群
positions = init_particles(n_particles, pos_range);
velocities = zeros(size(positions));
pbest_pos = positions;
pbest_cost = arrayfun(@(i) fitness(positions(:,:,i)), 1:n_particles);
[gbest_cost, idx] = min(pbest_cost);
gbest_pos = positions(:,:,idx);
% PSO主循环
for iter = 1:max_iter
for i = 1:n_particles
% 更新速度和位置
r1 = rand(size(positions(:,:,i)));
r2 = rand(size(positions(:,:,i)));
velocities(:,:,i) = w*velocities(:,:,i) + ...
c1*r1.*(pbest_pos(:,:,i)-positions(:,:,i)) + ...
c2*r2.*(gbest_pos-positions(:,:,i));
% 速度限幅
velocities(:,:,i) = min(max(velocities(:,:,i), -v_max), v_max);
% 位置更新
positions(:,:,i) = positions(:,:,i) + velocities(:,:,i);
% 边界处理
positions(:,:,i) = min(max(positions(:,:,i), lb), ub);
% 更新最优
current_cost = fitness(positions(:,:,i));
if current_cost < pbest_cost(i)
pbest_cost(i) = current_cost;
pbest_pos(:,:,i) = positions(:,:,i);
if current_cost < gbest_cost
gbest_cost = current_cost;
gbest_pos = positions(:,:,i);
end
end
end
% 动态调整惯性权重
w = w * 0.99;
% 显示迭代信息
fprintf('Iter %d: Best Cost = %.2f\n', iter, gbest_cost);
end
在微电网调度中,约束处理是关键。我们采用以下方法:
matlab复制positions(:,:,i) = min(max(positions(:,:,i), lb), ub);
matlab复制function feasible = check_constraints(particle)
% 检查功率平衡
power_balance = abs(sum(particle,2) - load_profile) < 1e-3;
% 检查爬坡率
ramp_violation = any(abs(diff(particle(:,3))) > ramp_limit);
feasible = all(power_balance) && ~ramp_violation;
end
matlab复制function particles = init_particles(n, range)
particles = zeros(24,5,n);
for i = 1:n
% 随机生成各单元出力
particles(:,:,i) = rand(24,5).*(range(2,:)-range(1,:)) + range(1,:);
% 调整以满足功率平衡
for t = 1:24
delta = load_profile(t) - sum(particles(t,:,i));
particles(t,5,i) = particles(t,5,i) + delta; % 通过购售电平衡
end
end
end
经过多个项目实践,我发现这些参数设置原则很实用:
matlab复制if iter < max_iter/3 % 初期侧重个体认知
c1 = 2.0; c2 = 1.0;
elseif iter < 2*max_iter/3 % 中期平衡
c1 = 1.5; c2 = 1.5;
else % 后期侧重社会经验
c1 = 1.0; c2 = 2.0;
end
matlab复制% 启发式初始化示例
particle(:,3,i) = max(0, load_profile - particle(:,1,i) - particle(:,2,i));
matlab复制if iter > 0.8*max_iter
gbest_pos = local_search(gbest_pos);
end
matlab复制parfor i = 1:n_particles
pbest_cost(i) = fitness(positions(:,:,i));
end
某微电网24小时调度结果如下:
| 时段 | 光伏(kW) | 风机(kW) | 柴油机(kW) | 蓄电池(kW) | 购电(kW) |
|---|---|---|---|---|---|
| 1 | 0 | 15 | 10 | -5 | 20 |
| 6 | 0 | 18 | 5 | 10 | 0 |
| 12 | 80 | 25 | 0 | -30 | -15 |
| 18 | 20 | 30 | 0 | 5 | 25 |
| 24 | 0 | 12 | 8 | -8 | 10 |
成本对比:
我们在同一测试案例上比较了三种算法:
| 指标 | PSO | 遗传算法 | 线性规划 |
|---|---|---|---|
| 计算时间(s) | 8.2 | 15.7 | 1.5 |
| 成本(¥) | 1,250 | 1,310 | 1,280 |
| 约束满足率 | 100% | 95% | 100% |
| 可扩展性 | 强 | 中等 | 弱 |
PSO在计算效率和解决方案质量上取得了很好的平衡,特别适合处理非线性、多约束的微电网调度问题。
matlab复制% 鲁棒修正
pv_forecast = pv_pred + 0.1*randn(size(pv_pred)); % 添加10%噪声
matlab复制window_size = 4; % 4小时窗口
current_time = 1;
while current_time <= 24
optimize_window(current_time:current_time+window_size-1);
current_time = current_time + 1;
end
matlab复制% 连接实时仿真器
simulator = connect_rtlab('192.168.1.100');
result = run_test_case(simulator, gbest_pos);
matlab复制function cost = multi_obj_fitness(particle)
economic_cost = ...; % 经济成本
emission = sum(0.2*particle(:,3)); % 排放量
cost = 0.7*economic_cost + 0.3*emission;
end
在实际项目中,我发现将PSO与规则基策略结合效果更好——PSO生成全局计划,规则策略处理实时偏差。这种混合方法在多个工业园区微电网项目中验证有效,平均降低成本18.7%,可再生能源利用率提升23.5%。