sensitivity.R


# 2023年版权,Gurobi优化狗万app足彩,LLC # #一个简单的灵敏度分析示例,从文件中读取MIP模型#并解决它。然后每个二进制变量设置# 1 - X,其中X是其价值的最优解,和#对目标函数值的影响报道。库(矩阵)库(gurobi)参数< - commandArgs (trailingOnly = TRUE)如果(长度(args) < 1){停止(“用法:Rscript敏感度。R \ n文件名”)}#阅读模式的猫(args[1],“阅读模式”“…”)模型< - gurobi_read (args[1])猫('……完成\ n”) #检测组numvars < - ncol non-continous变量(模型美元一)intvars <——(模型美元vtype ! = ' C ') numintvars < -长度(intvars)如果(numintvars < 1){停止(所有模型\ ' s变量是连续的,无关\ n”)} maxanalyze < - 10 #优化结果< - gurobi(模型)#获取解决方案信息如果结果美元地位! = '最佳'){猫(优化完成状态,结果美元状态,' \ n ')停止(“现在停止\ n”)} origx < -结果美元x origobjval < -结果美元objval #创建磅和乌兰巴托如果他们不存在,并设置默认值(!(“磅”% %名称(模型))){模型美元磅< -数字(numvars)}如果(!(乌兰巴托的% %名称(模型))){#不需要这条线,我们必须乌兰巴托定义模型美元乌兰巴托< - Inf +数字(numvars)} #禁用输出为后续解决参数< -()参数列表美元OutputFlag < - 0 #我们极限灵敏度分析变量的最大数量numanalyze < - 0 #遍历中解脱的二进制变量模型(j在1:numvars){如果(模型)美元vtype [j] ! = B & &模型美元vtype [j] ! =下如果(“我”)模型美元vtype [j] = =“我”){如果(模型)美元磅[j]。下如果(= 0.0)模型美元乌兰巴托[j] ! = 1.0)下其他}{如果(模型)美元磅[j]下如果(模型> 0.0)美元乌兰巴托[j] < 1.0)下}#更新MIP开始对所有变量模型美元开始< - origx #变量设置为1 - X,其中X是最优解,如果它的值(origx [j] < 0.5){模型美元开始[j] < - 1模型美元磅[j] < - 1}{模型美元[j] < - 0开始模型美元乌兰巴托[j] < - < 0} #优化结果gurobi(模型、参数)#显示结果varnames < -“如果(“varnames”% %名称(模型)){varnames < -模型美元其他varnames [j]} {varnames < - sprintf (“% s % d”模型美元vtype [j], j) < - 0}差距如果(结果美元地位! = '最佳'){< < -其他- Inf}{差距差距的结果美元objval origobjval}猫(varnames“客观敏感变量”,“是”,差距,' \ n ') #恢复原始边界模型美元磅[j] < - 0模型美元乌兰巴托[j] < - 1 numanalyze < - numanalyze + 1 #停止当我们达到的最大数量敏感性分析的步骤如果(numanalyze > = maxanalyze){猫(极限灵敏度分析第一,maxanalyze,变量\ n)打破}}#腾出rm(模型、参数结果,origx)