更新 Brightway 中的参数值

Update a parameter value in Brightway

这似乎是一个简单的问题,但我很难找到答案。我已经有一个带有多个参数(项目和数据库参数)的项目。我想获得几个场景的 LCA 结果,每次我的参数都具有不同的值。我在想以下简单的程序:

  1. 更改参数值,
  2. 更新我项目中的交易所,
  3. 计算 LCA 结果。

我知道答案应该在 documentation 某处,但我很难理解我应该如何将它应用到我的项目参数、数据库参数和 ActivityParameters。

提前致谢!

编辑:感谢@Nabla,我能够想出这个:

对于项目参数

for pjparam in ProjectParameter.select():
    if pjparam.name=='my_param_name':
        break
pjparam.amount = 3
pjparam.save()
bw.parameters.recalculate()

对于数据库参数

for dbparam in DatabaseParameter.select():
    if dbparam.name=='my_param_name':
        break
dbparam.amount = 3
dbparam.save()
bw.parameters.recalculate()

对于活动参数

for param in ActivityParameter.select():
    if param.name=='my_param_name':
        break    
param.amount = 3
param.save()
param.recalculate_exchanges(param.group)

您可以导入 DatabaseParameterActivityParameter 迭代,直到找到要更改的参数,更新值,保存并重新计算交换。我认为您需要分层进行。首先更新 project 参数(如果有),然后更新可能取决于项目参数的 database 参数,然后更新 activity个依赖于它们的参数。

没有项目参数的简化案例:

from bw2data.parameters import ActivityParameter,DatabaseParameter

# find the database parameter to be updated
for dbparam in DatabaseParameter.select():
    if (dbparam.database == uncertain_db.name) and (dbparam.name=='foo'):
        break

dbparam.amount = 3
dbparam.save()

#there is also this method if foruma depend on something else 
#dbparam.recalculate(uncertain_db.name)

# here updating the exchanges of a particular activity (act)

for param in ActivityParameter.select():
    if param.group == ":".join(act.key):
        param.recalculate_exchanges(param.group)

您可能想要更新项目中的所有活动,而不是像示例中那样更新单个活动。您只需要在遍历 activity 参数时更改条件即可。