Минимизация бюджетов с помощью R (решатель) - PullRequest
0 голосов
/ 09 мая 2018

Эта функция обсуждается в Оптимизация распределения бюджета в R (ранее 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), и бюджет должен быть минимизирован, чтобы сохранить это значение. Ребята, вы можете мне помочь?

...