Python эквивалентно R's lpSolve для линейного программирования - PullRequest
0 голосов
/ 20 июня 2019

Я конвертирую код из R в Python и ищу помощь в простейшем способе решения задачи линейного программирования. Я долго искал, и, похоже, нет единого мнения о том, какой модуль лучше использовать.

В этом примере я просто хочу выбрать 3 из 5 вариантов, максимизируя obj, при этом убедившись, что столбцы ограничений больше 0:

obj = [np.random.uniform(0, 100) for _ in range(5)]
col1 = [1] * 5
col2 = [np.random.uniform(0, 100) for _ in range(5)]
col3 = [np.random.uniform(0, 100) for _ in range(5)]
col4 = [np.random.uniform(0, 100) for _ in range(5)]
col5 = [np.random.uniform(0, 100) for _ in range(5)]
col6 = [np.random.uniform(0, 100) for _ in range(5)]

ConstraintMatrix = pd.DataFrame(data = {'col1': col1, 'col2': col2, 'col3': col3, 'col4': col4, 'col5': col5, 'col6': col6})
ConstraintDirections = ['==', '>=', '>=', '>=', '>=', '>=']
ConstraintValues = [3, 0, 0, 0, 0, 0]

В R, чтобы получить 3 предмета, которые максимизируют цель, я бы просто запустил:

library(lpSolve)
sol <- lpSolve::lp("max",
                   objective.in = obj,
                   const.mat    = t(ConstraintMatrix), # Transpose matrix
                   const.dir    = ConstraintDirections,
                   const.rhs    = ConstraintValues,
                   all.bin      = T # decision variables are all binary
)

ConstraintMatrix$selected <- sol$solution[1:nrow(ConstraintMatrix)]
ConstraintMatrix <- ConstraintMatrix[ConstraintMatrix$selected == 1,]

Очевидно, что эта проблема не требует линейного программирования для решения, но она иллюстрирует то, что я ищу в Python, чтобы решить мою гораздо большую проблему. Есть ли функция Python, которая принимает Objective, Matrix Constraint Matrix, Vector Direction и Value Vector и выдает решение точно так же, как мой lpSolve:lp?

1 Ответ

0 голосов
/ 20 июня 2019

Полагаю, Мякоть послужит вам хорошо.

Когда вы пытаетесь решить двоичную проблему, проверьте следующее:

  1. Пример набора Pulp's
  2. Pulp's Пример судоку
  3. Соответствующий ТАК вопрос
...