Я конвертирую код из 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
?