【问题标题】:Using numpy arrays with lpsolve?使用带有 lpsolve 的 numpy 数组?
【发布时间】: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) 我仍然遇到同样的错误。

标签: python numpy lpsolve


【解决方案1】:

如果您在使用 lpsolve 时遇到问题,可以使用 PyLPSolve。它是 lpsolve 的包装器,允许我使用 numpy 数组。

http://www.stat.washington.edu/~hoytak/code/pylpsolve/

【讨论】:

    猜你喜欢
    • 2013-10-01
    • 2012-03-18
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2011-12-15
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多