【问题标题】:create a new activity in Brightway2 based on an existing ecoinvent activity根据现有的生态发明活动在 Brightway2 中创建新活动
【发布时间】:2017-04-03 00:18:08
【问题描述】:

我想从充当代理的数据库(在本例中为 ecoinvent)创建一个“重新上下文化”现有数据集的活动。例如,在瑞士的热泵基础上在魁北克制造热泵,但改变了电力的来源。

我的问题与@MPa 在this 问题中提出的问题非常相似,但如果没有更多细节,我不知道该怎么做。这就是我所做的:

1) 从我的 ecoinvent 3.3 数据库中找到我想用作代理的进程:

hp_ch=Database('ei_33consequential').search("heat-pump production air-water",
                                  filter={'location':'ch'},
                                  )[0]

2) 创建活动的副本

hp_qc=hp_ch.copy()

3) 改变位置

hp_qc['location']='CA-QC'

4) 擦除存储兑换金额的原始流

for exc in hp_qc.exchanges():
    if 'electricity, low voltage' in exc['name']:
        amnt=(exc.amount)
        exc.delete()

5) 添加新流量(在本例中是来自魁北克的相同电量)

这是我迷路的地方。我知道如何找到生成该流的进程('44389eae7d62fa9d4ea9ea2b9fc2f609'),但我不知道如何将其作为交换添加到我的“hp_qc”进程中。 我想我也应该更改唯一标识符代码 (UUID),否则我的数据库中将有两个具有相同 UUID 的活动,这可能会出现问题。我还应该修改谱系矩阵的“地理代表性”分数,但我不确定 Brightway 2 在这一点上是否实际使用了这些分数。

[编辑],按照@MPa 的建议,我做了以下事情:

#electricity low voltage quebec
elw_qc=Database('ei_33consequential').get('44389eae7d62fa9d4ea9ea2b9fc2f609')

elect_to_hp = [exc for exc in hp_qc.technosphere() if 'electricity, low voltage' in exc['name']][0]

elect_to_hp.input = qc_elect
elec_to_hp.save()
hp_qc.save() #necessary?

我使用一种常见的影响评估方法进行了测试:

fu1={hp_qc:1}
lca1=LCA(fu1,('IMPACT 2002+ (Endpoint)', 'resources', 'total'))
lca1.lci()
lca1.lcia()
lca1.score
fu2={hp_ch:1}
lca2=LCA(fu2,('IMPACT 2002+ (Endpoint)', 'resources', 'total'))
lca2.lci()
lca2.lcia()
lca2.score

两个分数是不同的,虽然我在瑞士热泵上得到了一个负分,这有点奇怪,但我猜这可能和完全无关重新情境化。有效!

【问题讨论】:

    标签: brightway


    【解决方案1】:

    里面有几个问题。我将分别解决每个问题。

    1) UUID:new_activity = old_activity.copy()new_activity 创建一个新的 UUID。在您的情况下,hp_qc.key==hp_ch.key 将返回 False。因此一切都很好。

    2) 添加交换:一旦找到要链接的活动(例如,qc_elec),您可以这样做:
    hp_qc.new_exchange(input=qc_elect.key, amount = amount, type='technosphere') 其中my_amount 是此活动的实际金额交换。

    3) 但是,在您的情况下,适应交换而不是删除和替换它会更简单:

    hp_qc=hp_ch.copy()
    hp_qc['location']='CA-QC'
    # Assign the electricity input you want to change to a variable
    elect_to_hp = [exc for exc in hp_qc.technosphere() if 'electricity, low voltage' in exc['name']][0]
    # Change the input of this exchange so it links to `qc_elect`  
    elect_to_hp.input = qc_elect  
    # Save the resulting activity
    elect_to_hp.save()
    

    交换将与之前的电力输入相同(相同的数量、相同的不确定性、相同的文件)。然后,您需要以这种方式更改您想要的字段(例如评论、不确定性):

    elect_to_hp['comment'] = 'Recontextualisation'
    

    4) 不确定性,谱系: 您说得很对,(1)应该调整谱系分数,(2)因此应该改变总不确定性,以及(3)在 Brightway 中不使用谱系分数来计算总不确定性。但是,您可以使用scale without pedigree(相当于基本不确定性)、谱系分数和公布的附加不确定性因子(为方便起见,从下面的here 复制)来计算新的不确定性(一个新的scale 如果 PDF 是对数正态的)一旦你修改了谱系分数。

    ecoinvent_33_pedigree_matrix = {
                'reliability': 
                    {
                    1:0.0,
                    2:0.0006,
                    3:0.002,
                    4:0.008,
                    5:0.04
                    },
                'completeness':
                    {
                    1: 0.0,
                    2: 0.0001,
                    3: 0.0006,
                    4: 0.002,
                    5: 0.008
                    },
                'temporal correlation':
                    {
                    1:0.0,
                    2:0.0002,
                    3:0.002,
                    4:0.008,
                    5:0.04
                    },
                'geographical correlation':
                    {
                    1:0.0,
                    2:0.000025,
                    3:0.0001,
                    4:0.0006,
                    5:0.002
                    },
                'further technological correlation':
                    {
                    1:0.0,
                    2:0.0006,
                    3:0.008,
                    4:0.04,
                    5:0.12
                    }
             }
    

    【讨论】:

    • 我明白了!因此,要识别“技术圈流”,您可以调用生成它的过程。从而假设它只有一个“参考产品”。在 LCA 行话中,这适用于单个输出单元进程。我现在明白为什么Chris Mutel 正在考虑如何以更灵活的方式做到这一点。我在文档中找不到对 scale without pedigree 的引用。它是您正在开发的 bw_utils 包的一部分吗?
    • 如果您将Exchange 作为字典检查,您应该会看到“没有谱系的规模”,即exchange.as_dict()
    • 我认为我上面分享的代码有问题 - 请稍等一下再使用它。不知何故,原始活动的交换被修改了......我正在努力解决这个问题。
    • 据我所知,我的测试不正确,但我的答案是正确的。
    • 我测试了解决方案,使用端点指标得到了否定的结果,这有点奇怪。我在原始和 recontextualised 热泵中也得到了相同的结果,这不是一个好的指示。 (我用 hp_qc.save() 更改了lect_to_hp.save(),我猜这就是你的意思。)
    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多