Brightway2 允许在活动级别进行参数化。这些活动级别的参数需要通过
new_activity_parameters
或添加到组中add_to_group
。我正在努力寻找处理以下情况的最佳方法:(1)需要使用来自多个活动的活动参数进行计算,(2)来自不同活动的参数可以具有相同的参数名称(即我们可能会发现“燃料效率”在许多活动中)。
act_params_data_A = {
'name': 'fuel_efficiency',
'database': 'db',
'code': 'A',
'amount': 0.5
}
act_params_data_B = {
'name': 'fuel_efficiency',
'database': 'db',
'code': 'B',
'amount': 0.9
}
这里有一些选项,以及为什么它们要么直接不起作用,为什么它们看起来不是最理想的,或者我缺少什么来使它们起作用。我正在寻找一些指导。
选项 1:将两个活动参数添加到同一组,overwrite=False(不起作用)
parameters.new_activity_parameters(act_params_A, "some_group")
parameters.new_activity_parameters(act_params_B, "some_group", overwrite=False) #--> raises ValueError
选项 2:将两个活动参数添加到同一组,overwrite=True(不起作用)
parameters.new_activity_parameters(act_params_A, "some_group")
parameters.new_activity_parameters(act_params_B, "some_group", overwrite=True)
这将覆盖act_params_A
,因此活动 A 将使用 0.9 作为 的值fuel_efficiency
。
选项3:修改活动参数名称使其唯一,然后添加到同一个组
act_params_data_A['name'] = "{}_{}".format(
act_params_data_A['code'],
act_params_data_A['name']
) # New name is A_fuel_efficiency
act_params_data_B['name'] = "{}_{}".format(
act_params_data_B['code'],
act_params_data_B['name']
) # New name is B_fuel_efficiency
parameters.new_activity_parameters(act_params_A, "some_group")
parameters.new_activity_parameters(act_params_B, "some_group")
这会起作用,并且名称的唯一性得到保证,因为代码的唯一性得到了保证。但是,不能保证代码是可接受的参数名称字符串(例如,活动可以有一个键=('db','some code'),并且'some code_fuel_efficiency'不是有效的参数名称)。我们当然可以“清理”活动代码,但这可能会导致非唯一的清理参数。
选项 4:每个活动都发送到自己的组
parameters.new_activity_parameters(act_params_A, "some_group")
parameters.new_activity_parameters(act_params_B, "other_group")
问题是我不确定如何使用这些组,尤其是如何将这些传递给 presamples ParameterizedBrightwayModel
。我们当然可以创建一个超级组,并使这些活动级别的组依赖,但是依赖(从定义的组顺序中第一次遇到参数名称)和命名空间(活动参数存在于活动中)是不同的东西,所以我不确定这是否会有所帮助。
我错过了什么吗?