manbet体育手机客户端


fixanddive.R


#版权2019,Gurobi Opt狗万app足彩imization,LLC###实现一个简单的MIP启发式。放松模型,基于分数对变量进行排序,并修复最接近整数变量的分数变量的25%。#重复,直到放松是整数可行的或线性不可行。库(矩阵)库(Gurobi)args<-commandArgs(trailingOnly=TRUE)if(length(args)<1){stop('Usage:Rscript fixanddive.R filename\n')}读取模型cat('Reading model',args[1],'…'))model<-gurobi_Read(args[1])cat('…done\n')#检测一组非连续变量numvar<-ncol(model$A) intvars<-哪个型号$vtype!=“C”)numintvars<-length(intvars)if(numintvars<1){stop('All model's variables continue,not to do\n')}#如果lb和ub不存在,则创建它们,如果(!('lb'%in%model)){model,则将它们设置为默认值$lb<-numeric(numvars)}如果(!('ub'%in%model)){model$ub<-Inf+数值(numvars)}将所有变量设置为连续ovtype<-model$V型模型$vtype[1:numvars]<-'C'#参数参数<-list()参数$OutputFlag<-0 result<-gurobi(model,params)#执行多次迭代。在每次迭代中,确定最接近整数值的整数变量的第一个#四分位数#,将其固定到最接近的整数,然后重复。对于(iter In 1:1000){#查看状态是否为最佳if(result)$状态!='OPTIMAL'){cat('Model status is',result$状态,'\n')停止('Can not keep fixed variables\n')}#收集整数变量的分数<-abs(result$x层(结果)$x+0.5)分数<-replace(分数,分数<1e-5,1)分数<-replace(分数,ovtype='C',1)分数<-replace(分数,ovtype='S',1)分数<-length(其中分数<0.51)cat('iter',Obj:',结果$objval,'分数:',n分数,'\n')如果(n分数==0){cat('找到可行的解决方案-目标',结果$objval,'\n')break}对分数索引集进行排序选择<-order(分数,na.last=TRUE,discreating=FALSE)#将25%的变量nfix<-as.integer(上限(nfraction/4))#cat('Will fix',nfix',variables,of',numvar,'\n')if(nfix<10)cat('Fixing')else cat('Fixing',nfix,'variables,fractionality threshold:',fractional[select[nfix]],'\n')for(k in 1:nfix){j<-select[k]val<-floor(result$x[j]+0.5)模型$lb[j]<-val模型$ub[j]<-val如果(nfix<10)cat(型号$varname[j],'x*=',result$x[j],'to',val',)}if(nfix<10)cat('\n')#重新优化结果<-gurobi(模型,参数)}#清除空间rm(模型,参数,结果)