Калькулятор симплекс-метода

Количество переменных:
Количество ограничений:
Целевая функция:
Ограничения:
Очистить
Решить
В двойственную

Выполнено действий:

Как пользоваться калькулятором

Что умеет калькулятор симплекс-метода

Что такое симплекс-метод

Задача линейного программирования — это задача поиска неотрицательных значений параметров, на которых заданная линейная функция достигает своего максимума или минимума при заданных линейных ограничениях.

Симплекс-метод — алгоритм решения оптимизационной задачи линейного программирования путём перебора вершин выпуклого многогранника в многомерном пространстве. Алгоритм является универсальным методом, которым можно решить любую задачу линейного программирования.

Если вам тоже ничего не понятно из этого определения, то вы на верном пути. Чаще всего статьи про симплекс-метод очень сильно углубляются в дебри теории задачи линейного программирования, из-за чего очень легко потерять суть и так ничего и не понять. Мы постараемся описать алгоритм симплекс-метода так, чтобы показать, что в нём нет ничего страшного и на самом деле он весьма простой. Но сначала нам всё-таки потребуется ввести несколько определений.

Целевая функция — функция, максимум (или минимум) которой нужно найти. Представляет собой сумму произведений коэффициентов на значения переменных: F = c1·x1 + c2·x2 + ... + cn·xn

Ограничение — условие вида a1·x1 + a2·x2 + ... + an·xn v b, где вместо v ставится один из знаков: ≤, = или ≥

План — произвольный набор значений переменных x1 ... xn.

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

Пусть в задаче есть m ограничений, а целевая функция заивисит от n основных переменных. Первым делом необходимо привести все ограничения к каноническому виду — виду, в котором все условия задаются равенствами. Для этого предварительно все неравенства с ≥ умножаются на -1, для получения неравенств с ≤.

Чтобы привести ограничения с неравенствами к каноническому виду, для каждого ограничения вводят переменную, называемую дополнительной с коэффициентом 1. В ответе эти переменные учитываться не будут, однако сильно упростят начальные вычисления. При этом дополнительные переменные являются базисными, а потому могут быть использованы для формирования начального опорного решения.

Пример 1

Привести к каноническому виду ограничения:
2·x1 + 3·x2 + 6·x3 ≤ 240
4·x1 + 2·x2 + 4·x3 = 200
4·x1 + 6·x2 + 8·x3 ≥ 160
Меняем знаки у ограничений с ≥, путём умножения на -1 и добавляем дополнительные переменные к ограничениям с неравенством:
2·x1 + 3·x2 + 6·x3 + x4 = 240
4·x1 + 2·x2 + 4·x3 = 200
-4·x1 - 6·x2 - 8·x3 + x5 = -160

Формирование начального базиса

После того как задача приведена к каноническому виду, необходимо найти начальный базис для формирования первого опорного решения. Если в процессе приведения были добавлены дополнительные переменные, то они становятся базисными.

Иначе необходимо выделить среди коэффициентов ограничений столбец, который участвует в формировании единичной матрицы в заданной строке (например, если требуется определить вторую базисную переменную, то необходимо искать столбец, в котором второе число равно 1, а остальные равны нулю). Если такой столбец найден, то переменная, соответствующая этому столбцу, становится базисной.

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

Пример 2

9·x1 + 5·x2 + 4·x3 + 3·x4 + 2·x5 → max
x1 - 2·x2 + 2·x3 ≤ 6
x1 + 2·x2 + x3 + x4 = 24
2·x1 + x2 - 4·x3 + 2·x5 = 30
Для ограничения с неравенством добавляем дополнительную переменную x6.
Перепишем ограничения в каноническом виде:
x1 - 2·x2 + 2·x3 + x6 = 6
x1 + 2·x2 + x3 + x4 = 24
2·x1 + x2 - 4·x3 + 2·x5 = 30

