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