【机组组合】基于Benders分解算法解决混合整数规划问题——机组组合问题(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

1.1 问题描述

1.2 数学符号

1.3 数学模型 

1.4 整体数学模型 

Benders分解算法简介

机组组合问题的数学模型

Benders分解算法在机组组合问题中的应用

实际应用与验证

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

1.1 问题描述

在电力系统中,高效的资源调度,对于在集中式或竞争性环境中实现经济可靠的能源生产和系统运行是必要的。
机组组合 (Unit Commitment, UC)优化问题旨在于电力系统运行时,给定以及调整发电机组的启停状态以及实时出力,使发电机组的总运行成本最小,且满足一定的安全技术约束 [1],包括发电机出力约束、启停时间约束、启停状态逻辑约束和功率平衡约束等。

1.2 数学符号

 

1.3 数学模型 

1.3.1 目标函数

1.3.2 约束条件

机组出力约束 

启停时间约束 

启停状态逻辑约束 

功率平衡约束 

1.4 整体数学模型 

\begin{array}{l} \min \sum_{g=1}^{N G} \sum_{t=1}^{N T}\left(C_{g}^{L V} p_{g, t}+C_{g}^{N L} u_{g, t}+C_{g}^{S U} v_{g, t}+C_{g}^{S D} w_{g, t}\right) \\ \text { s.t. } \quad\left\{\begin{array}{l} u_{g, t} \underline{P}_{g} \leqslant p_{g, t} \leqslant u_{g, t} \bar{P}_{g} \quad \forall g, t \\ \sum_{i=t-T U_{g}+1}^{t} v_{g, i} \leqslant u_{g, t} \quad \forall g, t \in\left[T U_{g}, T\right] \\ \sum_{i=t-T D_{g}+1}^{t} w_{g, i} \leqslant 1-u_{g, t} \quad \forall g, t \in\left[T D_{g}, T\right] \\ u_{g, t}-u_{g, t-1}=v_{g, t}-w_{g, t} \quad \forall g, t \\ \sum_{g=1}^{N G} p_{g, t} \geqslant D_{t} \quad \forall t \\ \sum_{g=1}^{N G} u_{g, t} \bar{P}_{g} \geqslant D_{t} \quad \forall t \end{array}\right. \end{array}

机组组合问题研究与Benders分解算法

机组组合(Unit Commitment, UC)是电力系统中的一个重要优化问题,旨在在给定的电力系统运行条件下,通过调整发电机组的启停状态和实时出力,使得发电机组的总运行成本最小,同时满足一系列的安全技术约束。这些约束包括发电机出力约束、启停时间约束、启停状态逻辑约束和功率平衡约束等。

Benders分解算法简介

Benders分解算法由Jacques F. Benders在1962年提出,是一种用于求解混合整数规划问题(Mixed Integer Programming Problem, MIP)的有效方法。在MIP中,同时包含整数和连续变量,这使得问题的求解变得复杂。Benders分解算法通过引入复杂变量(complicating variables),并将这些变量固定,从而将原问题分解为相对容易解决的子问题。

机组组合问题的数学模型

机组组合问题的数学模型通常包括目标函数和一系列约束条件。目标函数是发电机组的总运行成本最小化,可以表示为:

\minsumt=1T​sumi=1N​(CiP​Pit​+CiS​Uit​)

其中,CiP​ 是机组i的单位功率成本,Pit​ 是机组i在时段t的功率输出,CiS​ 是机组i的启动成本,Uit​ 是机组i在时段t的启停状态(1表示开机,0表示停机)。

约束条件包括:

  1. 发电与负荷平衡约束:确保所有时段的发电总量等于负荷需求。
  2. 机组有功出力上下限约束:机组输出功率需在规定的上下限内。
  3. 机组最小启停时间约束:机组启动后需要运行一段时间后才能停机,停机后也需要等待一段时间才能再次启动。
  4. 安全约束:如线路功率限制等,确保电网安全稳定运行。

Benders分解算法在机组组合问题中的应用

在机组组合问题中,Benders分解算法的基本思想是将原问题分解为两个子问题:

  1. 主问题(Master Problem):只包含整数变量(如机组的启停状态),通过迭代求解来逼近最优解。
  2. 子问题(Subproblem):在给定整数变量值的情况下,解决一个线性规划问题,即确定发电机组的出力。

算法流程如下:

  1. 初始化:设定主问题的初始解和上下界。
  2. 求解子问题:在给定整数变量值的情况下,求解线性规划问题,得到连续变量的最优解和子问题的目标函数值。
  3. 更新主问题:根据子问题的解,在主问题中加入新的约束(Benders割),并求解更新后的主问题。
  4. 迭代:重复步骤2和3,直到满足收敛条件(如上下界之间的间隙小于设定阈值)。

实际应用与验证

Benders分解算法在机组组合问题中的应用已经得到了广泛的研究和验证。通过IEEE-RTS等实际电力系统算例的验证,证明了该算法在求解安全约束机组组合问题上的有效性和实用性。此外,该算法还兼容了现有的成型算法,不会显著增加计算负担。

综上所述,基于Benders分解算法解决机组组合问题是一种有效且实用的方法,能够在满足电力系统安全约束的前提下,实现发电机组的优化调度。

📚2 运行结果

   部分代码:

  %% Step 3: Solve MP2 to obtain a new lower bound solution z_LB w.r.t. y_hat
    r_MP=gurobi(MP,MP.params);
    assign(recover(r_model.used_variables(Ind_y)),r_MP.x(2:end)); % exclude varialbe z in MP
    s_u_BD((3*iter-2):3*iter,:)=value(u);
    s_v_BD((3*iter-2):3*iter,:)=value(v);
    s_w_BD((3*iter-2):3*iter,:)=value(w);
    z_LB=r_MP.objval;
    iter=iter+1;
%     abs_error=abs((z_UB-z_LB)/z_UB);
%     display(['Upper Bound: ', num2str(z_UB),'  Lower Bound: ', num2str(z_LB),'  Gap: ',num2str(round(abs_error*100,2)),'%']);
end
t_BD_e = toc(t_BD_s);  
display(['采用Gurobi+benders分解所用计算时间: ',num2str(round(t_BD_e,2)),' s']);

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1] G. Morales-España, J. M. Latorre and A. Ramos, ”Tight and Compact MILP Formulation
for the Thermal Unit Commitment Problem,” in IEEE Transactions on Power Systems,
vol. 28, no. 4, pp. 4897-4908, Nov. 2013, doi: 10.1109/TPWRS.2013.22514

🌈4 Matlab代码实现

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值