在文档中,它说您可以使用 numpy 数组:
numpy 包
在上面的部分中,使用 lpsolve 最大程度地使用矩阵包 numpy 已经提到过。有关简要概述,请参阅http://numpy.scipy.org/。这个包是旧的和过时的包 Numeric 的继承者。由于 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