You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取目标系数范围异常: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替代表示。

你可以通过以下步骤验证:

  1. 运行get.variables(lp_model)查看各变量的最优取值,确认第一个变量为0、第四/五个变量为10;
  2. 运行get.constraints(lp_model)查看约束的松弛状态,确认第四、五个约束处于紧约束状态(松弛变量为0)。

内容的提问来源于stack exchange,提问作者HELLOWORLD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:50:22