数据帧上的R优化

数据帧上的R优化,r,optimization,R,Optimization,我有下面的代码,我想找到x,y和z的最佳值 df <- data.frame(replicate(3,sample(0:100,100,rep=TRUE))) find_best <- function(xyz) { x <- xyz[1] y <- xyz[2] z <- xyz[3] nr <- count(df) val <- count(df[df[, "X1"] < x & df[, "X2"] < y

我有下面的代码,我想找到x,y和z的最佳值

df <- data.frame(replicate(3,sample(0:100,100,rep=TRUE)))

find_best <- function(xyz) {
  x <- xyz[1]
  y <- xyz[2]
  z <- xyz[3]
  nr <- count(df)
  val <- count(df[df[, "X1"] < x & df[, "X2"] < y & df[, "X3"] < z, ] )
  return(val$n/nr$n)
}

optim(par = c(30,15,15), fn = find_best,  lower=c(0,0,0), upper=c(100,100,100), method="L-BFGS-B")

因此,问题是,如何使用optim或其他任何方法获得x、y、z的最佳值。

下面是一个示例,说明如何使用optim来达到您的目的

set.seed(1)
df <- data.frame(replicate(3,sample(0:100,1e5,rep=TRUE)))

find_best <- function(xyz) {
  x <- xyz[1]
  y <- xyz[2]
  z <- xyz[3]
  r <- nrow(subset(df,X1 < x & X2 < y & X3 < z))/nrow(df)
}

res <- optim(par = c(35,15,15), fn = find_best,  lower=c(0,0,0), upper=c(100,100,100), control = list(fnscale = -1))
set.seed(1)

df函数中的
count()
是什么
find_best()
?它只是行数。当前,我返回满足条件的行数除以行总数,x、y和z的
最佳值是什么意思?要最大化
val/nr
?是的,目前它是非常无用的,因为它只会产生最大值,但正如我所说的,我将在以后添加更多约束,只要优化算法在银行中运行很多。但是为什么你的函数没有返回值?@HansGeber很抱歉,我忘了粘贴
res。似乎我不能使用边框,当我使用你的方法时,
use boarders
,你是什么意思?一个上限和下限
set.seed(1)
df <- data.frame(replicate(3,sample(0:100,1e5,rep=TRUE)))

find_best <- function(xyz) {
  x <- xyz[1]
  y <- xyz[2]
  z <- xyz[3]
  r <- nrow(subset(df,X1 < x & X2 < y & X3 < z))/nrow(df)
}

res <- optim(par = c(35,15,15), fn = find_best,  lower=c(0,0,0), upper=c(100,100,100), control = list(fnscale = -1))
> res
$par
[1] 35.085 15.205 15.225

$value
[1] 0.00881

$counts
function gradient 
       2        2 

$convergence
[1] 0

$message
[1] "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL"