Создать новую активность в Brightway2 на основе существующей активности ecoinvent

Я хотел бы создать операцию "реконтекстуализации" существующего набора данных из базы данных (в данном случае ecoinvent), которая служит прокси. Например, создать тепловые насосы в Квебеке на основе тепловых насосов в Швейцарии, но изменить происхождение электричества.

Моя проблема очень похожа на проблему, поднятую @MPa в этом вопросе, но я не могу понять, как это сделать без дополнительных подробностей. Вот что я сделал:

1) найдите процесс, который я хочу использовать в качестве прокси из моей базы данных ecoinvent 3.3:

hp_ch=Database('ei_33consequential').search("heat-pump production air-water",
                                  filter={'location':'ch'},
                                  )[0]

2) создать копию деятельности

hp_qc=hp_ch.copy()

3) изменить местоположение

hp_qc['location']='CA-QC'

4) стереть исходный поток с сохранением суммы обмена

for exc in hp_qc.exchanges():
    if 'electricity, low voltage' in exc['name']:
        amnt=(exc.amount)
        exc.delete()

5) добавить новый поток (в этом случае такое же количество электроэнергии из Квебека)

Здесь я потерян. Я знаю, как найти процесс, который генерирует этот поток ('44389eae7d62fa9d4ea9ea2b9fc2f609'), но я не знаю, как добавить его в качестве обмена в мой процесс "hp_qc". Полагаю, мне также следует изменить код уникального идентификатора (UUID), иначе в моей базе данных будет два действия с одним и тем же UUID, что может быть проблематично. Я также должен изменить показатель "географической репрезентативности" матрицы родословной, но я не уверен, что эти оценки фактически используются Brightway 2 в этот момент.

[EDIT], следуя предложению @MPa, я сделал следующее:

#electricity low voltage quebec
elw_qc=Database('ei_33consequential').get('44389eae7d62fa9d4ea9ea2b9fc2f609')

elect_to_hp = [exc for exc in hp_qc.technosphere() if 'electricity, low voltage' in exc['name']][0]

elect_to_hp.input = qc_elect
elec_to_hp.save()
hp_qc.save() #necessary?

и я проверил с помощью общего метода оценки воздействия:

fu1={hp_qc:1}
lca1=LCA(fu1,('IMPACT 2002+ (Endpoint)', 'resources', 'total'))
lca1.lci()
lca1.lcia()
lca1.score
fu2={hp_ch:1}
lca2=LCA(fu2,('IMPACT 2002+ (Endpoint)', 'resources', 'total'))
lca2.lci()
lca2.lcia()
lca2.score

Обе оценки разные, хотя я получаю отрицательную оценку для швейцарского теплового насоса, что немного странно, но я думаю, что это возможно и совершенно не связано с реконтекстуализацией. Оно работает!

1 ответ

Решение

Там есть пара вопросов. Я буду обращаться к каждому в отдельности.

1) UUID: new_activity = old_activity.copy() создает новый UUID для new_activity, В твоем случае, hp_qc.key==hp_ch.key вернусь False, Поэтому все в порядке.

2) Добавление обмена: после того, как вы нашли занятие, на которое хотите связать (скажем, qc_elec), вы можете сделать это:
hp_qc.new_exchange(input=qc_elect.key, amount = amount, type='technosphere') где my_amount фактическая сумма для этого обмена.

3) Однако в вашем случае было бы намного проще адаптировать обмен, чем удалять и заменять его:

hp_qc=hp_ch.copy()
hp_qc['location']='CA-QC'
# Assign the electricity input you want to change to a variable
elect_to_hp = [exc for exc in hp_qc.technosphere() if 'electricity, low voltage' in exc['name']][0]
# Change the input of this exchange so it links to `qc_elect`  
elect_to_hp.input = qc_elect  
# Save the resulting activity
elect_to_hp.save()

Обмен будет таким же, как и оригинал (та же сумма, та же неопределенность, та же документация), что и предыдущий ввод электроэнергии. Затем вам нужно изменить нужные поля (например, комментарий, неопределенность) следующим образом:

elect_to_hp['comment'] = 'Recontextualisation'

4) Неопределенность, Родословная: Вы совершенно правы в том, что (1) оценки Родословной должны быть адаптированы, (2) поэтому общая неопределенность должна измениться, и (3) оценки родословной не используются в Brightway для вычисления общей неопределенности. Тем не менее, вы можете довольно легко рассчитать новую неопределенность, используя scale without pedigree (эквивалентно базовой неопределенности), оценкам родословной и опубликованным дополнительным коэффициентам неопределенности (воспроизведенным ниже для вашего удобства) для расчета новой неопределенности (новой scale если PDF является логнормальным), как только вы изменили оценки родословной.

ecoinvent_33_pedigree_matrix = {
            'reliability': 
                {
                1:0.0,
                2:0.0006,
                3:0.002,
                4:0.008,
                5:0.04
                },
            'completeness':
                {
                1: 0.0,
                2: 0.0001,
                3: 0.0006,
                4: 0.002,
                5: 0.008
                },
            'temporal correlation':
                {
                1:0.0,
                2:0.0002,
                3:0.002,
                4:0.008,
                5:0.04
                },
            'geographical correlation':
                {
                1:0.0,
                2:0.000025,
                3:0.0001,
                4:0.0006,
                5:0.002
                },
            'further technological correlation':
                {
                1:0.0,
                2:0.0006,
                3:0.008,
                4:0.04,
                5:0.12
                }
         }
Другие вопросы по тегам