Пример 5.1. Решить следующую задачу линейного программирования симплекс-методом:
Решение:
I итерация:
1 этап: формирование исходной симплекс-таблицы.
Исходная задача линейного программирования задана в стандартной форме. Приведем ее к каноническому виду путем введения в каждое из ограничений-неравенств дополнительной неотрицательной переменной, т.е.
В полученной системе уравнений примем в качестве разрешенных (базисных) переменные х3, х4, х5, х6, тогда свободными переменными будут х1,х2. Выразим базисные переменные через свободные:
Приведем целевую функцию к следующему виду:
На основе полученной задачи сформируем исходную симплекс-таблицу:
Таблица 5.3
Исходная симплекс-таблица
СП БП |
Оценочные отношения |
|||
18 |
1 |
3 |
||
16 |
2 |
1 |
||
5 |
0 |
1 |
||
21 |
3 |
0 |
||
0 |
–2 |
–3 |
2 этап: определение базисного решения.
Согласно определению базисного решения свободные переменные равны нулю, а значения базисных переменных – соответствующим значениям свободных чисел, т.е.:
.
3 этап: проверка совместности системы ограничений ЗЛП.
На данной итерации (в таблице 5.3) признак несовместности системы ограничений (признак 1) не выявлен (т.е. нет строки с отрицательным свободным числом (кроме строки целевой функции), в которой не было бы хотя бы одного отрицательного элемента (т.е. отрицательного коэффициента при свободной переменной)).
4 этап: проверка ограниченности целевой функции.
На данной итерации (в таблице 5.3) признак неограниченности целевой функции (признак 2) не выявлен (т.е. нет колонки с отрицательным элементом в строке целевой функции (кроме колонки свободных чисел), в которой не было бы хотя бы одного положительного элемента).
5 этап: проверка допустимости найденного базисного решения.
Так как найденное базисное решение не содержит отрицательных компонент, то оно является допустимым.
6 этап: проверка оптимальности.
Найденное базисное решение не является оптимальным, так как согласно признаку оптимальности (признак 4) в строке целевой функции не должно быть отрицательных элементов (свободное число данной строки при рассмотрении данного признака не учитывается). Следовательно, согласно алгоритму симплекс-метода переходим к 8 этапу.
8 этап: определение разрешающего элемента.
8.1. Определение разрешающей колонки.
Так как найденное базисное решение допустимое, то поиск разрешающей колонки будем производить по следующей схеме: определяем колонки с отрицательными элементами в строке целевой функции (кроме колонки свободных чисел). Согласно таблице 5.3, таких колонок две: колонка «х1» и колонка «х2». Из таких колонок выбирается та, которая содержит наименьший элемент в строке целевой функции. Она и будет разрешающей. Колонка «х2» содержит наименьший элемент (–3) в сравнении с колонкой «х1». Следовательно, ее принимаем в качестве разрешенной.
8.2. Определение разрешающей строки.
Для определения разрешающей строки находим положительные оценочные отношения свободных чисел к элементам разрешающей колонки, строка, которой соответствует наименьшее положительное оценочное отношение, принимается в качестве разрешенной.
Таблица 5.4
Исходная симплекс-таблица
В таблице 5.4 наименьшее положительное оценочное отношение соответствует строке «х5», следовательно, она будет разрешающей.
Элемент, расположенный на пересечение разрешающей колонки и разрешающей строки, принимается в качестве разрешающего. В нашем примере – это элемент , который расположен на пересечении строки «х5» и колонки «х2».
9 этап: преобразование симплекс-таблицы.
Разрешающий элемент показывает одну базисную и одну свободную переменные, которые необходимо поменять местами в симплекс-таблице, для перехода к новому «улучшенному» базисному решению. В данном случае это переменные х5 и х2, в новой симплекс-таблице (таблице 5.5) их меняем местами.
9.1. Преобразование разрешающего элемента.
Разрешающий элемент таблицы 5.4 преобразовывается следующим образом:
Полученный результат вписываем в аналогичную клетку таблицы 5.5.
9.2. Преобразование разрешающей строки.
Элементы разрешающей строки таблицы 5.4 делим на разрешающий элемент данной симплекс-таблицы, результаты вписываются в аналогичные ячейки новой симплекс-таблицы (таблицы 5.5). Преобразования элементов разрешающей строки приведены в таблице 5.5.
9.3. Преобразование разрешающей колонки.
Элементы разрешающей колонки таблицы 5.4 делим на разрешающий элемент данной симплекс-таблицы, а результат берется с обратным знаком. Полученные результаты вписываются в аналогичные ячейки новой симплекс-таблицы (таблицы 5.5). Преобразования элементов разрешающей колонки приведены в таблице 5.5.
9.4. Преобразование остальных элементов симплекс-таблицы.
Преобразование остальных элементов симплекс-таблицы (т.е. элементов не расположенных в разрешающей строке и разрешающей колонке) осуществляется по правилу «прямоугольника».
К примеру, рассмотрим преобразование элемента, расположенного на пересечении строки «х3» и колонки «», условно обозначим его «х3». В таблице 5.4 мысленно вычерчиваем прямоугольник, одна вершина которого располагается в клетке, значение которой преобразуем (т.е. в клетке «х3»), а другая (диагональная вершина) – в клетке с разрешающим элементом. Две другие вершины (второй диагонали) определяются однозначно. Тогда преобразованное значение клетки «х3» будет равно прежнему значению данной клетки минус дробь, в знаменателе которой разрешающий элемент (из таблицы 5.4), а в числителе произведение двух других неиспользованных вершин, т.е.:
«х3»: .
Аналогично преобразуются значения других клеток:
«х3 х1»: ;
«х4»: ;
«х4 х1»: ;
«х6»: ;
«х6 х1»: ;
« »: ;
« х1»: .
В результате данных преобразований получили новую симплекс- таблицу (таблица 5.5).
II итерация:
1 этап: составление симплекс-таблицы.
По результатам симплекс-преобразований предыдущей итерации составляем новую симплекс-таблицу:
Таблица 5.5
Симплекс-таблица II итерации
СП БП |
Оценочные отношения |
|||
–(3/1)=–3 |
||||
–(1/1)=–1 |
||||
5/1=5 |
0/1=0 |
(1)–1=1 |
||
–(0/1)=0 |
||||
–(–3/1)=3 |
2 этап: определение базисного решения.
В результате проведенных симплекс-преобразований получили новое базисное решение (таблица 5.5):
.
Как видно, при данном базисном решении значение целевой функции =15, что больше чем при предыдущем базисном решении.
3 этап: проверка совместности системы ограничений.
Не совместность системы ограничений в соответствии с признаком 1 в таблице 5.5 не выявлена.
4 этап: проверка ограниченности целевой функции.
Неограниченность целевой функции в соответствии с признаком 2 в таблице 5.5 не выявлена.
5 этап: проверка допустимости найденного базисного решения.
Найденное базисное решение в соответствии с признаком 3 допустимое, так как не содержит отрицательных компонент.
6 этап: проверка оптимальности найденного базисного решения.
Найденное базисное решение в соответствии с признаком 4 не оптимальное, так как в строке целевой функции симплекс-таблицы (таблица 5.5) содержится отрицательный элемент: –2 (свободное число данной строки при рассмотрении данного признака не учитывается). Следовательно, переходим к 8 этапу.
8 этап: определение разрешающего элемента.
8.1. Определение разрешающей колонки.
Найденное базисное решение допустимое, определяем колонки с отрицательными элементами в строке целевой функции (кроме колонки свободных чисел). Согласно таблице 5.5, такой колонкой является только одна колонка: «х1». Следовательно, ее принимаем в качестве разрешенной.
8.2. Определение разрешающей строки.
Согласно полученным значениям положительных оценочных отношений в таблице 5.6, минимальным является отношение, соответствующее строке «х3». Следовательно, ее принимаем в качестве разрешенной.
Таблица 5.6
Симплекс-таблица II итерации
СП БП |
Оценочные отношения |
|||
3 |
1 |
–3 |
3/1=3 – min |
|
11 |
2 |
–1 |
11/2=5,5 |
|
5 |
0 |
1 |
– |
|
21 |
3 |
0 |
21/3=7 |
|
15 |
–2 |
3 |
9 этап: преобразование симплекс-таблицы.
Преобразования симплекс-таблицы (таблицы 5.6) выполняются аналогично, как и в предыдущей итерации. Результаты преобразований элементов симплекс-таблицы приведены в таблице 5.7.
III итерация
1 этап: построение новой симплекс-таблицы.
По результатам симплекс-преобразований предыдущей итерации составляем новую симплекс-таблицу:
Таблица 5.7
Симплекс-таблица III итерации
СП БП |
Оценочные отношения |
|||
3/1=3 |
(1)–1=1 |
–3/1=–3 |
||
–(2/1)=–2 |
||||
–(0/1)=0 |
||||
–(3/1)=–3 |
||||
–(–2/1)=2 |
2 этап: определение базисного решения.
В результате проведенных симплекс-преобразований получили новое базисное решение (таблица 5.7):
.
3 этап: проверка совместности системы ограничений.
Не совместность системы ограничений в соответствии с признаком 1 в таблице 5.7 не выявлена.
4 этап: проверка ограниченности целевой функции.
Неограниченность целевой функции в соответствии с признаком 2 в таблице 5.7 не выявлена.
5 этап: проверка допустимости найденного базисного решения.
Найденное базисное решение в соответствии с признаком 3 допустимое, так как не содержит отрицательных компонент.
6 этап: проверка оптимальности найденного базисного решения.
Найденное базисное решение в соответствии с признаком 4 не оптимальное, так как в строке целевой функции симплекс-таблицы (таблица 5.7) содержится отрицательный элемент: –3 (свободное число данной строки при рассмотрении данного признака не учитывается). Следовательно, переходим к 8 этапу.
8 этап: определение разрешающего элемента.
8.1. Определение разрешающей колонки.
Найденное базисное решение допустимое, определяем колонки с отрицательными элементами в строке целевой функции (кроме колонки свободных чисел). Согласно таблице 5.7, такой колонкой является только одна колонка: «х5». Следовательно, ее принимаем в качестве разрешенной.
8.2. Определение разрешающей строки.
Согласно полученным значениям положительных оценочных отношений в таблице 5.8, минимальным является отношение, соответствующее строке «х4». Следовательно, ее принимаем в качестве разрешенной.
Таблица 5.8
Симплекс-таблица III итерации
СП БП |
Оценочные отношения |
|||
3 |
1 |
–3 |
– |
|
5 |
–2 |
5 |
5/5=1 – min |
|
5 |
0 |
1 |
5/1=5 |
|
12 |
–3 |
9 |
12/9=1? |
|
21 |
2 |
–3 |
9 этап: преобразование симплекс-таблицы.
Преобразования симплекс-таблицы (таблицы 5.8) выполняются аналогично, как и в предыдущей итерации. Результаты преобразований элементов симплекс-таблицы приведены в таблице 5.9.
IV итерация
1 этап: построение новой симплекс-таблицы.
По результатам симплекс-преобразований предыдущей итерации составляем новую симплекс-таблицу:
Таблица 5.9
Симплекс-таблица IV итерации
СП БП |
Оценочные отношения |
|||
–(–3/5)=3/5 |
||||
5/5=1 |
–2/5 |
(5)–1= |
||
–(1/5)=–1/5 |
||||
–(9/5)=–9/5 |
||||
–(–3/5)=3/5 |
2 этап: определение базисного решения.
В результате проведенных симплекс-преобразований получили новое базисное решение, согласно таблице 5.9 решение следующее:
.
3 этап: проверка совместности системы ограничений.
Не совместность системы ограничений в соответствии с признаком 1 в таблице 5.9 не выявлена.
4 этап: проверка ограниченности целевой функции.
Неограниченность целевой функции в соответствии с признаком 2 в таблице 5.9 не выявлена.
5 этап: проверка допустимости найденного базисного решения.
Найденное базисное решение в соответствии с признаком 3 допустимое, так как не содержит отрицательных компонент.
6 этап: проверка оптимальности найденного базисного решения.
Найденное базисное решение в соответствии с признаком 4 оптимальное, так как в строке целевой функции симплекс-таблицы (таблица 5.9) нет отрицательных элементов (свободное число данной строки при рассмотрении данного признака не учитывается).
7 этап: проверка альтернативности решения.
Найденное решение является единственным, так как в строке целевой функции (таблица 5.9) нет нулевых элементов (свободное число данной строки при рассмотрении данного признака не учитывается).
Ответ: оптимальное значение целевой функции рассматриваемой задачи =24, которое достигается при .
Пример 5.2. Решить вышеприведенную задачу линейного программирования при условии, что целевая функция минимизируется:
Решение:
I итерация:
1 этап: формирование исходной симплекс-таблицы.
Исходная задача линейного программирования задана в стандартной форме. Приведем ее к каноническому виду путем введения в каждое из ограничений-неравенств дополнительной неотрицательной переменной, т.е.
В полученной системе уравнений примем в качестве разрешенных (базисных) переменные х3, х4, х5, х6, тогда свободными переменными будут х1,х2. Выразим базисные переменные через свободные:
Приведем целевую функцию к следующему виду:
На основе полученной задачи сформируем исходную симплекс-таблицу:
Таблица 5.10
Исходная симплекс-таблица
СП БП |
Оценочные отношения |
|||
18 |
1 |
3 |
||
16 |
2 |
1 |
||
5 |
0 |
1 |
||
21 |
3 |
0 |
||
0 |
–2 |
–3 |
2 этап: определение базисного решения.
Согласно определению базисного решения свободные переменные равны нулю, а значения базисных переменных – соответствующим значениям свободных чисел, т.е.:
.
3 этап: проверка совместности системы ограничений ЗЛП.
На данной итерации (в таблице 5.10) признак несовместности системы ограничений (признак 1) не выявлен (т.е. нет строки с отрицательным свободным числом (кроме строки целевой функции), в которой не было бы хотя бы одного отрицательного элемента (т.е. отрицательного коэффициента при свободной переменной)).
4 этап: проверка ограниченности целевой функции.
На данной итерации (в таблице 5.10) признак неограниченности целевой функции (признак 2) не выявлен (т.е. нет колонки с положительным элементом в строке целевой функции (колонка свободных чисел не рассматривается), в которой не было бы хотя бы одного положительного элемента).
5 этап: проверка допустимости найденного базисного решения.
Так как найденное базисное решение не содержит отрицательных компонент, то оно является допустимым.
6 этап: проверка оптимальности найденного базисного решения.
Найденное базисное решение в соответствии с признаком 4 оптимальное, так как в строке целевой функции симплекс-таблицы (таблица 5.10) нет положительных элементов (свободное число данной строки при рассмотрении данного признака не учитывается).
7 этап: проверка альтернативности решения.
Найденное решение является единственным, так как в строке целевой функции (таблица 5.10) нет нулевых элементов (свободное число данной строки при рассмотрении данного признака не учитывается).
Ответ: оптимальное значение целевой функции рассматриваемой задачи =0, которое достигается при .
Пример 5.3. Решить следующую задачу линейного программирования симплекс-методом:
Решение:
I итерация
1 этап: составление исходной симплекс-таблицы.
Задача линейного программирования задана в каноническом виде. Составим расширенную матрицу и выделим с помощью метода Жордана-Гаусса базисные переменные. Примем в качестве базисных – переменные х1 и х2.
Умножим (поэлементно) первую строку на –3 и сложим со второй:
.
Умножим вторую строку на :
.
Сложим вторую с первой строкой:
.
В результате система ограничений примет следующий вид:
Выразим базисные переменные через свободные:
Выразим целевую функцию также через свободные переменные, для этого подставим полученные значения базисных переменных в целевую функцию:
.
Запишем целевую функцию в следующем виде:
.
Составим исходную симплекс-таблицу:
Таблица 5.11
Исходная симплекс-таблица
СП БП |
Оценочные отношения |
|||
–1 |
0 |
|||
0 |
2 |
|||
4 |
– |
–3 |
2 этап: определение базисного решения.
Согласно определению базисного решения свободные переменные равны нулю, а значения базисных переменных – соответствующим значениям свободных чисел, т.е.:
.
Найденное базисное решение является вырожденным, т.к. имеется базисная переменная х2, равная нулю.
3 этап: проверка совместности системы ограничений ЗЛП.
Так как в таблице 5.11 имеется строка с отрицательным свободным числом (–1), в которой нет ни одного отрицательного элемента (т.е. отрицательного коэффициента при свободной переменной), то согласно признаку несовместности (признак 1) система ограничений данной задачи не совместна (строка целевой функции при рассмотрении данного признака не учитывается). Следовательно, рассматриваемая задача линейного программирования не имеет решения.
Ответ: рассматриваемая задача линейного программирования не имеет решения в силу несовместности ее системы ограничений.
Подробный разбор симплекс-метода
Время на прочтение
6 мин
Количество просмотров 193K
Пролог
Недавно появилась необходимость создать с нуля программу, реализующую алгоритм симплекс-метода. Но в ходе решения я столкнулся с проблемой: в интернете не так уж много ресурсов, на которых можно посмотреть подробный теоретический разбор алгоритма (его обоснование: почему мы делаем те или иные шаги) и советы по практической реализации — непосредственно, алгоритм. Тогда я дал себе обещание — как только завершу задачу, напишу свой пост на эту тему. Об этом, собственно, и поговорим.
Замечание. Пост будет написан достаточно формальным языком, но будет снабжен комментариями, которые должны внести некоторую ясность. Такой формат позволит сохранить научный подход и при этом, возможно, поможет некоторым в изучении данного вопроса.
§1. Постановка задачи линейного программирования
Определение:
Линейное программирование – математическая дисциплина, посвященная теории и методам решения экстремальных задач на множествах n- мерного пространства, задаваемых системами линейными уравнений и неравенств.
Общая задача линейного программирования (далее – ЛП) имеет вид:
§2. Каноническая форма задачи ЛП
Каноническая форма задачи ЛП:
Замечание:
Любая задача ЛП сводится к канонической.
Алгоритм перехода от произвольной задачи ЛП к канонической форме:
- Неравенства с отрицательными умножаем на (-1).
- Если неравенство вида (≤), то к левой части добавляем – добавочную переменную, и получаем равенство.
- Если неравенство вида (≥), то из левой части вычитаем , и получаем равенство.
- Делаем замену переменных:
Замечание:
Будем нумеровать
по номеру неравенства, в которое мы его добавили.
Замечание:
≥0.
§3. Угловые точки. Базисные/свободные переменные. Базисные решения
Определение:
Точка
называется угловой точкой, если представление
возможно только при
.
Иными словами, невозможно найти две точки в области, интервал проходящий через которые содержит
(т.е.
– не внутренняя точка).
Графический способ решения задачи ЛП показывает, что нахождение оптимального решения ассоциируется с угловой точкой. Это является основной концепцией при разработке симплекс-метода.
Определение:
Пусть есть система m уравнений и n неизвестных (m < n). Разделим переменные на два множества: (n-m) переменные положим равными нулю, а остальные m переменных определяются решением системы исходных уравнений. Если это решение единственно, то тогда ненулевые m переменных называют базисными; нулевые (n-m) переменных – свободными (небазисными), а соответствующие результирующие значения переменных называют базисным решением.
§4. Симплекс-метод
Симплекс-метод позволяет эффективно найти оптимальное решение, избегая простой перебор всех возможных угловых точек. Основной принцип метода: вычисления начинаются с какого-то «стартового» базисного решения, а затем ведется поиск решений, «улучшающих» значение целевой функции. Это возможно только в том случае, если возрастание какой-то переменной приведет к увеличению значения функционала.
Необходимые условия для применения симплекс-метода:
- Задача должна иметь каноническую форму.
- У задачи должен быть явно выделенный базис.
Определение:
Явно выделенным базисом будем называть вектора вида:
, т.е. только одна координата вектора ненулевая и равна 1.
Замечание:
Базисный вектор имеет размерность (m*1), где m – количество уравнений в системе ограничений.
Для удобства вычислений и наглядности обычно пользуются симплекс-таблицами:
- В первой строке указывают «наименование» всех переменных.
- В первом столбце указывают номера базисных переменных, а в последней ячейке – букву Z (это строка функционала).
- В «середине таблицы» указывают коэффициенты матрицы ограничений — aij.
- Последний столбец – вектор правых частей соответствующих уравнений системы ограничений.
- Крайняя правая ячейка – значение целевой функции. На первой итерации ее полагают равной 0.
Замечание:
Базис – переменные, коэффициенты в матрице ограничений при которых образуют базисные вектора.
Замечание:
Если ограничения в исходной задаче представлены неравенствами вида ≤, то при приведении задачи к канонической форме, введенные дополнительные переменные образуют начальное базисное решение.
Замечание:
Коэффициенты в строке функционала берутся со знаком “-”.
Алгоритм симплекс-метода:
1. Выбираем переменную, которую будем вводить в базис. Это делается в соответствии с указанным ранее принципом: мы должны выбрать переменную, возрастание которой приведет к росту функционала. Выбор происходит по следующему правилу:
- Если задача на минимум – выбираем максимальный положительный элемент в последней строке.
- Если задача на максимум – выбираем минимальный отрицательный.
Такой выбор, действительно, соответствует упомянутому выше принципу: если задача на минимум, то чем большее число вычитаем – тем быстрее убывает функционал; для максимума наоборот – чем большее число добавляем, тем быстрее функционал растет.
Замечание:
Хотя мы и берем минимальное отрицательное число в задаче на максимум, этот коэффициент показывает направление роста функционала, т.к. строка функционала в симплекс-таблице взята со знаком “-”. Аналогичная ситуация с минимизацией.
Определение:
Столбец симплекс-таблицы, отвечающий выбранному коэффициенту, называется ведущим столбцом.
2. Выбираем переменную, которую будем вводить в базис. Для этого нужно определить, какая из базисных переменных быстрее всего обратится в нуль при росте новой базисной переменной. Алгебраически это делается так:
- Вектор правых частей почленно делится на ведущий столбец
- Среди полученных значений выбирают минимальное положительное (отрицательные и нулевые ответы не рассматривают)
Определение:
Такая строка называется ведущей строкой и отвечает переменной, которую нужно вывести из базиса.
Замечание:
Фактически, мы выражаем старые базисные переменные из каждого уравнения системы ограничений через остальные переменные и смотрим, в каком уравнении возрастание новой базисной переменной быстрее всего даст 0. Попадание в такую ситуацию означает, что мы «наткнулись» на новую вершину. Именно поэтому нулевые и отрицательные элементы не рассматриваются, т.к. получение такого результата означает, что выбор такой новой базисной переменной будет уводить нас из области, вне которой решений не существует.
3. Ищем элемент, стоящий на пересечении ведущих строки и столбца.
Определение:
Такой элемент называется ведущим элементом.
4. Вместо исключаемой переменной в первом столбце (с названиями базисных переменных) записываем название переменной, которую мы вводим в базис.
5. Далее начинается процесс вычисления нового базисного решения. Он происходит с помощью метода Жордана-Гаусса.
- Новая Ведущая строка = Старая ведущая строка / Ведущий элемент
- Новая строка = Новая строка – Коэффициент строки в ведущем столбце * Новая Ведущая строка
Замечание:
Преобразование такого вида направлено на введение выбранной переменной в базис, т.е. представление ведущего столбца в виде базисного вектора.
6. После этого проверяем условие оптимальности. Если полученное решение неоптимально – повторяем весь процесс снова.
§5. Интерпретация результата работы симплекс-метода
1. Оптимальность
Условие оптимальности полученного решения:
- Если задача на максимум – в строке функционала нет отрицательных коэффициентов (т.е. при любом изменении переменных значение итогового функционала расти не будет).
- Если задача на минимум – в строке функционала нет положительных коэффициентов (т.е. при любом изменении переменных значение итогового функционала уменьшаться не будет).
2. Неограниченность функционала
Однако, стоит отметить, что заданный функционал может не и достигать максимума/минимума в заданной области. Алгебраический признак этого можно сформулировать следующим образом:
При выборе ведущей строки (исключаемой переменной) результат почленного деления вектора правых частей на ведущий столбец содержит только нулевые и отрицательные значения.
Фактически, это значит, что какой бы рост мы не задавали новой базисной переменной, мы никогда не найдем новую вершину. А значит, наша функция не ограничена на множестве допустимых решений.
3. Альтернативные решения
При нахождении оптимального решения возможен еще один вариант – есть альтернативные решения (другая угловая точка, дающая то же самое значение функционала).
Алгебраический признак существования альтернативы:
После достижения оптимального решения имеются нулевые коэффициенты при свободных переменных в строке функционала.
Это значит, что при росте соответствующей переменной с нулевым коэффициентом значение функционала не изменится и новое базисное решение будет также давать оптимум функционала.
Эпилог
Данная статья направлена на более глубокое понимание теоретической части. В замечаниях и пояснениях здесь можно получить ответы на вопросы, которые обычно опускают при изучении этого метода и принимают априори. Однако, надо понимать, что многие методы численной оптимизации основаны на симплекс-методе (например, метод Гомори, М-Метод) и без фундаментального понимания вряд ли получится сильно продвинуться в дальнейшем изучении и применении всех алгоритмов этого класса.
Чуть позже напишу статью о практической реализации симплекс-метода, а также несколько статей о Методе искусственных переменных (М-Метод), Методе Гомори и Методе ветвей и границ.
Спасибо за внимание!
P.S.
Если уже сейчас Вы мучаетесь с реализацией симплекс-метода, советую почитать книгу А. Таха Введение в исследование операций — там все неплохо разобрано и в теории, и на примерах; а также посмотрите примеры решения задач matburo.ru — это поможет с реализацией в коде.
Среди универсальных
методов решения задач линейного
программирования наиболее распространен
симплексный метод (метод последовательного
улучшения плана). Суть этого метода в
том, что вначале получают допустимый
вариант, удовлетворяющий всем ограничениям,
но необязательно оптимальный (начальное
опорное решение); оптимальность
достигается последовательным улучшением
исходного варианта за определенное
число этапов (итераций). При применении
этого метода исходная ЗЛП формулируется
в канонической форме (1.3).
Симплекс-метод
основан на следующих свойствах ЗЛП:
-
Не существует
локального экстремума, отличного от
глобального. Другими словами: если
экстремум есть, то он единственный. -
Множество всех
планов задачи линейного программирования
выпукло. -
Целевая функция
ЗЛП достигает своего максимального
(минимального) значения в угловой точке
многогранника решений (в его вершине).
Если целевая функция принимает свое
оптимальное значение более чем в одной
угловой точке, то она достигает того
же значения в любой точке, являющейся
выпуклой линейной комбинацией этих
точек. -
Каждой угловой
точке многогранника решений отвечает
опорный план ЗЛП.
Существует две
разновидности симплексного метода:
-
симплекс-метод с
естественным базисом; -
симплекс-метод с
искусственным базисом (М-метод); -
Симплекс-метод с
естественным базисом.
Для применения
этого метода ЗЛП должна быть сформулирована
в канонической форме (1.4), причем матрица
системы уравнений должна содержать
единичную подматрицу размерностью mm
. В этом случае очевиден начальный
опорный план (неотрицательное базисное
решение).
3.1. Алгоритм симплекс – метода
I.
Если задача не приведена к каноническому
виду, то сделать это так, как в описано
в пункте №1. Получить расширенную систему
вида:
II. Исходную
расширенную систему заносим в первую
симплексную таблицу. Последняя строка
таблицы, в которой приведено уравнение
для линейной функции цели, называется
оценочной. В ней указываются коэффициенты
функции цели с противоположным знаком:
Δj =.
В левом столбце таблицы записываем
основные переменные (базис), в первой
строке таблицы — все переменные (отмечая
при этом основные), во втором столбце –
коэффициенты при основных переменных
системы сi,
в третьем столбце – свободные члены
расширенной системы b1,
b2, …, bm. Последний
столбец подготовлен для оценочных
отношений, необходимых при расчете
наибольшего возможного значения
переменной. В рабочую часть таблицы
(начиная с четвертого столбца и второй
строки) занесены коэффициенты aij
при переменных из расширенной системы.
Далее таблица преобразуется по
определенным правилам.
III. Проверяем
выполнение критерия оптимальности при
решении задачи на максимум — наличие
в последней строке отрицательных
коэффициентов Δj
< 0 (ci > 0). Если таких
нет, то решение оптимально, достигнут
max F =
(в левом нижнем углу таблицы), основные
переменные принимают значения bi
(третий столбец), неосновные переменные
равны 0, т.е. получаем оптимальное базисное
решение.
IV. Если критерий
оптимальности не выполнен, то наибольший
по модулю отрицательный коэффициент
Δj
< 0 в последней строке определяет
разрешающий столбец s.
Составляем оценочные
ограничения каждой строки по следующим
правилам:
-
, если bi
и ais
имеют разные знаки; -
, если bi
= 0 и ais
< 0; -
, если ais
= 0; -
0,
если bi
= 0 и ais
> 0; -
,
если
ai0
и ais
имеют одинаковые знаки.
Определяем
.
Если конечного минимума нет, то задача
не имеет конечного оптимума (Fmax = ).
Если минимум конечен, то выбираем строку
q, на которой он достигается (любую,
если их несколько), и называем ее
разрешающей строкой. На пересечении
разрешающих строки и столбца находится
разрешающий элемент aqs.
V. Переходим к
следующей таблице по правилам:
а) в левом столбце
записываем новый базис: вместо основной
переменной xq — переменную
xs,
б) в столбцах,
соответствующих основным переменным,
проставляем нули и единицы: 1 — против
«своей» основной переменной, 0 —
против «чужой» основной переменной,
0 — в последней строке для всех основных
переменных;
в) новую строку с
номером q получаем из старой делением
на разрешающий элемент aqs;
г) все остальные
элементы aqs
вычисляем по правилу прямоугольника:
Далее переходим
к п. III
алгоритма.
Пример
3.1. Решить задачу об использовании
ресурсов, приведенную в лекции,
с помощью симплексных таблиц.
Решение. Расширенная
система задачи имеет вид:
Линейную функцию
представим в виде F
– 2x1
— 3x2
= 0.
Заполняем первую
симплексную таблицу (табл.
3.1), в которой переменные x3,
x4, x5,
x6 основные.
Последняя строка заполняется коэффициентами
линейной функции с противоположным
знаком (см. п. II алгоритма).
Таблица 3.1
Базис |
Коэф. |
Свободный (План) |
Переменные |
Оценка |
|||||
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
||||
2 |
3 |
0 |
0 |
0 |
0 |
||||
x3 |
0 |
18 |
1 |
3 |
1 |
0 |
0 |
0 |
18/3 |
x4 |
0 |
16 |
2 |
1 |
0 |
1 |
0 |
0 |
16 |
x5 |
0 |
5 |
0 |
1 |
0 |
0 |
1 |
0 |
5 |
x6 |
0 |
21 |
3 |
0 |
0 |
0 |
0 |
1 |
|
F=0*18+0*16+0*5+0*21=0 |
Δj |
-2 |
-3 |
0 |
0 |
0 |
0 |
В соответствии с
п. III алгоритма проверяем
критерий оптимальности.
Δj
=
для всех j = 1, 2, …, 6:
Δ1
=
0*1+0*2+0*0+0*3 – 2 = – 2
Δ2
=
0*3+0*1+0*1+0*0 – 3 = – 3
Δ3
=
0*1+0*0+0*0+0*0 – 0 = 0
Δ4
=
0*0+0*1+0*0+0*0 – 0 = 0
Δ5
=
0*0+0*0+0*1+0*0 – 0 = 0
Δ6
=
0*0+0*0+0*0+0*1 – 0 = 0
В последней строке
имеются отрицательные коэффициенты.
Выбираем из них наибольший по модулю
(Δ2 =
–3); второй столбец разрешающий,
переменная x2
перейдет в основные (этот столбец отмечен
рамочкой). В соответствии с п.
IV находим оценочные отношения и
min{18/3; 16; 5;
} = 5.
Третья строка является разрешающей
(отмечена горизонтальной стрелкой и
рамочкой). На пересечении разрешающих
строки и столбца стоит разрешающий
элемент a11 = 1.
Строим табл.
2 по правилам п. V
алгоритма:
а) в новом базисе
основные переменные: x3,
x4, x2,
x6;
б) расставляем
нули и единицы; например, в клетке,
соответствующей основной переменной
x3 по столбцу и
строке, ставим 1, а в клетке,
соответствующей основной переменной
x3 по строке, а
основной переменной x2
— по столбцу, ставим
0 и т.п. В последней строке против
всех основных переменных ставим
0. Третья строка получается делением
на разрешающий элемент a11
= 1. Остальные клетки
заполняем по правилу прямоугольника.
Например:
,
и т.д.
Получим вторую
симплексную таблицу (табл.
3.2)
Таблица
3.2
Базис |
Коэф. |
Свободный член |
Переменные |
Оценка |
|||||
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
||||
2 |
3 |
0 |
0 |
0 |
0 |
||||
x3 |
0 |
3 |
1 |
0 |
1 |
0 |
-3 |
0 |
3 |
x4 |
0 |
11 |
2 |
0 |
0 |
1 |
-1 |
0 |
11/2 |
→ x2 |
3 |
5 |
0 |
1 |
0 |
0 |
1 |
0 |
|
x6 |
0 |
21 |
3 |
0 |
0 |
0 |
0 |
1 |
7 |
F=0*3+0*11+3*5+0*21=15 |
Δj |
-2 |
0 |
0 |
0 |
3 |
0 |
Δj
=
для всех j = 1, 2, …, 6:
Δ1
=
0*1+0*2+3*0+0*3 – 2 = – 2
Δ2
=
0*0+0*0+3*1+0*0 – 3 = 0
Δ3
=
0*1+0*0+3*0+0*0 – 0 = 0
Δ4
=
0*0+0*1+3*0+0*0 – 0 = 0
Δ5
=
0*(-3)+0*(-1)+3*1+0*0 – 0 = 3
Δ6
=
0*0+0*0+3*0+0*1 – 0 = 0
Критерий оптимальности
вновь не выполнен (Δ1
<0). Теперь первый
столбец разрешающий; x1
— переходит в основные, min{3/l;
11/2; ;
7}= 3; первая строка разрешающая, a11
— разрешающий элемент.
Новая симплексная
таблица примет вид табл. 3.3.
Таблица 3.3
Базис |
Коэф. |
Свободный член |
Переменные |
Оценка |
|||||
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
||||
2 |
3 |
0 |
0 |
0 |
0 |
||||
→ x1 |
2 |
3 |
1 |
0 |
1 |
0 |
-3 |
0 |
|
x4 |
0 |
5 |
0 |
0 |
-2 |
1 |
5 |
0 |
5/5 |
x2 |
3 |
5 |
0 |
1 |
0 |
0 |
1 |
0 |
5/1 |
x6 |
0 |
12 |
0 |
0 |
-3 |
0 |
9 |
1 |
12/9 |
F=2*3+0*5+3*5+0*12=21 |
Δj |
0 |
0 |
2 |
0 |
-3 |
0 |
Δj
=
для всех j = 1, 2, …, 6:
Δ1
=
2*1+0*0+3*0+0*0 – 2 = 0
Δ2
=
2*0+0*0+3*1+0*0 – 3 = 0
Δ3
=
2*1+0*(-2)+3*0+0*(-3) – 0 = 0
Δ4
=
2*0+0*1+3*0+0*0 – 0 = 0
Δ5
=
2*(-3)+0*5+3*1+0*9 – 0 =-6 + 3=-3
Δ6
=
2*0+0*0+3*0+0*1 – 0 = 0
И на этот раз
критерий оптимальности не выполнен (Δ5
<0); пятый столбец
и вторая строка разрешающие,
a25
= 5 — разрешающий элемент.
Переходим к табл.
3.4
Таблица
3.4
Базис |
Коэф. |
Свободный член |
Переменные |
Оценка |
|||||
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
||||
2 |
3 |
0 |
0 |
0 |
0 |
||||
x1 |
2 |
6 |
1 |
0 |
-1/5 |
3/5 |
0 |
0 |
|
x5 |
0 |
1 |
0 |
0 |
-2/5 |
1/5 |
1 |
0 |
|
x2 |
3 |
4 |
0 |
1 |
2/5 |
-1/5 |
0 |
0 |
|
x6 |
0 |
3 |
0 |
0 |
3/5 |
-9/5 |
0 |
1 |
|
F=2*6+0*11+3*4+0*3=24 |
Δj |
0 |
0 |
4/5 |
3/5 |
0 |
0 |
Δj
=
для всех j = 1, 2, …, 6:
Δ1
=
2*1+0*0+3*0+0*0 – 2 = 0
Δ2
=
2*0+0*0+3*1+0*0 – 3 = 0
Δ3
=
2*(-1/5)+0*(-2/5)+3*2/5+0*3/5 – 0 = 4/5
Δ4
=
2*(3/5)+0*1/5+3*(-/5)+0*(-9/5) – 0 = 3/5
Δ5
=
2*0+0*1+3*0+0*0 – 0 = 0
Δ6
=
2*0+0*0+3*0+0*1 – 0 = 0
Критерий оптимальности
выполнен (все Δj
> 0), значит Fmax
= 24, оптимальное
базисное решение (6; 4; 0; 0; 1;
3).
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Один из методов решения оптимизационных задач (как правило связанных с нахождением минимума или максимума) линейного программирования называется симплекс-методом. Симплекс-метод включает в себя целую группу алгоритмов и способов решения задач линейного программирования. Один из таких способов, предусматривающий запись исходных данных и их пересчет в специальной таблице, носит наименование табличного симплекс-метода.
Рассмотрим алгоритм табличного симплекс-метода на примере решения производственной задачи, которая сводится к нахождению производственного плана обеспечивающего максимальную прибыль.
Решение задачи табличным симплекс-методом
Решение задачи происходит в несколько последовательных этапов. Разберем их на небольшом примере производственной задачи.
1. Определение исходных данных
В нашем примере, по условиям задачи предприятие выпускает 4 вида изделий, обрабатывая их на 3 станках.
Исходные данные для производственной задачи запишем в формате матриц:
- Матрица A — нормы времени на обработку изделий;
- Матрица B — фонд времени работы станков;
- Матрица C — продажи производимых изделий.
Таким образом, нормы времени (мин./шт.) на обработку изделий на станках, заданы матрицей A:
Фонд времени работы станков (мин.) задан в матрице B:
Прибыль от продажи каждой единицы изделия (руб./шт.) задана матрицей C:
Кроме того, обозначим через Xi планируемое количество изделий каждого вида. Тогда искомый план: X1, X2, X3, X4.
2. Запись ограничений плана в виде системы неравенств
Запишем ограничения плана в виде системы неравенств:
Коэффициенты при переменных в левой части системы неравенств берем из матрицы A, значения из правой части — из матрицы B.
Неравенства задают для каждого станка ограничение на суммарное время обработки им всех видов изделий, которое не должно превышать соответствующий ему фонд времени (т. к. станок чисто физически не может проработать ни минутой больше).
Также добавляем условие, согласно которому переменные не могут быть меньше нуля, так как произвести отрицательное количество изделий невозможно.
3. Определение целевого показателя
В нашей задаче целевой показатель — прибыль, которую следует максимизировать путем составления оптимального плана производства.
Тогда целевая прибыль может быть записана через следующее равенство:
Коэффициенты при переменных берем из матрицы C. То есть мы перемножаем прибыль от производства единицы изделия каждого вида на их планируемое количество, для получения значения суммарной прибыли (которая должна быть максимальной).
4. Приведение системы неравенств к системе линейных уравнений
Для решения получившейся задачи на условный экстремум, заменим систему неравенств системой линейных уравнений путем ввода в нее дополнительных неотрицательных переменных (X5, X6, X7).
Эти переменные являются фиктивными изделиями, на которые мы списываем неиспользованные остатки фондов времени работы станков.
5. Формирование опорного плана
Примем следующий опорный план (предварительный вариант, который в процессе решения задачи будет итерационно улучшаться):
X1 = 0, X2 = 0, X3 = 0, X4 = 0, X5 = 252, X6 = 144, X7 = 80.
Здесь основным переменным (количеству изделий производимых в рамках плана) сопоставляем нулевые значения, а дополнительным (фиктивным) переменным — соответствующие величины фондов времени работы станков.
6. Составление симплекс-таблицы
Занесем исходные данные в специальную симплекс-таблицу.
В столбец Базис выписываем дополнительные переменные (X5..X7). В колонку H вносим величины фонда времени работы станков. В столбцы X1..X7 помещаем коэффициенты при этих переменных из составленной ранее системы уравнений (если переменных в уравнении нет, как например, X6 и X7 в первом равенстве, то коэффициенты будут равны 0). Кроме того, следует предусмотреть дополнительный столбец (b) для показателя, который мы будем рассчитывать на следующем этапе.
Количество строк в таблице соответствует числу дополнительных переменных (X5..X7). В последнюю строку (c) заносим коэффициенты при целевой функции с обратным знаком (коэффициенты при дополнительных переменных X5..X7 будут нулевыми).
7. Вычисление показателя b
Выбираем в последней строке наибольшее (по модулю!) отрицательное число.
В нашем примере это -48 (еще раз подчеркнем, что отрицательные числа сравниваем без учета знака).
Далее вычислим для столбца, которому соответствует выбранное число, специальный показатель bi = Нi / ai, где ai — значение ячейки выбранного столбца и соответствующей строки.
8. Нахождение разрешающего элемента
Среди вычисленных значений b выбираем наименьшее.
Пересечение выбранных столбца и строки даст нам разрешающий элемент (РЭ). Меняем базисную переменную (из первой колонки в выбранной строке) на переменную соответствующую разрешающему элементу (X5 на X1).
9. Перерасчет элементов симплекс-таблицы
Теперь необходимо пересчитать все элементы симплекс-таблицы, кроме столбца b (который очищается).
При перерасчете элементов симплекс-таблицы следует придерживаться следующих правил:
- Сам разрешающий элемент (РЭ) обращается в единицу;
- Для элементов разрешающей строки применяется формула: aij* = aij / РЭ (то есть каждый элемент делим на значение разрешающего элемента и получаем новые данные);
- Для элементов разрешающего столбца — они просто обнуляются;
- Остальные элементы таблицы пересчитываем по правилу прямоугольника:
Формула здесь следующая: aij* = aij — ( A × B / РЭ )
Как видите, мы берем пересчитываемую ячейку и ячейку с разрешающим элементом. Они образуют противоположные углы прямоугольника. Далее перемножаем значения из ячеек 2-х других углов этого прямоугольника. Это произведение (A × B) делим на разрешающий элемент (РЭ) и вычитаем из текущей пересчитываемой ячейки (aij) то, что получилось. В итоге имеем новое значение — aij*.
Полученные в результате перерасчета значения заносим в новую симплекс-таблицу:
10. Проверяем последнюю строку симплекс-таблицы на наличие отрицательных чисел: если их нет — оптимальный план найден (п. 11), если есть — план требует улучшения (п. 7)
Вновь проверяем последнюю строку (c) на наличие отрицательных чисел. Если их нет — оптимальный план найден, переходим к последнему этапу решения задачи (пункт 11). Если есть — план еще не оптимален, и симплекс-таблицу вновь нужно пересчитать.
Так как у нас в последней строке снова имеются отрицательные числа, начинаем новую итерацию (повторение) вычислений с пункта 7.
В нашем примере мы снова ищем в последней строке наибольшее по модулю отрицательное число, вычисляем для соответствующего ему столбца показатель b, определяем разрешающий элемент, меняем базис и пересчитываем элементы симплекс-таблицы.
Пересчитав таблицу мы видим, что на сей раз в последней строке нет отрицательных чисел, следовательно оптимальный план (позволяющий получить максимальную прибыль) найден и можно переходить к завершающему пункту решения.
Еще раз обращаю ваше внимание, что отсутствие в последней строке отрицательных элементов указывает на то, что нами найден оптимальный план производства позволяющий получить максимально возможную прибыль при заданных условиях.
11. Определение производственного плана и вычисление общей прибыли
В соответствии с найденным планом (смотрим какие переменные перешли в колонку «Базис») выпускать мы будем изделия X1 и X2 (X7 не учитываем, т. к. это фиктивное изделие, не производимое на предприятии и введенное для приведения системы неравенств к системе уравнений).
Прибыль от производства каждой единицы продукции нам известна (матрица C). Остается перемножить ее с найденными объемами выпуска изделий X1 и X2 (значения X3 и X4 нулевые, т. к. эти изделия производить оказалось невыгодно), для получения общей (максимально возможной!) прибыли.
Ответ План производства: X1 = 32 шт., X2 = 20 шт., X3 = 0 шт., X4 = 0 шт., общая прибыль: P = 48 × 32 + 33 × 20 = 2 196 руб.
Источники
- Галяутдинов Р. Р. Курс лекций по логистике
- Симплекс-метод // Википедия. URL: http://ru.wikipedia.org/wiki/Симплекс-метод (дата обращения: 25.11.2013)
Статья дополнена и доработана автором 5 ноя 2020 г.
© Копирование любых материалов статьи допустимо только при указании прямой индексируемой ссылки на источник: Галяутдинов Р.Р.
Калькулятор симплекс-метода
Количество переменных:
Количество ограничений:
Очистить
Решить
В двойственную
Выполнено действий:
Как пользоваться калькулятором
- Задайте количество переменных и ограничений
- Введите коэффициенты целевой функции
- Введите коэффициенты ограничений и выберите условия (≤, = или ≥)
- Выберите тип решения
- Нажмите кнопку «Решить»
Что умеет калькулятор симплекс-метода
- Решает основную задачу линейного программирования
- Позволяет получить решение с помощью основного симплекс-метода и метода искусственного базиса
- Работает с произвольным количеством переменных и ограничений
Что такое симплекс-метод
Задача линейного программирования — это задача поиска неотрицательных значений параметров, на которых заданная линейная функция достигает своего максимума или минимума при заданных линейных ограничениях.
Симплекс-метод — алгоритм решения оптимизационной задачи линейного программирования путём перебора вершин выпуклого многогранника в многомерном пространстве. Алгоритм является универсальным методом, которым можно решить любую задачу линейного программирования.
Если вам тоже ничего не понятно из этого определения, то вы на верном пути. Чаще всего статьи про симплекс-метод очень сильно углубляются в дебри теории задачи линейного программирования, из-за чего очень легко потерять суть и так ничего и не понять. Мы постараемся описать алгоритм симплекс-метода так, чтобы показать, что в нём нет ничего страшного и на самом деле он весьма простой. Но сначала нам всё-таки потребуется ввести несколько определений.
Целевая функция — функция, максимум (или минимум) которой нужно найти. Представляет собой сумму произведений коэффициентов на значения переменных: 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.
Симплекс-таблица
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x6 | 1 | -2 | 2 | 0 | 0 | 1 | 6 |
x4 | 1 | 2 | 1 | 1 | 0 | 0 | 24 |
? | 2 | 1 | -4 | 0 | 2 | 0 | 30 |
После преобразования получаем следующую таблицу:
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x6 | 1 | -2 | 2 | 0 | 0 | 1 | 6 |
x4 | 1 | 2 | 1 | 1 | 0 | 0 | 24 |
x5 | 1 |
1 2 |
-2 | 0 | 1 | 0 | 15 |
Если такой столбец отсутствует, то для формирования базиса необходимо применить исключение Гаусса для первого ненулевого столбца, который ещё не является базисным. Для этого вся строка делится на элемент в найденном столбце, а из остальных строк вычитается полученная строка, разделённая на значение, стоящее в этом же столбце. После этой операции все значения вне данной строки будут обнулены, и столбец можно будет считать базисным.
Пример 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
Начальная симплекс-таблица
базис | x1 | x2 | x3 | x4 | x5 | b |
---|---|---|---|---|---|---|
x4 | 2 | 3 | 6 | 1 | 0 | 240 |
? | 4 | 2 | 4 | 0 | 0 | 160 |
x5 | 4 | 6 | 8 | 0 | 1 | 200 |
Для определения второй базисной переменной ищем первый ненулевой столбец, который ещё не является базисным. Первый столбец не нулевой и не является базисным. Выполняем исключение Гаусса: делим строку 2 на 4, а из первой и третьей строк вычитаем вторую, умноженную на соответствующий элемент в первом столбце.
базис | x1 | x2 | x3 | x4 | x5 | b |
---|---|---|---|---|---|---|
x4 | 2 | 3 | 6 | 1 | 0 | 240 |
x1 | 4 | 2 | 4 | 0 | 0 | 160 |
x5 | 4 | 6 | 8 | 0 | 1 | 200 |
После исключения получаем следующую таблицу:
базис | x1 | x2 | x3 | x4 | x5 | b |
---|---|---|---|---|---|---|
x4 | 0 | 2 | 4 | 1 | 0 | 160 |
x1 | 1 |
1 2 |
1 | 0 | 0 | 40 |
x5 | 0 | 4 | 4 | 0 | 1 | 40 |
После того как базис сформирован, нужно построить начальную симплекс-таблицу. Она строится следующим образом:
- Для удобства в первой строке можно записать коэффициенты Ci целевой функции (для дополнительных переменных эти коэффициенты равны нулю)
- Вторая строка формирует шапку таблицы. В ней первый столбец называется базис, а остальные перечисляют основные переменные x1..xn и дополнительные xn+1..xn+k
- Затем построчно перечисляются базисные переменные и коэффициенты ограничений
Схематично начальная таблица будет выглядеть примерно так:
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. Пусть это будет строка i;
- Найти максимальный по модулю элемент в этой строке. Пусть он находится в столбце j;
- Строку i разделить на элемент, стоящий на пересечении i-ой строки и j-го столбца;
- Из каждой оставшейся строки k вычесть строку i, умноженную на элемент строки k и столбца j;
- Переменную, соответствующую найденному столбцу j, сделать базисной (добавить в базис вместо переменной, находящейся в строке i).
Этот шаг необходимо повторять до тех пор, пока все отрицательные 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
Начальная симплекс-таблица
C | 20 | 20 | 10 | 0 | 0 | 0 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x4 | -4 | -3 | -2 | 1 | 0 | 0 | -33 |
x5 | -3 | -2 | -1 | 0 | 1 | 0 | -23 |
x6 | -1 | -1 | -2 | 0 | 0 | 1 | -12 |
В столбце b присутствуют отрицательные значения.
Максимальное по модулю |b|max = |-33| находится в первой строке.
Максимальный по модулю элемент в первой строке = -4 находится в первом столбце.
В качестве базисной переменной x4 берём x1.
Делим первую строку на -4. Из второй и третьей строк вычитаем первую, умноженную на соответствующий элемент в первом столбце.
Обновлённая таблица:
C | 20 | 20 | 10 | 0 | 0 | 0 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x1 | 1 |
3 4 |
1 2 |
—
1 4 |
0 | 0 |
33 4 |
x5 | 0 |
1 4 |
1 2 |
—
3 4 |
1 | 0 |
7 4 |
x6 | 0 | —
1 4 |
—
3 2 |
—
1 4 |
0 | 1 | —
15 4 |
В столбце b присутствуют отрицательные значения.
Максимальное по модулю |b|max = |-
| находится в третьей строке.
Максимальный по модулю элемент в третьей строке = —
находится в третьем столбце.
В качестве базисной переменной x6 берём x3.
Делим третью строку на —
. Из первой и второй строк вычитаем третью, умноженную на соответствующий элемент в третьем столбце.
Обновлённая таблица:
C | 20 | 20 | 10 | 0 | 0 | 0 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x1 | 1 |
2 3 |
0 | —
1 3 |
0 |
1 3 |
7 |
x5 | 0 |
1 6 |
0 | —
5 6 |
1 |
1 3 |
1 2 |
x3 | 0 |
1 6 |
1 |
1 6 |
0 | —
2 3 |
5 2 |
Расчёт дельт
Дельты — это параметры, на основании которых проверяется оптимальность текущего решения и улучшается функция. Они рассчитываются для каждой из переменных ограничений и записываются последней строкой таблицы.
Для расчёта дельт используется следующая формула: Δi = ce1·a1i + ce2·a2i + … + cem·ami — ci. Проще говоря, чтобы вычислить дельту по заданной i-ой переменной, нужно перемножить коэффициенты условий в i-ом столбце на коэффициенты целевой функции при соответствующих базисных переменных, сложить эти произведения и вычесть из полученной суммы коэффициент целевой функции столбца i.
Пример 5
Таблица:
C | 3 | 0 | 2 | 0 | 0 | -6 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x2 | 2 | 1 | -3 | 0 | 0 | 6 | 18 |
x4 | -3 | 0 | 2 | 1 | 0 | -2 | 24 |
x5 |
1 5 |
0 |
3 5 |
0 | 1 | —
4 5 |
36 5 |
Вычисляем дельты: Δi = C2·a1i + C4·a2i + C5·a3i — Ci
Симплекс-таблица с дельтами
C | 3 | 0 | 2 | 0 | 0 | -6 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x2 | 2 | 1 | -3 | 0 | 0 | 6 | 18 |
x4 | -3 | 0 | 2 | 1 | 0 | -2 | 24 |
x5 |
1 5 |
0 |
3 5 |
0 | 1 | —
4 5 |
36 5 |
Δ | -3 | 0 | -2 | 0 | 0 | 6 | 0 |
Проверка плана на оптимальность
После того как дельты рассчитаны, необходимо проверить оптимальность текущего плана. Критерий оптимальности формулируется следующим образом:
При максимизации функции: текущее решение считается оптимальным, если в таблице отсутствуют отрицательные дельты.
При минимизации функции: текущее решение считается оптимальным, если в таблице отсутствуют положительные дельты.
Пример 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
Симплекс-таблица с дельтами
C | 9 | 5 | 4 | 3 | 2 | 0 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x6 | 1 | -2 | 2 | 0 | 0 | 1 | 6 |
x4 | 1 | 2 | 1 | 1 | 0 | 0 | 24 |
x5 | 2 | 1 | -4 | 0 | 1 | 0 | 30 |
Δ | -2 | 3 | -9 | 0 | 0 | 0 | 132 |
Критерий оптимальности: план оптимален, если в таблице отсутствуют отрицательные дельты.
План не оптимален, так как ищется максимум функции, а Δ1 = -2 отрицательна.
Если текущий план оптимален, то алгоритм завершает свою работу. Значениям переменных соответствуют значения столбца свободных коэффициентов b. Если свободной переменной нет в базисе, то её значение считается нулевым. Значение целевой функции, принимаемой на данном наборе, находится в строке с дельтами в том же столбце. Если какое-либо из значений столбца b отрицательно, то решения задачи не существует.
Переход к более оптимальному решению
Если текущий план оказался не оптимальным, то алгоритм ищет столбец с наименьшей (с наибольшей, если ищется минимум) дельтой. После чего вычисляются симплекс-отношения Q. Для этого значения свободных коэффициентов делятся на ненулевые коэффициенты из найденного столбца. Если результат деления получается отрицательным, то такие отношение игнорируются.
Среди найденных симплекс-отношений ищется строка, в которой находится симплекс-отношение с наименьшим значением. Если таких отношений нет, то алгоритм останавливает свою работу, так как целевая функция не ограничена и решения не существует.
Пример 7
Симплекс-таблица с дельтами
C | 2 | 1 | -2 | 0 | 0 | 0 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x1 | 1 | -5 | 0 | -3 | 0 | -1 | 25 |
x5 | 0 | -16 | 0 | -7 | 1 | -3 | 57 |
x3 | 0 | -6 | 1 | -2 | 0 | -1 | 17 |
Δ | 0 | 1 | 0 | -2 | 0 | 0 | 16 |
Проверяем план на оптимальность: план не оптимален, так как ищется минимум функции, а Δ2 = 1 положительна.
Определяем разрешающий столбец — столбец, в котором находится максимальная дельта: 2, Δ2: 1
Находим симплекс-отношения Q, путём деления коэффициентов b на соответствующие значения второго столбца
C | 2 | 1 | -2 | 0 | 0 | 0 | 0 | |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b | Q |
---|---|---|---|---|---|---|---|---|
x1 | 1 | -5 | 0 | -3 | 0 | -1 | 25 | — |
x5 | 0 | -16 | 0 | -7 | 1 | -3 | 57 | — |
x3 | 0 | -6 | 1 | -2 | 0 | -1 | 17 | — |
Δ | 0 | 1 | 0 | -2 | 0 | 0 | 16 |
Все значения второго столбца отрицательны. Функция не ограничена. Оптимальное решение отсутствует.
В противном случае строка с наименьшим отношением считается разрешающей и, аналогично избавлению от отрицательных свободных коэффициентов, делится на разрешающий элемент, расположенный в найденных столбце и строке, и из остальных строк вычитается найденная строка, разделённая на значения, стоящие в этом же столбце соответствующей строки. Переменная, стоящая в разрешающем столбце заменяет базисную переменную, находящуюся в найденной строке.
После этого вычисляются новые дельты и проверяется новый план. Так продолжается до тех пор пока не будет выполнен критерий оптимальности плана или не будет установлено, что решение не существует.
Пример 8
Симплекс-таблица с дельтами
C | 9 | 5 | 4 | 3 | 2 | 0 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b |
---|---|---|---|---|---|---|---|
x6 | 1 | -2 | 2 | 0 | 0 | 1 | 6 |
x4 | 1 | 2 | 1 | 1 | 0 | 0 | 24 |
x5 | 2 | 1 | -4 | 0 | 1 | 0 | 30 |
Δ | -2 | 3 | -9 | 0 | 0 | 0 | 132 |
Проверяем план на оптимальность: план не оптимален, так как Δ1 = -2 отрицательна.
Итерация 1
Определяем разрешающий столбец — столбец, в котором находится минимальная дельта: 3, Δ3: -9
Находим симплекс-отношения Q, путём деления коэффициентов b на соответствующие значения третьего столбца
В найденном столбце ищем строку с наименьшим значением Q: Qmin = 3, строка 1.
На пересечении найденных строки и столбца находится разрешающий элемент: 2
В качестве базисной переменной x6 берём x3.
C | 9 | 5 | 4 | 3 | 2 | 0 | 0 | |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b | Q |
---|---|---|---|---|---|---|---|---|
x3 | 1 | -2 | 2 | 0 | 0 | 1 | 6 | 6 / 2 = 3 |
x4 | 1 | 2 | 1 | 1 | 0 | 0 | 24 | 24 / 1 = 24 |
x5 | 2 | 1 | -4 | 0 | 1 | 0 | 30 | — |
Δ | -2 | 3 | -9 | 0 | 0 | 0 | 132 |
Делим первую строку на 2. Из второй и третьей строк вычитаем первую, умноженную на соответствующий элемент в третьем столбце.
Вычисляем новые дельты: Δi = C3·a1i + C4·a2i + C5·a3i — Ci
C | 9 | 5 | 4 | 3 | 2 | 0 | 0 | |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b | Q |
---|---|---|---|---|---|---|---|---|
x3 |
1 2 |
-1 | 1 | 0 | 0 |
1 2 |
3 | 3 |
x4 |
1 2 |
3 | 0 | 1 | 0 | —
1 2 |
21 | 24 |
x5 | 4 | -3 | 0 | 0 | 1 | 2 | 42 | — |
Δ |
5 2 |
-6 | 0 | 0 | 0 |
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.
C | 9 | 5 | 4 | 3 | 2 | 0 | 0 | |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b | Q |
---|---|---|---|---|---|---|---|---|
x3 |
1 2 |
-1 | 1 | 0 | 0 |
1 2 |
3 | — |
x2 |
1 2 |
3 | 0 | 1 | 0 | —
1 2 |
21 | 21 / 3 = 7 |
x5 | 4 | -3 | 0 | 0 | 1 | 2 | 42 | — |
Δ |
5 2 |
-6 | 0 | 0 | 0 |
9 2 |
159 |
Делим вторую строку на 3. Из первой и третьей строк вычитаем вторую, умноженную на соответствующий элемент во втором столбце.
Вычисляем новые дельты: Δi = C3·a1i + C2·a2i + C5·a3i — Ci
C | 9 | 5 | 4 | 3 | 2 | 0 | 0 | |
базис | x1 | x2 | x3 | x4 | x5 | x6 | b | Q |
---|---|---|---|---|---|---|---|---|
x3 |
2 3 |
0 | 1 |
1 3 |
0 |
1 3 |
10 | — |
x2 |
1 6 |
1 | 0 |
1 3 |
0 | —
1 6 |
7 | 7 |
x5 |
9 2 |
0 | 0 | 1 | 1 |
3 2 |
63 | — |
Δ |
7 2 |
0 | 0 | 2 | 0 |
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 содержит равенство. Базисная переменная для этого ограничения будет определена позднее.
Начальная симплекс-таблица
C | 3 | 2 | 3 | 0 | 0 | 0 |
базис | x1 | x2 | x3 | x4 | x5 | b |
---|---|---|---|---|---|---|
x4 | 2 | 1 | 1 | 1 | 0 | 2 |
?1 | 3 | 8 | 2 | 0 | -1 | 8 |
?2 | 2 | 0 | 1 | 0 | 0 | 1 |
Формирование начального базиса
Для того, чтобы сформировать начальный базис в первую очередь можно поискать столбец, у которого одно значение равно единице, а все значения остальные значения равны нулю, и сделать соответствующую переменную базисной для этой строки. Однако такое случается довольно редко, поэтому проще сразу перейти к следующему пункту. Для всех ограничений, не имеющих базисной переменной, добавляем искусственную переменную с коэффициентом 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 содержит равенство. Базисная переменная для этого ограничения будет определена позднее.
Начальная симплекс-таблица
C | 1 | -1 | 0 | 0 |
базис | x1 | x2 | x3 | b |
---|---|---|---|---|
?1 | 2 | 1 | 0 | 1 |
x3 | 1 | -3 | 1 | 3 |
?3 | 1 | 11 | 0 | 11 |
Для ограничения 1 добавляем искусственную переменную u1 и делаем её базисной.
Для ограничения 3 добавляем искусственную переменную u2 и делаем её базисной.
В целевую функцию добавляем искусственные пременные с коэффициентом M, где M — очень большое число.
Таблица с искусственными переменными
C | 1 | -1 | 0 | M | M | 0 |
базис | x1 | x2 | x3 | u1 | u2 | b |
---|---|---|---|---|---|---|
u1 | 2 | 1 | 0 | 1 | 0 | 1 |
x3 | 1 | -3 | 1 | 0 | 0 | 3 |
u2 | 1 | 11 | 0 | 0 | 1 | 11 |
Перепишем условие задачи с учётом добавленных искусственных переменных:
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
Таблица с искусственными переменными
C | 3 | 2 | 3 | 0 | 0 | 0 | M | M | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | u1 | u2 | b |
---|---|---|---|---|---|---|---|---|---|
x4 | 2 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2 |
u1 | 3 | 0 | 2 | 0 | -1 | 0 | 1 | 0 | 3 |
u2 | 0 | 0 | 1 | 0 | 0 | -1 | 0 | 1 | 1 |
Вычисляем дельты: Δ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
Симплекс-таблица с дельтами
C | 3 | 2 | 3 | 0 | 0 | 0 | M | M | 0 |
базис | x1 | x2 | x3 | x4 | x5 | x6 | u1 | u2 | b |
---|---|---|---|---|---|---|---|---|---|
x4 | 2 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2 |
u1 | 3 | 0 | 2 | 0 | -1 | 0 | 1 | 0 | 3 |
u2 | 0 | 0 | 1 | 0 | 0 | -1 | 0 | 1 | 1 |
Δ | -3 + 3M | -2 | -3 + 3M | 0 | -M | -M | 0 | 0 | 4M |
Текущий план 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 положительна.