【城市低碳发展规划】LEAP模型攻略

在国家双碳政策的要求下,各省市政府制定地方双碳行动方案已成为一大趋势。由于碳排放的概念在近一年来才得到广泛重视,地方政府在进行低碳发展规划时往往会需要寻求高校或科研院所的支持。我最近在承担的课题组项目任务中最主要的任务同样也是对城市的低碳发展进行规划。我也一直在思考,学者应当如何才能够帮助地方政府制定科学有效并符合发展规律的碳达峰、碳中和行动方案? 借用公众号开一个“城市低碳发展规划“的专题,不断总结自己的学习和工作心得,以便于形成一套完整规范的分析方法和模式。
模型工具往往是刚接触一个分析领域最为关注的事情。 先上手模型工具,再在不断试错中熟悉概念和流程,形成观点和认识,不失为一套非常有效的研究方式 。在城市低碳发展规划中,LEAP模型(The Long-range Energy AlternativesPlanning System,长期能源替代规划系统模型)是一个应用非常广泛的工具。前段时间由于项目需要,我不得不硬着头皮学LEAP模型。但仅仅挣扎了半天之后,我发现这是一个容易上手且非常有用的工具。后来发现身边不少同学有学习LEAP模型的需求。因此,本文将主要对LEAP模型写一篇攻略文,帮助小伙伴们快速上手。LEAP模型特点和基本逻辑


LEAP模型的官网是https://leap.sei.org/,可从网站下载软件、申请账号、获得权限(分教育版和收费版,学生可通过学校的邮箱申请免费版)。

对于初学者而言,LEAP模型可视为一个功能强化版的Excel。当然在碳排放核算中相比Excel还是具有很多突出的优点,重点体现在如下几个方面:一、便捷处理时间序列输入;二、可有效进行复杂的情景分析;三、拥有庞大的底层排放因子数据库;四、强大的能源系统分析模块。总体上讲,LEAP的学习不必有任何压力,LEAP能做的事情Excel基本上也能做,但LEAP能够更快更方便地做。

打开LEAP模型,是一个名叫Freedonia的地区的case,可以就这个地区理解一下LEAP模型的原理。LEAP将碳排放的来源分成四类(如下图所示),Demand是终端能源消费,Transformation是能源转换,Resources是资源进出口,Non energy是非能源相关的碳排放。在核算碳排放时要有一个概念,大部分碳排放来自于化石能源的燃烧,还有一部分碳排放计算时和化石能源无关,例如考虑土地利用变化、森林碳汇、工业过程(水泥熟料中碳酸钙分解)、一部分非温室气体(垃圾填埋产生的甲烷)。LEAP模型核心还是能源系统模型,因此在Nonenergy部分仅提供非常简化的输入。因此,在选用LEAP模型做地区低碳发展规划时,首先要评估该地区的碳排放是否以能源相关为主。


Demand, Transformation和Resources构成了一个地区能源相关碳排放的核算逻辑。Demand是能源需求,transformation是能源供给中的转换过程。简单来讲,能源流动的最后一步(彻底燃烧)归为Demand,前面所有的转换环节归为Transformation。例如发电过程属于Transformation,用电过程属于Demand。炼焦过程(洗精煤转换为焦炭)属于Transformation,焦炭进行冶金属于Demand。炼油(原油转换为汽油)过程属于Transformation,汽车行驶消耗汽油属于Demand。整体上讲,Demand部分给出了该地区对能源的需求,Transformation和Resources给出了该地区如何满足这样的能源需求(能源转换、生产、进出口)

Demand模块的构建

搭建LEAP模型的核心在于对Demand模块的构建,一般来讲,Demand包括工业部门、农业部门、交通部门、建筑部门(生活用能和商业用能)。这些部门还可以进一步分类,工业部门可分为钢铁行业、水泥行业、化工行业等;交通部门可分为乘用车和货运车。这些子类在LEAP中称为branch,各个branch的能源需求通过一个普遍原则进行计算,即能源需求=活动水平x能耗强度。因此每个branch都要明确它的活动水平以及各个燃料的能耗强度。

我们以Freedonia为例进行说明,如下图,生活用能(Household)可以分为urban(城镇)和rural(农村),在农村居民中,一部分居民可能获得电(Electrified),另一部分居民不能获得电(Non electrified)。在可获得电的居民中,他们的用能需求包括了照明(lighting),做饭(cooking),制冷(refrigeration)还有其他用途(other uses)。在具体的能源需求模块,如lighting,分不同的燃料,如电力(Electric),还有煤油Kerosene,同时这些燃料还对应着各类环境影响(effect)。


