MindOpt——优化虚拟电厂智能调度问题(一)

简介: 近年来,在实现“双碳”目标的道路上,以风、光为代表的可再生能源作为缓解能源压力、促进可持续发展的重要途径广受关注。虚拟电厂作为一种区域性多能源聚合形式,实现了可再生能源大量接入电力系统运行,推动城市能源系统绿色高效发展。研究大规模常态化运行的虚拟电厂关键技术成为亟待解决的问题。分布式光伏、分布式储能及可控负荷等灵活性资源具有容量小、资源种类多、数量庞大等特点,难以直接参与电网互动运行。虚拟电厂有效聚合电源、负荷、储能等各类资源,参与电力市场,响应价格信号,为电网提供调峰、调频、调压与备用等辅助服务。

在本系列中,我们将介绍虚拟电厂多个实际应用场景中的智能决策,包括智慧楼宇、零碳园区等。

案例来源:https://opt.aliyun.com/example/aqIv2uBnQZfe/src/01_%E5%85%89%E5%82%A8%E8%8D%B7%E7%BB%8F%E6%B5%8E%E6%80%A7%E8%B0%83%E5%BA%A6.ipynb

案例作者:蒋蔚(蔚绛)


背景


近年来,在实现“双碳”目标的道路上,以风、光为代表的可再生能源作为缓解能源压力、促进可持续发展的重要途径广受关注。虚拟电厂作为一种区域性多能源聚合形式,实现了可再生能源大量接入电力系统运行,推动城市能源系统绿色高效发展。研究大规模常态化运行的虚拟电厂关键技术成为亟待解决的问题。分布式光伏、分布式储能及可控负荷等灵活性资源具有容量小、资源种类多、数量庞大等特点,难以直接参与电网互动运行。虚拟电厂有效聚合电源、负荷、储能等各类资源,参与电力市场,响应价格信号,为电网提供调峰、调频、调压与备用等辅助服务。


在电力市场价格、用户负荷需求、电源功率调节范围等参数随时间变化的情况下,我们考虑多时段优化问题,在满足各时刻功率平衡约束和设备固有约束的条件下,实现经济性调度最优,提供调度决策指令参考值。


image.png


在实际情况下,我们考虑虚拟电厂调度的问题难点主要包括以下两条:


  1. 不确定性:可再生能源、储能及负荷等单独运行时,电源容量较小,且具有较大的随机性、波动性、间歇性。例如:
  • 发电功率:从产生原理来看,光伏、风力的发电和天气息息相关,具有不稳定性。
  • 用电负荷:用户端用电规律会随时间变化,同时,不同的用电场景(例如居民楼、商业楼、写字楼)具有不同的负荷特性。
  1. 多目标优化:在并网状态下,虚拟电厂与大电网同步运行,在孤网状态下,虚拟电厂需要自动控制电压和频率的平衡。在用电设备可控的情况下,我们可以联合调节用电负荷和储能设备实现虚拟电厂内部设备的协同和与电网的互动;但是,在本案例中,为了不影响居民或产业正常用电,我们希望在不削减负荷需求的情况下,通过控制虚拟电厂的储能单元,确保电力系统经济(降低电费)、低碳(降低碳排)、安全(削峰填谷)地运行。

为了应对以上问题,我们考虑不确定性存在情况下的决策。

  • 首先,采用数学规划进行问题建模,确定决策变量、约束条件和目标函数;
  • 然后,通过MindOpt建模语言(MindOpt Algebra Programming Language, 简称为MAPL)将数学模型"翻译"为求解器可以理解的机器模型;
  • 最后,调用数学规划求解器(Solver)进行求解,进而得到最优决策。


光储荷经济性调度


本篇将以最简单的虚拟电厂场景为例,帮助快速理解。


1. 问题描述


我们考虑单个光伏、单个用户和单个储能设备在内的虚拟电厂场景中,在满足用户负荷需求的条件下,较短调度周期内(例如,四小时)的经济性最优目标。光伏可以发电给用户直用,也可以存储于储能设备中,在未来放电给用户使用;同时,光储不能覆盖的用户需求,可以从大电网中消费。


为了得到该调度问题的答案,我们首先需要将问题建模为数学规划问题,然后调用数学规划求解器来求解。


2. 数学规划模型

数学规划问题由三个要素组成: 决策变量目标约束条件,在该问题中具体如下:


image.png


决策变量为各时刻归一化的储能动作:


image.png


最小化经济性最优目标


