我有一个函数,我想基于整数向量进行优化。本质上,我试图通过更改输入的顺序来找到最大值。请参阅下面的示例。我的数据要大得多,所以我想知道是否有一个包比随机更改“vec”输入直到我找到最大值更好?任何帮助是极大的赞赏!
library(dplyr)
df<-data.frame(id=c(1:5),Revenue=sample(201:205))
#Start with random set of numbers to arrange dataframe
vec=c(1,2,5,3,4)
function_1<-function(vec){
df$new_col <- vec
df<-df%>%arrange(new_col)
df2 <-
df %>% mutate(nearest = transform(., close_prev = id[apply(`diag<-`(m <-
as.matrix(dist(id)), Inf) / upper.tri(m), 2, which.min)])) %>% as_tibble()
df2 <- as_tibble(df2$nearest)
df2 <-
##This is my penalty function which penalizes the revenue if any previous ##row id is less than 5 away from the row id.
df2 %>% ungroup() %>% mutate(Penalty = ifelse(row_number() == 1, 1, if_else(abs(id- close_prev) > 1, 1, .6))) %>%
mutate(Revenue_Penalized = Revenue * Penalty)
df3<<-df2
df2<- sum(df2$Revenue_Penalized)
print(df2)
}
function_1(df)
GenSA 尝试
x=GenSA(vec,function_1,lower=c(1,1,1,1,1),upper=c(5,5,5,5,5),control=list(maxit=100))
参数度量不是整数。此外,输出应使用“vec”的所有输入。我确定我做错了什么。
认为我找到了解决方案!谢谢。
ga(type='permutation',fitness=function_1,lower=1,upper=5, maxiter=5)