(文章复现)微电网两阶段鲁棒优化经济调度方法(含matlab代码)

博客主要讲述了在复现文献中的两阶段鲁棒优化模型时发现的笔误,经过与作者确认,确定模型中的约束条件和对偶问题存在错误。作者通过调整约束和目标函数,解决了问题,并提供了MATLAB代码实现。最终,通过迭代求解得到了优化问题的解,并展示了运行结果。此外,还分享了针对模型收敛性问题的改进方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、文献中存在的笔误

文献中两阶段鲁棒优化的模型的构建是基于下面这个确定性优化:

但是我复现的时候发现,这个模型其实是有点小问题的,第三行约束条件写的是Ky=0,但是对应的约束条件中等式右边并不全为零,所以按照常理,这一个约束应该写成Ky=k。但不确定这个文章是做了线性变换还是笔误。我也在这里纠结了好久。

后面不知怎么的,我想着给文章通信作者发邮件询问一下,没想到真的收到回复了。刘一欣老师说这里确实是个笔误,等式右边应还有一个列向量。特别感谢刘老师可以回复我这个小菜鸡,不然我要在这上面纠结很久。

我询问的邮件:

刘一欣老师的回复:

我邮件中提到的另一个问题,是关于这个对偶问题的:

因为根据强对偶定理,对偶变量\pi对应的约束为等式约束,所以化为对偶形式时,对偶变量不应该含有符号约束,也就是\pi≥0这个约束要删去。

同时因为约束Ky=0这一项要改成Ky=k,所以子问题的目标函数也要加上k^Ty这一项。

解决了上面这些问题,后面的建模就相对没有那么困难了。

二、决策变量和约束矩阵

决策变量x是一个48维的列向量:

决策变量y是一个240维的列向量: 

 c和y一样都是一个240维的列向量:

 D是一个144行240列的矩阵,d是一个144维的列向量,Dy≥d可以写成矩阵形式:

E_{24}表示24阶的单位矩阵,L_{24}表示下三角和对角线全为1的矩阵,上三角全为0的矩阵。

K是一个50行240列的矩阵,k是一个50维的列向量,Ky=k可以写成矩阵形式:

式中,1_{24}表示元素全为1的24维行向量。

F是一个96行48列的矩阵,G是一个96行240列的矩阵,h为96维的列向量,Fx+Gy≥h可以写成矩阵形式:

 

这样就实现了完成了所有系数矩阵的输入。

其他没有在矩阵中涉及的约束条件,用y>0表示即可。

三、matlab代码

%% 清理内存空间
clc
clear
close all
%% 随机生成初始的光伏出力和负荷大小
u_sharp=creat_situation;
%% 迭代求解两阶段鲁棒优化问题
it_max=10;%最大迭代次数
LB=zeros(1,it_max);
UB=zeros(1,it_max);
e=zeros(1,it_max);
for it=1:it_max
    [x,LB(it),~]=master_problem(u_sharp);
    [u_sharp,UB(it)]=sub_problem(x);
    e(it)=UB(it)-LB(it);
    if abs(e(it))<0.01
        break
    end
end
%% 画图
index=[1 1 1 1 1 1 1];
%共有七个图,1-算法迭代情况,2-光伏出力,3-负荷大小,4-微型燃气轮机出力,5-微网购售电,6-储能充放电,7-需求响应负荷
%index对应位置为1表示画图,为0表示跳过
plot_figure(index,u_sharp,e,it_max);

上面只给出了主函数,完整代码戳这里:

原创代码:基于matlab+yalmip+cplex实现的微电网两阶段鲁棒优化

       

四、运行结果

 运行结果一共有七个图,效果如下:

 

 

 

因为没法获取原文献的数据,所以具体结果和文献不会完全一致,但是原理都是一样的。 

PS:统一回复,博客和代码发布后,有很多朋友在私信和我交流,原文使用强对偶定理求解的模型存在一些问题,参数不同,求解器版本不同等情况可能使代码没办法收敛。我调试之后,改用KKT条件改写了子问题,可以保证不同参数、不同求解器版本下模型的收敛性。

