1

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。我们当然可以创建一个超级组,并使这些活动级别的组依赖,但是依赖(从定义的组顺序中第一次遇到参数名称)和命名空间(活动参数存在于活动中)是不同的东西,所以我不确定这是否会有所帮助。


我错过了什么吗?

4

0 回答 0