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

如何通过Python API从GUROBI模型对象获取LP基的逆矩阵?

获取LP基的逆矩阵(Gurobi)

Gurobi没有直接提供获取LP基逆矩阵的API,但可以通过以下步骤间接计算:

  • 第一步:获取基相关索引信息

    • 遍历变量的VBasis属性,标记基变量(VBasis == 0表示该变量在基中)
    • 遍历约束的CBasis属性,标记基约束(CBasis == 0表示该约束对应基向量)
  • 第二步:提取基矩阵B
    从模型的约束矩阵中,筛选基约束对应的行和基变量对应的列,组成基矩阵B。

  • 第三步:计算基逆矩阵
    使用数值计算库(如numpy)对基矩阵B求逆。

以下是完整示例代码:

import gurobipy as gp
import numpy as np

# 假设model是已求解完成的Gurobi模型
model.optimize()

# 1. 获取基变量和基约束的索引
basis_var_indices = []
for idx, var in enumerate(model.getVars()):
    if var.VBasis == 0:
        basis_var_indices.append(idx)

basis_constr_indices = []
for idx, constr in enumerate(model.getConstrs()):
    if constr.CBasis == 0:
        basis_constr_indices.append(idx)

# 2. 提取基矩阵B
A = model.getA()
B = A[basis_constr_indices, :][:, basis_var_indices].toarray()

# 3. 计算基逆矩阵
B_inv = np.linalg.inv(B)

# 输出结果
print("基逆矩阵:")
print(B_inv)

注意事项:

  • 需确保模型已最优求解(model.Status == gp.GRB.OPTIMAL),否则基信息无效
  • 若模型存在数值退化,基矩阵可能奇异,求逆时建议添加异常处理
  • 大规模模型中直接求逆效率较低,若仅需基逆参与后续计算,可改用线性方程组求解替代直接求逆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:54:35