Линейное программирование – раздел математики, занимающийся поиском экстремумов на множестве пространства, заданном системой линейных уравнений и неравенств.
Целевая функция – функция нескольких переменных, подлежащая оптимизации в целях решения какой-либо оптимизационной задачи.
В начале исходную задачу линейного программирования приводят к каноническому виду, затем составляют симплекс-таблицу вида
Базис | B | x1 | ... | xk | ... | xj | ... | xn |
---|---|---|---|---|---|---|---|---|
... | ... | ... | ||||||
xi | bi | ... | aik | ... | aij | ... | ||
... | ... | ... | ||||||
xr | br | ... | ark | ... | arj | ... | ||
... | bm | ... | ||||||
f(x) | 0 | ... | –ck = –Δk | ... | –cj = –Δj | ... |
где в столбце «Базис» указываются базисные переменные (в последней строке – f(x)). В столбец B записываются свободные члены ограничений bi и значение целевой функции (на первом этапе оно равно 0). В столбцах xj для небазисных переменных указываются коэффициенты при небазисных переменных из ограничений задачи. В столбцах базисных переменных содержится только 0 или 1 на пересечении столбца с соответствующей строкой базисной переменной. cj – коэффициенты при переменных целевой функции (взяты с противоположным знаком).
Последовательность шагов алгоритма симплекс-метода:
-
Выполняется проверка полученного базисного плана на оптимальность по условию: если при каком-либо допустимом базисном решении в симплекс-таблице все –cj неотрицательны, то данное решение оптимально (конец алгоритма). Иначе:
-
Переход к новому базисному плану. Для этого из числа небазисных переменных с –cj < 0 выбирается вводимая в базис переменная xk (ей соответствует наибольшая по модулю отрицательная оценка, т.е. |Δk| = max |Δj|, где Δj < 0). Столбец, отвечающий переменной xk, является ведущим (его элементы обозначаются через aik).
-
Выбирается выводимая (исключаемая) из базиса переменная r, которая находится из соотношения (br / ark) = min по j (bi / aik), где aik > 0. Строка таблицы, в которой получено наименьшее отношение элемента столбца В к соответствующему положительному элементу ведущего столбца, является ведущей (её элементы обозначаются через arj). ark – ведущий элемент (стоит на пересечении ведущего столбца и ведущей строки).
-
Для определения нового базисного плана элементы симплекс-таблицы пересчитываются, результаты заносятся в новую таблицу. Выбранные переменные среди базисных и небазисных, лежащих на главной строке и главном столбце, меняются местами. Пересчёт элементов выполняется следующим образом:
- элементы главной строки делятся на ведущий элемент: bk = br / ark, akj = arj / ark.
- элементы полученной строки умножаются на –aik и складываются с i-ой строкой (i ≠ k): a'ij = aij – (arj ⋅ aik / ark); b'i = bi – (br ⋅ aik / ark); f '(x) = f(x) – (br ⋅ Δk / ark); Δ'j = Δj – (arj ⋅ Δk / ark).
Для новой симплекс-таблицы выполняется та же последовательность шагов.
Входные данные: файл формата '.txt' с симплекс-таблицей без базисных переменных в столбцах (элементы строк должны быть разделены табом '\t'). Предполагется, что во входной симплекс-таблице сформулирована задача по минимизации целевой функции.