multiobj。R


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 . nameif (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)