在 wurst 和 Brightway 中将活动的所有输入设置为 0

问题描述

尝试将活动的现有交换(输入)设置为零并另外添加交换,返回以下内容

  • "MultipleResults("发现多个生产交换")"
  • noresults:没有找到合适的生产交换”

首先,我将除输出外的所有输入量设置为零:

for idx,item in enumerate(ds['exchanges']):
        item['amount'] = 0
ds['exchanges'][0]['amount'] = 1 

其次,我添加一个新的交易所:

ds['exchanges'].append({
    'amount': 1,'input': (new['database'],new['code']),'type': 'technosphere','name': new['name'],'location': new['location']
    })

在最后的步骤中写入数据库会返回错误

w.write_brightway2_database(DB,NEW_DB_NAME)

有没有人看到问题可能出在哪里,或者是否有其他方法可以用另一个输入替换多个输入?

非常感谢您的任何提示

卢卡斯


完整的错误回溯:

--------------------------------------------------------------------------
noresults                                 Traceback (most recent call last)
<ipython-input-6-d4f2dde2b33d> in <module>
      2 
      3 NEW_DB_NAME = "ecoinvent_copy_new"
----> 4 w.write_brightway2_database(ecoinvent,NEW_DB_NAME)
      5 
      6 # Check for new databases

~\Miniconda3\envs\ab\lib\site-packages\wurst\brightway\write_database.py in write_brightway2_database(data,name)
     47 
     48     change_db_name(data,name)
---> 49     link_internal(data)
     50     check_internal_linking(data)
     51     check_duplicate_codes(data)

~\Miniconda3\envs\ab\lib\site-packages\wurst\linking.py in link_internal(data,fields)
     11     input_databases = get_input_databases(data)
     12     get_tuple = lambda exc: tuple([exc[f] for f in fields])
---> 13     products = {
     14         get_tuple(reference_product(ds)): (ds['database'],ds['code'])
     15         for ds in data

~\Miniconda3\envs\ab\lib\site-packages\wurst\linking.py in <dictcomp>(.0)
     12     get_tuple = lambda exc: tuple([exc[f] for f in fields])
     13     products = {
---> 14         get_tuple(reference_product(ds)): (ds['database'],ds['code'])
     15         for ds in data
     16     }

~\Miniconda3\envs\ab\lib\site-packages\wurst\searching.py in reference_product(ds)
     82             and exc['type'] == 'production']
     83     if not excs:
---> 84         raise noresults("No suitable production exchanges founds")
     85     elif len(excs) > 1:
     86         raise MultipleResults("Multiple production exchanges found")

noresults: No suitable production exchanges found

解决方法

似乎将交换设置为零导致了问题。在这种情况下无法写入数据库。我现在所做的是将交易所设置为一个非常小的数字,这样它们对影响评估没有影响,但不为零。不是最优雅的方式,但对我有用。因此,如果有人遇到类似问题,那可能是一个快速解决方案。