敏感度。R


敏感度。R


# #一个简单的灵敏度分析示例,从文狗万app足彩件中读取MIP模型#并解决它。然后将每个二进制变量#设置为1-X,其中X是其在最优解中的值,#报告对目标函数值的影响。库(Matrix)库(gurobi) args <- commandArgs(trailingOnly = TRUE)如果(长度(args) < 1){停止('使用:Rscript灵敏度。R filename\n')} #读取模型cat('Reading model',args[1],'…#检测非连续变量的集合numvars <- ncol(模型A) intvars <- which(模型maxanalyze <- 10 #优化结果<- gurobi(model) #捕获解决方案信息if (result . vtype != 'C') numintvars <- length(intvars) if (numintvars < 1) {stop('所有模型的变量都是连续的,什么也不做\n')= 'OPTIMAL') {cat('优化完成状态',结果if (' stop now\n')} origx <- resultX origobjval <- resultObjval #创建不存在的lb和ub,并将它们设置为默认值。('lb' %in% names(model))){模型Lb <-数值(numvars)} if (!('ub' %in% names(model))){#这行不需要,因为我们必须有ub定义的模型ub <- Inf + numeric(numvars)} #禁用后续解决params <- list() params的输出在模型中迭代(j in 1:numvars) {if (model . 1:numvars) {if (model . 1:numvars) {if (vtype[j] != 'B' &&模型vtype[j] != 'I'vtype[j] == 'I') {if(模型Lb [j] != 0.0Ub [j] != 1.0)下一个}else{如果(模型Lb [j] > 0.0)下一个if(模型ub[j] < 1.0) next} #更新MIP启动所有变量模型start <- origx #设置变量为1-X,其中X是它在最优解中的值,如果(origx[j] < 0.5) {model . X = 0Start [j] <- 1模型Lb [j] <- 1} else{模型开始[j] <- 0模型ub[j] <- 0} #优化结果<- gurobi(model, params) #显示结果varnames <- " if ('varnames' %in% names(model)) {varnames <- model .Varnames [j]} else {Varnames <- sprintf('%s%d',模型Vtype [j], j)} gap <- 0如果(结果else {gap <- result . status != 'OPTIMAL') {gap <- Inf} else {gap <- result . statusobjval - origobjval} cat('Objective sensitivity for variable', varnames, 'is', gap, '\n') #恢复原始边界模型[j]ub[j] <- 1 numanalyze <- numanalyze + 1 #当我们达到灵敏度分析的最大步骤数时停止,如果(numanalyze >= maxanalyze) {cat('Limit sensitivity analysis to the first', maxanalyze, 'variables\n') break}} #清除空间rm(model, params, result, origx)