You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Brightway替换LCA特征因子遇InconsistentGlobalIndex错误求助

修改LCA特征因子时的InconsistentGlobalIndex错误及结果不更新问题

问题场景

尝试通过datapackage指定新值修改LCA特征因子(C矩阵),执行代码时触发错误:

import bw2data as bd
import bw_processing as bwp
import numpy as np
import bw2calc as bc

mobility_db = bd.Database('Mobility example')
combustion_car_driving = mobility_db.get(name='Driving an combustion car')
co2 = mobility_db.get(name='CO2')

# create datapackage with alternative values for the GWP of CO2
indices_array = np.array([(co2.id,co2.id)],dtype=bwp.INDICES_DTYPE)
values_array = np.array([[10,12]])
dp_c = bwp.create_datapackage()
dp_c.add_dynamic_array(
    matrix='characterization_matrix',
    indices_array=indices_array,
    interface=values_array,
)

fu, data_objs , _ = bd.prepare_lca_inputs({combustion_car_driving:1},
                                          method=('IPCC','simple'))
lca = bc.LCA(demand=fu,
       method=('IPCC','simple'),
       data_objs=data_objs+[dp_c],
       use_arrays=True)
lca.lci()
lca.lcia()

触发错误

InconsistentGlobalIndex错误:Multiple global index values found: [1, None]. If multiple LCIA datapackages are present, they must use the same value for GLO, the global location, in order for filtering for site-generic LCIA to work correctly

手动添加bd.method.geomapping[bd.method.config.global_location]作为global_index后计算可继续,但next(lca)结果始终不变。

问题分析与解决

1. InconsistentGlobalIndex错误修复

当同时加载原LCIA方法的datapackage和自定义datapackage时,两者必须共享相同的global_index(全局位置GLO的索引值),否则会触发位置过滤一致性校验。

修复方式:创建自定义datapackage时,显式指定与原方法一致的global_index值,直接通过bd.method.geomapping[bd.method.config.global_location]获取即可。

2. 结果不更新的核心原因

你的indices_array结构错误:characterization_matrix(C矩阵)的索引格式应为(生物流ID, LCIA方法类别ID),而非(生物流ID, 生物流ID)。原方法的特征因子绑定到特定方法类别,错误索引会导致自定义值无法匹配正确计算维度,自然不会影响结果。

修正后的完整代码

import bw2data as bd
import bw_processing as bwp
import numpy as np
import bw2calc as bc

# 加载基础对象
mobility_db = bd.Database('Mobility example')
combustion_car_driving = mobility_db.get(name='Driving an combustion car')
co2 = mobility_db.get(name='CO2')
method_key = ('IPCC', 'simple')

# 获取LCIA方法关键参数
method = bd.Method(method_key)
_, method_data = method.load()
# 获取方法对应的类别ID(单类别方法取第一个因子的类别ID即可)
category_id = bd.MethodCategory(method_data[0][1]).id
# 获取全局位置索引
global_index = bd.method.geomapping[bd.method.config.global_location]

# 创建正确的自定义datapackage
indices_array = np.array([(co2.id, category_id)], dtype=bwp.INDICES_DTYPE)
values_array = np.array([[10, 12]])

dp_c = bwp.create_datapackage(global_index=global_index)
dp_c.add_dynamic_array(
    matrix='characterization_matrix',
    indices_array=indices_array,
    interface=values_array,
    # 设置kind='replace'替换原特征因子,默认kind='add'为叠加值
    kind='replace'
)

# 执行LCA计算
fu, data_objs, _ = bd.prepare_lca_inputs({combustion_car_driving: 1}, method=method_key)
lca = bc.LCA(
    demand=fu,
    method=method_key,
    data_objs=data_objs + [dp_c],
    use_arrays=True
)
lca.lci()
lca.lcia()

# 查看结果
print("LCIA Score:", lca.score)
# 动态参数场景下迭代查看结果
for score in lca:
    print("Dynamic Score:", score)

关键修正点

  • 全局索引一致性:创建datapackage时通过global_index参数指定与原方法一致的全局位置索引,避免校验错误。
  • 索引结构正确:将indices_array的第二个元素改为LCIA方法的类别ID,确保自定义特征因子匹配正确计算维度。
  • 值的替换/叠加:通过kind='replace'设置自定义值完全替换原特征因子,默认kind='add'会计算原因子与自定义值的总和。

内容的提问来源于stack exchange,提问作者mfastudillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:52:32