特征因子预样本的指标误差

index error on presamples of characterisation factors

我正在尝试创建一些 CF 的预采样以在 Brightway 中使用,但出现索引错误,我不确定这是因为我做错了什么还是我必须将其报告为漏洞。这是我能想到的最简单的例子。

import brightway2 as bw
import presamples as ps
import numpy as np
import random

cf_possible_values_invented={
 ('biosphere3', '9d9246d4-0ce3-4b47-8491-cf62e562ad38'): [6.79,0.00371],
 ('biosphere3', '8bbe0b4c-5c9c-4959-a878-572f680e428d'): [7.86,0.00371],
 ('biosphere3', '8d8e393e-39c4-44e1-b424-8eeefcd33560'): [2.07,0.0186],
 ('biosphere3', '9be02ae0-3170-4544-8665-f03a1b43f2bd'): [2.14e-05,3.29e-06],
 ('biosphere3', '777160e1-99a9-4a03-b189-8c1af57ee560'): [4.71,4.8],
 ('biosphere3', '1869fd74-ed68-4814-9596-12315b1e810d'): [0.114,0.00107],
 ('biosphere3', '4d466648-95dd-4866-97ad-6008746d32ab'): [0.107,0.00114],
 ('biosphere3', '71d27d29-04f2-421a-981f-5c5c2b00486f'): [0.107,0.00107]}

nsamples = 5000

samples = np.array([random.choices(values,k=nsamples) for key,values in cf_possible_values.items()])
indices = [k for k in cf_possible_values.keys()]

for i in indices:
    assert i in bw.Database('biosphere3')

ionising_rad_cf = {key:CF for key,CF in bw.Method(('ILCD 2.0 2018 midpoint', 'human health', 'ionising radiation')).load()}

# verify that the method has values for those keys
for i in indices:
    assert i in ionising_rad_cf

scenario_matrix_data=[(samples,indices,'cf')]

cfsamples_id_discrete, cfsamples_fp_discrete = ps.create_presamples_package(matrix_data=scenario_matrix_data,
                                                                            name='faulty example')

ecoinvent_act = bw.Database('ei_36con').random()
ecoinvent_act

ionrad_lca = bw.LCA({ecoinvent_act:1},('ILCD 2.0 2018 midpoint', 'human health', 'ionising radiation'),presamples=[cfsamples_fp_discrete])

ionrad_lca.lci()

ionrad_lca.lcia()

如果我尝试执行此操作,我会得到 IndexError: index (4294967295) out of range。我注意到我用其他方法得到了相同的索引错误。如果我读取存储在包中的值,那么高的索引值似乎不存在,

我不太明白这是怎么回事。我正在使用 bw2calc 版本 1.8 和预采样版本 0.2.6

问题是作为您的预采样包一部分的生物圈交换不在您的生物圈矩阵中(因此,在您的 CF 矩阵中)。 您可以通过执行以下操作来查看:

ionrad_lca = bw.LCA(
    {ecoinvent_act:1},
    ('ILCD 2.0 2018 midpoint', 'human health', 'ionising radiation'),
)
ionrad_lca.lci() 
ionrad_lca.lcia() 
for ef in indices:
   if ef not in ionrad_lca.biosphere_dict:
       print("Not in biosphere matrix, nor in cf matrices: ", ef)

由于它们不在您的 cf 矩阵中,presamples 不知道如何找到合适的行索引(因此将其保留在 4294967295,very telling number 在 brightway2 中用作占位符在矩阵构建期间可以找到索引之前)。

Presamples 理想情况下会给出更好的错误消息。

还应该有一种方法可以过滤掉矩阵中不存在的索引。

我相信如果 PR 能解决其中任何一个问题,我们将不胜感激。

现在,我建议将您的代码更改为仅包含您感兴趣的 LCI 数据库中使用的基本流程的 cfs(在您的情况下,ecoinvent 3.6)。