Ищем начальное базисное решение:
Ограничение 1 содержит неравенство, базисной будет добавленная дополнительная переменная x6
Столбец 4 является частью единичной матрицы. Переменная x4 входит в начальный базис
В пятом столбце все значения кроме третьего равны нулю. Поэтому в качестве третьей базисной переменной берём x5, предварительно разделив третью строку на 2.
Симплекс-таблица
базисx1x2x3x4x5x6b
x61-220016
x412110024
?21-402030

После преобразования получаем следующую таблицу:
базисx1x2x3x4x5x6b
x61-220016
x412110024
x51
1
2
-201015

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

Пример 3

4·x1 + 5·x2 + 4·x3 → max
2·x1 + 3·x2 + 6·x3 ≤ 240
4·x1 + 2·x2 + 4·x3 = 160
4·x1 + 6·x2 + 8·x3 ≤ 200
Для каждого ограничения с неравенством добавляем дополнительные переменные x4 и x5.
Перепишем ограничения в каноническом виде:
2·x1 + 3·x2 + 6·x3 + x4 = 240
4·x1 + 2·x2 + 4·x3 = 160
4·x1 + 6·x2 + 8·x3 + x5 = 200

Ищем начальное базисное решение:
Ограничение 1 содержит неравенство, базисной будет добавленная дополнительная переменная x4
Ограничение 3 содержит неравенство, базисной будет добавленная дополнительная переменная x5

Начальная симплекс-таблица
базисx1x2x3x4x5b
x423610240
?42400160
x546801200

Для определения второй базисной переменной ищем первый ненулевой столбец, который ещё не является базисным. Первый столбец не нулевой и не является базисным. Выполняем исключение Гаусса: делим строку 2 на 4, а из первой и третьей строк вычитаем вторую, умноженную на соответствующий элемент в первом столбце.
базисx1x2x3x4x5b
x423610240
x142400160
x546801200

После исключения получаем следующую таблицу:
базисx1x2x3x4x5b
x402410160
x11
1
2
10040
x50440140

После того как базис сформирован, нужно построить начальную симплекс-таблицу. Она строится следующим образом:

Схематично начальная таблица будет выглядеть примерно так:

C с1 c2 ... cn 0 0 ... 0 0
базис x1 x2 ... xn xn+1 xn+2 ... xn+k b
xe1 a11 a12 ... a1n a1n+1 a1n+2 ... a1n+k b1
xe2 a21 a22 ... a2n a2n+1 a2n+2 ... a2n+k b2
... ... ... ... ... ... ... ... ... ...
xem am1 am2 ... amn amn+1 amn+2 ... amn+k bm

Избавляемся от отрицательных свободных коэффициентов

После приведения к каноническому виду или после алгебраических преобразований при формировании базиса некоторые из свободных коэффициентов (bi) могли стать отрицательными, что не позволяет перейти к дальнейшим вычислениям. Чтобы избавиться от отрицательных значений b необходимо:

Этот шаг необходимо повторять до тех пор, пока все отрицательные b не станут положительными или в строке не останется отрицательных элементов. Если строка с максимальным по модулю bi не содержит отрицательных элементов, то такая задача не имеет решений и на этом алгоритм заканчивает свою работу. В противном случае все bi положительны и алгоритм переходит к следующему этапу — расчёту дельт.

Пример 4

20·x1 + 20·x2 + 10·x3 → min
4·x1 + 3·x2 + 2·x3 ≥ 33
3·x1 + 2·x2 + x3 ≥ 23
x1 + x2 + 2·x3 ≥ 12

Меняем знаки у ограничений с ≥, путём умножения на -1:
-4·x1 - 3·x2 - 2·x3 ≤ -33
- 3·x1 - 2·x2 - x3 ≤ -23
- x1 - x2 - 2·x3 ≤ -12

Для каждого ограничения с неравенством добавляем дополнительные переменные x4..x6.
Перепишем ограничения в каноническом виде:
- 4·x1 - 3·x2 - 2·x3 + x4 = -33
- 3·x1 - 2·x2 - x3 + x5 = -23
- x1 - x2 - 2·x3 + x6 = -12

