fixanddive。R


fixanddive。R


# #实现一个简单的MIP启发式。狗万app足彩放松模型,#基于分数对变量进行排序,并修复#分数变量中最接近整数变量的25%。#重复,直到松弛是整数可行或#线性不可行的。库(Matrix)库(gurobi) args <- commandArgs(trailingOnly = TRUE) if (length(args) < 1) {stop('Usage: Rscript fixanddive. py ');R filename\n')} #读取模型cat('Reading model',args[1],'…#检测非连续变量的集合numvars <- ncol(模型A) intvars <- which(模型vtype != 'C') numintvars <- length(intvars) if (numintvars < 1) {stop('所有模型的变量都是连续的,什么都不做\n')} #如果不存在,创建lb和ub,并将它们设置为默认值如果(!('lb' %in% model)){模型Lb <-数值(numvars)} if (!('ub' %in% model)){模型ub <- Inf + numeric(numvars)} #设置所有变量为连续的ovtype <- modelvtype模型vtype[1:numvars] <- 'C' #参数params <- list()参数OutputFlag <- 0 result <- gurobi(model, params) #执行多次迭代。在每次迭代中,确定最接近松弛中的整数值#的整数变量的第一个#四分位数,将它们固定到最接近的整数,然后重复。for (iter in 1:1000){#查看状态是否为最佳= 'OPTIMAL') {cat('模型状态是',结果#收集整型变量的分数分数<- abs(result . status,' n')x -地板(结果(x+0.5)))分数<- replace(分数,分数< 1e- 5,1)分数<- replace(分数,ovtype == 'C', 1)分数<- replace(分数,ovtype == 'S', 1)分数<- replace(分数,ovtype == 'S', 1) n分数<- length(分数<0.51))cat('迭代:',iter, 'Obj:',结果if (n分数== 0){cat('找到可行的解决方案-目标',结果Objval, ' n') break} #为分数索引的集合排序去年= TRUE,减少= FALSE) #解决25%的变量nfix < - as.integer(上限(nfractional / 4) #猫(nfix,将修正的变量,,numvars, ' \ n ')如果(nfix < 10)猫(修复的)其他猫(nfix“修复”,“变量,fractionality阈值:”,分数(选择[nfix]], ' \ n ') (k 1: nfix) {j < -选择[k] val < -地板(结果X [j] + 0.5)模型[j]Ub [j] <- val if (nfix < 10) if (nfix < 10)varname [j],“x * =”的结果if (nfix < 10) cat('\n') # reoptimization result <- gurobi(model, params, result)} #清除空间rm(model, params, result)