image.png

满足以下约束条件


  • image.png

3. 使用MindOpt APL建模和求解


根据MindOpt APL的建模语法,建立此经济调度的完整模型,可如下两种方式运行。


3.1. 方法1:cell中直接输入代码


直接在cell中输入建模和求解的代码:

clear model;   #清除环境内存,多次run的时候使用
option modelname ../model/vpp_single; #定义存储文件名
#### 多时段优化问题
set T := 1..4;
set T0 := 1..5; # T时段前后共T+1个状态点
#### 功率和负荷
param load[T] := <1> 0.15, <2> 0.12, <3> 0.12, <4> 0.22; 
param power[T] := <1> 0.10, <2> 0.05, <3> 0.01, <4> 0.03;  
#### 单位电价
param price[T] := <1> 0.54, <2> 0.22, <3> 0.32, <4> 0.24; 
#### 充放电损耗系数
param charge_efficiency := 0.91;
param discharge_efficiency := 0.95;
#### 储能单次充放电限制
param nominal_power := 0.8;
#### 在不使用储能情况下的各指标,作为评测的对比基准值
param cost_base := sum{t in T} (load[t] - power[t]) * price[t];
#### 定义优化问题的变量
var x[T] >= 0 <= nominal_power; # 充电变量
var y[T] <= 0 >= - nominal_power; # 放电变量
var soc[T0] >= 0 <= 1; # State-of-Charge 储能设备状态
#### 定义优化目标函数
minimize Cost: sum{t in T} (load[t] - power[t] + x[t] + y[t]) * price[t] / cost_base;
#### 定义约束条件
subto State_of_Charge_Init: # 储能设备初始状态
    soc[1] == 0;
subto State_of_Charge_Update: # 储能设备状态更新
    forall {t in T} do
        soc[t+1] == soc[t] + x[t] * charge_efficiency + y[t] / discharge_efficiency;      
option solver mindopt;     # 指定求解用的求解器
solve;         # 求解
#### 展示结果
print "-----------------Display---------------"; 
print "Charging(+) / Discharging (-) Solution:";
forall {t in T} print 'Time {}: Solution {}'  % t, x[t] + y[t];
forall {t in T0} print 'Time {}: State-of-Charge {}'  % t-1, soc[t];
#### 评测指标
print "-----------------Evaluation Metrics---------------";
print "Cost = "; 
print sum{t in T} (load[t] - power[t] + x[t] + y[t]) * price[t] / cost_base;

运行结果如下:

Running mindoptampl
wantsol=1
mip_integer_tolerance=1e-9
MindOpt Version 0.23.0 (Build date: 20221129)
Copyright (c) 2020-2022 Alibaba Cloud.
Start license validation (current time : 02-MAR-2023 13:48:19).
License validation terminated. Time : 0.002s
Model summary.
 - Num. variables     : 13
 - Num. constraints   : 4
 - Num. nonzeros      : 16
 - Bound range        : [8.0e-01,1.0e+00]
 - Objective range    : [1.8e+00,4.4e+00]
 - Matrix range       : [9.1e-01,1.1e+00]
Presolver started.
Presolver terminated. Time : 0.000s
Simplex method started.
Model fingerprint: =Y2dmZ2dvd3Y
    Iteration       Objective       Dual Inf.     Primal Inf.     Time
            0    -1.45041e+00      0.0000e+00      2.1141e+00     0.00s    
            3     6.32208e-01      0.0000e+00      0.0000e+00     0.00s    
Postsolver started.
Simplex method terminated. Time : 0.002s
OPTIMAL; objective 0.63
3 simplex iterations
Completed.
-----------------Display---------------
Charging(+) / Discharging (-) Solution:
Time 1: Solution 0
Time 2: Solution 0.8
Time 3: Solution -0.6915999999999991
Time 4: Solution 0
Time 0: State-of-Charge 0
Time 1: State-of-Charge 0
Time 2: State-of-Charge 0.7280000000000001
Time 3: State-of-Charge 0
Time 4: State-of-Charge 0
-----------------Evaluation Metrics---------------
Cost = 
0.6322077922077942

3.2. 方法2:导入.mapl文件来运行


我们可将建模部分的代码保存为vpp_single.mapl文件。然后运行如下code,进行建模和求解。

