我是R的新手,并试图处理学校项目的事情。
我们的想法是建立一个简单而假想的发电/存储系统,该系统仅使用太阳能电池板和电池存储来满足能源需求。在给定预定存储容量的情况下,目的是选择最少量的太阳能电池板,以确保在一年中的每一天都满足需求。我有一整年的日常数据 - 太阳能曝晒数据,可以确定面板的生产效率,白天的电力需求和夜间电力需求。白天剩余发电量存储在电池中,达到预定限值,然后在夜间放电以满足需求。
我写了一个简单的R程序f(x),其中x是安装的太阳能电池板的数量。与电池存储参数一样,它在整年都是不变的。
在为每天的总功率输出和每天产生的总剩余功率创建新变量并将这些变量作为第4列和第5列添加到原始数据框之后,程序创建了两个新的矢量“batterystartvector”和“batterymidvector”,分别表示每天开始时和中间点,昼夜之间的电池电量。
程序循环数据框中的每一天(行),并且:
(1)将产生的剩余电量(第5列)归功于存储系统,达到预定限值(在我的例子中为7500兆瓦时) - 然后存储在“batterymidvector”中。
(4)从刚刚在“batterymidvector”中注册的总数中减去夜间需求(第3列),以确定第二天开始时存储的能量,并将此数字存储在“batterystartvector”中。
(5)重复所有365天。
最终,我的目标是使用优化包(例如DEoptimr)来确定x的最低值,以确保在所有日期满足需求 - 即“batterymidvector”或“batterystartvector”中的值都不是永远消极。
由于两个电池向量中的每个条目都依赖于先前的条目,我无法弄清楚如何编写不使用'for'循环的程序。但肯定必须有一种更简单,更少笨重的方式。
以下是代码:
library(DEoptimR)
setwd("C:/Users/User/Desktop/Thesis Stuffs/R Programs")
data <- read.csv("optdata1.csv", header=TRUE)
#x is pv installed and y is pumped-storage capacity
#default is that system starts with complete pumped reservoir
f <- function(x) {
data$output <<- (data$insolation*x)/1000
data$daybalance <<- data$output - data$day
batterystartvector <<- vector(mode="numeric",length="365")
batterystartvector[1] <<- c(7500)
batterymidvector <<- vector(mode="numeric", length="366")
for(i in 1:nrow(data)) {
#charging up
batterymidvector[i] <<- min(batterystartvector[i] + data[i,5], 7500)
#depleting
batterystartvector[i+1] <<- (batterymidvector[i] - data[i,3])
}
}