Спасибо, что удалили ваш вопрос. Я не думаю, что вам нужна какая-либо форма оптимизации для выполнения этой максимизации. Конечно, не lpSolve или Optim. Вы страхуете только дополнительный автомобиль (целое число, без доли автомобиля) до тех пор, пока не достигнете или превысите уровень безубыточности. Для этого будет достаточно while
цикла:
# reproducible dataset - best practice is to use dput(yourData) to generate this
dat <- data.frame(
cars = structure(c(1L, 4L, 2L, 5L, 3L), .Label = c("audi", "bmw", "honda",
"tesla", "toyota"), class = "factor"),
week1 = c(20L, 12L, 12L, 1L, 6L),
week2 = c(20L, 12L, 12L, 1L, 6L),
week3 = c(21L, 12L, 12L, 1L, 7L),
week4 = c(21L, 12L, 12L, 1L, 7L),
week5 = c(20L, 12L, 12L, 1L, 7L),
week6 = c(19L, 12L, 13L, 1L, 7L),
week7 = c(22L, 12L, 13L, 1L, 7L),
week8 = c(22L, 12L, 13L, 1L, 8L),
week9 = c(22L, 12L, 13L, 0L, 8L),
week10 = c(22L, 12L, 13L, 0L, 8L),
breakevenCoverage = c(0.71, 0.74, 0.73, 0.71, 0.71),
stringsAsFactors = FALSE)
# I like to initialize all my empty objects
dat[,"covered"] <- 0 # initialize the column we will fill with results
dat[,"coveredPercent"] <- 0
coveredPercent <- 0
for(i in 1:nrow(rawdat)){ # for each car
covered = 0 # start at zero
coveredPercent = 0
while(coveredPercent < rawdat[i, "breakevenCoverage"]){
covered <- covered + 1
coveredPercent <- covered*10/sum(dat[i, 2:11])
}
dat[i, "covered"] <- covered
dat[i, "coveredPercent"] <- coveredPercent
}
dat
Который показывает результат:
#cars week1 week2 week3 week4 week5 week6 week7 week8 week9 week10 breakevenCoverage covered coveredPercent
#1 audi 20 20 21 21 20 19 22 22 22 22 0.71 15 0.7177033
#2 tesla 12 12 12 12 12 12 12 12 12 12 0.74 9 0.7500000
#3 bmw 12 12 12 12 12 13 13 13 13 13 0.73 10 0.8000000
#4 toyota 1 1 1 1 1 1 1 1 0 0 0.71 1 1.2500000
#5 honda 6 6 7 7 7 7 7 8 8 8 0.71 6 0.8450704
Дайте мне знать, если у вас есть какие-либо вопросы.