Используя массивы с lpsolve?
В документах написано, что вы можете использовать массивы:
пакетик
В приведенном выше разделе Максимальное использование матриц с lpsolve пакет numpy уже упоминался. Смотрите http://numpy.scipy.org/ для краткого обзора. Этот пакет является преемником старого и устаревшего пакета Numeric. Поскольку lp_solve - это все о массивах и матрицах, логично, что драйвер Python lpsolve принимает массивы. Это возможно из версии драйвера 5.5.0.9. Прежде чем это было необходимо, эти массивы были преобразованы в списки. Например:
>>> 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 передается непосредственно в lpsolve. До версии драйвера 5.5.0.9 это приводило к ошибке, поскольку lpsolve не знал numy-массивов. Их нужно было преобразовать в списки:
>>> ret = lpsolve('set_obj_fn', lp, list(c))
Это нормально для небольших моделей, но для больших массивов это дает дополнительную нагрузку на память, поскольку c теперь в памяти два раза. Один раз как массив numpy и один раз как список.
Обратите внимание, что все возвращаемые массивы из lpsolve всегда являются списками.
Также обратите внимание, что более старый пакет Numeric не поддерживается lpsolve. Поэтому невозможно предоставить числовой массив для 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
1 ответ
Вы можете использовать PyLPSolve, если у вас возникли проблемы с lpsolve. Это обертка для lpsolve, которая позволила мне использовать массивы numpy.