clear model;       # 清除模型的内存
model ../model/vpp_single.mapl;    # 链接.mapl模型文件,建模
option solver mindopt;     # 指定求解用的求解器
solve;         # 求解
#### 展示结果
print "-----------------Display---------------"; 
print "Charging(+) / Discharging (-) Solution:";
forall {t in T} print 'Time {}: Solution {}'  % t, x[t] + y[t];
forall {t in T0} print 'Time {}: State-of-Charge {}'  % t-1, soc[t];
#### 评测指标
print "-----------------Evaluation Metrics---------------";
print "Cost = "; 
print sum{t in T} (load[t] - power[t] + x[t] + y[t]) * price[t] / cost_base;

运行结果与方法一一致。


4. 结果解析


  • 在执行model命令后,MAPL将.mapl中声明的数学规划模型转化成机器可以理解的模型。
  • 在执行solve命令后,MAPL将启动mindopt求解器进行求解,此时屏幕会打印出mindopt的求解过程。同时会在.mapl文件的同目录下生成待求解问题文件vpp_single.nl和解文件vpp_single.sol
  • 在执行print命令后,MAPL将打印如下结果:

-----------------Display---------------
Charging(+) / Discharging (-) Solution:
Time 1: Solution 0
Time 2: Solution 0.8
Time 3: Solution -0.6931199999999991
Time 4: Solution 0
Time 0: State-of-Charge 0
Time 1: State-of-Charge 0
Time 2: State-of-Charge 0.7296
Time 3: State-of-Charge 0
Time 4: State-of-Charge 0
-----------------Evaluation Metrics---------------
Cost = 
0.6282597402597423

其中显示了各时段储能决策变量的最优值分别为:


  • 第一个小时:不进行储能操作(即:光伏直用,剩余需求从电网购买)。
  • 第二个小时:充电80%。
  • 第三个小时:放电69.3%。
  • 第四个小时:不进行操作。


最终,我们可以得到最优目标函数为0.63,即上述最优储能调度对比不使用储能,可以节省37%电费。


为了简明起见,这个例子只用了4个时间段变量,但是相同的模型可以扩展到任意多个时间段,以满足更全面和准确的调度分析需求。


相关文章
|
6月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
6月前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
1月前
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
26 1
|
4月前
|
人工智能 算法 调度
优化问题之如何选择合适的优化求解器
优化问题之如何选择合适的优化求解器
|
4月前
|
调度 决策智能
优化问题之优化求解器有哪些主要的评估特性
优化问题之优化求解器有哪些主要的评估特性
|
6月前
|
存储 达摩院 调度
「达摩院MindOpt」优化FlowShop流水线作业排班问题
在企业在面临大量多样化的生产任务时,如何合理地安排流水线作业以提高生产效率及确保交货期成为了一个重要的问题。
「达摩院MindOpt」优化FlowShop流水线作业排班问题
MindOpt V1.0优化种植计划问题,新的建模方法
种植计划是指农业生产中针对不同农作物的种植时间、面积和种植方式等方面的规划安排。根据具体情况进行合理的规划和安排,以实现农作物的高产、优质和可持续发展。
MindOpt V1.0优化种植计划问题,新的建模方法
|
6月前
|
达摩院 自然语言处理 Java
MindOpt APL:一款适合优化问题数学建模的编程语言
本文将以阿里达摩院研发的MindOpt建模语言(MindOpt Algebra Programming Language, MindOptAPL,简称为MAPL)来讲解。MAPL是一种高效且通用的代数建模语言,当前主要用于数学规划问题的建模,并支持调用多种求解器求解。
|
达摩院 供应链 JavaScript
网络流:优化仓储物流调度问题-达摩院MindOpt
仓储物流调度是指在物流供应链中,对仓储和运输(运输路线、成本)进行协调和安排的过程。主要包含物流计划、运输调度、运发管理、库存管理等重要环节。随着网络、电商行业的迅速发展,仓储物流调度对于企业来说也非常重要,优秀的调度方案可以帮助降低库存成本、物流配送的效率、成本等等等,从而给企业带来降本增效。
网络流:优化仓储物流调度问题-达摩院MindOpt
|
6月前
|
SQL 关系型数据库 数据库
ADBPG优化基础(一)ORCA优化器
AnalyticDB PostgreSQL(ADBPG)就是一堆并行的PostgreSQL?当然不是!ADBPG作为一个基于PostgreSQL的Massively Parallel Processing(MPP)全并行架构的分析型数据库,针对数据分析场景在很多方面得到了加强。如双优化器(GPORC...
ADBPG优化基础(一)ORCA优化器