Ищем начальное базисное решение:
Ограничение 1 содержит неравенство, базисной будет добавленная дополнительная переменная x4
Ограничение 2 содержит неравенство, базисной будет добавленная дополнительная переменная x5
Ограничение 3 содержит неравенство, базисной будет добавленная дополнительная переменная x6

Начальная симплекс-таблица
C2020100000
базисx1x2x3x4x5x6b
x4-4-3-2100-33
x5-3-2-1010-23
x6-1-1-2001-12

В столбце b присутствуют отрицательные значения.
Максимальное по модулю |b|max = |-33| находится в первой строке.
Максимальный по модулю элемент в первой строке = -4 находится в первом столбце.
В качестве базисной переменной x4 берём x1.
Делим первую строку на -4. Из второй и третьей строк вычитаем первую, умноженную на соответствующий элемент в первом столбце.

Обновлённая таблица:
C2020100000
базисx1x2x3x4x5x6b
x11
3
4
1
2
-
1
4
00
33
4
x50
1
4
1
2
-
3
4
10
7
4
x60-
1
4
-
3
2
-
1
4
01-
15
4

В столбце b присутствуют отрицательные значения.
Максимальное по модулю |b|max = |-
15
4
| находится в третьей строке.
Максимальный по модулю элемент в третьей строке = -
3
2
находится в третьем столбце.
В качестве базисной переменной x6 берём x3.
Делим третью строку на -
3
2
. Из первой и второй строк вычитаем третью, умноженную на соответствующий элемент в третьем столбце.

Обновлённая таблица:
C2020100000
базисx1x2x3x4x5x6b
x11
2
3
0-
1
3
0
1
3
7
x50
1
6
0-
5
6
1
1
3
1
2
x30
1
6
1
1
6
0-
2
3
5
2

Расчёт дельт

Дельты — это параметры, на основании которых проверяется оптимальность текущего решения и улучшается функция. Они рассчитываются для каждой из переменных ограничений и записываются последней строкой таблицы.

Для расчёта дельт используется следующая формула: Δi = ce1·a1i + ce2·a2i + ... + cem·ami - ci. Проще говоря, чтобы вычислить дельту по заданной i-ой переменной, нужно перемножить коэффициенты условий в i-ом столбце на коэффициенты целевой функции при соответствующих базисных переменных, сложить эти произведения и вычесть из полученной суммы коэффициент целевой функции столбца i.

Пример 5

Таблица:
C30200-60
базисx1x2x3x4x5x6b
x221-300618
x4-30210-224
x5
1
5
0
3
5
01-
4
5
36
5

Вычисляем дельты: Δi = C2·a1i + C4·a2i + C5·a3i - Ci
Δ1 = C2·a11 + C4·a21 + C5·a31 - C1 = 0·2 + 0·(-3) + 0·
1
5
- 3 = -3
Δ2 = C2·a12 + C4·a22 + C5·a32 - C2 = 0·1 + 0·0 + 0·0 - 0 = 0
Δ3 = C2·a13 + C4·a23 + C5·a33 - C3 = 0·(-3) + 0·2 + 0·
3
5
- 2 = -2
Δ4 = C2·a14 + C4·a24 + C5·a34 - C4 = 0·0 + 0·1 + 0·0 - 0 = 0
Δ5 = C2·a15 + C4·a25 + C5·a35 - C5 = 0·0 + 0·0 + 0·1 - 0 = 0
Δ6 = C2·a16 + C4·a26 + C5·a36 - C6 = 0·6 + 0·(-2) + 0·(-
4
5
) - -6 = 6
Δb = C2·b1 + C4·b2 + C5·b3 - C7 = 0·18 + 0·24 + 0·
36
5
- 0 = 0
Симплекс-таблица с дельтами
C30200-60
базисx1x2x3x4x5x6b
x221-300618
x4-30210-224
x5
1
5
0
3
5
01-
4
5
36
5
Δ-30-20060

Проверка плана на оптимальность

