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

构建ecoinvent产品系统后LCA报EmptyBiosphere错误的排查

问题描述

我通过创建ecoinvent活动的节点和边,构建了一个简单的产品系统,代码如下:

# fetching EI activities of interest
code_El_PT = ei_db.search("market for electricity, medium voltage PT")[0]["code"]
act_El_PT = ei_db.get(code_El_PT)
code_calcium_nitrate = ei_db.search("calcium nitrate production RER")[0]['code']
act_calcium_nitrate = ei_db.get(code_calcium_nitrate)

# reference flow / assembly
data = {  
    'code': 'PS_main',
    'name': 'PS_main',
    'location': 'DK',
    'unit': 'PS_main'
}
PS_main = db.new_node(**data)
PS_main.save()

# create nodes
el_data = {
    'code': act_El_PT['code'],
    'name': act_El_PT['name'],
    'location': act_El_PT.get('location', ''),  # Handle potential missing location
    'unit': act_El_PT.get('unit', '')  # Handle potential missing unit
}
el = db.new_node(**el_data)
el.save()

calcium_nitrate_data = {
    'code': act_calcium_nitrate['code'],
    'name': act_calcium_nitrate['name'],
    'location': act_calcium_nitrate.get('location', ''),  # Handle potential missing location
    'unit': act_calcium_nitrate.get('unit', '')  # Handle potential missing unit
}
calcium_nitrate = db.new_node(**calcium_nitrate_data)
calcium_nitrate.save()

## Create edges
PS_main.new_edge(
    amount=2.5, 
    type='technosphere',
    input=el
).save()
PS_main.new_edge(
    amount=2.5, 
    type='technosphere',
    input=calcium_nitrate
).save()

随后尝试执行LCA计算,代码如下:

## LCA
gw_method = ('EF v3.1', 'climate change', 'global warming potential (GWP100)')
lca = bc.LCA(demand={PS_main: 1}, method=gw_method)
lca.lci()
lca.lcia()
lca.score

但出现了EmptyBiosphere报错,我的项目已加载以下数据库:

Databases dictionary with 3 object(s):
SPS01
biosphere3
ecoinvent 3.10_cutoff_ecoSpold02
错误原因与解决方法

错误原因

你手动创建的el和calcium_nitrate节点仅复制了ecoinvent活动的元数据(名称、编码、位置等),但未关联原ecoinvent数据库中这些活动的完整供应链(包括生物圈流)。这些新节点本质是空的,没有任何输入输出关系,导致LCA计算时无法找到任何生物圈相关数据,从而触发EmptyBiosphere错误。

修正后的代码

不需要在自己的数据库中新建节点,直接引用ecoinvent数据库返回的活动对象即可,修改后代码如下:

# 获取ecoinvent数据库实例
ei_db = databases['ecoinvent 3.10_cutoff_ecoSpold02']

# 直接获取目标活动对象
act_El_PT = ei_db.search("market for electricity, medium voltage PT")[0]
act_calcium_nitrate = ei_db.search("calcium nitrate production RER")[0]

# 创建自定义产品系统节点
data = {  
    'code': 'PS_main',
    'name': 'PS_main',
    'location': 'DK',
    'unit': 'PS_main'
}
PS_main = db.new_node(**data)
PS_main.save()

# 直接关联ecoinvent活动作为输入边
PS_main.new_edge(
    amount=2.5, 
    type='technosphere',
    input=act_El_PT
).save()
PS_main.new_edge(
    amount=2.5, 
    type='technosphere',
    input=act_calcium_nitrate
).save()

# 执行LCA计算
gw_method = ('EF v3.1', 'climate change', 'global warming potential (GWP100)')
lca = bc.LCA(demand={PS_main: 1}, method=gw_method)
lca.lci()
lca.lcia()
print(lca.score)

关键说明

  • ecoinvent数据库返回的活动对象本身包含完整的上下游供应链、生物圈流等关联数据,直接引用即可保留这些关系。
  • 你之前的操作相当于在自己的SPS01数据库中创建了两个孤立的空节点,和原ecoinvent活动没有任何数据关联,因此无法支持LCA计算所需的生物圈流调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:31:09