Максимизация / оптимизация функции с ограничениями в r - PullRequest
0 голосов
/ 26 июня 2019

Предположим, у меня есть этот фрейм данных.

library(dplyr)
library(lpSolve)
a <- seq(from=-0.5, to=0.5, by=.01)
success_rate <- sample(a, size=945, replace=TRUE)
attempts <- sample(1:800, 945, replace = TRUE)
df <- data.frame(success_rate,attempts)

Я хочу найти X1 и X2, которые максимизируют следующую функцию:

{X1*df$attempts[1] + X2*df$success_rate[1]}/{X1*max(df$attempts) + X2*max(df$success_rate)}

Однако максимизация должна выполняться при следующих ограничениях:

Результат функции должен быть <= 1 для всех наблюдений в рамках кадра данных, X1 + X2 = 1, а X1 и X2 не должны быть равны 0. </p>

Я использовал lpsolve для ее решения, но он всегда дает мне 1 и 0 в качестве решения, хотя я указываю, что X не могут быть равны 0. Вот что у меня есть:

df$success_rate <- (df$success_rate-min(df$success_rate))/(max(df$success_rate)-min(df$success_rate))
df$attempts <- (df$attempts-min(df$attempts))/(max(df$attempts)-min(df$attempts))

aux <- cbind(inputs, outputs)
f.obj <- c(df2$pass_snapsscale[2], df2$pass_perscale[2])
f.con <- rbind(aux, c(1,1), c(1,1), c(0,1), c(1,0))
f.dir <- c(rep("<=",946),">=",">", ">" )
f.rhs <- c(rep(1,946),0,0,0)
model <- lp ("max", f.obj, f.con, f.dir, f.rhs, compute.sens = TRUE)

Что я получаю:

Success: the objective function is 0.753689 

Который является значением df $ попытки [1]. Есть ли другой способ максимизировать эту функцию или вы можете указать, что не так с моим кодом?

1 Ответ

0 голосов
/ 27 июня 2019

Похоже, вы пытаетесь использовать библиотеку линейного программирования для решения нелинейной задачи.Попробуйте переформулировать проблему, как представлено в документации.http://lpsolve.sourceforge.net/5.5/ Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...