我无法弄清楚如何设置BW2以在MC模拟中获得具有对数正态分布的参数的负值,例如模拟负排放。例如:
from brightway2 import *
import numpy as np
mydb = Database('mydb')
mydb.write({
('mydb', 'Some activity'): {
'name': 'Some activity',
'unit': 'kWh',
'exchanges': [{
'input': ('mydb', 'Carbon dioxide'),
'amount': 20, # positive!
'unit': 'kg',
'type': 'biosphere',
'uncertainty type' : 2,
'loc' : np.log(20),
'scale' : 1.01
}]
},
('mydb', 'Carbon dioxide'): {'name': 'Carbon dioxide', 'unit': 'kg', 'type': 'biosphere'}
})
exc = list(mydb.get('Some activity').exchanges())[0]
exc.as_dict()
exc.random_sample(n=10)
这很有效。我明白了:
Out[8]:
array([ 25.20415107, 17.48476344, 16.98842921, 3.79548038,
12.54165042, 27.93752377, 7.57070571, 43.22285015,
48.44984804, 13.83083672]) # everything fine
现在让我们假设我想获得相同的值,但是负数:array([ -25.20415107, -17.48476344, etc. ...
,因为我认为我的碳摄取量为-20千克二氧化碳。如果我写'amount': -20
,我会得到一个奇怪的结果:
Out[9]:
array([ 0.73060359, 36.69825867, 5.71416558, 10.78119397,
16.24447705, 2.96507057, 6.73564118, 19.24411117,
7.23110067, 126.42690714])
我知道对数正态分布不能是负数,但我所期望的是,分布是根据“loc”和“scale”信息计算出的正值,然后根据“金额”信息进行反转。这对于在具有负排放的库存上执行MC是必要的。任何线索?感谢
答案 0 :(得分:1)
阻止预期行为有两个问题:
amount
中给出负值是不够的; RNG代码位于stats_arrays库中,您必须将字段negative
设置为True
(see docs)。brightway2-data
中有一个错误,在7e3341c和发布2.4.6中已修复,导致密钥negative
无法在exchange.uncertainty
中使用。通常,从其他格式导入数据时,negative
字段会自动设置,例如SimaPro CSV,Ecospold 1。此外,当数据库处理为参数数组时,negative
字段也来自amount field
always set。这种情况的不同之处在于您直接从stats_arrays
调用函数,而不是通过brightway2-calc
。
在最新安装中添加negative
字段:
from brightway2 import *
import numpy as np
projects.set_current("SO 45935773")
bw2setup()
mydb = Database('mydb')
gwp = ('IPCC 2013', 'climate change', 'GWP 100a')
co2 = get_activity(('biosphere3', '349b29d1-3e58-4c66-98b9-9d1a076efd2e'))
mydb.write({
('mydb', 'Some activity'): {
'name': 'Some activity',
'unit': 'kWh',
'exchanges': [{
'input': co2.key,
'amount': -20, # negative
'negative': True,
'unit': 'kg',
'type': 'biosphere',
'uncertainty type' : 2,
'loc' : np.log(20),
'scale' : 1.01
}]
}
})
exc = list(mydb.get('Some activity').exchanges())[0]
exc.random_sample(n=10)
产生预期的行为:
array([ -3.24683872, -5.01873359, -31.54532003, -40.59523805,
-54.00447092, -6.11459063, -41.5250442 , -8.05295075,
-31.46077832, -29.8769442 ])