После того как дельты рассчитаны, необходимо проверить оптимальность текущего плана. Критерий оптимальности формулируется следующим образом:
При максимизации функции: текущее решение считается оптимальным, если в таблице отсутствуют отрицательные дельты.
При минимизации функции: текущее решение считается оптимальным, если в таблице отсутствуют положительные дельты.

Пример 6

9·x1 + 5·x2 + 4·x3 + 3·x4 + 2·x5 → max
x1 - 2·x2 + 2·x3 ≤ 6
x1 + 2·x2 + x3 + x4 = 24
2·x1 + x2 - 4·x3 + x5 = 30
Симплекс-таблица с дельтами
C9543200
базисx1x2x3x4x5x6b
x61-220016
x412110024
x521-401030
Δ-23-9000132

Критерий оптимальности: план оптимален, если в таблице отсутствуют отрицательные дельты.
План не оптимален, так как ищется максимум функции, а Δ1 = -2 отрицательна.

Если текущий план оптимален, то алгоритм завершает свою работу. Значениям переменных соответствуют значения столбца свободных коэффициентов b. Если свободной переменной нет в базисе, то её значение считается нулевым. Значение целевой функции, принимаемой на данном наборе, находится в строке с дельтами в том же столбце. Если какое-либо из значений столбца b отрицательно, то решения задачи не существует.

Переход к более оптимальному решению

Если текущий план оказался не оптимальным, то алгоритм ищет столбец с наименьшей (с наибольшей, если ищется минимум) дельтой. После чего вычисляются симплекс-отношения Q. Для этого значения свободных коэффициентов делятся на ненулевые коэффициенты из найденного столбца. Если результат деления получается отрицательным, то такие отношение игнорируются.

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

Пример 7

Симплекс-таблица с дельтами
C21-20000
базисx1x2x3x4x5x6b
x11-50-30-125
x50-160-71-357
x30-61-20-117
Δ010-20016

Проверяем план на оптимальность: план не оптимален, так как ищется минимум функции, а Δ2 = 1 положительна.
Определяем разрешающий столбец - столбец, в котором находится максимальная дельта: 2, Δ2: 1
Находим симплекс-отношения Q, путём деления коэффициентов b на соответствующие значения второго столбца

C21-20000
базисx1x2x3x4x5x6bQ
x11-50-30-125-
x50-160-71-357-
x30-61-20-117-
Δ010-20016

Все значения второго столбца отрицательны. Функция не ограничена. Оптимальное решение отсутствует.

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

После этого вычисляются новые дельты и проверяется новый план. Так продолжается до тех пор пока не будет выполнен критерий оптимальности плана или не будет установлено, что решение не существует.

Пример 8

Симплекс-таблица с дельтами
C9543200
базисx1x2x3x4x5x6b
x61-220016
x412110024
x521-401030
Δ-23-9000132

Проверяем план на оптимальность: план не оптимален, так как Δ1 = -2 отрицательна.

Итерация 1

Определяем разрешающий столбец - столбец, в котором находится минимальная дельта: 3, Δ3: -9
Находим симплекс-отношения Q, путём деления коэффициентов b на соответствующие значения третьего столбца
В найденном столбце ищем строку с наименьшим значением Q: Qmin = 3, строка 1.
На пересечении найденных строки и столбца находится разрешающий элемент: 2
В качестве базисной переменной x6 берём x3.

C9543200
базисx1x2x3x4x5x6bQ
x31-2200166 / 2 = 3
x41211002424 / 1 = 24
x521-401030-
Δ-23-9000132

Делим первую строку на 2. Из второй и третьей строк вычитаем первую, умноженную на соответствующий элемент в третьем столбце.
Вычисляем новые дельты: Δi = C3·a1i + C4·a2i + C5·a3i - Ci
C9543200
базисx1x2x3x4x5x6bQ
x3
1
2
-1100
1
2
33
x4
1
2
3010-
1
2
2124
x54-3001242-
Δ
5
2
-6000
9
2
159

Текущий план X: [ 0, 0, 3, 21, 42, 0 ]
Целевая функция F: 9·0 + 5·0 + 4·3 + 3·21 + 2·42 + 0·0 = 159
Проверяем план на оптимальность: план не оптимален, так как Δ2 = -6 отрицательна.

