【发布时间】:2015-06-13 20:11:10
【问题描述】:
在文档中,它说您可以使用 numpy 数组:
numpy 包
在上面的部分中使用 lpsolve 的矩阵的最大使用 包 numpy 已经被提及。请参阅http://numpy.scipy.org/ 简要概述。这个包是旧的和 过时的包数字。由于 lp_solve 是关于数组和 矩阵,lpsolve Python 驱动程序接受 numpy 是合乎逻辑的 数组。这可以从驱动程序版本 5.5.0.9 开始。之前 需要将 numpy 数组转换为列表。例如:
>>> from numpy import *
>>> from lpsolve55 import *
>>> lp=lpsolve('make_lp', 0, 4);
>>> c = array([1, 3, 6.24, 0.1])
>>> ret = lpsolve('set_obj_fn', lp, c)
请注意,numpy 数组变量 c 直接传递给 lpsolve。 在驱动程序版本 5.5.0.9 之前,这给出了一个错误,因为 lpsolve 没有 知道numpy数组。它们必须转换为列表:
>>> ret = lpsolve('set_obj_fn', lp, list(c))
这对于小型模型是可以的,但对于较大的阵列,这会提供额外的 内存开销,因为 c 现在是内存的两倍。曾经作为 numpy 数组和一次作为列表。
请注意,所有从 lpsolve 返回的数组都是列表。
另请注意,lpsolve 不支持较旧的包 Numeric。 所以不可能为 lpsolve 提供一个数值数组。那将 报错。
http://lpsolve.sourceforge.net/5.5/Python.htm
当我尝试这样做时,我得到一个错误。
lp = lpsolve('make_lp', 0, 7)
coef = np.array([0, 0, 0, 1, 1, 1, 1])
lpsolve('set_obj_fn', lp, coef)
结果:
lpsolve('set_obj_fn', lp, coef)
lpsolve.error: invalid vector.
如果我愿意:
lpsolve('set_obj_fn', lp, coef.tolist())
它可以工作,但需要更多的内存(在一般情况下)。
当我运行lpsolve()
结果:
lpsolve Python Interface version 5.5.0.9
using lpsolve version 5.5.2.0
【问题讨论】:
-
可能问题出在数组的
dtype——要测试,试试coef = np.array([0.0, 0, 0, 1, 1, 1, 1]) -
你可能是对的。以前与整数有同样的问题。 :) 现在检查。非常感谢您的意见。
-
我现在无法测试,因为我没有
lpsolve在工作。如果我提出的建议有效,我会将其作为答案发布。 -
coef = np.array([0.0, 0., 0., 1., 1., 1., 1.], dtype=np.float32)我仍然遇到同样的错误。