使用 R 中的正参数输入优化函数

optimize function using positive parameters inputs in R

我有一个函数,我想根据整数向量对其进行优化。本质上,我试图通过更改输入的顺序来找到最大值。请参见下面的示例。我的数据要大得多,所以我想知道是否有比随机更改“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)

以下使用 GA 包解决了我的问题。

ga(type='permutation',fitness=function_1,lower=1,upper=5)