我想为一个为机器供电的可再生能源工厂实施一个电池系统。例如,机器需要 1000 kw/h 或最接近该数量的能量。如果产生的能量超过 1000 千瓦/小时,剩余的电量可用于为电池充电,假设为 100 千瓦。如果产生的能量小于 1000 kw/h 并且电池中有能量,则应使用电池的能量为机器供电。生成的能源数据集示例如下:
数据集Energia
路径 | 1 小时 | 2小时 | 3小时 | 4小时 | 5小时 | 6小时 | ... | 8760小时 |
---|---|---|---|---|---|---|---|---|
1 | 950,0 | 947,1 | 982,4 | 1013,5 | 1003,0 | 1087,7 | ... | |
2 | 1046,9 | 947,9 | 981,9 | 1031,9 | 984,8 | 931,8 | ... | |
3 | 996,1 | 1031,0 | 978,8 | 972,7 | 826,8 | 952,0 | ... | |
4 | 943,4 | 1015,2 | 1007,2 | 994,8 | 1017,4 | 979,8 | ... |
我应该在哪里获取新能源和电池充电水平数据集,如下:
数据集 Bateria
路径 | 1 小时 | 2小时 | 3小时 | 4小时 | 5小时 | 6小时 |
---|---|---|---|---|---|---|
1 | 0,0 | 0,0 | 0,0 | 13,5 | 16,5 | 100,0 |
2 | 46,9 | 0,0 | 0,0 | 31,9 | 16,7 | 0,0 |
3 | 0,0 | 31,0 | 9,8 | 0,0 | 0,0 | 0,0 |
4 | 0,0 | 15,2 | 22,3 | 17,2 | 34,6 | 14,4 |
新数据集Energia
路径 | 1 小时 | 2小时 | 3小时 | 4小时 | 5小时 | 6小时 |
---|---|---|---|---|---|---|
1 | 950,0 | 947,1 | 982,4 | 1013,5 | 1003,0 | 1087,7 |
2 | 1046,9 | 994,8 | 981,9 | 1031,9 | 1000,0 | 948,5 |
3 | 996,1 | 1031,0 | 1000,0 | 982,5 | 826,8 | 952,0 |
4 | 943,4 | 1015,2 | 1007,2 | 1000,0 | 1017,4 | 1000,0 |
我正在一年(8760)的每个小时进行模拟 for 循环,有一千种可能的能源发电值路径。我目前正在为每一列创建一个 for 来检查条件(还有更多条件),代码是下一个:
carga_bateria<- data.frame(matrix(0, nrow = 1040, ncol = 8760))
for (i in 2:8760) {
cond1<-energia[,i]>pot_elec
carga_bateria[cond1,i]=carga_bateria[cond1,i-1]*(1-0.02/100)+pmin(n_bat*7.55-carga_bateria[cond1,i-1]*(1-0.02/100),(energia[cond1,i]-pot_elec)*0.85)
# si la energia generada es mayor a la necsitada entonces la bateria queda con la carga anterior con la perdida de 0.02% + el minimo entre
#la bateria que hace falta y el excedente generado incluyendo la perdida de eficiencia al cargar de 85%.
cond2<-(energia[,i]+pmax(carga_bateria[,i-1]*(1-0.02/100)-n_bat*7.55*0.2,0))<pot_elec*0.3#cuando ni incluyendo la bateria en t-1 llega al 30% de la capacidad del electrolizador, entonces tambien se carga bateria
carga_bateria[cond2,i]=carga_bateria[cond2,i-1]*(1-0.02/100)+pmin(n_bat*7.55-carga_bateria[cond2,i-1]*(1-0.02/100),(energia[cond2,i])*0.85)
cond3<- pot_elec>energia[,i]&(pot_elec-energia[,i])<(carga_bateria[,i-1]*(1-0.02/100)-n_bat*7.55*0.2)#Caso desacarga parcial bateria, si el faltante lo puede cubrir la bateria
carga_bateria[cond3,i]=carga_bateria[cond3,i-1]*(1-0.02/100)-(pot_elec-energia[cond3,i]) #la bateria se descargaga en ese faltante
energia[cond3,i]<- pot_elec #la energia llega a la capacidad
cond4<- (energia[,i]+pmax(carga_bateria[,i-1]*(1-0.02/100)-n_bat*7.55*0.2,0))>pot_elec*0.3&(energia[,i]+pmax(carga_bateria[,i-1]*(1-0.02/100)-n_bat*7.55*0.2,0))<pot_elec# caso de descarga total
carga_bateria[cond4,i]= n_bat*7.55*0.2#la bateria se descargaga totalmente
energia[cond4,i]<- energia[cond4,i]+(carga_bateria[cond4,i-1]*(1-0.02/100)-n_bat*7.55*0.2) #la energia llega a la capacidad
cond99<-!cond1&!cond2&!cond3&!cond4
carga_bateria[cond99,i]=carga_bateria[cond99,i-1]*(1-0.02/100)
validacion[1,i]<-sum(cond1);validacion[2,i]<-sum(cond2);validacion[3,i]<-sum(cond3);validacion[4,i]<-sum(cond4)
validacion[5,i]<- sum(cond1,cond2,cond3,cond4)
}
但我想让这个过程尽可能高效。我相信并行化不是一种选择,因为分析是顺序的和有条件的,尽管我不知道。
我无法运行你的代码,因为你没有包含 energia 和 bateria 的数据集,但我建议将你的数据从宽格式转换为长格式 - 每个路径每小时一行,例如:
路径 | 霍拉 | 能源 | 电池 |
---|---|---|---|
1 | 1 | 950.0 | 0.0 |
1 | 2 | 947.1 | 0.0 |
2 | 1 | 1046.9 | 46.9 |
然后您可以使用
group_by
(来自 dplyr)包以及 lead
和 lag
(也来自 dplyr
)向下移动数据集。
这是您要找的吗?