fixanddive.R


# 2023年版权,Gurobi优化狗万app足彩,LLC # #实现一个简单的MIP启发式。放松模型,基于fractionality #类变量,并修复#的部分变量的25%接近整数变量。#重复直到放松是整数可行或#线性不可行。库(矩阵)库(gurobi)参数< - commandArgs (trailingOnly = TRUE)如果(长度(args) < 1){停止(“用法:Rscript fixanddive。R \ n文件名”)}#阅读模式的猫(args[1],“阅读模式”“…”)模型< - gurobi_read (args[1])猫('……完成\ n”) #检测组numvars < - ncol non-continous变量(模型美元一)intvars <——(模型美元vtype ! = ' C ') numintvars < -长度(intvars)如果(numintvars < 1){停止(所有模型\ ' s变量是连续的,无关\ n”)} #创建磅,乌兰巴托如果他们不存在,并设置默认值(!(“磅”% %模型)){模型美元磅< -数字(numvars)}如果(!(乌兰巴托的% %模型)){模型美元乌兰巴托< - Inf +数字(numvars)} #所有变量设置为连续ovtype < -模型美元vtype模型美元vtype [1: numvars] < - params < ' C ' #参数列表()参数美元OutputFlag < < - - 0结果gurobi(模型、参数)#执行多个迭代。在每个迭代中,识别第一个#四分位数的整数变量的最接近的整数值#放松,修复它们到最近的整数,和重复。(1:1000 iter){#看到如果状态最优(结果美元地位! = '最佳'){猫(模型状态,结果美元猫状态,“\ n”)(“不能保持固定变量\ n”)打破}#收集fractionality整数变量的分数< - abs(结果美元x -地板(结果美元x + 0.5))分数< -取代(分数,分数< 1 e-5, 1)分数< -取代(分数,ovtype = = ' C ', 1)分数< -取代(分数,ovtype = = ' S ', 1) nfractional < -长度((分数< 0.51))猫(iter的迭代:,“Obj:”,结果美元nfractional objval,部分:,“\ n”)如果(nfractional = = 0){猫(找到可行的解决方案——客观,结果美元objval, ' \ n ')打破}#订单组分数指数选择< -订单(分数,na。去年= 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] < - val模型美元乌兰巴托[j] < - val如果(nfix < 10)猫(模型美元varname [j],“x * =”的结果美元x [j],”到“,“val)}如果(nfix < 10)猫(“\ n”) #再优化结果< - gurobi(模型,参数)}#腾出rm(模型、参数结果)