I am working on R, I need to set up a non linear optimization problem, my dataset has the following columns:
- Phs Code, that define univocally each pharmacy
- Score, that define the score associated to each pharmacy
- MKT, that define the market value generated by each pharmacy
The non linear maximization problem should contain:
- decisional variable X(i) = the value to invest in pharmacy i
- Objective function:
MAX sum Y(i)where ``Y(i) = (0.272*log( x(i) ) + score (i) ) sales in face of the investment X(i) - Constraints 1:
exp(0.0272*log( x(i) ) + score (i) ) < 0.8*MKT (i) - Constraints 2:
exp(0.0272*log( x(i) ) + score (i) ) - exp( 0.0272*log( x(i) + 1 ) + score (i) ) >= 1 - Constraints 3: sum of
X(i) < Bwith B = budget - Constraints 4: X(i) > 0 for each i
--
#Objective function
objfun <- function(x, score) 0.272 * log(x) + my_data$score
# Define the constraints
con <- function(x, Score, MKT) {
con1 <- exp(0.0272 * log(x) + Score) - 0.8 * MKT
con2 <- exp(0.0272 * log(x) + Score) - exp(0.0272 * log(x + 1) + Score) - 1
con3 <- sum(x) - 18000000
}
# Set up the optimization problem
x0 <- rep(1, nrow(my_data))
lb <- rep(0, nrow(my_data))
ub <- rep(Inf, nrow(my_data))
problem <- list(
objective = objfun,
lb = lb,
ub = ub,
eval_g_ineq = con )
result <- nloptr(x0 = x0,
eval_f = problem$objective,
lb = problem$lb,
ub = problem$ub,
eval_g_ineq = problem$eval_g_ineq,
opts = list("algorithm" = "NLOPT_LN_COBYLA"))
Trying to change different things but keep bumping into errors. Not sure about where is the problem with my code. Really need some help Thanks
Assuming your data has two observations, you should do something like that: