使用R(求解器)最小化预算

时间:2018-05-09 19:26:18

标签: r optimization solver minimization

这是Optimization of budget allocation in R (formerly Excel Solver)

中讨论的功能
  NrwGes <- function(Budget, Speed, maxnrw, cpcrp) {
  BudgetA <- Budget[1]
  BudgetB <- Budget[2]
  BudgetC <- Budget[3]
  BudgetD <- Budget[4]
  BudgetE <- Budget[5]

  MaxNRW <- c(90, 40, 40, 25, 15)
  Speed <- c(0.9, 0.9, 0.9, 0.9, 0.9)
  cpcrp <- c(6564, 4494, 3962, 4525, 4900)

  TV <- BudgetA*1000/cpcrp[1]
  Catchup <- BudgetB*1000/cpcrp[2]
  YT <- BudgetC*1000/cpcrp[3]
  FB <- BudgetD*1000/cpcrp[4]
  Display <- BudgetE*1000/cpcrp[5] 

  a <- TV^Speed[1]/(1+abs((TV)^Speed[1]-1)/(MaxNRW[1]*0.98))
  b <- Catchup^Speed[2]/(1+abs((Catchup)^Speed[2]-1)/(MaxNRW[2]*0.98))
  c <- YT^Speed[3]/(1+abs((YT)^Speed[3] -1)/(MaxNRW[3]*0.98))
  d <- FB^Speed[4]/(1+abs((FB)^Speed[4]-1)/(MaxNRW[4]*0.98))
  e <- Display^Speed[5]/(1+abs((Display)^Speed[5]-1)/(MaxNRW[5]*0.93))

  Ges <- a+(100-a)/100*b+((100-a)/100*(100-b)/100*c)+((100-a)/100*(100-b)/100*(100-c)/100*d)+((100-a)/100*(100-b)/100*(100-c)/100*(100-d)/100*e)
  return(Ges)
}

proj <- function(x) 5000 * x / sum(x)
st <- proj(rep(1, 5))
f <- function(x) NrwGes(proj(x))
res <- optim(st, f, lower = 0 * st, method = "L-BFGS-B", control = list(fnscale = -1))

通过优化方法,我能够最大化“Ges”。但我的老板还对该工具提出了另一项要求。他希望“Ges”,由函数返回以具有静态值(例如70),并且必须最小化预算以达到该值。你能帮助我吗?

0 个答案:

没有答案