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

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

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

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

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

目录

💥1 概述

1.1 问题描述

1.2 数学符号

1.3 数学模型 

1.4 整体数学模型 

📚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}

📚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代码实现

链接:https://pan.baidu.com/s/1_3F1iNePbQAuvSS3iovDVA 
提取码:3tel 
--来自百度网盘超级会员V3的分享

MATLAB里,使用Gurobi作为优化工具包来编写Benders分解算法处理混合整数规划(MIP)的一般步骤如下: ```matlab % 首先,需要安装Gurobi MATLAB工具箱,如果还没有安装,可以在这里下载:https://www.gurobi.com/downloads/gurobi-matlab/ % 导入必要的库 import gurobi.* % 定义问题数据 m = Model(); % 创建一个新模型 numVariables = ...; % 可变数的数量 numContinuous = ...; % 连续变量的数量 numInteger = ...; % 整数变量的数量 % 添加连续和整数变量 for i = 1:numContinuous v = m.addVar(lb = ..., ub = ..., Type = GRB.CONTINUOUS); % lb和ub是下界和上界 end for i = 1:numInteger v = m.addVar(lb = ..., ub = ..., Type = GRB.INTEGER); % 同样设置下界和上界 end % 设定目标函数 obj = ...; % 目标函数系数 m.setObjective(obj, GRB.MAXIMIZE); % 主问题部分 subProblemModel = ...; % 分解后的子问题模型,可能是一个MIP本身 % Benders切割条件 cuts = ...; % 根据子问题求得的切割条件,通常是一组二次或者线性不等式 % 添加Benders切割 for cut in cuts m.addConstr(cut); end % 开始解决问题 m.optimize; % 检查Benders可行解是否满足原始问题 feasibleCut = ...; % 判断子问题解是否可行,如若不可行,则添加新的切割 while ~feasibleCut subProblemSolution = ...; % 解决问题并获取解 feasibleCut = ...; % 判别并更新切割 if ~feasibleCut m.update(); m.optimize; end end % 最终结果 solution = get(m, 'X'); % 获取最优解 ``` 请注意,这个示例代码中省略了一些具体的细节,比如变量定义、目标函数设置、子问题模型构建等,你需要根据实际的MIP问题结构填充这些部分。最后,记得运行`m.optimize`来执行整个Benders分解过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值