使用cvxopt解决仅有Aeq=beq的线性规划问题(无A*x<=b约束)

1 投票
2 回答
1801 浏览
提问于 2025-04-17 16:47

我正在尝试解决一个线性规划问题,具体是一个运输问题。

minimise cT.x
A.x = b
x >= 0

不过,使用CVXOPT这个工具时,需要定义变量G.x <= h,以便给lp(G,h,A,b)这个求解器使用。

我已经尝试创建我的A和b矩阵,而对于G和h矩阵,我用一个单位矩阵(乘以-1)作为G,h则用一个全零的向量,这样可以强制要求x>=0的约束。

但是,当我运行我的代码时,出现了“奇异的KKT矩阵”的错误。

有没有人能帮我看看问题出在哪里,或者我如何能在没有G和h变量的情况下运行CVXOPT求解器。

2 个回答

0

你的解决方案(-G 是单位矩阵,h 是零向量)应该是有效的。你可以把你的数据发到这里。

比如说:

from cvxopt import matrix, solvers
c = matrix([ 2.0, 1.0 ])
G = matrix(-np.eye(2))
h = matrix(np.zeros(2)) 
A = matrix(np.eye(2))
b = matrix([1., 2.])
sol = solvers.lp(c, G, h, A, b)
print(sol['x'])

Optimal solution found.
[ 1.00e+00]
[ 2.00e+00]
1

运输问题的最佳解决方案是通过潜力法来寻找的。要使用潜力法,你需要解决三个层次的方程。像运输问题这样的网络问题必须通过对偶问题来解决。

撰写回答