尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

计及N-k安全约束的含光热电站优化调度模型Matlab实现

计及N-k安全约束的含光热电站优化调度模型Matlab实现 1. 从怎么省成本到怎么扛风险N-k安全约束为什么必须引入光热调度做电力系统优化调度的朋友应该都有同感传统经济调度模型跑起来很顺约束也就是机组出力上下限、功率平衡、爬坡速率这几样求解速度快结果也漂亮。但拿到实际工程里一校验往往被调度中心的安稳部门一句话打回来——N-1过了吗N-1-1呢严重故障场景下的切负荷量是多少早期的我对此很不以为然觉得安稳校验是后校验的事跟优化模型本身没关系。直到有一次我拿着一个最优调度方案去做故障扫描结果在某个双回线同时跳闸的场景下系统频率直接掉到49.2Hz以下低频减载动作了一大片。那个方案在正常运行方式下确实省钱但扛不住风险。从那以后我彻底改变了思路优化调度模型里如果不把N-k安全约束嵌进去算出来的最优可能只是正常工况下的最优根本经不起故障考验。这个项目标题的核心就在这计及N-k安全约束的含光热电站电力系统优化调度模型测试系统用IEEE 14节点和IEEE 118节点代码用Matlab实现。翻译成大白话就是——在传统机组组合和经济调度的基础上把N-1乃至N-k故障后系统仍然安全这个硬约束直接放进优化模型里同时把光热电站CSPConcentrating Solar Power这种带储热、可调度的可再生能源纳入优化变量看看在安全约束下光热到底能发挥多大作用。先解释一下N-k到底是什么。N代表系统里全部发输电元件的总数N-1就是任意一个元件一台发电机、一条线路、一台变压器发生故障退出运行后系统还能不能安全稳定运行。N-k就是更极端的情况最多同时有k个元件故障。传统的确定性安全约束经济调度SCUC/SCED大多只考虑N-1而N-k考虑的是更严酷的多重故障场景计算复杂度呈组合爆炸式上升。至于光热电站它跟光伏、风电最大的区别在于自带储热系统TESThermal Energy Storage。光伏和风电是靠天吃饭出力不可控光热则是先把太阳光转化为热能加热熔盐或导热油再用热来发电多余的热量可以存起来。这意味着光热电站可以在没有光照的时段继续发电甚至可以像火电机组一样参与调度调节出力。在N-k安全约束下这种可调度可再生能源的价值就非常明显了——关键故障场景下它不用看老天爷脸色可以顶上去。这个模型适合谁来参考我觉得至少三类人做电力系统优化调度方向的研究生尤其是研究含高比例可再生能源系统安全运行问题的人搞综合能源、光热发电项目规划或运行策略的工程师对MatlabYALMIP求解器这套工具链感兴趣想从具体问题入手学习的开发者。我拿到这个项目后花了大概两周时间把IEEE 14节点和118节点两套系统的模型都跑通了。下面把整个建模思路、关键细节、踩过的坑以及代码的核心结构都整理出来希望能帮你少走点弯路。2. 模型的顶层设计为什么选确定性N-k约束场景枚举而不是概率性约束2.1 核心思路把故障场景当作准静态约束嵌入优化模型刚开始接触这个项目的人通常会有个疑问N-k安全约束那么多的故障组合怎么塞进一个优化模型里直接枚举N-k场景计算量不是爆炸了吗实际工程和研究中最常见的做法是先离线枚举或筛选出需要校验的故障场景集合再把每个故障场景下的稳态安全约束如线路潮流不越限、节点电压不越界、发电机出力不越限、切负荷量为零或控制在允许范围内以准静态方式嵌入优化模型。也就是说优化模型不仅要在正常工况下满足约束还要在每个预想故障场景下都满足同样的安全约束。这种方法的本质是确定性安全约束也叫鲁棒安全约束。它的优点是简单直接、工程上易解释、结果可校验。缺点是场景集的选择直接影响结果的保守性——场景选多了调度方案过于保守运行成本偏高场景选少了安全问题又暴露出来。2.2 为什么这个模型要同时跑14节点和118节点很多论文只做一个节点系统就发文章了但做工程应用的人都知道14节点和118节点的意义完全不一样对比项IEEE 14节点IEEE 118节点系统规模14个母线5台发电机20条线路/变压器118个母线54台发电机186条线路/变压器故障组合数N-1约25个N-2约300个N-1约240个N-2约28800个求解难度中等普通笔记本几分钟可解高需要合理场景缩减和高效求解器适用场景算法验证、教学演示、快速原型接近实际区域电网验证方法可扩展性一个合格的调度模型不能只在玩具系统上能跑。14节点帮你快速验证建模逻辑正确性118节点则检验你的方法到底能不能应对实际规模的系统。这个项目两套系统都做说明作者考虑到了可扩展性问题这也是我在实操中觉得最有价值的部分。2.3 目标函数的设计要点安全与经济的权衡目标函数一般是最小化总运行成本包括火电机组的燃料成本通常用二次函数或分段线性近似机组启停成本光热电站的运行维护成本相对较小但也要算进去弃风弃光惩罚成本如果有可再生能源切负荷惩罚成本如果允许故障场景下少量切负荷。这里有一个需要仔细权衡的点N-k安全约束要不要允许切负荷两种做法都有人用严格零切负荷所有预想故障场景下不允许切负荷。模型最安全但结果往往很贵甚至可能无解因为系统在某些严重故障下物理上就是会切负荷。允许少量切负荷但加高额惩罚更贴合实际因为实际调度中极端故障下切负荷是最后的保底手段关键在于尽量少切。一般把切负荷惩罚因子设为电价的几十倍甚至上百倍保证优化器只有在别无选择时才会切负荷。我在实操中更倾向于第二种做法。原因很简单如果严格零切负荷118节点系统在某些N-2场景下很可能直接无解需要花大量时间调整机组组合才能找到可行解而且在实际运行中零切负荷这个目标本身也不现实——电网设计时本来就允许在极端故障下损失部分负荷。2.4 光热电站建模的关键光场、储热、发电三个环节的耦合光热电站的模型是这个项目的核心特色也是最容易出错的地方。一个完整的光热电站模型通常包含三个子模块光场Solar Field收集太阳能并转化为热能。这一环节和光伏类似出力与DNI直接法向辐射强度相关具有间歇性和不确定性。储热系统TES把多余的热量储存在熔盐罐中。储热系统让光热电站具备了移峰填谷的能力——白天光照强时多余的热量存起来晚上或光照弱时用储存的热量继续发电。发电模块Power Block用高温熔盐加热水产生蒸汽推动汽轮机发电。这一环节类似于传统的火电汽轮机但出力调节范围和爬坡速率有一定限制。建模时三个环节的能量流可以简化成如下关系P_CSP(t) η_PB × [Q_SF(t) Q_TES_discharge(t) - Q_TES_charge(t)]其中P_CSP(t) 是光热电站在时段t的发电出力η_PB 是发电模块的热-电转换效率Q_SF(t) 是光场在时段t收集到的热功率Q_TES_discharge(t) 是从储热系统释放的热功率Q_TES_charge(t) 是充入储热系统的热功率。储热系统的状态方程则是SOC(t1) SOC(t) η_charge × Q_TES_charge(t) - Q_TES_discharge(t) / η_discharge其中SOC(t)是储热系统在时段t的蓄热状态等效储热量η_charge和η_discharge分别是充放热效率。这样的建模方式把光热电站的可调度性很好地体现了出来。在实际操作中往往还需要考虑储热容量上下限约束、充放热速率约束、光场集热功率上限约束、发电模块出力上下限约束和爬坡约束。这几个约束写错任何一个结果都会出现明显的违和感——比如光热电站的出力曲线变得跟光伏一样晴时满发、阴时趴窝那就说明储热约束没写对。3. N-k安全约束的数学建模从潮流方程到线性化处理3.1 直流潮流的引入把非线性问题变成可解的线性问题N-k安全约束最麻烦的地方在于故障场景下的潮流约束本质上是非线性的交流潮流要嵌入优化模型就得做线性化处理。工程上最常用的就是直流潮流DC Power Flow模型。直流潮流的本质假设是线路电阻远小于电抗r x电压相角差很小电压幅值近似为1.0 p.u.。在这样的假设下交流潮流方程可以简化为P_line B × Δθ其中P_line 是线路有功潮流B 是线路电纳矩阵Δθ 是线路两端节点电压相角差。对IEEE 14节点和118节点这种输电网来说直流潮流模型足够精确而且完全线性可以直接用线性规划或混合整数线性规划求解。3.2 故障场景下的约束表达以N-1线路开断为例以N-1线路开断为例故障场景s下系统的节点功率平衡方程变为P_gen(s,t) - P_load(t) B(s) × θ(s,t)其中B(s)是故障场景s下的节点电纳矩阵θ(s,t)是故障场景s下的相角向量。这里的关键在于每一个故障场景s都对应一组独立的潮流约束和相角变量。如果枚举了S个故障场景你的优化模型里就要有S1套潮流约束1是正常运行场景。变量数量随场景数线性增长但约束矩阵的稀疏结构可以好好利用这也是为什么用YALMIP建模比直接手写约束矩阵方便得多。线路潮流越限约束则是-P_line_max P_line(s,t) P_line_max这个约束要施加到每一个故障场景s中的每一条线路那些故障开断的线路除外上。3.3 N-k场景枚举组合爆炸怎么控制这是整个模型里最考验工程经验的部分。IEEE 14节点N-2场景大约300个全部枚举还算能接受但IEEE 118节点N-2场景约28800个如果全部枚举每个场景都要加一套潮流变量和约束模型规模会大到求解器直接卡死。我在实操中用了两种控制方法方法一故障场景筛选Contingency Screening。不把所有N-k场景都拿来当硬约束而是先用一个快速筛选工具例如基于直流潮流的灵敏度分析或短路电流计算把那些不会引起越限的安全场景筛掉只保留关键场景如重载线路开断、大容量机组跳闸、关键变压器故障等嵌入优化模型。这样既保证了安全性又控制了模型规模。方法二迭代校验Iterative Contingency Analysis。先不加N-k约束求解得到初始调度方案后做一次完整的N-k扫描找出所有越限场景把这些场景加入约束集合再求解重复这个过程直到没有新的越限场景出现。这种求解-校验-增补约束的迭代方法在实际中往往只需要3-5轮就能收敛而最终嵌入模型的场景数远少于全枚举。这两种方法不是互斥的我在118节点系统上用的是预筛选迭代校验组合拳。当然严谨的学术研究还是会用全枚举至少在14节点系统上因为要验证结果的完备性。3.4 发电机N-k故障的机组组合耦合很多人做N-k安全约束只考虑线路故障忽略了发电机故障。实际上N-1校验里最重要的是最大单机跳闸因为一台大机组突然退出系统会出现巨大的功率缺额线路潮流会大幅转移这是最危险的场景。发电机故障在模型里的额外处理是故障场景s下故障机组g的出力约束变为P_gen(g,s,t) 0同时还需要额外考虑系统的备用容量约束Σ P_gen_max(g,s,t) P_load(t) R_reserve(t)其中R_reserve(t)是时段t所需的旋转备用容量。这个约束保证了机组跳闸后剩下的机组有能力弥补功率缺额。在做118节点系统时我特别注意了这个约束——因为118节点系统的机组容量差异很大最大的机组容量可能有几百MW如果某台大机组跳闸后备用不足系统就会面临减载风险。这个约束直接影响到哪些机组在某个时段必须开机必须在混合整数规划里处理好。4. Matlab代码实现YALMIP建模、求解器选型与两套节点系统的适配4.1 整体代码架构模块化设计让你快速移植到自己的系统我在拿到代码后第一件事就是梳理它的模块结构。一个设计良好的调度模型代码通常应该包括以下几个模块├── data/ % 系统数据 │ ├── case14.m % IEEE 14节点数据 │ └── case118.m % IEEE 118节点数据 ├── model/ │ ├── build_contingency_set.m % 故障场景生成与筛选 │ ├── build_system_matrix.m % 构建节点导纳矩阵、潮流约束 │ ├── add_csp_model.m % 构建光热电站模型 │ └── build_objective.m % 构建目标函数 ├── solver/ │ └── solve_scuc.m % 求解主程序 ├── results/ │ └── plot_results.m % 结果可视化 └── main.m % 主入口这种模块化设计的最大好处是你想从14节点换到118节点只需要切换数据文件同时调整一些规模相关参数如故障场景数、备用需求比例模型主体代码基本不用动。这也是我推荐大家尽量保持的结构——不要把所有代码都塞进一个main脚本里否则改起来会非常痛苦。4.2 YALMIP建模的关键写法约束的批量生成与故障场景循环用YALMIP建模最爽的地方是可以直接用矩阵形式批量生成约束。下面以故障场景循环为例展示关键写法% 定义决策变量 P_gen sdpvar(n_gen, T, full); % 发电机出力 u_on binvar(n_gen, T, full); % 机组启停状态 theta sdpvar(n_bus, T, full); % 节点相角正常工况 % 正常运行场景的功率平衡约束 for t 1:T C_gen * P_gen(:,t) - P_load(:,t) B_bus * theta(:,t); end % 故障场景的潮流约束以N-1线路故障为例 for s 1:n_cont theta_s{s} sdpvar(n_bus, T, full); % 每个故障场景独立的相角变量 for t 1:T C_gen * P_gen(:,t) - P_load(:,t) B_bus_s{s} * theta_s{s}(:,t); % 线路潮流约束 F_s{s} * theta_s{s}(:,t) F_max; F_s{s} * theta_s{s}(:,t) -F_max; end end这段代码里有几个细节要特别注意第一故障场景下相角变量θ_s{s}必须独立于正常工况的θ。因为故障后网络拓扑变了潮流分布完全不同两个工况下的相角不能混用同一个变量。很多人第一次写这代码时容易在这里犯错导致约束关系完全错乱。第二故障场景下的功率平衡方程必须在同一个时间断面t上同时满足。也就是说机组出力P_gen(:,t)是同时满足正常工况和所有故障场景约束的——这正是安全约束的意义所在不管哪个故障发生当前这个出力方案都必须安全。第三故障线路本身在故障场景下要退出约束。在构建B_bus_s{s}和F_s{s}时要把故障线路对应的导纳和潮流转移矩阵做相应处理。YALMIP本身不管电气逻辑矩阵要你自己算对。4.3 求解器选型不同问题规模怎么选Matlab环境下求解这种混合整数优化问题我常用的组合是问题类型推荐求解器说明连续线性规划LPGurobi / CPLEX / MOSEK如果不含机组启停变量直接LP求解即可混合整数线性规划MILPGurobi / CPLEX含机组启停二进制变量时MILP是标配二次规划/混合整数二次规划Gurobi / CPLEX都支持如果燃料成本用二次函数而非分段线性开源替代方案CBC / SCIP免费的但求解速度慢很多118节点N-2场景会非常吃力我在14节点系统上默认用Gurobi几百个场景几分钟就能出结果。到了118节点如果场景集没有做筛选全枚举28800个N-2场景内存占用和求解时间都会非常夸张——我试过一次跑了两个小时还在gap 10%附近转悠。后来做了场景筛选把关键场景控制在200-500个左右Gurobi大约半小时内就能收敛到1%以内的最优间隙。如果学术用途我建议至少用学术版Gurobi或CPLEX如果只是学习和验证思路CBC也能用就是慢一些。4.4 光热电站参数数据没有怎么办IEEE 14节点和118节点是标准测试系统但这两个系统本身不包含光热电站参数。所以模型里的光热电站是后加的需要自己设定容量和参数。我在实操中的参数配置参考如下以14节点系统为例参数数值说明光热电站额定容量100 MW约占系统峰值负荷的15%-20%储热容量等效时长6小时即满功率可放电6小时光热电站接入节点节点5或节点13优先选在负荷较重或线路潮流瓶颈附近光电效率0.4光场到电的全程效率的简化值充/放热效率0.95 / 0.95熔盐储热系统的典型效率最小出力20 MW汽轮机最小稳定出力爬坡速率25 MW/h光热机组爬坡相对较慢参数设置完光热电站的出力曲线就摆脱了看天吃饭的随机性变成一个可以主动调度的电源。这里我要特别强调一个容易踩的坑不要在IEEE 14节点的发电机目录里直接改一台火电为光热。光热和火电最大的区别是它的燃料太阳热受光照曲线约束——白天有限、夜间为零而且带储热后一天内的总发电量是受限的。所以必须单独建模光场集热和储热系统而不是简单地把火电的上下限改一改。4.5 结果可视化的几个建议做完模型求解你最关心的应该是这几个图正常工况下各类电源的日出力曲线看光热电站在白天和夜间的出力分配是否合理关键故障场景下的线路潮流分布选出1-2个最严重的N-2场景画出故障后各线路潮流确认没有越限储热系统SOC曲线看储热充放过程是否合理有没有出现频繁充放或者储热放空等异常现象有无N-k约束的成本对比柱状图这个图最说明问题——加了N-k约束之后成本上升了多少换来了什么安全裕度。用Matlab的plot和bar函数做这些图不算难但你最好把结果导出到Excel或结构体变量里方便后续做敏感性分析。我自己习惯把每次求解结果加个时间戳存到results文件夹里方便回溯。5. 实操案例IEEE 14节点上N-1与N-2结果对比5.1 场景设置与参数说明我在14节点系统上做了三组对比实验方案A不含N-k约束的传统经济调度方案B含N-1安全约束含所有线路和发电机故障方案C含关键N-2安全约束选取了系统中的关键双回线路同时故障场景。光热电站参数用前面表格里的配置储热容量6小时接入节点13。火电机组燃料成本用二次函数通过分段线性化处理成MILP可解的线性约束。5.2 结果数据成本上升与安全裕度三组方案的总运行成本如下方案总运行成本$/天较方案A上升比例故障场景数A无N-k约57,200基准0B含N-1约60,4005.6%约25C含关键N-2约63,10010.3%约15从结果可以看出安全约束确实不便宜——N-1安全约束让成本上升了约5.6%关键N-2约束更是让成本上升超过10%。这个成本增幅符合工程直觉为了确保在故障后不切负荷系统必须提前安排更多的机组在线运行、预留更多的旋转备用在正常工况下就会适当降低最便宜机组的出力。更直观的变化体现在光热电站的出力曲线上。方案A中光热电站偏向在电价峰值时段满发方案C加入了故障约束后光热电站的出力曲线变得更加平滑不再追求极端的峰值出力而是保留更多的储热容量以备在故障场景下快速调整——这从SOC曲线上看得很明显方案C的储热系统SOC曲线在中下午时段比方案A高出不少大概是10%-15%的额外储热余量。5.3 关键线路潮流的变化我还专门看了线路13-14光热接入节点附近的重载线路在所有方案下的潮流方案A中这条线路在晚间负荷高峰时段的潮流接近其热稳定极限的95%裕量很小方案B中潮流降到极限的85%以下因为模型明确考虑了这条线路开断后的潮流转移方案C中进一步降到80%左右。这说明N-k约束的安全价值不是抽象的——它直接约束了关键线路的负载率让系统在实际运行中有更充裕的安全裕度。5.4 从14节点移植到118节点的实操经验把同样的模型从14节点扩展到118节点并不是改个数据文件就能跑的事。我总结了三个核心坑坑一N-2场景全枚举直接爆炸。118系统的N-2场景接近28800个全枚举建进模型后YALMIP生成模型的时间都要好几分钟求解器内存直接吃满。解决办法就是我前面说的先用灵敏度分析和潮流转移分布因子PTDF筛选出关键场景把场景集压到300个以内。而且一定要在筛选时把大机组跳闸后潮流转移经过的重载线路这种场景优先纳入否则容易漏掉真正的危险场景。坑二数值病态问题。118节点系统的导纳矩阵维度大不同支路的电抗数值差异很大可能导致约束矩阵条件数过高。求解器容易出现numerical trouble的警告。处理办法是把功率、角度等变量统一改用标幺值(p.u.)同时检查是否有量级差异过大的约束系数。我在实际中把发电机的出力上下限、线路潮流极限都做了归一化处理数值稳定性立刻好了很多。坑三求解时间收敛慢。118系统的MILP模型含机组组合变量如果求解器用默认参数经常会在整数变量上卡很久。我的建议是给Gurobi设置合适的MIP gap比如1%或0.5%同时开启求解器的启发式算法。模型规模大时用一个近优可行解往往比等一个严格最优解实在得多。Gurobi里一行参数设置的事% 在调用Gurobi时设置参数 params.MIPGap 0.01; params.TimeLimit 1800; params.Heuristics 0.1;6. 常见问题与排查技巧实录6.1 模型无解或不可行大概率是约束冲突这是在做N-k安全约束时最经常碰到的问题而且新手遇到会特别崩溃——明明正常工况下模型可以求解加了N-k约束后直接infesible。我的排查顺序是先单独求解只有正常工况约束的模型确认基础模型可行依次加入单个故障场景找出第一个导致不可行的场景对该场景单独检查故障后功率平衡是否被破坏、备用容量是否不足、光热储热SOC是否合理如果是备用不足调整机组组合约束或放宽备用需求如果是潮流越限可能需要调整发电出力分配或者在该场景下允许极小量切负荷。在YALMIP里我习惯用optimize(Constraints, Objective, sdpsettings(verbose, 2))看求解器输出的约束冲突信息再结合check(Constraints)列出不满足的约束范围。这个方法虽然土但很有效。6.2 光热电站出力出现负值或者凭空发电这通常是因为缺少非负约束。光热电站的发电出力、储热放热功率、充热功率这些变量在物理上都不能为负。很多人在建模时只写了上限约束忘了下限约束求解器为了满足目标函数可能会出现负出力这种荒谬结果。解决方法是对每个相关变量显式加上 0的约束或者定义时直接用sdpsvar(n, T, full)然后加P_csp max(0, P_csp_raw)之类的处理——不过更好的方式还是老老实实写约束。6.3 故障场景的相角变量要不要参与目标函数不要。故障场景下的相角变量θ_s{s}只是用来表达故障后系统潮流状态的辅助变量它们不产生运行成本。如果目标函数里不小心把θ_s当作可调变量来优化求解器会通过调整这个虚拟变量来缓解故障场景下的越限得到的结果是虚假的——因为实际故障后系统不会去优化相角而是物理上被动响应。我在代码实现时会特意把故障场景的相角变量从目标函数涉及的变量集合中排除。这一点很容易被忽略但对结果的正确性影响极大。6.4 时变光热DNI数据怎么处理这个模型里的光热电站需要光照DNI曲线数据。如果手头没有实测数据可以这么做用典型的钟形DNI曲线从早上6点缓慢上升中午12-14点达到峰值下午18点降到零用NASA MERRA-2或PVGIS的公开太阳辐射数据选取一个代表日作为输入引入60%-70%的云遮挡系数来模拟多云天气看看光热出力对安全约束的响应。我个人建议在14节点验证阶段先用理想化的DNI曲线把其他变量的逻辑都调通了再换真实数据。不要一开始就纠结光照数据的准确性否则容易把问题搞复杂。6.5 N-2和N-1-1的区别很多初学者会把N-2和N-1-1搞混在建模时也经常弄错。N-2两个元件同时故障退出运行。比如双回线同时跳闸、两个独立元件同时故障。N-1-1一个元件故障后系统还没恢复另一个元件紧接着也故障了。这是时序性的连锁故障场景。在准静态安全约束经济调度模型里N-2通常直接用双故障后的稳态潮流校验来近似N-1-1则需要考虑第一个故障后系统运行状态的二次调整——这种时序问题在运行调度里更复杂通常要引入安全约束机组组合的多时段模型来处理。这个项目标题写的是N-k我在实现时主要做了N-2同时故障的处理N-1-1作为拓展方向留给了后续研究。如果你要复现建议先把N-1和N-2同时故障的逻辑跑通再考虑N-1-1的时序扩展。7. 实操总结与个人扩展建议整个项目做下来我最深的感受是N-k安全约束的价值不在于让模型算得更快而在于让调度方案从看起来省钱变成实际上敢用。在传统电网里安全约束经济调度早已是调度中心的标配在含高比例可再生能源的新型电力系统里光热电站这类可调度可再生能源的加入又给安全约束问题增加了新的维度和新的求解难度。做这类项目我觉得有几个能力是通用的一是场景意识。N-k安全约束的组合空间巨大同样一套模型14节点上全枚举是可行的118节点上就必须做场景筛选。你要学会从工程角度判断哪些场景是关键的——大机组跳闸、重载线路开断、关键断面故障——而不是盲目追求覆盖所有场景。二是模型与求解器的平衡感。同样是MILP问题建模方式不同求解效率差异可以到几个数量级。比如用分段线性近似代替二次成本函数、用直流潮流代替交流潮流、用场景筛选减少约束数量这些近似在工程上是完全合理的但你心里要清楚它们各自牺牲了什么精度、换来了什么效率。三是结果校验意识。无论模型跑出来多漂亮都要回到物理世界去校验光热的SOC曲线会不会出现负值有无出现故障场景下功率严重缺失计算结果的可视化不要只看曲线形态要对数值做合理性检查。至于后续的扩展方向我列几个自己觉得很有意思的把N-k约束换成概率性安全约束机会约束在安全性和经济性之间寻找更精细的平衡点考虑光热电站与风电/光伏的联合调度看看储热在消纳可再生能源方面的潜力引入多时段耦合的N-1-1约束模拟连锁故障的时序影响把模型从确定性调度扩展到两阶段鲁棒优化用场景集合来表示不确定的N-k故障集这在近年文献里是非常活跃的方向。最后给刚接触这个项目的朋友一个小建议不管你的目标是发论文还是做工程拿到代码后第一件事先在小系统上IEEE 14节点把模型跑通把每个约束的物理意义搞清楚再看它在大系统上的表现。不要一上来就挑战118节点全场景全约束——那种复杂度已经不是调代码能解决的了而是先要有清晰的建模方法论。这几天的实操经验写下来希望对正在做或者打算做这个方向的朋友有一点帮助。光热加安全约束的组合在双碳背景下会越来越值得关注——毕竟电网的安全底线永远不能被经济性优化挤掉。
返回列表