R lpsolve获得第二、第三、第n个最佳解决方案
我试图在R中使用lpsolveapi解决一个优化问题。我不仅试图得到最佳解决方案,而且还试图得到次优(通过第n个)解决方案。该应用程序适用于奇幻足球,在5个不同的职位上有一定数量的大小不同的球员,总工资的额外限制不能超过。我已经找到了一个解决办法,但在适应我的问题方面遇到了困难 我假设我需要添加一个约束,其值来自R lpsolve获得第二、第三、第n个最佳解决方案,r,optimization,lpsolve,R,Optimization,Lpsolve,我试图在R中使用lpsolveapi解决一个优化问题。我不仅试图得到最佳解决方案,而且还试图得到次优(通过第n个)解决方案。该应用程序适用于奇幻足球,在5个不同的职位上有一定数量的大小不同的球员,总工资的额外限制不能超过。我已经找到了一个解决办法,但在适应我的问题方面遇到了困难 我假设我需要添加一个约束,其值来自get.objective(lp\u模型)。我试过这样做,但我不认为我已经设置正确,因为我只得到了一个解决方案仍然 理想情况下,我正在寻找这样的解决方案(有适当数量的玩家): 以下是我目
get.objective(lp\u模型)
。我试过这样做,但我不认为我已经设置正确,因为我只得到了一个解决方案仍然
理想情况下,我正在寻找这样的解决方案(有适当数量的玩家):
以下是我目前的代码:
library(lpSolveAPI)
Dataset <- matrix(c("DET","SF","NO","D.Prescott","A.Smith","C.Newton","L.Miller","C.McCaffrey","A.Kamara","D.Freeman","C.Hyde","C.Thompson","D.Murray","D.Bryant","D.Baldwin","A.Green","T.Hill","J.Landry","M.Crabtree","L.Fitzgerald","G.Tate","A.Seferian-Jenkins","V.Davis","D.Walker","J.Cook",1,1,1,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,3000,3200,3400,6700,6500,6300,6200,6500,6300,6600,5200,6100,5400,6400,6900,7400,6700,6300,6500,5900,6300,4900,4100,4900,4000,7.679411765,7.309444444,7.061764706,20.66725263,19.58133684,18.78134737,16.08178947,14.93878947,14.605,14.02315789,13.93152632,13.92768421,12.94,15.66052632,15.38147368,14.85521053,14.60457895,14.56222222,14.44427778,14.23257895,14.16161111,11.09,10.95147368,10.52473684,9.581222222), ncol=4)
colnames(Dataset) <- c('Name','Position2','Salary','Pts')
Dataset <- data.frame(Dataset)
Dataset$Position2 <- as.numeric(Dataset$Position2)
Dataset$Salary <- as.numeric(Dataset$Salary)
Dataset$Pts <- as.numeric(Dataset$Pts)
lp_model= make.lp(0, nrow(Dataset))
set.objfn(lp_model, Dataset$Pts)
add.constraint(lp_model, rep(1,nrow(Dataset)), "=", 9)
add.constraint(lp_model, as.vector(Dataset$Salary), "<=", 50000)
add.constraint(lp_model, Dataset$Position2==1, "=", 1)
add.constraint(lp_model, Dataset$Position2==2, "=", 1)
add.constraint(lp_model, Dataset$Position2==3, ">=", 2)
add.constraint(lp_model, Dataset$Position2==3, "<=", 3)
add.constraint(lp_model, Dataset$Position2==4, ">=", 3)
add.constraint(lp_model, Dataset$Position2==4, "<=", 4)
add.constraint(lp_model, Dataset$Position2==5, ">=", 1)
add.constraint(lp_model, Dataset$Position2==5, "<=", 2)
lp.control(lp_model, sense= "max")
set.type(lp_model, 1:nrow(Dataset), "binary")
lp_model
solve(lp_model)
get.variables(lp_model)
get.objective(lp_model)
get.constr.value((lp_model))
get.total.iter(lp_model)
get.solutioncount(lp_model)
rc<-solve(lp_model)
sols<-list()
obj0<-get.objective(lp_model)
counter = 0
# find more solutions
while(TRUE) {
counts <- matrix(obj0, ncol=nrow(Dataset))
counter = counter+1
sol <- round(get.variables(lp_model))
sols <- c(sols,list(sol))
add.constraint(lp_model,counts,"<",obj0)
rc<-solve(lp_model)
obj0<-get.objective(lp_model)
if (rc!=0) break;
if (counter == 5) break;
}
sols
库(lpSolveAPI)
Dataset我找到了一个基于玩弄它的解决方案。我从上面的链接切换回原来的答案,并添加了一个计数器。代码如下:
rc<-solve(lp_model)
sols<-list()
obj0<-get.objective(lp_model)
while(TRUE) {
counter = counter+1
sol <- round(get.variables(lp_model))
sols <- c(sols,list(sol))
add.constraint(lp_model,2*sol-1,"<=", sum(sol)-1)
rc<-solve(lp_model)
#if (rc!=0) break;
#if (get.objective(lp_model)<obj0-1e-6) break;
if (counter == 5) break;
}
sols
rc
rc<-solve(lp_model)
sols<-list()
obj0<-get.objective(lp_model)
while(TRUE) {
counter = counter+1
sol <- round(get.variables(lp_model))
sols <- c(sols,list(sol))
add.constraint(lp_model,2*sol-1,"<=", sum(sol)-1)
rc<-solve(lp_model)
#if (rc!=0) break;
#if (get.objective(lp_model)<obj0-1e-6) break;
if (counter == 5) break;
}
sols