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

资讯详情

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

含碳捕集与电转气协同的垃圾焚烧虚拟电厂优化调度

含碳捕集与电转气协同的垃圾焚烧虚拟电厂优化调度 这个题目我刚好近期完整跑过一版项目编号直接写着计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度用Matlab从建模到求解全部走了一遍。当初接到这个需求的时候第一反应是碳捕集、电转气、垃圾焚烧这三个东西单独做优化调度的论文和代码都不少但把它们拧在一个虚拟电厂框架里协同调度的确实值得好好理一遍底层逻辑。这篇就把我这一轮从模型搭建、约束梳理、代码实现到仿真调试的完整过程写出来里面有推导、有代码片段、有踩坑记录给正在做同类课题或者工程项目的朋友一个可以直接上手的参考。1. 为什么碳捕集电转气垃圾焚烧要绑在同一个虚拟电厂里1.1 虚拟电厂聚合的底层商业逻辑虚拟电厂VPP说白了就是把分散的分布式电源、储能、可控负荷聚合起来以一个整体参与电力市场或者接受调度指令赚取规模效益。但虚拟电厂不能只是把设备放一起就完事它真正的价值在于设备之间有能量流、碳流、信息流的互补关系。垃圾焚烧发电这种城市固废处理设施连续运行特性强出力稳定但调峰能力有限可再生能源波动大需要其他成员帮它填坑或消纳储能能平移电量但改变不了碳排总量。这几样拼在一起如果不考虑碳捕集和电转气本质上就是一个传统的机组组合经济调度问题没有什么新意。所以这个题目真正的核心是把**碳捕集CCS和电转气P2G当作虚拟电厂内部的碳-气-电耦合节点**来建模。碳捕集负责把垃圾焚烧和燃气机组排放的CO₂从烟气里分离出来电转气负责把多余电能转成氢气/天然气同时消耗CO₂合成甲烷。这样一来虚拟电厂内部就有了一个完整的闭环焚烧发电产生碳排放碳捕集捕获碳电转气把碳利用掉产出的合成气又能存储或供气。这就是组合的价值所在。1.2 三种技术组合的独特互补性单独看每项技术各有各的痛点垃圾焚烧机组运行稳定性要求高焚烧炉不能随意启停且碳排放强度不低。它发电越多碳排放越高在碳约束收紧时会被卡脖子。碳捕集装置本身很耗能再沸器蒸汽、泵功等如果单纯为了捕碳而捕碳可能把厂用电成本抬高甚至影响整体经济性。电转气装置需要消耗大量电能和CO₂如果电网侧没有多余新能源电P2G从外部买电来制气成本高且意义不大。把它们放一起之后互补性就出来了垃圾焚烧的稳定出力给碳捕集提供了持续捕碳的条件碳捕集分离出的高浓度CO₂直接供给P2G省去了CO₂运输和封存的成本P2G在风电光伏大发、电价低甚至弃电的时段开工既消纳了可再生能源又利用了碳捕集产出的CO₂合成的天然气还可以储起来在负荷高峰由燃气机组发电或直接外售。一个模型里面能源流、碳流、资金流全串起来了。1.3 这类模型到底解决什么问题说得直白一点这个模型解决的是三个层面的问题碳约束下的经济调度在碳交易机制下怎么安排各机组出力让总成本运行成本碳交易成本最低而不是单纯电成本最低。电转气消纳弃电与跨周期储能什么时候开P2G开到多大功率储气罐容量怎么释放才能最大化消纳新能源。碳捕集与电转气的负荷协同碳捕集和P2G都是耗电大户它们同时运行可能造成厂内用电紧张需要统一调度错开峰值。对研究生来说这是一个典型的MILP混合整数线性规划建模练习对工程从业者来说这是虚拟电厂聚合商参与现货市场、碳市场时做日前决策的雏形。这套代码框架改一改边界条件就能应用到园区微电网、综合能源系统等场景。2. 系统建模从物理过程到可求解的数学表达2.1 垃圾焚烧机组热电联产与最小出力约束垃圾焚烧机组建模不能简单当成普通火电机组。焚烧炉-余热锅炉-汽轮机这条链路上最关键的两个约束是最低技术出力焚烧炉维持热解燃烧需要最低垃圾投料量和辅助燃料所以机组出力下限通常较高比如额定容量的40%~50%不能像燃气机组那样压到很低的负荷率。热电联产特性很多垃圾焚烧厂还承担供热任务电出力与热出力存在耦合关系。本文模型里为了聚焦调度主问题我简化为固定热电比下的电出力范围约束如果需要做热负荷平衡可以在热电比约束里加一个灵活区间。出力上下限和爬坡约束写成标准形式P_waste_min ≤ P_waste(t) ≤ P_waste_max -u_waste_dn ≤ P_waste(t) - P_waste(t-1) ≤ u_waste_up其中启停变量用二进制变量控制。值得注意的细节是垃圾焚烧机组一天内尽量不要出现频繁启停所以我在模型中加了最小开机/停机时间约束用二进制变量与状态递推式实现虽然增加了整数变量个数但换来的是更符合实际的调度方案。2.2 碳捕集系统能耗模型与捕集率变量碳捕集系统我采用常见的燃烧后化学吸收法等效模型不深究塔器内部反应只关注捕了多少碳、花了多少电/热。核心参数是烟气排放强度 e_wastet CO₂/MWh决定机组出力对应的碳排放总量碳捕集率 η_capture比如0.85~0.95是一个可调变量单位捕集能耗 λ_ccsMWh电/t CO₂这部分能耗通过厂用电消耗体现。于是碳捕集量 Q_capture(t) η_capture(t) × e_waste × P_waste(t)捕集系统耗电 P_ccs(t) λ_ccs × Q_capture(t)。卡点在于捕集率本身作为一个决策变量时Q_capture(t) 会和 P_waste(t) 相乘形成双线性项。处理方式我放在第3节单独讲。这里先说结论实际工程中更常见的是设几个固定档位比如捕集率0.85/0.9/0.95三档用整数变量选择档位转化为可解的MILP学术论文中喜欢做连续变量并引入McCormick松弛或Big-M分段线性化。2.3 电转气系统电解、甲烷化与碳流约束电转气系统顺着工艺流程拆成两段电解水制氢段和甲烷化段。简化模型如下P2G耗电 P_p2g(t) → 制氢流量 F_h2(t) η_elec × P_p2g(t)甲烷化反应 CO₂ 4H₂ → CH₄ 2H₂O氢与碳的摩尔比是4:1换算成质量比消耗CO₂的重约等于产氢量的5.5倍简化处理后P2G消耗的CO₂流量 α_co2 × P_p2g(t)α_co2 大概在0.10~0.15 t/MWh之间取决于电解效率和中间损耗产气流量 F_ch4(t) η_p2g × P_p2g(t)最终进储气罐或售出。P2G的约束包含运行功率范围、爬坡限制电解槽响应快但甲烷化反应器有温度惯性我会给一个偏保守的爬坡率以及储气罐的容量与压力上下限P_p2g_min ≤ P_p2g(t) ≤ P_p2g_max SOC_gas(t1) SOC_gas(t) F_ch4(t) - F_ch4_out(t) 0 ≤ SOC_gas(t) ≤ C_gas_max这里的F_ch4_out是供给燃气机组或外售的天然气流量燃气机组如果直接烧这个气它的发电量就要和储气罐的放气量做耦合约束避免出现一边放气一边买气的笑话调度结果。2.4 常规机组、储能与可再生能源除了上面三个主角虚拟电厂里还需要常规燃气机组、储能和风/光出力。这套模型里我把它们作为基础成员燃气机组带二进制启停变量爬坡约束燃料成本用二次函数近似后分段线性化储能电池SOC连续变量充放电功率约束充放电效率分开设避免同一时段既充又放风电/光伏按预测曲线给定允许弃风弃光弃风弃光的代价可以设为一个惩罚项或者机会成本这直接影响P2G为什么要耗电的决策。到这里物理层建模基本完成。从流程上看垃圾焚烧和燃气机组出力→碳排放→碳捕集→碳流量供给P2G→P2G产气进储气罐→燃气机组用气这条链路贯穿了虚拟电厂内部的碳循环。3. 协同调度的数学模型目标函数与约束体系3.1 目标函数成本项逐项拆解目标函数设置为系统总运行成本最小化这是一天24小时日前的经济调度。各项成本拆开看min Σ_t ( C_fuel_waste(t) C_fuel_gt(t) C_om(t) C_co2_trade(t) C_grid(t) C_curtail(t) )C_fuel_waste垃圾焚烧的辅助燃料成本和垃圾处理变动成本。很多项目中垃圾处理会收取处理费这里我把补贴收入做成负成本项也可以单独列收入项。C_fuel_gt燃气机组燃料成本与出力二次相关分段线性化。C_om各设备的运行维护成本按出力线性折算。C_co2_trade碳交易成本等于碳价 ×实际净排放 − 免费配额。C_grid与上级电网的购售电费用购电为正、售电为负分时电价波动会在算例里体现。C_curtail弃风弃光惩罚用于驱动P2G和储能去消纳新能源。P2G产气如果外售应该放在收入项里处理R_gas gas_price × F_ch4_out(t)。售卖收入会显著改变调度策略尤其是电价低、气价高的时段P2G完全可以当成气工厂来赚钱。3.2 功率平衡与碳-气耦合约束系统的核心平衡约束是电功率平衡P_waste(t) P_gt(t) P_wind(t) P_pv(t) P_discharge(t) P_buy(t) P_load(t) P_charge(t) P_ccs(t) P_p2g(t) P_sell(t)这个约束里碳捕集耗电P_ccs和P2G耗电P_p2g是作为负荷出现在等式右侧的它们越大留给负荷的净供电就越少。这跟传统机组组合里厂用电的概念一致只是这里厂用电变成可控决策变量而且还能通过捕碳、产气来创造收益。碳平衡约束是电站层面的E_emission_total(t) e_waste × P_waste(t) e_gt × P_gt(t) Q_capture(t) ≤ η_capture_max × E_emission_total(t) Q_co2_p2g(t) α_co2 × P_p2g(t) Q_capture(t) ≥ Q_co2_p2g(t) Q_co2_to_storage(t)最后一条约束的含义是碳捕集装置捕下来的碳一部分给P2G用掉另一部分压缩后送去封存或外售捕集量必须不小于两者之和。如果模型里允许直接排放而不受惩罚优化器就会偷懒把捕集率降到最低所以碳交易成本和配额约束在这里起关键作用。气网侧约束则连接P2G产气、储气罐和燃气机组F_ch4(t) F_gas_buy(t) SOC_gas(t) - SOC_gas(t-1) ≥ b_gas × P_gt(t) F_ch4_sell(t)其中b_gas是燃气机组单位出力的耗气系数。这里允许从外部买气但买气价格要设得比P2G制气成本高否则P2G就没有存在意义了。3.3 双线性项的处理技巧这一节是建模时最容易卡住的地方重点展开。碳捕集量表达式里捕集率η_capture与机组出力P_waste相乘如果两个都是连续变量问题就变成非凸的求解难度陡增。我推荐三种做法固定捕集率法把η_capture设为常数比如0.9碳排放量直接乘以0.9就完事。简单粗暴适合做基础版本。档位选择法η_capture_k ∈ {0, 0.85, 0.9, 0.95}引入二进制变量z_k让捕集率从离散档位中选Q_capture Σ_k η_k × z_k × e_waste × P_waste。这里仍然有z_k乘P_waste的乘积项不过因为P_waste有硬上下限可以用Big-M处理为线性约束。McCormick松弛对连续η_capture × P_waste做双线性松弛引入辅助变量W_t用上下界构造一组不等式逼近。这个做法精确度可控但会增加变量和约束规模。我最终用的是档位选择法因为实际碳捕集装置调整捕集率需要稳定运行工况连续大幅度调节并不可行离散档位更贴近工程实际。Big-M处理乘积项的写法在第4节给出。3.4 碳排放配额与碳交易机制建模碳排放配额按机组类型分别核给垃圾焚烧和燃气机组各有配额配额不够就要买。碳交易成本项C_co2_trade(t) carbon_price(t) × ( E_net(t) - E_quota(t) )E_net(t)为机组直接排放减去捕集量E_quota(t)为免费配额。当E_net小于配额时碳排放权富余这一项为负等于卖配额赚钱。碳价的设置对模型行为影响极大碳价低于捕集成本时优化器会选择少捕碳直接买配额碳价高于捕集能耗成本时碳捕集会满负荷运行甚至有富余碳权出售。这类分析在灵敏度测试里特别能出彩。4. Matlab实现模型落地与求解器选型4.1 为什么选MatlabYalmipCPLEX/Gurobi代码实现层面Matlab搭配Yalmip工具箱是最省事的路线。Yalmip像是建模语言层把优化变量、约束和目标函数用接近数学表达式的语法写出来底层再调用CPLEX或Gurobi求解MILP。相比直接调CPLEX的C API或者Matlab自带的linprog/intlinprogYalmip能省掉大量矩阵系数组装的时间模型改起来也快。我这台机器装的是Matlab 2022b用的求解器是Gurobi 10.0许可证是学术授权。如果你的环境里只有Matlab自带的intlinprog中小规模算例也能跑只是求解速度慢不少。我下面代码兼容两者你只需要替换solver名称。4.2 代码架构和数据流设计整个工程分成四个文件data_case.m录入负荷、风电、光伏、电价的24小时序列以及各设备参数build_model.m定义决策变量、参数、约束和目标run_case.m主脚本调Yalmip建模调求解器输出结果并画图plot_results.m结果可视化出功率平衡图、碳流图、成本构成饼图。数据流是这样的data_case跑完输出结构体paramsbuild_model读params生成Constraints和Objectiverun_case里用optimize求解得到results结构体plot_results读results画图。代码分层清晰后面想改参数测灵敏度只需要改data_case里的数值就行。4.3 核心约束的代码写法决策变量定义片段这里我给出实际能跑的代码%% 变量定义 nHours 24; % 机组出力与状态 P_waste sdpvar(nHours, 1, full); % 垃圾焚烧出力 MW u_waste binvar(nHours, 1); % 焚烧机组启停 1/0 P_gt sdpvar(nHours, 1, full); % 燃气轮机出力 MW u_gt binvar(nHours, 1); % 燃气轮机启停 % 碳捕集与电转气 P_ccs sdpvar(nHours, 1, full); % 碳捕集耗电 MW Q_cap sdpvar(nHours, 1, full); % 碳捕集量 t/h P_p2g sdpvar(nHours, 1, full); % P2G耗电 MW Q_co2_p2g sdpvar(nHours, 1, full); % P2G消耗CO2量 t/h gas_soc sdpvar(nHours 1, 1, full); % 储气罐SOC t % 储能 soc sdpvar(nHours 1, 1, full); % 电储能SOC MWh P_ch sdpvar(nHours, 1, full); % 充电功率 P_dis sdpvar(nHours, 1, full); % 放电功率 % 电网交互 P_buy sdpvar(nHours, 1, full); P_sell sdpvar(nHours, 1, full); P_curt_wind sdpvar(nHours, 1, full); P_curt_pv sdpvar(nHours, 1, full);碳捕集档位选择与Big-M处理写法%% 碳捕集建模三档捕集率 eta_cap [0; 0.85; 0.9; 0.95]; z_eta binvar(nHours, 4, full); % 每时段选择哪一档 constraints [constraints, sum(z_eta, 2) 1]; % 每时段只能选一档 Q_cap sdpvar(nHours, 1, full); for t 1:nHours % Q_cap eta_cap(k) * e_waste * P_waste(t)选中的档位生效 constraints [constraints, ... Q_cap(t) 0, ... Q_cap(t) e_waste * P_waste_max(t), ... Q_cap(t) e_waste * (sum(eta_cap .* z_eta(t,:)) ... ) * P_waste(t) M * (1 - sum(z_eta(t,:)))... ]; end这里M是一个足够大的正数比如1000。不过说句实话档位选择加Big-M写起来绕我第一次实现时直接用固定捕集率0.9跑通整条链路确认逻辑无误后才升级成多档位的。新手建议同样分两步走先固定捕集率出结果再上档位选择。P2G与碳流约束%% P2G约束 alpha_co2 0.12; % t CO2/MWh 电取决于电解甲烷化综合效率 eta_p2g 0.6; % 电转气综合效率热值折算 gas_price 4.5; % 元/m3 或者按热值折算 F_ch4 eta_p2g * P_p2g; % 产气量按热值折算 Q_co2_p2g alpha_co2 * P_p2g; constraints [constraints, ... 0 P_p2g 10, ... % P2G额定容量10MW -2 P_p2g(t1) - P_p2g(t) 2, ... Q_cap(t) Q_co2_p2g(t), ... % 捕碳量够P2G用 gas_soc(t1) gas_soc(t) F_ch4(t) - F_gt_gas(t), ... 0 gas_soc(t) 50, ... F_gt_gas(t) bg_gt * P_gt(t)]; % 燃气轮机耗气约束这个片段为了可读性做了简化你实际跑的时候需要处理边界t与t1的关系。还有一点gas_soc(nHours1)要设成等于gas_soc(1)表示日循环的储气罐首尾一致否则优化器会把储气罐里的气用到最后一天全放空结果是好看的实际确是钻了模型空子。4.4 求解参数设置和结果输出Gurobi参数设置直接通过sdpsettings传ops sdpsettings(solver, gurobi, verbose, 2, ... gurobi.MIPGap, 0.01, ... gurobi.TimeLimit, 300, ... gurobi.NumericFocus, 1); result optimize(constraints, Objective, ops); if result.problem 0 disp(求解成功); else disp([求解失败: result.info]); endMIPGap设1%对日前调度这种应用足够了继续加压只会白白浪费计算时间。求解完成后把sdpvar的值通过value()函数提取出来存进results结构体再交给plot_results画图。画图部分我通常出四张子图机组出力时序图、碳捕集与P2G运行图、储能SOC与储气罐SOC图、成本构成柱状图。一张图能直接看出各时段决策是否合理省得逐行翻数据。5. 仿真算例三种场景对比与结果解读5.1 算例参数设置算例参数我用一组偏常规的数据便于对照复现。虚拟电厂容量配置如下设备参数数值垃圾焚烧机组额定容量30 MW垃圾焚烧机组最小出力15 MW垃圾焚烧机组碳排放强度0.8 t/MWh燃气轮机额定容量50 MW风电额定容量60 MW光伏额定容量40 MW储能容量/功率20 MWh / 10 MW碳捕集捕集能耗0.25 MWh/tP2G额定容量10 MWP2GCO₂消耗系数0.12 t/MWh储气罐容量50 m³ 等效热值碳价基准场景60 元/t负荷峰值180 MW风/光预测曲线设成典型的晚峰低风、午间光伏大发形状分时电价峰谷差三倍左右。免费碳配额设得比实际排放略紧让碳交易成本真正影响决策。5.2 场景设计与对比结果我设计了三个场景做对比场景A无碳捕集、无P2G只有机组储能风光传统VPP调度。场景B加入碳捕集但没有P2G捕集到的CO₂直接封存。场景C碳捕集P2G协同完整模型。三组结果放一起看规律非常明显指标场景A场景B场景C总运行成本万元36.839.233.5碳排放净量t780390270弃风弃光率8.5%7.2%1.8%碳交易支出万元8.22.11.4场景B单独上碳捕集虽然碳排放降了一半但总成本反而升高因为捕碳耗电抬高了厂内负荷需要从电网买更多高价电碳交易节省的钱抵不过购电增加的钱。到了场景CP2G把夜间低价的弃风电量转化为天然气白天供燃气机组顶峰发电同时消耗掉碳捕集产出的CO₂相当于用弃电废碳制造了有价值的气体能源总成本反而比无碳捕集的场景A还低了约9%。这说明协同调度的价值不是技术叠加而是机制咬合。更细地看C场景的时序结果午夜0点到4点风电大发且电价低谷P2G满功率运行储能也同步充电碳捕集在白天和傍晚高电价时段降功率因为这时候耗电的机会成本太高燃气机组集中在晚上负荷尖峰时段烧储气罐里的合成气替代了高价购电。这套行为逻辑完全符合预期模型在该消纳的时候消纳该利用的时候利用该省的时候省。5.3 关键灵敏度分析灵敏度测试是这类项目的加分项也是审稿人或领导最爱问的部分。我额外跑了两组碳价从30元/t扫到120元/t看碳排放量变化P2G综合效率从0.45变到0.7看系统总成本变化。碳价升高时碳捕集率从低档逐步切到高档碳排放量阶梯式下降但总成本在碳价超过80元/t后反而加速上升原因是捕碳能耗导致购电增加。P2G效率的灵敏度更直接效率从0.45到0.6这段总成本下降非常快超过0.6之后曲线变平说明此时限制P2G产能的不再是效率而是储气罐容量和CO₂供应量。这个结论对工程选型很有意义——P2G效率做到60%以上时再去堆效率不如扩大储气库容量或提高碳捕集率。6. 调试中的坑与建模经验总结6.1 单位量纲是第一个坑这个项目最容易翻车的地方不在模型逻辑而在单位。功率用MW、电量用MWh、碳排放用吨、气量用m³或者GJ混在一起非常容易出量级错误。比如碳排放强度0.8 t/MWh一台30MW机组满发一天排放0.8×30×24576吨。但如果你把时间单位写成秒、或者把功率单位换算错捕集量就会差出几十倍求解出来的方案会变成捕集功率比机组出力还大的荒唐结果。我的做法是在data_case里面把所有参数统一成基础单位三元组功率一律MW时间一律h能量一律MWh碳量一律t气热值一律GJ。每个参数写一行注释注明来源依据。跑完模型先打印总电量平衡看看供给侧总电量与负荷耗电之间是否闭合误差超过0.01 MWh就回头查数据。6.2 求解器报不可行的排查链路MILP模型最常见的失败就是返回infeasible problem。我第一次跑这个模型时也中招了。排查思路按下面这个顺序来先查功率平衡等式把等式约束直接拿掉看看求解器能不能求出可行解。如果能说明是等式过紧再逐步加回。查储能和储气罐首尾约束gas_soc(25)gas_soc(1)这种约束和充放电功率上下限联立很容易出现一天总充能量大于总放能量损耗上限的隐含矛盾。查Big-M取值M取太小会把可行域切掉取太大又可能造成数值病态。一般M取相关变量理论上限的5~10倍。查碳捕集量与P2G碳需求的先后关系如果捕集率档位设死在高档而机组最小出力对应的捕碳量小于P2G最大碳需求那Q_cap(t)Q_co2_p2g(t)直接无解。Yalmip里可以用check(constraints)逐条检查约束余量找出余量为负的那几条基本就是问题所在。6.3 结果合理性校验的三板斧模型求出的解再漂亮也要过三个合理性校验看机组启停是否太频繁如果燃气机组每15分钟开停一次多半是爬坡约束没写对或者启停成本设置太低。看P2G和储能是否互相对倒如果出现P2G耗电制气→燃气机组即时发电→储能同时充电这种循环说明目标函数里电价与气价的关系没设好产生了套利漏洞。看碳捕集装置的运行模式如果碳捕集率在低谷时段反而调低就违背了低电价时成本低、应该多捕碳的经济直觉。出现这种情况要检查是不是把捕集能耗成本项漏写了或者能耗参数设得过于夸张。第一版跑出来的结果P2G在电价最高的晚峰时段满负荷运行我当时觉得不对劲一查是储气罐放气约束没有和燃气机组联立导致P2G变成只产气不用气的纯粹电-气套利工具。这种结果经济上说得通但在工程实际里挺荒唐的所以模型的耦合约束不能省。6.4 仿真效率优化完整模型带两台机组的启停、碳捕集三档选择、储能SOC等整数变量规模大概在800~1200个变量、2000~3000条约束之间。Gurobi求解时间通常在5~20秒。如果你发现求解时间超过两分钟优先检查是不是有冗余的Big-M约束拖慢了分支定界速度。一个实用技巧是先求解一个不加二进制变量的松弛版本看下界与整数解的差距如果MIPGap长期降不下去就去搜哪类整数变量在解里频繁震荡给对应的启停成本加一点平滑项能显著收敛。另外Matlab里用Yalmip时循环写约束尽量避免在for循环里拼接sdpvar表达式尽量用矩阵运算整体构造。我一开始用for循环拼接6000条约束建模时间花了三分钟改成向量化写法之后建模时间降到10秒以内。7. 一些经验性的扩展方向代码和算例都跑通之后这套框架可以往几个方向扩展。我目前在实际研究里比较看好的三个方向是多时间尺度调度日前日内滚动修正P2G和储能作为跨时段资产会更有用考虑风光不确定性的鲁棒优化或随机规划废物焚烧和碳捕集这类连续运行设备对不确定性很敏感鲁棒模型能给出更保守但可执行的方案以及把碳捕集与P2G联合参与碳市场和辅助服务市场把收益项做得更丰富。最后分享一个小技巧调试这种多能量流耦合模型时最好在代码里保留一个物理量平衡校验脚本每次求解完自动检查电平衡、热平衡、碳平衡、气量平衡。别小看这个脚本有好几次我以为是求解器出了问题最后都是这个平衡校验脚本帮我抓到数据录入或变量索引的错位。做这类虚拟电厂优化调度项目模型本身不难难的是让每个平衡都闭合、每个参数都有依据。把这套基本功练好以后换任何场景都只是一个改参数的事。
返回列表