更新 Brightway 中的参数值
Update a parameter value in Brightway
这似乎是一个简单的问题,但我很难找到答案。我已经有一个带有多个参数(项目和数据库参数)的项目。我想获得几个场景的 LCA 结果,每次我的参数都具有不同的值。我在想以下简单的程序:
- 更改参数值,
- 更新我项目中的交易所,
- 计算 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)
您可以导入 DatabaseParameter
和 ActivityParameter
迭代,直到找到要更改的参数,更新值,保存并重新计算交换。我认为您需要分层进行。首先更新 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 参数时更改条件即可。
这似乎是一个简单的问题,但我很难找到答案。我已经有一个带有多个参数(项目和数据库参数)的项目。我想获得几个场景的 LCA 结果,每次我的参数都具有不同的值。我在想以下简单的程序:
- 更改参数值,
- 更新我项目中的交易所,
- 计算 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)
您可以导入 DatabaseParameter
和 ActivityParameter
迭代,直到找到要更改的参数,更新值,保存并重新计算交换。我认为您需要分层进行。首先更新 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 参数时更改条件即可。