2015-03-16 3 views
1

В документации, он говорит, что вы можете использовать Numpy массивы:Использование массивов numpy с lpsolve?

NumPy пакет

В приведенном выше разделе Максимальное использование матриц с lpsolve пакет NumPy уже упоминалось. См. http://numpy.scipy.org/ для краткого обзора . Этот пакет является преемником старого и устаревшего пакета Numeric. Поскольку lp_solve - это все о массивах и матрицах , логично, что драйвер python lpsolve принимает 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 с передается непосредственно lpsolve. Перед версией драйвера 5.5.0.9 это дало ошибку, так как lpsolve не знает массивы numpy. Они должны были быть преобразованы в списки:

>>> ret = lpsolve('set_obj_fn', lp, list(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 
+0

Возможно, проблема заключается в 'dtype' массива - проверить, попробовать' = коэффициент np.array ([0,0, 0, 0, 1, 1, 1, 1]) ' – user4815162342

+0

Возможно, вы правы.Ранее была проблема с ints. :) Проверка прямо сейчас. Большое спасибо за ваш вклад. – zehelvion

+0

Я не могу проверить прямо сейчас, потому что у меня нет 'lpsolve' на работе. Если то, что я предлагаю, я отправлю его в качестве ответа. – user4815162342

ответ