Итерация 2

Определяем разрешающий столбец - столбец, в котором находится минимальная дельта: 2, Δ2: -6
Находим симплекс-отношения Q, путём деления коэффициентов b на соответствующие значения второго столбца
В найденном столбце ищем строку с наименьшим значением Q: Qmin = 7, строка 2.
На пересечении найденных строки и столбца находится разрешающий элемент: 3
В качестве базисной переменной x4 берём x2.

C9543200
базисx1x2x3x4x5x6bQ
x3
1
2
-1100
1
2
3-
x2
1
2
3010-
1
2
2121 / 3 = 7
x54-3001242-
Δ
5
2
-6000
9
2
159

Делим вторую строку на 3. Из первой и третьей строк вычитаем вторую, умноженную на соответствующий элемент во втором столбце.
Вычисляем новые дельты: Δi = C3·a1i + C2·a2i + C5·a3i - Ci
C9543200
базисx1x2x3x4x5x6bQ
x3
2
3
01
1
3
0
1
3
10-
x2
1
6
10
1
3
0-
1
6
77
x5
9
2
0011
3
2
63-
Δ
7
2
0020
7
2
201

Текущий план X: [ 0, 7, 10, 0, 63, 0 ]
Целевая функция F: 9·0 + 5·7 + 4·10 + 3·0 + 2·63 + 0·0 = 201
Проверяем план на оптимальность: отрицательные дельты отсутствуют, следовательно план оптимален.
Ответ: x1 = 0, x2 = 7, x3 = 10, x4 = 0, x5 = 63, F = 201

Метод искусственного базиса

Очень часто при решении задачи линейной оптимизации бывает довольно сложно выполнять алгебраические преобразования над коэффициентами ограничений для поиска начального базиса. Для упрощения вычислений существует альтернативный метод решения, называемый методом искусственного базиса. Его суть заключается в том, что вместо того, чтобы искать базис среди имеющихся основных и дополнительных переменных, ввести так называемые искусственные переменные, которые сформируют начальный базис. Возможно, звучит сложно и непонятно, но сейчас мы всё объясним.

Подготовительный этап

Аналогично базовому симплекс-методу для всех ограничений с неравентством вводятся дополнительные переменные, причём для ограничений с ≥ они берутся с коэффициентом -1, а для ограничений с ≤ с коэффициентом 1. Ограничения с равенством остаются без изменений. Если свободный коэффициент какого-либо из ограничений меньше нуля, то такое ограничение умножается на -1 (знак неравенства при этом меняется на противоположный). После этого приступают к поиску базиса.

Пример 9

3·x1 + 2·x2 + 3·x3 → min
-2·x1 - x2 - x3 ≥ -2
3·x1 + 8·x2 + 2·x3 ≥ 8
2·x1 + x3 = 1
Меняем знаки у ограничений с отрицательными свободными коэффициентами, путём умножения на -1:
2·x1 + x2 + x3 ≤ 2
3·x1 + 8·x2 + 2·x3 ≥ 8
2·x1 + x3 = 1

Для каждого ограничения с неравенством добавляем дополнительные переменные x4 и x5.
Ограничение 1 содержит неравенство, базисной будет добавленная дополнительная переменная x4
Ограничение 2 содержит неравенство с ≥. Базисная переменная для этого ограничения будет определена позднее.
Ограничение 3 содержит равенство. Базисная переменная для этого ограничения будет определена позднее.

Начальная симплекс-таблица
C323000
базисx1x2x3x4x5b
x4211102
?13820-18
?2201001


Формирование начального базиса

Для того, чтобы сформировать начальный базис в первую очередь можно поискать столбец, у которого одно значение равно единице, а все значения остальные значения равны нулю, и сделать соответствующую переменную базисной для этой строки. Однако такое случается довольно редко, поэтому проще сразу перейти к следующему пункту. Для всех ограничений, не имеющих базисной переменной, добавляем искусственную переменную с коэффициентом 1. В целевую функцию добавляем эту же переменную с коэффициентов -M, если ищется максимум или с коэффициентом M, если ищется минимум. M всего лишь является очень большим числом.

