• 电力系统中新型预测双二元变量机组组合问题(Matlab代码实现)


    目录

    1 概述

    2 参考文献

    3 Matlab代码实现


    1 概述

    高效求解大规模 SCUC 问题的关键在于削减其规模。文献[1] 表明,安全约束机组组合问题中
    大量的故障态安全约束是冗余且无效的,不会对SCUC 问题的最优解产生影响。因此,可以通过辨
    识、删除这些冗余约束,将 SCUC 问题的规模进行大幅度削减,从而缩短 SCUC 问题的求解时间,以实现 SCUC 问题的快速求解。文献 [19] 基于一系列小规模 MILP 问题的解析解给出了辨识冗余安全约束的充分不必要条件,但是它所研究的 SCUC 模型忽略了故障态安全约束,不够全面。文献[2] 提出通过简化故障态集合来削减故障态安全约束,但是经过简化后的故障态集合仍然包含很多冗余的故障态安全约束,其作用较为有限。文献 提出了一 种基于迭代过程约束削减方法,它逐渐将未满足的约束条件添加到 SCUC 模型中,并进行迭代求解。 但是,该方法在某些情况下需要进行多次迭代,反而会延长求解时间。部分代码:
    1. function [ miqp_i, miqp ] = miqpUC_no_proj( dataUC )
    2. N = dataUC.N; T = dataUC.T;
    3. x_L = cell(N,1); x_U = cell(N,1);
    4. A = cell(N,1); b = cell(N,1);
    5. B = cell(N,1); B_wan = cell(N,1);
    6. Q_UC = cell(N,1); c_UC = cell(N,1);
    7. ctype = cell(N,1);
    8. DiagE_T_T = sparse(1:T,1:T,1);
    9. for i = 1:N % 按照机组分块形成约束,对机组i,生成所有其相关约束作为一块
    10. x_L{i} = sparse(2*T,1);
    11. x_U{i} = [ones(1*T,1); inf* ones(T,1)];
    12. % unit generation limits
    13. A_low_up = [ -sparse(1:T,1:T,dataUC.p_up(i)), DiagE_T_T;
    14. sparse(1:T,1:T,dataUC.p_low(i)), -DiagE_T_T;
    15. ];
    16. b_low_up = sparse(2*T,1);
    17. % form A_i b_i
    18. A{i} = [ A_low_up;
    19. ];
    20. b{i} = [ b_low_up;
    21. ];
    22. % 对功率平衡和旋转备用约束形成约束
    23. B{i} = [ sparse(1:T,1:T,-dataUC.p_up(i)), sparse(T, 1*T)];
    24. B_wan{i} = [sparse(T,T), DiagE_T_T];
    25. % 目标函数
    26. c_UC{i} = [ dataUC.alpha(i) * ones(T,1);
    27. dataUC.beta(i) * ones(T,1);
    28. ];
    29. Q_UC{i} = blkdiag(sparse(T,T), sparse(1:T,1:T, 2*dataUC.gamma(i)));
    30. ctype_ascii_miqp = [66*ones(1,T), 67*ones(1,T)];
    31. ctype{i} = char(ctype_ascii_miqp);
    32. end
    33. % 形成功率平衡和备用约束的右端项
    34. c = -(dataUC.PD + dataUC.spin);
    35. c_wan = dataUC.PD;
    36. % 返回分块的模型数据
    37. miqp_i.A = A; miqp_i.b = b;
    38. miqp_i.B = B; miqp_i.c = c;
    39. miqp_i.B_wan = B_wan; miqp_i.c_wan = c_wan;
    40. miqp_i.c_UC = c_UC; miqp_i.Q_UC = Q_UC;
    41. miqp_i.x_L = x_L; miqp_i.x_U = x_U;
    42. miqp_i.N = N; miqp_i.T = T;
    43. miqp_i.ctype = ctype;
    44. % 形成并返回 完整MIQP模型的参数
    45. miqp.A = []; miqp.b = [];
    46. miqp.B = []; miqp.c = c;
    47. miqp.B_wan = []; miqp.c_wan = c_wan;
    48. miqp.c_UC = []; miqp.Q_UC = [];
    49. miqp.x_L = []; miqp.x_U = [];
    50. miqp.ctype = [];
    51. for i = 1:N
    52. miqp.A = blkdiag(miqp.A, A{i});
    53. miqp.b = [miqp.b; b{i}];
    54. miqp.B = [miqp.B, B{i}];
    55. miqp.B_wan = [miqp.B_wan, B_wan{i}];
    56. miqp.c_UC = [miqp.c_UC; c_UC{i}];
    57. miqp.Q_UC = blkdiag(miqp.Q_UC, Q_UC{i});
    58. miqp.x_L = [miqp.x_L; x_L{i}];
    59. miqp.x_U = [miqp.x_U; x_U{i}];
    60. miqp.ctype = [miqp.ctype, ctype{i}];
    61. end
    62. miqp.A_all = [ miqp.A;
    63. miqp.B;
    64. % miqp.B_wan;
    65. ];
    66. miqp.lhs_all = [ -inf * ones(size(miqp.A,1),1);
    67. -inf * ones(size(miqp.B,1),1);
    68. % miqp.c_wan;
    69. ];
    70. miqp.rhs_all = [ miqp.b;
    71. miqp.c;
    72. % miqp.c_wan;
    73. ];
    74. miqp.N = N;
    75. miqp.T = T;
    76. %%%% end of function
    77. end

    2 参考文献

    [1]李建钊,谢敏,李舒佳,林盛振,黄彬彬.考虑CVaR的机组组合和多场景备用决策联合优化[J].南方能源建设,2021,8(04):50-65.DOI:10.16516/j.gedi.issn2095-8676.2021.04.008.

    [2]石志伟.计及FACTS校正的N-k故障约束鲁棒机组组合[J].南方电网技术,2021,15(12):11-19.DOI:10.13648/j.cnki.issn1674-0629.2021.12.002.


    3 Matlab代码实现

     

  • 相关阅读:
    【C++】STL——vector(万字详解)
    香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(三)
    平台H5对接支付宝支付接口(含分布式源码)
    阿里三面:Redis大key怎么处理?
    Git学习使用笔记--(一)
    关于 WordPress 你了解多少?
    Python中关于类属性、类方法和静态方法的【综合案例】— 设计一个Game类
    Linux 基础IO
    Deno 的配置文件、框架,标准库
    java-php-python-ssm基于专家系统房产营销智能推荐系统计算机毕业设计
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/126900889