Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在CVXOPT中构造一个LP_Python_Linear Programming_Cvxopt - Fatal编程技术网

Python 在CVXOPT中构造一个LP

Python 在CVXOPT中构造一个LP,python,linear-programming,cvxopt,Python,Linear Programming,Cvxopt,我试图用CVXOPT解一个线性规划。有2n个变量,x_1,…,x_2n。LP的形式为 最小x{n+1}+…+x{2n} s、 t.Ax\leq b 这里,A和b是固定的。从这里看来这很简单。由于我在优化后半部分变量的和,我创建了一个由n个零和n个一组成的向量:c=(0,…,0,1,…,1),并有以下代码(假设已经计算了a和b): 此代码直接来自CVXOPT文档。然而,我得到一个错误,说: TypeError: 'c' must be a dense column matrix 我查了一下,但在

我试图用CVXOPT解一个线性规划。有2n个变量,x_1,…,x_2n。LP的形式为

最小x{n+1}+…+x{2n}

s、 t.Ax\leq b

这里,A和b是固定的。从这里看来这很简单。由于我在优化后半部分变量的和,我创建了一个由n个零和n个一组成的向量:c=(0,…,0,1,…,1),并有以下代码(假设已经计算了a和b):

此代码直接来自CVXOPT文档。然而,我得到一个错误,说:

TypeError: 'c' must be a dense column matrix

我查了一下,但在我看来,调用matrix()应该将c转换为适当的类型。有人知道如何解决这个问题吗?

问题是矩阵对象的构造函数将其解释为整数类型,而它应该是双精度的。如果您用显式的双倍数字填充列表,它应该可以工作

从cvxopt的

 if type(c) is not matrix or c.typecode != 'd' or c.size[1] != 1: 
     raise TypeError("'c' must be a dense column matrix") 
检查

import cvxopt
k = 20
c = [1]*(2*k + 2)
for i in range(k + 1):
    c[i] = 0

c = cvxopt.matrix(c)
print c.typecode  # Prints 'i'
解决方案:

c = [1.]*(2*k + 2)
print c.typecode  # Prints 'd'

我没有解释k是什么,但我认为这与这个问题无关。如果我错了,请告诉我。谢谢!我认为这可能是答案。然而,在做了这个更改之后,我得到了一个错误:TypeError:'G'必须是一个密集或稀疏的'd'矩阵,有10列。我看到关于这个错误有一个stackoverflow问题,但我没有看到这个线程和这个线程之间有多少相似之处。您对此有什么见解吗?这是一个不同的错误,因为它与您定义矩阵
a
的方式有关。您能检查一下
A
是否定义为
d类型(我们在上面所做的)并且它的维度数量是否正确吗?A的类型代码是否为“d”,维度是否已签出。A中的列数是10,与错误似乎所说的相反。在这一点上,也许最好打开一个新的线程,是吗?我建议这样做。然后,它将有一个完整的描述,并对社区有更多的可见性。我敢打赌,很多使用cvxopt的人也会犯类似的错误。。
c = [1.]*(2*k + 2)
print c.typecode  # Prints 'd'