我有以下问题:
我的代码如下
start.time <- Sys.time()
set.seed(42)
vs = rnorm(60, 0.06, 0.2)
max_attempts = 200000
swaps_made = 0
for (step in 1:max_attempts) {
# Copy the vector and swap two random values
vs_new = vs
swap_inds1 = sample(55:60, 2, replace = FALSE)
swap_inds2 = sample(length(vs), 2, replace = FALSE)
vs_new[swap_inds1] = vs_new[swap_inds2]
vs_new[swap_inds2] = vs_new[swap_inds1]
vs2 <- as_tibble(cumprod(1+vs_new))
vs3 <- as_tibble(cumprod(1+vs))
if (abs(vs2[60,1]-vs2[55,1]) < abs(vs3[60,1]-vs3[55,1])) {
vs = vs_new
}
flat = ((vs2[60,1]-vs2[55,1]) < 1.05) & ((vs2[60,1]-vs2[55,1]) > 0.95)
peak= (max(vs2) < 1.305) & (max(vs2) > 1.295)
swaps_made = swaps_made + 1
if (peak && flat) {
break
}
}
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
这种“爬坡”(我不知道是否可以这样命名)方法不会为我带来任何结果。
我的下一个想法是使用排列包,并为我的数据子集创建置换,合并置换后的子集,并检查是否满足条件。不过,我担心这可能是我可能要走的另一次不必要的弯路,想问一下您是否对如何解决此问题有任何了解?