获取目标系数范围异常:lpSolveAPI敏感性分析结果排查求助
线性规划目标系数敏感性分析异常值问题排查
问题描述
我使用R语言的lpSolveAPI包构建线性规划模型,调用get.sensitivity.obj(lp_model)获取目标系数敏感性分析结果时,得到了包含-1.000000e+30、1.000000e+30这类异常数值。检查建模代码后未发现明显问题,想咨询可能的错误原因。
建模代码
library(lpSolve) library(lpSolveAPI) lp_model <- make.lp(nrow = 0, ncol = 5) # 创建空模型框架 set.objfn(lprec=lp_model, obj = c(30,44,57,55,45)) # 目标函数:利润最大化 lp.control(lprec = lp_model, sense = "max") # 添加约束条件 add.constraint(lprec = lp_model, xt = c(1,1,1.3,0.5,0.5),type = '<=',rhs = 40) # 框架约束 add.constraint(lprec = lp_model, xt = c(1,1.2,1.5,2,1.5),type = '<=',rhs = 80) # 拉伸约束 add.constraint(lprec = lp_model, xt = c(1,1.5,1.7,1,1),type = '<=',rhs = 60) # 精加工约束 add.constraint(lprec = lp_model, xt = c(0,0,0,1,0),type = '<=',rhs = 10) # 咖啡桌约束 add.constraint(lprec = lp_model, xt = c(0,0,0,0,1),type = '<=',rhs = 10) # 边桌约束 solve(lp_model) get.variables(lp_model) get.objective(lp_model) get.sensitivity.obj(lp_model) get.sensitivity.rhs(lp_model)
异常分析结果
$objfrom [1] -1.000000e+30 4.384615e+01 5.020000e+01 2.220000e+01 [5] 2.220000e+01 $objtill [1] 4.360000e+01 5.029412e+01 5.720000e+01 1.000000e+30 [5] 1.000000e+30
原因分析与验证建议
这些±1e30的数值并非代码错误,而是lpSolveAPI用来表示无边界范围的标准标记,对应两种敏感性分析场景:
- 第一个变量的
-1e30:该变量在最优解中取值为0(非基变量)。此时,只要它的目标系数继续降低,依然不会进入最优解的基变量集合(因为利润更低),所以目标系数的下限是负无穷,工具用-1e30替代表示。 - 第四、五个变量的
1e30:这两个变量在最优解中取值达到了自身约束的上限(10)。即使继续提高它们的目标系数,受约束限制,最优解里这两个变量的取值也只能维持在10,所以目标系数的上限是正无穷,工具用1e30替代表示。
你可以通过以下步骤验证:
- 运行
get.variables(lp_model)查看各变量的最优取值,确认第一个变量为0、第四/五个变量为10; - 运行
get.constraints(lp_model)查看约束的松弛状态,确认第四、五个约束处于紧约束状态(松弛变量为0)。
内容的提问来源于stack exchange,提问作者HELLOWORLD
相关产品推荐
相关产品推荐

