Skip to content

Gorgchap/Simplex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Симплекс-метод задачи линейного программирования

Определения

Линейное программирование – раздел математики, занимающийся поиском экстремумов на множестве пространства, заданном системой линейных уравнений и неравенств.

Целевая функция – функция нескольких переменных, подлежащая оптимизации в целях решения какой-либо оптимизационной задачи.

Алгоритм симплекс-метода

В начале исходную задачу линейного программирования приводят к каноническому виду, затем составляют симплекс-таблицу вида

Базис 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 – коэффициенты при переменных целевой функции (взяты с противоположным знаком).

Последовательность шагов алгоритма симплекс-метода:

  1. Выполняется проверка полученного базисного плана на оптимальность по условию: если при каком-либо допустимом базисном решении в симплекс-таблице все –cj неотрицательны, то данное решение оптимально (конец алгоритма). Иначе:

  2. Переход к новому базисному плану. Для этого из числа небазисных переменных с –cj < 0 выбирается вводимая в базис переменная xk (ей соответствует наибольшая по модулю отрицательная оценка, т.е. |Δk| = max |Δj|, где Δj < 0). Столбец, отвечающий переменной xk, является ведущим (его элементы обозначаются через aik).

  3. Выбирается выводимая (исключаемая) из базиса переменная r, которая находится из соотношения (br / ark) = min по j (bi / aik), где aik > 0. Строка таблицы, в которой получено наименьшее отношение элемента столбца В к соответствующему положительному элементу ведущего столбца, является ведущей (её элементы обозначаются через arj). arkведущий элемент (стоит на пересечении ведущего столбца и ведущей строки).

  4. Для определения нового базисного плана элементы симплекс-таблицы пересчитываются, результаты заносятся в новую таблицу. Выбранные переменные среди базисных и небазисных, лежащих на главной строке и главном столбце, меняются местами. Пересчёт элементов выполняется следующим образом:

    • элементы главной строки делятся на ведущий элемент: bk = br / ark, akj = arj / ark.
    • элементы полученной строки умножаются на –aik и складываются с i-ой строкой (i ≠ k): a'ij = aij – (arjaik / ark); b'i = bi – (braik / ark); f '(x) = f(x) – (brΔk / ark); Δ'j = Δj – (arjΔk / ark).

    Для новой симплекс-таблицы выполняется та же последовательность шагов.

Особенности реализации

Входные данные: файл формата '.txt' с симплекс-таблицей без базисных переменных в столбцах (элементы строк должны быть разделены табом '\t'). Предполагется, что во входной симплекс-таблице сформулирована задача по минимизации целевой функции.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages