首页 > 解决方案 > CVXPY:使用两组不同格式的约束返回无

问题描述

我是 CVXPY 的新手。我一直在尝试解决一个简单的可行性问题。这是代码:

from cvxpy import *
import numpy as np

dim = np.shape(Bs[0])[1] 
X = Variable(dim)
objective = Minimize(0)
constraintsA = [X.T * M * X + B * X + C == 0 for M, B, C in zip(Ms, Bs, Cs)]
constraintsB = [A * X - b == 0 for A, b in zip(As, bs)]
constraints = constraintsA + constraintsB
prob = Problem(objective, constraints)

result = prob.solve()
R = X.value
print R

下面,您可以找到输入矩阵:

Ms = [array([[ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.]]), 
      array([[ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.]]), 
      array([[ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.,  0.,  0.]])]
 Bs = [array([[-18.,   0.,   0.,  18.,   0.,   0.]]), 
       array([[  0.,   0.,   0.,   0., -36.,   0.]]), 
       array([[  0.,   0., -18.,   0.,   0., -18.]])]
 Cs = [270.0, 540.0, 810.0]

 As = [array([[ 0., -1.,  1.,  0.,  0.,  0.],
              [ 0.,  0.,  0.,  0., -1.,  1.]]), 
       array([[-1.,  1.,  0.,  0.,  0.,  0.],
              [ 0.,  0.,  0., -1.,  1.,  0.]]),
       array([[-1.,  0.,  1.,  0.,  0.,  0.],
              [ 0.,  0.,  0., -1.,  0.,  1.]])]
 bs = [array([[  0],
              [  1.00000000e+01]]), 
       array([[ 20.],
              [ 10.]]), 
       array([[ -2.00000000e+01],
              [ 0]])]

只为 运行它constraintsA,代码被执行并按预期返回结果向量。但是,当也考虑constraintsB集合时,我的结果是None. 有什么我可能搞砸的想法吗?非常感谢!

标签: pythonconstraintscvxpy

解决方案


推荐阅读