multiobj。R
# #想要覆盖三个不同的集合,但受制狗万app足彩于#元素允许使用的共同预算。然而,这些设置有不同的优先级要覆盖;我们用多目标优化来解决这个问题。库(矩阵)库(gurobi) #定义原始数据groundSetSize < - 20 nSubSets预算< < - 4 - 12组< -列表(c (1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), c (0, 0, 0, 0, 0, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1), c (0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0), c (0, 0, 0, 1, 1, - 1, 0, 0, 0, 1, 1, 1,0, 0, 0, 1, 1, 1, 0,0)) SetObjPriority <- c(3,2,2,1) SetObjWeight <- c(1.0, 0.25, 1.25, 1.0) #初始化模型模型<- list()模型$Modelsense <- 'max'模型$modelname <- 'multiobj' #设置变量,它们都是二进制的,以0,1为界限。模型$vtype <- 'B'模型$Lb <- 0模型$Ub <- 1型号$varnames <- paste(rep('El', groundSetSize), 1:groundSetSize, sep= ") #创建约束矩阵模型$A <- spMatrix(1, groundSetSize, i = rep(1,groundSetSize), j = 1:groundSetSize, x = rep(1,groundSetSize))模型$rhs <- c(Budget)模型$感知<- c('<')模型$construcnames <- c('Budget') #设置多目标模型$multiobj <- list() for (m in 1:nSubSets){模型$Multiobj [[m]] <- list()模型$multiobj [[m]]$objn <-设置[[m]]模型$multiobj [[m]]$- SetObjPriority[m]模型$multiobj [[m]]$weight <- SetObjWeight[m]模型$multiobj [[m]]$Abstol <- m模型$multiobj [[m]]$Reltol <- 0.01模型$multiobj [[m]]$name <- sprintf('设置%d', m)模型$multiobj [[m]]$con <- 0.0} #保存模型gurobi_write(model,'multiobj_R.lp') #设置参数params <- list($PoolSolutions <- 100 #优化结果<- gurobi(model, params) #获取解决方案信息$= 'OPTIMAL') {cat('优化完成状态',结果$# Print the best solution cat(' select elements in best solution:\n') for (e in 1:groundSetSize) {if(result . get (' result . get ', ' result . get ')$x[e] < 0.9) next cat(' El',e,sep= ")} cat('\n') #遍历最好的10个解决方案如果('pool' %in% names(result)) {solcount <- length(result . name$if (solcount > 10) {solcount <- 10} cat('目标值第一',solcount, '解决方案:n') for (k in 1:solcount) {cat('解决方案',k, '有目标:',结果$池[[k]]$else {solcount <- 1 cat('找到的解决方案的数量:',solcount, '\n') cat('解决方案1有目标:',结果$#清除rm(model, params, result)