Цель: Использовать текущий код lpSolve для создания нового кода с использованием пакета lpSolveAPI.
Фон: Я использовал lpSolve, чтобы найти оптимальный решение в целях создания составов спортивных состязаний по фэнтези-спорту, которые максимизируют прогнозируемые баллы (DK) игроков в команде по сравнению с максимально допустимой общей заработной платой (SALARY) - с несколькими другими ограничениями, чтобы соответствовать правилам конкурса. В нескольких случаях я обнаружил, что lpSolve не может найти наиболее оптимальное решение. По-видимому, он по какой-то неизвестной причине пропускает лучшее решение по пунктам / долларам и находит только n-е лучшее решение. К сожалению, у меня нет примера этого, поскольку у меня недавно были проблемы с моим архивным диском, и я потерял немало данных.
Мои исследования / вопросы: Я читал другие темы здесь у которых были подобные проблемы с lpSolve ( как здесь ). В этих случаях lpSolveAPI смог увидеть оптимальное решение, а lpSolve - нет. Не знакомый с lpSolveAPI, я ищу помощи от кого-то, знакомого с обоими пакетами, в преобразовании моего текущего кода, чтобы вместо этого воспользоваться преимуществами пакета lpSolveAPI и устранить надзор за lpSolve в будущем. Я пытался, но по какой-то причине я теряюсь в переводе.
Мой код lpSolve:
# count the number of unique teams and players
unique_teams = unique(slate_players$TEAM)
unique_players = unique(slate_players$PLAYERID)
# define the objective for the solver
obj = slate_players$DK
# create a constraint matrix for the solver
con = rbind(t(model.matrix(~ POS + 0, slate_players)), #Positions
t(model.matrix(~ PLAYERID + 0, slate_players)), #DupPlayers
t(model.matrix(~ TEAM + 0, slate_players)), #SameTeam
rep(1,nrow(slate_players)), #TotPlayers
slate_players$SALARY) #MaxSalary
# set the direction for each of the constraints
dir = c("==", #1B
"==", #2B
"==", #3B
"==", #C
"==", #OF
"==", #SP
"==", #SS
rep('<=',length(unique_players)), #DupPlayers
rep('<=',length(unique_teams)), #SameTeam
"==", #TotPlayers
"<=") #MaxSalary
# set the limits for the right-hand side of the constraints
rhs = c(1, #1B
1, #2B
1, #3B
1, #C
3, #OF
2, #SP
1, #SS
rep(1,length(unique_players)), #DupPlayers
rep(5,length(unique_teams)), #SameTeam
10, #TotPlayers
50000) #MaxSalary
# find the optimal solution using the solver
result = lp("max", obj, con, dir, rhs, all.bin = TRUE)
# create a data frame for the players in the optimal solution
solindex = which(result$solution==1)
optsolution = slate_players[solindex,]
Спасибо за вашу помощь!