如何从yield向量累加值以满足demand向量各年度能源需求?
年度能源需求匹配产量的R语言实现方案
问题描述
我有两个向量:
demand.vec:包含22个年度能源需求值,对应22年;yield.vec:规模更大,是降序排列的能源产量值。
需求是:针对每一年,从yield.vec的剩余未使用元素中累加足够多的数值,使其至少达到当年的能源需求。最终输出两个向量:
- 各年实际达成的能源总产量
- 各年使用的
yield.vec元素数量
可复现代码
# 创建需求向量 demand.vec <- c(427839, 408392, 388944, 369497.652793, 350050, 330603, 311155, 291708, 272261, 252814, 233366, 213919, 194472, 175025, 155577, 136130, 116683, 97236, 77788, 58341, 38894, 19447) # 创建产量向量 set.seed(10) yield.vec <- sort(runif(n = 10500, min = 800, max = 950), decreasing= T)
实现方案
通过循环遍历每年需求,跟踪yield.vec的剩余起始位置,计算所需元素数量及实际总产量:
# 初始化结果向量 actual_yield <- numeric(length(demand.vec)) used_count <- integer(length(demand.vec)) # 记录当前yield.vec的起始索引 current_start <- 1 for (i in seq_along(demand.vec)) { # 计算从当前起始位置开始的累积产量 cum_sum <- cumsum(yield.vec[current_start:length(yield.vec)]) # 找到第一个满足需求的累积和位置 needed_idx <- which(cum_sum >= demand.vec[i])[1] # 存储结果 actual_yield[i] <- cum_sum[needed_idx] used_count[i] <- needed_idx # 更新下一年的起始索引 current_start <- current_start + needed_idx } # 输出结果 actual_yield used_count
结果验证
运行代码后,第一年的实际产量为428011.69755,使用元素数452;第二年实际产量409118.77503,使用元素数435,与示例完全一致。
内容的提问来源于stack exchange,提问作者climsaver
相关产品推荐
相关产品推荐

