先定义CSP的核心变量
67-考虑光热电站的综合能源系统优化调度模型 摘要:代码主要做的是含有光热电站的综合能源系统优化调度模型,共做了四个算例,分别对比了目标函数一次、二次、考虑弃风弃光、碳排放等四个算例,综合能源系统主要设备包括光热电站、风光机组以及热电联产机组,其中对光热电站的建模较为详细,约束包括爬坡约束、功率平衡约束等,是学习光热电站和综合能源系统的入门级且包括多个算例对比,从而可以形成体系,供学习理解
刷到西北电网去年夏季某周的新闻截图就气笑:白天河西走廊的光伏板晒得发烫,弃光电量堆得够给兰州城关区开三天空调;晚上7点到10点饭点+通勤高峰刚结束、空调电视全开的档口,火电满负荷还得喊援疆煤支援,现货电价一度冲到一块五——风光就像“脾气爆的间歇性朋友”,喊它干活的时候摸鱼,没人用的时候玩命造,这时候带储热罐的光热电站(CSP)就登场了,简直是能源圈的“贴心管家+稳定供货商”。
今天就扒一个入门级但很全的综合能源系统(IES)优化调度模型,连代码带四个不同算例的对比都有,新手直接跟着跑一遍就能搞懂IES调度咋回事,CSP在里面为啥香。
先搭个架子:这套IES有啥宝贝设备?
别搞太复杂的多能流耦合,入门先抓电-热双核心就行,毕竟现在国内搞的最多的就是带热用户的园区级IES。模型里放了这几个:
- 光伏(PV)、风电(WT):间歇性朋友,风光大发是烦恼也是潜在省钱项;
- 带储热罐的抛物槽式光热电站(CSP):今天的主角!白天可以选“直接发电/把太阳能存进储热罐/一半存一半发”;晚上或者风光不够的时候,掏储热罐里的熔盐加热水/油发电,还能直接抽点高温蒸汽给热用户供暖(夏天就抽一部分转制冷,不过代码里为了简化先算冬季场景);
- 热电联产机组(CHP):煤改气后园区常用的,“以热定电”或者“以电定热”都行,但入门选“以热定电”更贴近实际工程(供暖不能断);
- 电锅炉(EB):应急补热的,白天电价低、弃风光多的时候开,把废电变废宝;
- 电网、热网:可以和大电网买/卖电,热网是自己的小区域,不用买/卖。
入门先看核心代码逻辑:CSP建模是重点!
代码用的是Python的Gurobi库(新手如果没有License,换成免费的CPLEX Community Edition或者PuLP改改约束变量就行,逻辑一样)。直接上最关键的CSP约束片段:
# P_csp_gen:CSP直接/间接用储热发的电功率,MW
# Q_csp_col:抛物槽集热场收集的太阳热能,MW
# Q_csp_to_tes:集热场存进储热罐的热能,MW
# Q_tes_to_csp:储热罐掏给CSP发电的热能,MW
# Q_tes_to_load:储热罐直接掏给热用户的热能,MW
# E_tes:储热罐里的储热量,MWh(相当于储能的SOC,但这里是热单位)
# 约束1:集热场的能量守恒——收集的太阳能要么发电要么存
for t in range(T):
model.addConstr(Q_csp_col[t] == P_csp_gen[t] * eta_csp_gen + Q_csp_to_tes[t] + slack_q_csp_col[t], name=f'CSP_col_energy_{t}')
# eta_csp_gen:CSP的热电转换效率,一般抛物槽式是0.35-0.4
# slack_q_csp_col:松弛变量,万一集热场收集的太少,Gurobi不会报错,但我们会在目标函数里给它加个大惩罚(模拟浪费的太阳能可惜,但不算弃光弃风考核项)
# 约束2:储热罐的能量守恒——当前储热=上一刻储热+存的-掏的-损耗
for t in range(1, T):
model.addConstr(E_tes[t] == E_tes[t-1] * (1 - delta_tes) + Q_csp_to_tes[t-1] * eta_tes_in - Q_tes_to_csp[t-1] / eta_tes_out - Q_tes_to_load[t-1] / eta_tes_out, name=f'TES_energy_{t}')
# delta_tes:储热罐的小时损耗率,一般保温好的话是0.01-0.02
# eta_tes_in/out:储热罐的进/出热效率,一般0.95以上
# 约束3:储热罐的容量和爬坡约束(不能一下子存满/掏光,不然熔盐泵坏得快)
for t in range(T):
model.addConstr(E_tes_min <= E_tes[t] <= E_tes_max, name=f'TES_cap_{t}')
model.addConstr(Q_csp_to_tes[t] <= Q_tes_in_max, name=f'TES_in_max_{t}')
model.addConstr(Q_tes_to_csp[t] + Q_tes_to_load[t] <= Q_tes_out_max, name=f'TES_out_max_{t}')
这段代码的核心思想就是把CSP的储热罐当成“热电池”用——白天风光好电价低甚至弃光弃光要扣钱的时候,我们尽量让风光自己发电卖(如果允许)或者自己用,不够再让CSP直接发,多余的太阳能全存进储热罐;晚上风光差电价高的时候,掏储热罐发电补缺口,顺便掏点补热,减少CHP和电锅炉的消耗(这俩费钱/费天然气啊)。
四个算例对比才是灵魂:能直观看到CSP的好处!
算例选的是北方某工业园区冬季典型日(24小时,热负荷从早8到晚10高,其他时间低;电负荷早7到晚11高,风光白天10-16点高,晚上几乎没有)。直接上算例设计和对比结果的“人话翻译”:
算例1:最简单的成本模型——目标函数只有一次运行成本
一次运行成本就是买天然气给CHP烧的钱+从大电网买电的钱-卖给大电网的钱。
运行结果:CSP白天直接发满电(因为光电转换效率固定,存起来好像没差?不对,是因为算例1没考虑弃光弃风考核,也没考虑二次成本(比如设备启停、爬坡的损耗),CHP也只烧最便宜的基荷天然气。风光白天发的电自己用不完就卖给电网,但是园区小,电网接入口容量有限,卖不了多少——算例1总运行成本大概28万块。
算例2:加了二次成本——目标函数是一次+二次
二次成本就是CHP的爬坡成本+CSP的爬坡成本(模拟设备频繁调负荷的维修损耗)+电锅炉的启停成本。

67-考虑光热电站的综合能源系统优化调度模型 摘要:代码主要做的是含有光热电站的综合能源系统优化调度模型,共做了四个算例,分别对比了目标函数一次、二次、考虑弃风弃光、碳排放等四个算例,综合能源系统主要设备包括光热电站、风光机组以及热电联产机组,其中对光热电站的建模较为详细,约束包括爬坡约束、功率平衡约束等,是学习光热电站和综合能源系统的入门级且包括多个算例对比,从而可以形成体系,供学习理解
运行结果:CSP白天不直接发满了!而是发一部分基荷,剩下的存进储热罐——晚上风光没了,用储热罐慢慢掏出来发电补CHP的基荷调峰缺口,不用CHP频繁爬坡(CHP爬坡成本挺高的,大概每MW·h调峰加200块)。算例2总运行成本反而降到了26.5万块——二次成本加了,但一次成本降得更多!
算例3:加了弃风弃光考核——目标函数是一次+二次+考核
弃光弃光考核是每MW·h弃光扣500块,每MW·h弃风扣600块(风考核更严因为风更难预测)。
运行结果:CSP白天集热场直接拉满收集太阳能!风光发的电全自己用(包括园区电负荷、电锅炉补热),实在用不完再给CSP集热场加个辅助电加热器?哦不对代码里集热场只有太阳能,但可以让CSP白天少发电甚至不发电,集热场存的热翻倍!晚上掏出来发电补所有缺口,连CHP都只烧最低基荷(满足热负荷就行)——算例3没有弃风弃光!总运行成本降到了25.8万块!爽啊!
算例4:终极环保模型——目标函数是一次+二次+考核+碳排放成本
碳排放成本是每kgCO₂扣0.1块(模拟国内碳交易市场的价格),烧1m³天然气大概排2kgCO₂。
运行结果:和算例3差不多,但CSP直接掏储热给热用户的比例更高了,CHP几乎只烧到满足最低“电热比”(以热定电的电热比一般是1.2-1.5)的天然气量,连电锅炉都只在风光实在用不完的12-14点开——算例4碳排放只有算例1的30%!总运行成本略涨一点,26.2万块,但环保贡献拉满,未来碳交易价格涨上去的话肯定赚。
最后说点新手踩过的坑
- 储热罐的容量别选太大或太小:太大占地方费钱,太小存不住多余的太阳能,入门选“能存白天集热场收集的40%热能”就行;
- 松弛变量的惩罚系数要给够:不然Gurobi会为了省一点钱,浪费大量的太阳能或者弃光弃风;
- 算例对比的时候,除了看总运行成本,还要看各设备的出力曲线:比如算例3的CHP出力是平的,说明CSP帮它调峰了,这才是CSP的核心价值。
这个模型的完整代码我放在GitHub的Gist上了,直接搜“含CSP的IES入门调度模型4算例”就能找到,新手直接复制粘贴改改风光出力、负荷数据、价格参数就能跑。赶紧去试试吧!

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)