跳到主内容

v0.34.0 版本说明

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-adapteneros-adapt-topologyeneros-adapt-balanceeneros-adapt-strategyeneros-adapt-executor 五个新 crate 实现。

关键数据

指标数值说明
调度策略计算延迟45ms1000 节点
拓扑变更响应< 200ms策略重算
新能源消纳率提升8.3%对比固定策略
线路负载均衡度0.92Gini 系数
新增 Crate6调度相关
新增测试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-balance Gini 系数计算在单线路场景下除零错误(#3416)
  • 修复 eneros-adapt-strategy 策略选择器在高新能源比例下频繁切换的问题(#3422)
  • 修复 eneros-adapt-executor 爬坡率限制在多设备并发时未正确应用的问题(#3428)

破坏性变更

  • AdaptiveScheduler::optimize:返回类型从 Schedule 改为 Result<Schedule>
  • Strategy trait:新增 evaluate 方法,需实现效果评估
  • Executor::execute:参数从 &Schedule 改为 &SchedulePlan

升级指南

  1. 更新 Cargo.toml 中的 eneros 依赖至 0.34.0
  2. 运行 eneros adapt init 初始化自适应调度配置
  3. eneros.toml 中配置调度策略与安全参数
  4. 参考 eneros adapt benchmark 评估新旧策略效果

致谢

感谢 30 位贡献者提交的 450+ 个 commit,以及调度自动化专家提供的策略验证。