EnerOS v0.34.0
发布日期:2026-03-21
版本代号:Adapt
Git Tag:v0.34.0
支持状态:稳定(Stable)
Crate 总数:72(新增 6 个)
测试用例数:9300+(新增 700)
概述
EnerOS v0.34.0「Adapt」是自适应调度专题版本,将电网调度从「预设策略 + 人工干预」升级为「拓扑感知 + 实时优化 + 自动调整」的自适应调度体系。本版本基于 v0.31.0 的 AI Agent 能力与 v0.32.0 的 ML 运行时,构建了能够根据电网运行状态、负荷变化、新能源波动动态调整调度策略的智能调度内核。
Adapt 版本的核心设计哲学是「拓扑即策略」——调度策略不再是固定的规则表,而是从电网拓扑、设备状态、约束边界中实时推导出来的。当拓扑发生变化(开关操作、设备投退、新能源接入)时,调度策略会自动重新计算并下发,无需人工重新配置。这使得 EnerOS 能够应对高比例新能源接入带来的拓扑频繁变更与潮流双向流动。
本版本引入五大核心能力:自适应调度引擎、动态拓扑感知、负载均衡器、优化调度策略库、实时调整执行器。所有能力均通过 eneros-adapt、eneros-adapt-topology、eneros-adapt-balance、eneros-adapt-strategy、eneros-adapt-executor 五个新 crate 实现。
关键数据
| 指标 | 数值 | 说明 |
|---|---|---|
| 调度策略计算延迟 | 45ms | 1000 节点 |
| 拓扑变更响应 | < 200ms | 策略重算 |
| 新能源消纳率提升 | 8.3% | 对比固定策略 |
| 线路负载均衡度 | 0.92 | Gini 系数 |
| 新增 Crate | 6 | 调度相关 |
| 新增测试 | 700+ | 含 110 个端到端 |
新特性
1. 自适应调度引擎
新增 eneros-adapt crate,提供内核原生的自适应调度引擎,替代传统的固定策略调度器。引擎以电网拓扑、实时潮流、负荷预测、约束边界为输入,输出最优的发电出力分配与潮流控制指令。
调度优化目标
| 目标 | 权重 | 说明 |
|---|---|---|
| 经济性 | 30% | 发电成本最小化 |
| 安全性 | 25% | 约束裕度最大化 |
| 新能源消纳 | 20% | 弃风弃光最小化 |
| 网损 | 15% | 传输损耗最小化 |
| 均衡性 | 10% | 线路负载均衡 |
调度引擎 API
use eneros_adapt::{AdaptiveScheduler, ScheduleConfig, Objective};
let scheduler = AdaptiveScheduler::new(&ctx)
.config(ScheduleConfig {
objective: Objective::MultiObjective {
economic: 0.30,
safety: 0.25,
renewable: 0.20,
loss: 0.15,
balance: 0.10,
},
horizon: Duration::minutes(15),
resolution: Duration::minutes(5),
solver: Solver::InteriorPoint,
max_iter: 200,
tolerance: 1e-6,
})
.build().await?;
// 执行自适应调度
let schedule = scheduler.optimize().await?;
println!("调度方案:");
for unit in &schedule.generator_dispatch {
println!(" {} -> {:.1} MW (成本: {:.2} 元/MWh)",
unit.bus_id, unit.target_mw, unit.cost);
}
println!("总发电成本: {:.0} 元", schedule.total_cost);
println!("新能源消纳率: {:.1}%", schedule.renewable_utilization * 100.0);
println!("最大线路负载率: {:.1}%", schedule.max_line_loading * 100.0);
调度周期
| 周期 | 时间尺度 | 触发条件 | 优化范围 |
|---|---|---|---|
| 超短期 | 5-15 分钟 | 实时 | 全网 |
| 短期 | 15 分钟-4 小时 | 定时/事件 | 电气岛 |
| 中期 | 4-24 小时 | 定时 | 区域 |
| 长期 | 1-7 天 | 日级 | 系统 |
2. 动态拓扑感知
新增 eneros-adapt-topology crate,使调度引擎能够实时感知拓扑变更并自动重算策略。当开关操作、设备投退、故障隔离导致拓扑变化时,调度策略在 200ms 内完成重算与下发。
拓扑变更响应
use eneros_adapt_topology::{TopologyAwareScheduler, TopologyEvent};
let topo_scheduler = TopologyAwareScheduler::new(&scheduler, &network);
// 订阅拓扑变更事件
network.on_event(|event: TopologyEvent| {
match event {
TopologyEvent::SwitchOpened(switch_id) => {
// 开关断开,可能改变电气岛结构
topo_scheduler.trigger_recompute(
Reason::TopologyChange,
Priority::High,
);
}
TopologyEvent::GeneratorTripped(bus_id) => {
// 发电机跳闸,紧急重新调度
topo_scheduler.trigger_recompute(
Reason::GeneratorLoss(bus_id),
Priority::Critical,
);
}
TopologyEvent::RenewableSurge(bus_id, mw) => {
// 新能源出力突增,调整消纳策略
topo_scheduler.trigger_recompute(
Reason::RenewableSpike(bus_id, mw),
Priority::Medium,
);
}
_ => {}
}
});
电气岛感知调度
// 调度引擎感知电气岛边界,避免跨岛调度
let islands = network.topology().find_islands();
for island in &islands {
let island_schedule = scheduler.optimize_island(island).await?;
// 岛内自平衡,必要时通过联络线支援
}
拓扑变更场景
| 场景 | 响应策略 | 延迟 |
|---|---|---|
| 开关操作 | 重算电气岛、重平衡 | < 200ms |
| 发电机跳闸 | 紧急切负荷/调配备用 | < 100ms |
| 线路故障 | 故障隔离、负荷转移 | < 150ms |
| 新能源接入 | 更新消纳策略 | < 500ms |
| 设备投退 | 调整可调资源池 | < 300ms |
3. 负载均衡器
新增 eneros-adapt-balance crate,在调度优化中显式考虑线路负载均衡,避免单一线路过载而其他线路轻载。
均衡算法
| 算法 | 原理 | 适用场景 |
|---|---|---|
| 均匀分配 | 按线路容量比例分配 | 常规 |
| 加权最小负载 | 选择剩余容量最大的路径 | 实时 |
| 拓扑优化 | 调整开关状态改变潮流分布 | 计划 |
| 灵敏度法 | 基于发电转移分布因子 | 优化 |
负载均衡 API
use eneros_adapt_balance::{LoadBalancer, BalanceConfig, BalanceMetric};
let balancer = LoadBalancer::new(&ctx)
.config(BalanceConfig {
metric: BalanceMetric::GiniCoefficient,
target: 0.90, // 目标 Gini 系数
max_loading: 0.85, // 单线最大负载率
sensitivity: true, // 启用灵敏度分析
})
.build().await?;
// 计算当前均衡度
let balance = balancer.evaluate(&network).await?;
println!("当前 Gini 系数: {:.3}", balance.gini);
println!("最大负载率: {:.1}%", balance.max_loading * 100.0);
println!("过载线路: {:?}", balance.overloaded_lines);
// 生成均衡建议
let suggestions = balancer.suggest(&network).await?;
for s in &suggestions {
println!("建议: {} (预计改善 {:.1}%)",
s.description, s.improvement);
}
4. 优化调度策略库
新增 eneros-adapt-strategy crate,内置多种电力领域经典调度策略,支持策略组合与动态切换。
策略矩阵
| 策略 | 类型 | 适用场景 | 计算复杂度 |
|---|---|---|---|
| 经济调度(ED) | 经典 | 常规运行 | 低 |
| 最优潮流(OPF) | 经典 | 精细化运行 | 中 |
| 联合调度(UC) | 经典 | 日前计划 | 高 |
| 深度强化学习 | AI | 复杂场景 | 中(推理) |
| 模糊控制 | 智能 | 不确定场景 | 低 |
| 多目标帕累托 | 优化 | 决策支持 | 高 |
策略选择与切换
use eneros_adapt_strategy::{StrategyRegistry, Strategy, StrategySelector};
let mut registry = StrategyRegistry::new();
registry.register(Strategy::economic_dispatch())?;
registry.register(Strategy::optimal_power_flow())?;
registry.register(Strategy::reinforcement_learning("rl-dqn-v2"))?;
registry.register(Strategy::multi_objective_pareto())?;
// 动态策略选择器
let selector = StrategySelector::new()
.rule(|ctx| {
if ctx.renewable_ratio > 0.4 {
Strategy::reinforcement_learning("rl-dqn-v2") // 高新能源比例用 RL
} else if ctx.has_congestion {
Strategy::optimal_power_flow() // 拥塞时用 OPF
} else {
Strategy::economic_dispatch() // 常规用 ED
}
});
// 自动选择并执行
let strategy = selector.select(&ctx).await?;
let schedule = strategy.execute(&ctx).await?;
策略评估对比
// 对比不同策略的效果
let comparison = registry.compare_all(&ctx).await?;
println!("策略对比:");
println!("{:<20} {:<10} {:<10} {:<10} {:<10}",
"策略", "成本(元)", "消纳率", "网损", "均衡度");
for result in &comparison {
println!("{:<20} {:<10.0} {:<10.1}% {:<10.2} {:<10.3}",
result.strategy_name, result.cost,
result.renewable_pct, result.loss_mw, result.gini);
}
5. 实时调整执行器
新增 eneros-adapt-executor crate,将调度策略转化为可执行的设备控制指令,并实时监控执行效果形成闭环。
执行闭环
use eneros_adapt_executor::{Executor, ExecutionResult};
let executor = Executor::new(&ctx)
.max_ramp_rate(0.05) // 每分钟最大调整 5%
.dead_band(0.02) // 2% 死区
.feedback_loop(true) // 启用闭环反馈
.build().await?;
// 执行调度方案
let result = executor.execute(&schedule).await?;
match result {
ExecutionResult::Success => {
println!("调度方案执行完成");
}
ExecutionResult::Partial(failures) => {
for f in &failures {
println!("设备 {} 执行失败: {}", f.bus_id, f.reason);
}
// 自动回退到上一可行方案
executor.rollback().await?;
}
ExecutionResult::Rejected(reason) => {
println!("方案被约束引擎拒绝: {}", reason);
}
}
执行安全约束
| 约束 | 说明 | 默认值 |
|---|---|---|
| 爬坡率 | 发电机出力变化速率 | 5%/min |
| 死区 | 最小调整量 | 2% |
| 延时 | 设备动作间隔 | 30s |
| 并发 | 同时调整设备数 | 10 |
| 校验 | 执行前约束预检 | 强制 |
闭环反馈
// 执行后监控效果,偏差过大时自动修正
executor.on_feedback(|feedback| {
let deviation = (feedback.actual - feedback.target).abs() / feedback.target;
if deviation > 0.05 {
// 偏差超过 5%,触发修正
executor.correct(feedback).await?;
}
}).await?;
改进
- 潮流计算:牛顿法求解器增加稀疏矩阵预处理,118 节点计算从 32ms 降至 18ms
- 约束引擎:新增暂态稳定约束,支持 3 秒动态安全校验
- 时序引擎:实时数据写入支持 WAL 异步刷盘,吞吐提升 30%
- Agent 运行时:调度 Agent 支持优先级抢占,紧急任务可中断低优先级
- 可观测性:调度链路全流程追踪,支持方案回放与对比
Bug 修复
- 修复
eneros-adapt在多电气岛场景下岛间功率交换计算错误的问题(#3404) - 修复
eneros-adapt-topology拓扑变更事件在并发场景下丢失的问题(#3410) - 修复
eneros-adapt-balanceGini 系数计算在单线路场景下除零错误(#3416) - 修复
eneros-adapt-strategy策略选择器在高新能源比例下频繁切换的问题(#3422) - 修复
eneros-adapt-executor爬坡率限制在多设备并发时未正确应用的问题(#3428)
破坏性变更
AdaptiveScheduler::optimize:返回类型从Schedule改为Result<Schedule>Strategytrait:新增evaluate方法,需实现效果评估Executor::execute:参数从&Schedule改为&SchedulePlan
升级指南
- 更新
Cargo.toml中的eneros依赖至0.34.0 - 运行
eneros adapt init初始化自适应调度配置 - 在
eneros.toml中配置调度策略与安全参数 - 参考
eneros adapt benchmark评估新旧策略效果
致谢
感谢 30 位贡献者提交的 450+ 个 commit,以及调度自动化专家提供的策略验证。