linprog(method='simplex')#
- scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, границы=(0, None), метод='highs', callback=None, опции=None, x0=None, integrality=None)
Линейное программирование: минимизация линейной целевой функции при линейных ограничениях равенства и неравенства с использованием симплекс-метода на основе таблицы.
Устарело с версии 1.9.0: method='simplex' будет удалён в SciPy 1.11.0. Заменён на method='highs' потому что последний быстрее и надежнее.
Линейное программирование решает задачи следующего вида:
\[\begin{split}\min_x \ & c^T x \\ \mbox{such that} \ & A_{ub} x \leq b_{ub},\\ & A_{eq} x = b_{eq},\\ & l \leq x \leq u ,\end{split}\]где \(x\) является вектором переменных решения; \(c\), \(b_{ub}\), \(b_{eq}\), \(l\), и \(u\) являются векторами; и \(A_{ub}\) и \(A_{eq}\) являются матрицами.
Альтернативно, это:
минимизировать:
c @ x
такой, что:
A_ub @ x <= b_ub A_eq @ x == b_eq lb <= x <= ub
Обратите внимание, что по умолчанию
lb = 0иub = Noneесли не указано с помощьюbounds.- Параметры:
- cОдномерный массив
Коэффициенты линейной целевой функции для минимизации.
- A_ub2-D массив, опционально
Матрица ограничений неравенства. Каждая строка
A_ubопределяет коэффициенты линейного ограничения-неравенства наx.- b_ub1-D массив, необязательный
Вектор ограничений-неравенств. Каждый элемент представляет верхнюю границу соответствующего значения
A_ub @ x.- A_eq2-D массив, опционально
Матрица ограничений равенства. Каждая строка
A_eqзадает коэффициенты линейного ограничения равенства наx.- b_eq1-D массив, необязательный
Вектор ограничения равенства. Каждый элемент
A_eq @ xдолжен равняться соответствующему элементуb_eq.- границыsequence, optional
Последовательность
(min, max)пары для каждого элемента вx, определяя минимальное и максимальное значения этой переменной решения. ИспользуйтеNoneчтобы указать, что ограничения отсутствуют. По умолчанию ограничения(0, None)(все переменные решения неотрицательны). Если одиночный кортеж(min, max)предоставляется, тогдаminиmaxбудет служить границами для всех переменных решения.- методstr
Это специфичная для метода документация для 'simplex'. ‘highs’, ‘highs-ds’, 'highs-ipm', ‘interior-point’ (по умолчанию), и ‘revised simplex’ также доступны.
- callbackвызываемый объект, необязательный
Функция обратного вызова, выполняемая один раз за итерацию.
- Возвращает:
- resOptimizeResult
A
scipy.optimize.OptimizeResultсостоящий из полей:- xОдномерный массив
Значения переменных решения, которые минимизируют целевую функцию при соблюдении ограничений.
- funfloat
Оптимальное значение целевой функции
c @ x.- slackОдномерный массив
(Номинально положительные) значения переменных ослабления,
b_ub - A_ub @ x.- conОдномерный массив
(Номинально нулевые) невязки ограничений-равенств,
b_eq - A_eq @ x.- successbool
Trueкогда алгоритму удается найти оптимальное решение.- statusint
Целое число, представляющее статус завершения алгоритма.
0: Оптимизация успешно завершена.1: Достигнут предел итераций.2: Проблема, по-видимому, неразрешима.3: Проблема, по-видимому, неограничена.4: Возникли численные трудности.- messagestr
Строковый дескриптор статуса завершения алгоритма.
- nitint
Общее количество итераций, выполненных на всех этапах.
Смотрите также
Для документации по остальным параметрам см.
scipy.optimize.linprog- Опции:
- ——-
- maxiterint (по умолчанию: 5000)
Максимальное количество итераций для выполнения в любой фазе.
- dispbool (по умолчанию: False)
Установить в
Trueесли индикаторы статуса оптимизации должны выводиться в консоль на каждой итерации.- предварительное решениеbool (по умолчанию: True)
Предварительное решение пытается выявить тривиальные несовместимости, определить тривиальную неограниченность и упростить задачу перед отправкой её основному решателю. Обычно рекомендуется сохранять настройки по умолчанию
True; установить вFalseесли предварительное решение должно быть отключено.- tolfloat (по умолчанию: 1e-12)
Допуск, который определяет, когда решение в Фазе 1 является «достаточно близким» к нулю, чтобы считаться базовым допустимым решением, или достаточно близким к положительному, чтобы служить оптимальным решением.
- autoscalebool (по умолчанию: False)
Установить в
Trueдля автоматического выполнения уравновешивания. Рассмотрите использование этой опции, если числовые значения в ограничениях различаются на несколько порядков величины.- rrbool (по умолчанию: True)
Установить в
Falseчтобы отключить автоматическое удаление избыточности.- blandbool
Если True, используйте правило Бланда против циклов [3] для выбора опорных элементов, чтобы предотвратить зацикливание. Если False, выбирать опорные элементы, которые должны быстрее привести к сходящемуся решению. Последний метод подвержен зацикливанию (не сходимости) в редких случаях.
- unknown_optionsdict
Дополнительные аргументы, не используемые этим конкретным решателем. Если unknown_options не пусто, выдаётся предупреждение со списком всех неиспользуемых опций.
Ссылки
[1]Dantzig, George B., Linear programming and extensions. Rand Corporation Research Study Princeton Univ. Press, Princeton, NJ, 1963
[2]Хиллер, С.Х. и Либерман, Г.Дж. (1995), «Введение в математическое программирование», McGraw-Hill, глава 4.
[3]Блэнд, Роберт Г. Новые конечные правила выбора опорного элемента для симплекс-метода. Математика операционных исследований (2), 1977: стр. 103-107.