在确定活动水平时,尤其需要注意不同branch之间的关系。例如,urban和rural是互斥的(即一部分是城镇居民,另一部分是农村居民)。他们的活动水平设置如下。Household 设置为8 million,其中30% share是urban,剩下的70%是rural。Remainder(100)代表着100%排除前面后剩余的部分。


同理,electrified和nonelectrified也是互斥的。但是lighting、cooking、refrigeration之间不是互斥的(即所有的居民都有照明做饭和制冷的需求)。如下,在这些branch的活动水平确定时,需要注意units这列从share改为saturation。因此,在活动水平输入中,可以给出大类的数,然后再通过share或saturation的方式分到各个branch中。


除了活动水平外,另一个非常重要的输入则是能源强度。如下图所示,图中表示了平均每户用335 kWh,用10 L的煤油。模型提供了非常丰富的能源相关的Units,一些常用的单位(例如千瓦时,千焦,吨标煤)都会在模型中提供。同时,如果在切换Units时,系统会询问你是否根据相应的换算把数值进行转换。这在统一单位时非常方便。
 

那么,我们应该如何通过公开可以获得的数据,搭建自己关注地区的LEAP模型呢?一个普遍的工具是各地区统计年鉴中的能源平衡表。如下图,能源平衡表给出了该地区各部门各燃料的能源投入和产出情况。具体可在四、终端能源消费部分找到。用作原料和材料部分的能源由于没有进行燃烧,也就没有对应的碳排放,这部分能源不应在LEAP模型中计算其碳排放。

但值得注意的是,能源平衡表给出的是能源消耗总量,在输入到LEAP模型中,我们仍要遵循“活动水平x能耗强度”的原则,尽可能地从其他渠道尽可能找出对应的活动水平来对其进行拆分。例如居民生活的活动水平可以是人口、建筑面积等。工业、农业部门的活动水平可以是GDP、工业产值、产品产量;交通部门的活动水平可以是行驶里程(vehicle·km)。特别需要强调活动水平和能耗强度的拆分,是因为从长期的视角来看二者分别代表着碳排放控制的两个方面。低碳发展一方面可以控制产能、GDP等活动水平,另一方面可以提高能源利用效率,因此对于未来的预测时需要分别对二者进行输入。

其他模块构建

相比起Demand在各个branch中的一致性,Transformation模块就复杂的挺多,可根据需求设定不同的功能。如下图所示。Simplenon-dispatched module代表着非常简单的单输出过程。可参考Freedonia中‘Transmission and distribution’,表示输电和运输中的损失,仅需要输入损失率即可,例如电力输送损失率15%。还有一些功能是可以选择性包括进来的,例如costs(成本),capacity(一般指发电的装机),coproduct,还有设置output shares的选项。


根据实现的功能的不同,所需要的输入也不同。在默认设置中,需要输入的参数包括outputfuels(能源产品),产品的import target和export target,每个生产过程中的feedstock fuels(主燃料)和auxiliary(辅燃料)。process share(各个生产过程的比例),和process efficiency (能源效率)。需要特别注意的是,如果燃料在转换过程中发生了燃烧,需要在燃料下面加effect,但是如果没有发生燃烧,不能加effect。例如煤电过程中的feedstock fuels是煤炭,煤炭在这个过程中发生了燃烧,因此需要在对应的燃料下面加effect。炼焦过程的feedstock fuels是煤炭,但这个过程没有发生燃烧,能耗主要体现在辅助燃料发生的燃烧,因此只用在auxiliary下面添加effect。在transformation部分不能输入活动水平,例如我们没有办法在这个模块强行输入发电量,而最终的发电量是由终端电力需求以及电力export和import的量进行计算得到。默认的dispatch rules是根据process share确定的,例如可以设置这个地区90%的电力靠煤电,10%的电力生产靠可再生能源。但在实际规划时,规划变量是煤电和光伏风电的装机,这种情况下在模型中可选用capacity功能选择装机量,并输入发电优先级、最大利用小时等参数获得发电情况。这些高级别的功能大家可以自行摸索。

Resources和Non-energy模块的设置相对就很简单了。根据前面的设置,Resources部分可自动梳理该地区涉及的一次和二次能源,可作为Transformation的补充去满足Demand。Non-energy部分直接输入effect即可,在这个部分effect可以为负数。对于碳汇、水泥过程碳排放,CCUS技术等可以在这个部分考虑。

动态变化和情景设置

把Demand、transformation、Resources、Nonenergy部分设置完之后,就搭建起这个地区的碳排放清单模型。但是需要注意的是这只是一个静态年份的核算。在这个基础上我们要输入长期时间的情况来代表未来能源系统的变化。在Settings部分可以设置我们关注的年份范围。刚才设置的均是base year的情况。例如Freedonia的案例中关注的时间是2010-2040年。我们做长期规划时一般会关注2020到2060年的尺度。数十年的分析是LEAP模型分析中最为常见的时间范围。

