I want to implement a battery system for a renewable plant of energy who feeds a machine. For example, The machine requires 1000 kw/h or the energy closest to that amount. If the energy generated exceeds 1000 kw/h, the surplus could be used to charge the battery, which, let’s say, is 100 kw. If the energy produced is less than 1000 kw/h and there is energy in the battery, the energy from the battery should be used to power the machine. An example generated energy dataset could be the following:
data set energia
Path | Hour 1 | Hour 2 | Hour 3 | Hour 4 | Hour 5 | Hour 6 | … | Hour 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 | … |
Where should I obtain a new energy and battery charge level data set as follows:
data set Bateria
Path | Hour 1 | Hour 2 | Hour 3 | Hour 4 | Hour 5 | Hour 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 |
New data set Energia
Path | Hour 1 | Hour 2 | Hour 3 | Hour 4 | Hour 5 | Hour 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 |
I am doing the simulation for-loop each of the hours in 1 year (8760) with a thousand possible paths of energy generation values. I am currently making a for for each column where I check the conditions (ther is more conditions), the code is the next:
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)
}
but I want to make the process as efficient as possible. I would believe that parallelization is not an option since the analysis is sequential and conditional, although I don’t know.
3