Деагрегация экоинвент-процессов в Brightway2

Допустим, я хочу использовать процесс ecoinvent для автомобиля, и что модель процесса включает в себя воздействия для производства автомобиля, технического обслуживания, обслуживания дорог, топлива и т. Д. И давайте предположим, что я хочу моделировать автомобиль без топлива, потому что я хочу смоделировать использование другого топлива. Могу ли я сказать Brightway, чтобы рассчитать воздействие на автомобиль за вычетом топлива?

1 ответ

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

[
    {
        'code': 'car',
        'database': 'example',
        'exchanges': [{
            'input': ('database', 'fuel'), 
            'amount': 1
        }]
    }, {
        'code': 'fuel',
        'database': 'example',
    }
]

Затем вы можете построить новый набор данных и вычесть топливо:

{
    'code': 'car w/out fuel',
    'database': 'example',
    'exchanges': [{
        'input': ('example', 'car'), 
        'amount': 1
    }, {
        'input': ('example', 'fuel'), 
        'amount': -1
        }
    }]
}

А затем используйте этот набор данных в качестве функциональной единицы. В качестве альтернативы, вы можете вычесть расход топлива непосредственно в вашем функциональном блоке, передаваемый в LCA учебный класс:

LCA({('example', 'car'): 1, ('example', 'fuel'): -1)})

Вы также можете сохранить эту модифицированную функциональную единицу в настройке расчета.

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

from brightway2 import *
db = Database("ecoinvent 3.2 cutoff")
car = db.search('transport, passenger car, large size, diesel')[0]
new_car = car.copy()
for exc in new_car.exchanges():
    if 'diesel, low-sulfur' in exc.input['name']:
        exc.delete()

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

Другие вопросы по тегам