在长期规划中,一个重要的概念则是情景分析。情景分析代表了未来发展的可能路径,通过对情景之间的对比也可以体现出措施之间的差异性。点击Scenarios可进入情景分析设置。上面静态的设置属于Current Account。在下面的情景中可设置Baseline(基准情景)。在每个情景下面还可设置子情景,例如Baseline下面有它的多个子情景Mitigation,Efficient Lighting等。在参数设置中,父情景所有的参数设置自动归到子情景中,在设置中仅需要更改两个情景不同的地方。因此对于层层递进的情景设置中,可以用子情景来节省一定的工作量。

前面提到LEAP模型在处理时间数据时非常便捷,主要体现在一个格子可以按照数组的形式进行输入。选择对应的Scenarios中,可在expression中输入未来年份的情况。LEAP提供了多个时间有关的输入公式,例如下图中growth代表每年增长3%,Interp(2040,45)代表到2040年线性增长到45。当然我们还可以在Excel提前复制好input,然后通过ctrl+c和ctrl+v的方式复制到对应的expression里即可。

对每个Scenario的Demand,Transformation,Resources和Nonenergy设置完之后,就可以在软件左边的Result部分查看不同情景下未来碳排放的变化趋势,并会给出每个branch对应的碳排放。结果呈现功能也非常强大,有多种呈现的形式。同时,点击右侧的Excel图标还可以将结果导出到Excel里。在软件左边还有个Energy balance功能,可以看到各个能源的生产、使用、进口、出口等流动情况,并会给出能源流动的Sankey图。同时,如果结果不符合规律和认知,可以检查对应branch的输入是否正确。修正输入参数重新计算也是非常方便。
当然在LEAP模型搭建时,参考一些成熟的框架是非常有帮助的。除了Freedonia的例子外,还可以参考劳伦斯伯克利国家实验室基于开发的GREAT模型,是专门针对中国省市一级的能源政策排放分析的LEAP模型框架。里面涉及的内容很多,遇到不会搭建的模块可以参考对应的branch。但是最好不要直接在GREAT模型输入参数,一是很多输入可能找不到,第二是因为一些版本的问题可能在计算中会报错。另外需要注意的是由于GREAT模型开发比较早,一些参数如能耗强度可能和现在的实际情况差距比较大,在借鉴时同样需要注意这个问题。GREAT模型的教程如下:https://leap.sei.org/documents/GREAT_Tool_Manual.pdf

写在最后

LEAP模型本身不会告诉我们这个地区未来碳排放该怎么变化,也无法回答这个地区的能源系统该如何转型。因此城市低碳发展规划工作的重心一定不是LEAP模型本身,而是模型的输入,即对各个行业未来情况进行判断——在不同情景下各行业如何增长(GDP、人口、汽车保有量)、能源利用效率如何变化、能源结构如何变化(各行业电气化率、电力生产可再生能源比例、氢能比例等)。

在最近的工作中,我对城市低碳发展未来的参数输入有一些个人见解。对于一些宏观经济参数(如GDP,人口,城镇化率等)可以通过历史趋势外推、一些增长模型、发达城市拟合曲线得到。这也是我们做模型研究常用的方法。但是在碳达峰碳中和背景下,很多参数是不太能够通过历史趋势外推获得的。例如风光可再生能源比例,电动车比例等。在新的政策要求下,中国将迎来非常彻底而广泛的能源转型。可再生能源迅速发展,电动车渗透率迅速提升,钢铁、水泥等高耗能项目的增长面临着强大的政策约束力。因此历史趋势的外推可能难以反映我国大部分城市未来的低碳发展情况。我认为,对于这些参数的设置的依据应当分为近期和短期。近期(5~10年)的参数应当充分结合对当地调研的实际情况、目前已有的政策约束、可行的增长空间,给出双碳背景下的合理趋势预估。长期(10-40年)的参数应结合远景目标(例如2060碳中和)进行碳排放反推,同时考虑各行业低碳技术经济性和潜力,得到长期预测参数情景。
leap视频教程查看:https://mp.weixin.qq.com/s/JXnXU6MY9iXrQdHBjXru3A

-
小编微:shugu2020