<think>好的,用户想了解阶段鲁棒优化调度方法以及它与CCG(列生成算法)的关系和实现方法。我需要先回忆相关知识,然后组织一个清晰的回答结构。 首先,阶段鲁棒优化应该分为阶段:第一阶段是决策阶段,第二阶段是调整阶段,应对不确定性。不确定集可能涉及参数的不确定性,比如负荷波动或可再生能源出力波动。鲁棒优化的核心是找到在最坏情况下仍然可行且成本最低的解决方案。 接下来,CCG算法,全称是列与约束生成算法(Column-and-Constraint Generation),常用于处理鲁棒优化中的双层问题。传统的Benders分解可能效率不高,CCG通过主问题和子问题迭代,逐步添加约束和变量,提高求解效率。需要解释主问题如何生成初始解,子问题如何寻找最坏情况下的不确定性,并将这些信息反馈给主问题,形成迭代过程。 然后,者的结合点在于,阶段鲁棒优化通常需要处理复杂的非凸问题,而CCG能有效分解问题,降低计算复杂度。在调度问题中,比如电力系统调度,第一阶段可能决定机组启停,第二阶段调整发电出力应对不确定性。CCG在这里用来迭代求解最优的调度策略,确保鲁棒性。 实现方法部分,需要分步骤说明:建立阶段模型,设计不确定集,构建主问题和子问题,迭代求解直至收敛。同时,可能需要注意如何处理子问题的求解,比如使用对偶理论转换双层问题为单层,或者利用优化软件直接求解。 还需要考虑用户可能的背景,可能对数学公式比较熟悉,但需要确保LaTeX格式正确。按照用户的要求,行内公式用$...$,独立公式用$$...$$,并且正确使用中文回答。同时生成相关问题,可能涉及应用场景、不确定集设计、与其他算法的对比等。 最后检查是否有遗漏点,比如是否提到CCG相比传统方法的优势,或者具体的调度应用实例。确保引用标识正确,但用户提供的参考中没有具体的引用来源,可能需要统一处理。</think>### 阶段鲁棒优化调度方法CCG算法实现 #### 1. 阶段鲁棒优化基础 阶段鲁棒优化将决策分为**第一阶段(预调度决策)**和**第二阶段(实时调整)**,以应对不确定性。其核心模型可表示为: $$ \begin{aligned} \min_{x} \quad & c^T x + \max_{u \in \mathcal{U}} \min_{y} d^T y \\ \text{s.t.} \quad & Ax \leq b \\ & F(u)x + Gy \leq h(u) \quad \forall u \in \mathcal{U} \end{aligned} $$ 其中$x$为第一阶段决策变量(如机组启停),$y$为第二阶段调整变量(如发电出力调整),$\mathcal{U}$为不确定集(如风电出力波动范围)[^1]。 #### 2. CCG算法原理 列与约束生成算法(Column-and-Constraint Generation)通过**主问题-子问题迭代**解决双层优化问题: - **主问题**:生成当前最优解 $$ \min_{x,\eta} c^T x + \eta $$ 包历史生成的所有约束$\eta \geq d^T y^k$ - **子问题**:寻找最坏场景 $$ \max_{u \in \mathcal{U}} \min_{y} d^T y $$ 通过强对偶性转换为单层优化问题 #### 3. 调度问题实现步骤 ```python # 伪代码示例 def CCG_algorithm(): LB = -inf, UB = +inf while UB - LB > ε: # 求解主问题 x, η = solve_master_problem() # 求解子问题 u_hat, y_hat = solve_subproblem(x) # 更新边界 LB = max(LB, c^T x + η) UB = min(UB, c^T x + d^T y_hat) # 添加新约束 master_problem.add_constraint(η ≥ d^T y_hat) return x ``` #### 4. 关键技术要点 - **不确定集设计**:多面体集合($ \mathcal{U} = \{u | Wu \leq q\} $)或数据驱动集合 - **对偶转换**:将子问题转换为混合整数规划问题 - **加速策略**:有效不等式添加、场景筛选、并行计算
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

配电网和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值