Пример 10

x1 - x2 → min
2·x1 + x2 = 1
x1 - 3·x2 + x3 = 3
x1 + 11·x2 = 11
Ограничение 1 содержит равенство. Базисная переменная для этого ограничения будет определена позднее.
Столбец 3 является частью единичной матрицы. Переменная x3 входит в начальный базис
Ограничение 3 содержит равенство. Базисная переменная для этого ограничения будет определена позднее.

Начальная симплекс-таблица
C1-100
базисx1x2x3b
?12101
x31-313
?3111011

Для ограничения 1 добавляем искусственную переменную u1 и делаем её базисной.
Для ограничения 3 добавляем искусственную переменную u2 и делаем её базисной.
В целевую функцию добавляем искусственные пременные с коэффициентом M, где M — очень большое число.

Таблица с искусственными переменными
C1-10MM0
базисx1x2x3u1u2b
u1210101
x31-31003
u211100111

Перепишем условие задачи с учётом добавленных искусственных переменных:
F = 1x1 -1x2 + Mu1 + Mu2 → min
2·x1 + x2 + u1 = 1
x1 - 3·x2 + x3 = 3
x1 + 11·x2 + u2 = 11

Расчёт дельт и проверка плана на оптимальность

После того, как начальный базис сформирован необходимо вычислить дельты. Дельты вычисляются полностью аналогично базовому методу: Δi = ce1·a1i + ce2·a2i + ... + cem·ami - ci. Единственным отличием будет тот факт, что результат может содержать значения с M. Когда дельты будут получены необходимо проверить текущий опорный план на оптимальность (см. проверку плана на оптимальность в базовом симплекс-методе). Если план оптимален, то алгоритм завершает свою работу, иначе формирует более оптимальное решение и повторяет процесс.

Пример 11

Таблица с искусственными переменными
C323000MM0
базисx1x2x3x4x5x6u1u2b
x4211100002
u13020-10103
u200100-1011

Вычисляем дельты: Δi = C4·a1i + C7·a2i + C8·a3i - Ci
Δ1 = C4·a11 + C7·a21 + C8·a31 - C1 = 0·2 + M·3 + M·0 - 3 = -3 + 3M
Δ2 = C4·a12 + C7·a22 + C8·a32 - C2 = 0·1 + M·0 + M·0 - 2 = -2
Δ3 = C4·a13 + C7·a23 + C8·a33 - C3 = 0·1 + M·2 + M·1 - 3 = -3 + 3M
Δ4 = C4·a14 + C7·a24 + C8·a34 - C4 = 0·1 + M·0 + M·0 - 0 = 0
Δ5 = C4·a15 + C7·a25 + C8·a35 - C5 = 0·0 + M·(-1) + M·0 - 0 = -M
Δ6 = C4·a16 + C7·a26 + C8·a36 - C6 = 0·0 + M·0 + M·(-1) - 0 = -M
Δ7 = C4·a17 + C7·a27 + C8·a37 - C7 = 0·0 + M·1 + M·0 - M = 0
Δ8 = C4·a18 + C7·a28 + C8·a38 - C8 = 0·0 + M·0 + M·1 - M = 0
Δb = C4·b1 + C7·b2 + C8·b3 - C9 = 0·2 + M·3 + M·1 - 0 = 4M
Симплекс-таблица с дельтами
C323000MM0
базисx1x2x3x4x5x6u1u2b
x4211100002
u13020-10103
u200100-1011
Δ-3 + 3M-2-3 + 3M0-M-M004M

Текущий план X: [ 0, 0, 0, 2, 0, 0, 3, 1 ]
Целевая функция F: 3·0 + 2·0 + 3·0 + 0·2 + 0·0 + 0·0 + M·3 + M·1 = 4M
Проверяем план на оптимальность: план не оптимален, так как Δ1 = -3 + 3M положительна.