LEAP设计软件是由EnclosureShop(音箱箱体模拟设计)和CrossoverShop(音箱分频器模拟设计)应用软件组成。 EnclosureShop提供了喇叭单元和音箱设计,而CrossoverShop则提供了设计过滤器布局技术的工具。通过两者的合作,这两种程序希望能组成一个完整的设计和分析软件。 EnclosureShop比较特殊的功能包括有衍射分析、外壳结构随意分析、一个新的60-参数变频器模块、非线性声学模拟器等等。 CrossoverShop比较特殊的功能包括有模拟有源和无源的设计和分析、数字过滤器FIR和IIR设计及分析、结合模拟和数字形式设计、全球通用的优化引擎等等 EnclosureShop提供了预先模拟以及喇叭和箱体特性的模型模拟。其它的软件仅提供了单一的第二/第四阶线性高通逐次逼近法,而EnclosureShop提供了包括随频率而变,随温度而变,以及非线形效应的真实声学网络. 或许LEAP最重要的改进是具有革命性的新的衍射引擎。现在你可以看到完全的水平方向上和水平方向上的极坐标响应,包含高达第八阶的衍射效果,互耦合以及非线性喇叭特性。任意箱体形状和喇叭布局可以在任意空间被模拟. EnclosureShop提供一个完整的3D编辑器,允许用肉眼观察箱体形状并且提供对喇叭,开口,箱体以及分析点位置的精确定位。这些对于精确响应预测是很关键的. CrossoverShop提供了一个用于从实际测量数据来开发分频器处理的系统模拟,设计,分析工具强大的库。模拟的和数字的或者两者混合的分频器结构都被支持. 提供有一个完整的带有绘图编辑的电路编辑器,它支持有源/无源模拟和数字FIR/IIR分频器开发。你可以从许多个已包含的拓扑结构中一个来合成你的电路,或者创建和分析任意所需的电路。分频器设计Wizard(向导)能够在数分钟内自动生成一个完全最优化的,完整的分频电路. CrossoverShop包含有用于无源,有源和数字分频器强大的优化系统。利用单曲线或者根据目标类型的限制条件以及频率加权性能,优化可以执行在频率响应(SPL),阻抗,电压或组延迟上. 无论你的应用是专业音箱,卡包的OK音箱,还是定制的很深奥的罕见物,LEAP提供了功率,挠性以及精度来研究每一种可能的设计变换。其开放式体系结构和广谱特性将显著地减少你的开发时间而改进最终结果的质量,同时将阐明为什么LEAP已经成为全世界专业扬声器设计者的首选。带有一些不可思议的特征和功能,并且其中许多都是最近发展的技术。EnclosureShop和CrossoverShop是专业音箱设计的必备工具。
### Leap 模型在 Python 中的实现与使用 #### 创建环境并安装依赖库 为了能够顺利运行基于Leap API的功能,在本地环境中需先设置必要的开发环境。这通常涉及到Python版本的选择以及相关API接口的支持包安装。 对于Leap Motion设备控制或是模拟,主要依赖于`leap-python3`这样的第三方库[^2]。可以通过pip工具快速完成安装: ```bash pip install leap-python3 ``` #### 初始化配置与认证 当准备调用Leap的服务时,需要提供有效的API Key来进行身份验证。此Key可以从官方平台获取,并将其作为参数传递给初始化函数中去。 下面是一个简单的实例展示如何加载API密钥并建立连接: ```python import os from leap_python3 import Controller, Listener class SampleListener(Listener): def on_init(self, controller): print("Initialized") controller = Controller() controller.set_policy(Controller.POLICY_IMAGES) listener = SampleListener() if 'LEAP_API_KEY' in os.environ: api_key = os.environ['LEAP_API_KEY'] else: raise Exception('Environment variable LEAP_API_KEY not set.') controller.add_listener(listener) ``` #### 数据处理与交互逻辑构建 一旦成功接入服务之后,则可以根据实际需求编写相应的业务逻辑代码片段。比如捕捉手部动作姿态变化、绘制轨迹线等操作均在此阶段完成。 这里给出一段简化版的手势识别回调函数定义方式: ```python def on_frame(controller): frame = controller.frame() # 获取当前帧信息 for hand in frame.hands: # 遍历每一只手的信息 normal = hand.palm_normal direction = hand.direction # 打印出手掌方向角度 print(f"Hand pitch: {direction.pitch * Leap.RAD_TO_DEG} degrees " \ f"from horizontal\n" f"Hand roll: {normal.roll * Leap.RAD_TO_DEG} degrees from vertical") arm = hand.arm print(f"Arm direction: {arm.direction}\n" f"Wrist position: {arm.wrist_position}\n" f"Elbow position: {arm.elbow_position}") ``` 以上就是有关Leap Model在Python环境下基本的应用场景介绍及其具体实践指南的一部分内容。更多高级特性如骨骼追踪精度调整、多用户支持等功能则建议查阅官方文档深入了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值