Как найти начальный базисный план

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

Симплексный метод
– это метод последовательного улучшения
плана. Этим методом можно решать задачи
линейного программирования с любым
количеством переменных и ограничений.

Этот метод включает
в себя три основные этапа:

  1. Построение
    начального опорного плана.

  2. Правило перехода
    к лучшему (точнее, нехудшему) решению.

  3. Критерий проверки
    найденного решения на оптимальность.

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

1) Построение начального опорного плана.

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

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

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

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

Пример.
Для данной задачи линейного программирования
найти начальный опорный план (базисное
решение).


max

Решение. Изменим
знаки второго и третьего неравенств на
противоположные, умножив каждое из них
на –1. Система ограничений теперь будет
такой:

В
каждом ограничении слева добавим
положительную переменную
,
соответственно запишем канонический
вид задачи:


max

.

Переменные
базисные. Приравниваем их к правым
частям ограничений:Все остальные переменные – свободные,
приравниваем их к нулю:

Запишем теперь
начальный опорный план

(0;
0; 0; 0; 16; 4; 0).

2) Составление симплексных таблиц. Критерий оптимальности.

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

Базис

В

Здесь приняты
следующие обозначения.

Столбец
«Базис» – это базисные переменные.

Столбец
«»
– это коэффициенты при базисных
переменных в целевой функции.

Столбец
«В» – правые части ограничений;

–коэффициенты
при переменных в ограничениях;

–коэффициенты
при переменных в целевой функции.

Последняя
строка в таблице ()
– это проверочная или оценочная строка.

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

.

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

Например,

.

Оценки
()
базисных переменных всегда равны нулю.

Признак
оптимальности опорного плана

состоит в следующем:

Опорный
план будет оптимальным тогда и только
тогда, когда все оценки

для задачи на max
и

для задачи на min.

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

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

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

На
пересечении разрешающего столбца и
разрешающей строки находится разрешающий
элемент
.

Теперь начинаем
заполнять следующую таблицу. Покажем
этот процесс на конкретном примере.

Пример.
Решить симплексным методом задачу
линейного программирования.


max

Решение.
1) Приводим задачу к каноническому виду,
т.е. из ограничений неравенств делаем
равенства.


max

2)
Определяем базисные переменные – это
.

3)
Заполняем первую таблицу

Базис

В

2

3

0

0

0

0

0

18

1

3

1

0

0

0

0

16

2

1

0

1

0

0

0

5

0

1

0

0

1

0

0

21

3

0

0

0

0

1

0

–2

–3

0

0

0

0

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

Находим
:;;

Наименьшее
из этих чисел – это число 5, что
соответствует строке базисной переменной
.
Значит, строка базисной переменной– разрешающая, следовательно, из базиса
нужно вывести переменную.
Элемент=1
– разрешающий. Новый базис:.

Заполнение
следующей таблицы начинаем со столбцов
«Базис» и «».
Потом заполняем разрешающую строку,
разделив каждый ее элемент на разрешающий,
т.е. на 1. Все элементы разрешающего
столбца будут нулями, кроме разрешающего,
который всегда равен 1. Столбцы подпереписываем без изменения, т. к. эти
переменные остались в базисе. Остальные
элементы новой таблицы находим по
правилу прямоугольника. Например,
элементнайдем из прямоугольника

=

Или
элемент
=из прямоугольника

Оценки
для новой таблицы можно находить по
этому же правилу.

Вцелом, решение данной задачи симплексным
методом в виде таблиц будет иметь вид

Базис

В

2

3

0

0

0

0

0

18

1

3

1

0

0

0

6

0

16

2

1

0

1

0

0

16

0

5

0

1

0

0

1

0

5

0

21

3

0

0

0

0

1

0

–2

–3

0

0

0

0

таб.
1

0

3

1

0

1

0

–3

0

3

0

11

2

0

0

1

–1

0

5,5

3

5

0

1

0

0

1

0

0

21

3

0

0

0

0

1

7

15

–2

0

0

0

3

0

таб.
2

Базис

В

2

3

0

0

0

0

2

3

1

0

1

0

–3

0

0

5

0

0

–2

1

5

0

1

3

5

0

1

0

0

1

0

5

0

12

0

0

–3

0

9

1

21

0

0

2

0

–3

0

таб.
3

2

6

1

0

–0,2

0,6

0

0

0

1

0

0

–0,4

0,2

1

0

3

4

0

1

0,4

–0,2

0

0

0

3

0

0

0,6

–1,8

0

1

24

0

0

0,8

0,6

0

0

таб.
4

Оценочная
строка четвертой таблицы показывает,
что получен оптимальный план, так как
все.

–это значения
из столбца В, т.е.,,,.

Свободные
(небазисные) переменные
.

Итак,
=
(6; 4; 0; 0; 1; 3),

=
=
24.

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

При использовании
симплексного метода возможны следующие
случаи.

1) Если
в оценочной строке симплекс-таблицы
оценка
=
0 соответствует свободной переменной,
то это означает, что ЗЛП имеет не
единственный оптимальный план.

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

Задания
для самостоятельной работы
.

Определить
оптимальный план задач, используя
симплексный метод решения задач линейного
программирования:

а)


max

б)


min

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

Количество переменных:

Количество ограничений:

Очистить

Решить

В двойственную

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

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

  • Задайте количество переменных и ограничений
  • Введите коэффициенты целевой функции
  • Введите коэффициенты ограничений и выберите условия (≤, = или ≥)
  • Выберите тип решения
  • Нажмите кнопку “Решить”

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

  • Решает основную задачу линейного программирования
  • Позволяет получить решение с помощью основного симплекс-метода и метода искусственного базиса
  • Работает с произвольным количеством переменных и ограничений

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

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

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

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

Целевая функция — функция, максимум (или минимум) которой нужно найти. Представляет собой сумму произведений коэффициентов на значения переменных: 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 положительна.


Задача линейного программирования

Линейное программирование — математическая дисциплина, посвящённая теории и методам решения экстремальных задач на множествах n -мерного векторного пространства, задаваемых системами линейных уравнений и неравенств. Линейное программирование (ЛП) является частным случаем выпуклого программирования, которое в свою очередь является частным случаем математического программирования.

Если что-то непонятно — вы всегда можете написать мне в WhatsApp и я вам помогу!

Линейное программирование

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

Возможно эта страница вам будет полезна:

Постановка задачи линейного программирования. Общая, нормальная и каноническая формы записи

Задача оптимизации, в которой требуется найти числа Задача линейного программирования, обращающие в максимум (минимум) линейную форму

Задача линейного программирования

при линейных ограничениях (типа равенств и неравенств)

Задача линейного программирования

называется общей задачей линейного программирования (ЛП). Здесь . Задача линейного программированияЗадача линейного программирования Задача линейного программирования — некоторые заданные конечные наборы индексов; Задача линейного программирования Задача линейного программирования — заданные числа.

Задача, в которой требуется найти максимум линейной формы (1.1) при условиях (1.2) и условиях

Задача линейного программирования

называется задачей линейного программирования в нормальной форме. В матричном виде задача в нормальной форме записи имеет вид

Задача линейного программирования

где Задача линейного программирования-векторы; Задача линейного программирования вектор; Задача линейного программирования (-матрица; символом Задача линейного программирования обозначено количество элементов множества Задача линейного программирования; символом % (штрих) обозначается операция транспонирования.

Задача, в которой максимизируется линейная форма (1.1) при условиях (1.3) и (1.4), называется задачей линейного программирования в канонической форме записи.

В матричном виде задача в канонической форме записывается следующим образом

Задача линейного программирования

где Задача линейного программирования — матрица и Задача линейного программирования — вектор.

В задачах (1.5), (1.6) ограничения Задача линейного программирования и Задача линейного программирования называются основными, ограничения вида Задача линейного программирования — прямыми. Линейная форма Задача линейного программирования называется целевой функцией. Столбцы Задача линейного программирования матрицы Задача линейного программирования называются векторами условий.

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

Задачу линейного программирования, заданную в любой форме, можно свести к задаче в канонической форме записи.

Покажем на простых примерах, как задачу, заданную в общей форме, можно свести к канонической.

Возможно эта страница вам будет полезна:

Задача №1

Привести к канонической форме записи задачу

Задача линейного программирования

Решение:

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

Задача линейного программирования

После этих преобразований исходная задача запишется в канонической форме

Задача линейного программирования

Задача №2

Привести к канонической форме задачу

Задача линейного программирования

Решение:

Умножим коэффициенты целевой функции (а) на (-1), в результате вместо задачи минимизации получим задачу максимизации:

Задача линейного программирования

Введем дополнительные неотрицательные переменные Задача линейного программирования и запишем ограничения (с) и (d) в виде

Задача линейного программирования

Исключим из задачи переменную Задача линейного программирования, на которую не наложено условие неотрицательности. Для этого из условия (Ь) выразим Задача линейного программирования:

Задача линейного программирования

Подставив (h) в (f), (g), получим каноническую форму задачи :

Задача линейного программирования

Отметим что задача максимизации функции (i) эквивалентна максимизации функции

Задача линейного программирования

Задача линейного программирования в нормальной форме записи (1.5) приводится к канонической форме путем добавления неотрицательных переменных Задача линейного программирования. В результате получим эквивалентную задачу в канонической форме

Задача линейного программирования

Здесь Задача линейного программирования — единичная Задача линейного программирования — матрица.

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

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

Возможно эта страница вам будет полезна:

Базисный план задачи линейного программирования

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

Исследуем задачу линейного программирования в канонической форме (1.6), считая для определенности, что

Задача линейного программирования

В дальнейшем, вплоть до подразд. 1.6, мы будем предполагать, что

Задача линейного программирования

Очевидно, что при нарушении условия (1.8) система Задача линейного программирования либо несовместна, либо содержит линейно зависимые условия, которые можно исключить из рассмотрения (см. подразд. 1.6).

План Задача линейного программирования задачи (1.6) назовем базисным планом, если существует такое подмножество Задача линейного программирования множества индексов Задача линейного программирования, что 1) Задача линейного программирования, 2) Задача линейного программирования — матрица Задача линейного программирования, построенная по правилу Задача линейного программированияЗадача линейного программирования, не вырождена.

Напомним, что Задача линейного программирования — это Задача линейного программирования-й столбец матрицы Задача линейного программирования.

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

Иногда базисный план удобно обозначать в виде пары Задача линейного программирования, состоящей из плана Задача линейного программирования и соответствующего ему базиса Задача линейного программирования.

Базисный план считается невырожденным, если

Задача линейного программирования

Отметим, что в общем случае плану Задача линейного программирования можно приписать несколько наборов базисных индексов

Задача линейного программирования

удовлетворяющих условиям 1) — 3). Базисному плану Задача линейного программирования соответствует единственный набор базисных индексов Задача линейного программирования, если имеют место неравенства (1.9), т.е. базисный план является невырожденным.

Легко проверить, что по заданному набору базисных индексов Задача линейного программирования базисный план Задача линейного программирования восстанавливается однозначно по правилу

Задача линейного программирования

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

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

а) задача (1.6) имеет базисные планы;

б) существует оптимальный базисный план.

Оказывается, оба условия, а и б, верны при минимальных предположениях.

Теорема (основная теорема ЛП). Если для задачи (1.6) существует план, то для нее существует и базисный план. Если задача (1.6) имеет оптимальные планы, то хотя бы один из них базисный.

Возможно эта страница вам будет полезна:

Исследование базисного плана на оптимальность

Пусть Задача линейного программирования — базисный план задачи (1.6) с базисом Задача линейного программирования и базисной матрицей Задача линейного программирования. Сформируем Задача линейного программирования-вектор Задача линейного программирования и подсчитаем Задача линейного программирования-вектор потенциалов Задача линейного программирования по правилу

Задача линейного программирования

Вычислим оценки

Задача линейного программирования

Отметим, что по построению

Задача линейного программирования

Для базисного плана Задача линейного программирования справедливы следующие утверждения.

Утверждение 1. (Признак оптимальности базисного плана.) Базисный план х является решением задачи (1.6), если

Задача линейного программирования

Утверждение 2. (Достаточное условие неограниченности сверху целевой функции.) Если существует индекс Задача линейного программирования, для которого Задача линейного программирования и все компоненты Задача линейного программирования, вектора

Задача линейного программирования

не положительны, то целевая функция задачи (1.6) не ограничена сверху на множестве планов.

Утверждение 3. (Возможность строгого улучшения плана.) Пусть Задача линейного программирования — невырожденный базисный план задачи (1.6) и для некоторого Задача линейного программирования справедливы соотношения

Задача линейного программирования

где вектор Задача линейного программирования определен по формуле (1.10). Тогда существует базисный план Задача линейного программирования, для которого Задача линейного программирования.

Компоненты нового базисного плана Задача линейного программирования и соответствующий ему базис Задача линейного программирования строятся по правилу

Задача линейного программирования

где

Задача линейного программирования

любой индекс из множества

Задача линейного программирования

Задача №3

Исследовать на оптимальность план Задача линейного программирования задачи

Задача линейного программирования

Решение:

В рассматриваемой задаче векторы условий Задача линейного программирования имеют вид

Задача линейного программирования

План Задача линейного программирования является невырожденным базисным планом с базисом Задача линейного программирования. Данному базису соответствует базисная матрица

Задача линейного программирования

Для проверки плана Задача линейного программирования на оптимальность подсчитаем вектор потенциалов Задача линейного программирования:

Задача линейного программирования

и оценки

Задача линейного программирования
Задача линейного программирования

Поскольку все оценки Задача линейного программирования то, согласно утверждению 1, план Задача линейного программирования является оптимальным.

Возможно эта страница вам будет полезна:

Симплекс-метод. Общая итерация

Пусть Задача линейного программирования — некоторый базисный план задачи (1.6) с базисом Задача линейного программирования. В результате исследования, основанного на утверждениях 1-3, выясняется либо 1) оптимальность плана Задача линейного программирования либо 2) неразрешимость задачи (1.6) в силу неограниченности сверху целевой функции на множестве планов, либо 3) возможность перехода к новому базисному плану Задача линейного программирования, для которого Задача линейного программирования.

Последовательный переход от одного базисного плана к «лучшему» базисному плану вплоть до получения оптимального плана составляет основную идею симплекс-метода.

Для реализации симплекс-метода кроме исходных данных задачи (1.6) (векторов Задача линейного программирования и матрицы Задача линейного программирования) на каждой итерации необходимо знать следующие параметры:

текущий базисный план Задача линейного программирования (достаточно знать только его базисные компоненты Задача линейного программирования );

соответствующее плану Задача линейного программирования множество базисных индексов Задача линейного программирования; Задача линейного программирования — матрицу Задача линейного программирования обратную к базисной матрице Задача линейного программирования.

Опишем общую итерацию симплекс-метода по шагам. Шаг 1. Вычислим вектор потенциалов Задача линейного программирования, где Задача линейного программирования, и оценки

Задача линейного программирования

Шаг 2. Если Задача линейного программирования то STOP: вектор Задача линейного программирования является оптимальным планом задачи (1.6). В противном случае переходим к шагу 3.

Шаг 3. Выберем индекс Задача линейного программирования, для которого Задача линейного программирования. Построим вектор Задача линейного программирования. Если Задача линейного программирования, то STOP: задача (1.6) не имеет решения в силу неограниченности сверху целевой функции на множестве планов. В противном случае перейдем к шагу 4.

Шаг 4. Найдем минимум

Задача линейного программирования

и выберем индекс Задача линейного программирования, для которого Задача линейного программирования.

Шаг 5. Построим новый базисный план Задача линейного программирования соответствующий ему базис Задача линейного программирования по правилам

Задача линейного программирования

Шаг 6. Вычислим матрицу Задача линейного программирования, обратную к новой базисной матрице Задача линейного программирования, по формуле Задача линейного программирования, где матрица Задача линейного программирования, отличается от единичной Задача линейного программирования -матрицы только Задача линейного программирования-м столбцом, который имеет вид

Задача линейного программирования

Задача линейного программирования — единичный Задача линейного программирования-вектор с единицей на Задача линейного программирования-м месте.

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

Замечания. 1. На шаге 3 выбирается индекс Задача линейного программирования, для которого Задача линейного программирования. В общем случае существует несколько индексов, удовлетворяющих этому условию. При численной реализации симплекс-метода для выбора Задача линейного программирования можно использовать дополнительные «уточняющие» правила, например, следующие:

Задача линейного программирования

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

Задача линейного программирования

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

Легко подсчитать, что приращение целевой функции при переходе от начального базисного плана Задача линейного программирования к новому базисному плану Задача линейного программирования равно:

Задача линейного программирования

По построению,

Задача линейного программирования

Следовательно, при Задача линейного программирования происходит «строгое улучшение» плана: Задача линейного программирования. Из описания шага 4 видно, что в случае невырожденности начального базисного планаЗадача линейного программирования всегда верно неравенство Задача линейного программирования.

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

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

Задача №4

Решить задачу ЛП симплекс-методом

Задача линейного программирования

Решение:

Для данной задачи Задача линейного программирования а векторы Задача линейного программирования и матрица Задача линейного программирования имеют вид Задача линейного программирования;

Задача линейного программирования

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

Задача линейного программирования

Используя

Очевидно, что

Задача линейного программирования

Используя

Задача линейного программирования

осуществим первую итерацию симплекс-метода. Шаг 1. Вычислим вектор потенциалов

Задача линейного программирования

и оценки

Задача линейного программирования
Задача линейного программирования

Шаг 2. Поскольку среди оценок Задача линейного программирования есть отрицательные, то переходим к шагу 3.

Шаг 3. Выберем в качестве индекса Задача линейного программирования, для которого Задача линейного программирования, индекс 2, т.е. Задача линейного программирования. Построим вектор

Задача линейного программирования
Задача линейного программирования

Поскольку среди компонент вектора Задача линейного программирования есть положительные, то перейдем к шагу 4. Шаг 4. Найдем минимум

Задача линейного программирования

Очевидно, что в данном примере в качестве индекса Задача линейного программирования, для которого Задача линейного программирования можно взять только индекс 1, т.е.

Задача линейного программирования

Шаг 5. Построим новый базисный план

Задача линейного программирования

и соответствующий ему базис Задача линейного программирования по правилам

Задача линейного программирования

Шаг 6. Построим матрицу

Задача линейного программирования

и найдем матрицу

Задача линейного программирования

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

Осуществим вторую итерацию.

Шаг 1. Вычислим вектор потенциалов

Задача линейного программирования

и оценки

Задача линейного программирования
Задача линейного программирования

Шаг 2. Поскольку все оценки Задача линейного программирования, неотрицательны, то алгоритм заканчивает свою работу: вектор Задача линейного программирования является оптимальным планом рассматриваемой задачи.

Возможно эта страница вам будет полезна:

Зацикливание. Конечные модификации симплекс- метода

Итерацию

Задача линейного программирования

симплекс-метода назовем невырожденной, если Задача линейного программирования.

Ясно, что итерация Задача линейного программирования может оказаться вырожденной только в том случае, если базисный план Задача линейного программирования вырожденный, причем в случае вырожденности итерации справедливы соотношения:

Задача линейного программирования

Теорема. При любом выборе начального базисного плана Задача линейного программирования симплекс-метод за конечное число итераций строит оптимальный базисный план задачи (1.6) либо обнаруживает неограниченность сверху ее целевой функции на множестве планов, если в процессе его реализации не встречаются вырожденные итерации.

При наличии вырожденных итераций при реализации симплекс-метода может возникнуть такая ситуация, когда начиная с некоторого вырожденного базисного плана Задача линейного программирования мы осуществляем последовательность вырожденных итераций

Задача линейного программирования

в которых меняются только базисы Задача линейного программирования базисного плана Задача линейного программирования, причем при некотором конечном Задача линейного программирования имеет место равенство Задача линейного программирования. Очевидно, что если мы продолжим операции симплекс-метода исходя из Задача линейного программирования, то опять получим ту же последовательность итерации (1.12) и т. д. Такое явление получило название зацикливания.

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

Задача линейного программирования

где Задача линейного программирования — некоторая невырожденная Задача линейного программирования — матрица со столбцами Задача линейного программирования — достаточно малое число.

Возмущения в векторе Задача линейного программирования вызовут возмущения в базисных компонентах Задача линейного программирования каждого базисного плана следующим образом:

Задача линейного программирования

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

Задача линейного программирования

Предположим, что на текущей итерации имеется базисный план Задача линейного программирования возмущенной задачи, для которого справедливы неравенства Задача линейного программирования при достаточно малых Задача линейного программирования. Согласно данным подразд. 1.4, новый базисный план Задача линейного программирования, построенный в результате одной итерации симплекс-метода из Задача линейного программирования, будет также невырожденным, если не существует таких двух базисных индексов Задача линейного программирования что Задача линейного программирования и

Задача линейного программирования

для всех достаточно малых Задача линейного программирования.

Последние соотношения могут иметь место только в том случае, если Задача линейного программирования-я и Задача линейного программирования-я строки матрицы Задача линейного программирования линейно зависимы. Однако это противоречит тому, что Задача линейного программирования. Значит, соотношения (1.14) не могут иметь места и, следовательно, новый базисный план Задача линейного программирования возмущенной задачи будет невырожденным при достаточно малых Задача линейного программирования.

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

Теорема. Существует такое Задача линейного программирования, что для любого Задача линейного программирования каждому базисному плану возмущенной задачи, порожденному базисом Задача линейного программирования, соответствует базисный план (невозмущенной) исходной задачи, порожденный тем же базисом Задача линейного программирования, а из оптимальности базиса Задача линейного программирования в возмущенной задаче следует его оптимальность в исходной задаче.

Покажем, как описанные выше результаты можно использовать для предотвращения зацикливания в исходной задаче (1.6).

Недостатком описанных выше рассуждений является то, что они верны только при достаточно малых Задача линейного программирования и заранее невозможно указать конкретное значение Задача линейного программирования. Однако существуют правила (лексико-графическая стратегия), которые позволяют «мысленно» осуществить процедуру решения возмущенной задачи без явного выбора значения параметра Задача линейного программирования.

Пусть в начале текущей итерации для исходной задачи есть базисный план Задача линейного программирования, базис Задача линейного программирования и соответствующая ему базисная матрица Задача линейного программирования. Очевидно, что при достаточно малых Задача линейного программирования базис Задача линейного программирования порождает базисный план Задача линейного программирования, где Задача линейного программирования имеет вид (1.13), возмущенной задачи. Предположим, что мы осуществляем итерацию симплекс-метода для исходной и возмущенной задач, исходя из базисных планов Задача линейного программирования и Задача линейного программирования.

Ясно, что для обеих задач шаги 1-3 итерации будут полностью совпадать. Значит, совпадут и индексы Задача линейного программирования, подлежащие вводу в базис. Перейдем к шагу 4, на котором определяется индекс Задача линейного программирования, подлежащий выводу из базиса Задача линейного программирования. Для возмущенной задачи индекс Задача линейного программирования однозначно определяется из соотношений

Задача линейного программирования

где Задача линейного программирования — достаточно малое число.

Легко проверить, что найти единственный индекс Задача линейного программирования определяемый условием (1.15), можно по следующему правилу.

Положим

Задача линейного программирования

и построим множества Задача линейного программирования, по рекуррентным правилам

Задача линейного программирования

где

Задача линейного программирования

По построение,

Задача линейного программирования

Обозначим через Задача линейного программирования наименьший индекс Задача линейного программирования, при котором Задача линейного программирования:

Задача линейного программирования

Пусть Задача линейного программирования. Тогда индекс Задача линейного программирования и совпадает с индексом, определяемым соотношениями (1.15).

Ясно, что для исходной задачи любой индекс вида Задача линейного программирования, где Задача линейного программирования можно взять в качестве индекса, выводимого из базиса. Согласно (1.18) Задача линейного программирования, следовательно, индекс Задача линейного программирования можно выводить из базиса в исходной задаче. Таким образом, в качестве нового базиса для исходной задачи можно взять базис

Задача линейного программирования

где индекс Задача линейного программирования однозначно определяется по правилам (1.16)-(1.19). (Для возмущенной задачи новый базис (1.20) является единственно возможным).

Из сказанного выше следует, что симплекс-метод будет конечным и для исходной задачи (1.6), если на шаге 4 индекс Задача линейного программирования, подлежащий выводу из базиса, определять по правилам (1.16), (1.17), (1.19).

  • Правило Блэнда. В 1977 г. Р. Блэнд предложил очень простое правило предотвращения зацикливания в симплекс- методе. Это правило сводится к следующему.

При реализации итерации симплекс-метода на шаге 3 индекс Задача линейного программирования, подлежащий вводу в новый базис, однозначно определяется по правилу

Задача линейного программирования

а на шаге 4 индекс Задача линейного программирования подлежащий выводу из базиса, однозначно определяется соотношениями

Задача линейного программирования

При использовании дополнительных правил (1.21), (1.22) симплекс-метод для любой задачи ЛП (с заданным начальным базисным планом) за конечное число итераций строит оптимальный базисный план либо обнаруживает неограниченность сверху целевой функции на множестве планов.

Первая фаза симплекс-метода

Все предыдущие утверждения и операции симплекс-метода были справедливы в предположении, что для задачи в канонической форме (1.6) выполнено условие (1.8).

Понятно, что для произвольной задачи (1.6) это условие может нарушаться. Поэтому, прежде чем применять описанный симплекс-метод необходимо исходную задачу (1.6) привести к такому виду, для которого выполняются соотношения (1.8).

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

Задача линейного программирования

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

На первой фазе формируется вспомогательная задача ЛП, которая отличается от исходной задачи (1.6). Вспомогательная задача строится таким образом, что для нее выполняется условие (1.8), легко строится начальный базисный план и она имеет решение. Анализ решения вспомогательной задачи позволяет:

1) определить, совместны ли ограничения исходной задачи (1.6);

2) проверить, выполняется ли условие (1.8) для исходной задачи (1.6) и в случае его нарушения обнаружить линейно зависимые основные ограничения и удалить их из условий задачи;

3) в случае совместности ограничений задачи (1.6) построить для нее начальный базисный план Задача линейного программирования и базис Задача линейного программирования.

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

Опишем подробнее первую фазу алгоритма. Без ограничения общности будем считать, что в задаче (1.6) вектор Задача линейного программирования удовлетворяет неравенству Задача линейного программирования.

Тогда задачу первой фазы можно записать в виде

Задача линейного программирования

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

Легко проверить, что вектор Задача линейного программирования с компонентами

Задача линейного программирования

является базисным планом задачи (1.23) с базисом

Задача линейного программирования

и базисной матрицей Задача линейного программирования.

Решим задачу (1.23) симплекс-методом, описанным в подразд. 1.4, используя в качестве начального базисный план (1.24). Поскольку целевая функция задачи (1.23) ограничена сверху на множестве ее планов Задача линейного программирования, то через конечное число итераций будет построен оптимальный базисный план Задача линейного программирования задачи (1.23) и соответствующий ему базис Задача линейного программирования. Справедлива следующая теорема

Теорема. Ограничения исходной задачи (1.6) совместны тогда и только тогда, когда компонента Задача линейного программирования оптимального базисного плана задачи (1.23) равна нулю.

Проведем анализ решения задачи (1.23). Возможны случаи:

Задача линейного программирования

Пусть реализовался случай 1. Прекращаем исследование исходной задачи (1.6), так как согласно теореме она не имеет планов.

Рассмотрим случай 2. Легко проверить, что вектор Задача линейного программирования с базисным множеством Задача линейного программирования является базисным планом задачи (1.6). Переходим ко второй фазе алгоритма, исходя из этого плана.

Исследуем случай 3. Ясно, что вектор Задача линейного программирования является планом задачи (1.6), но множество Задача линейного программирования не является его базисом для задачи (1.6). Попытаемся построить базис для плана в задаче (1.6).

Пусть

Задача линейного программирования

Обозначим

Задача линейного программирования

Возможны под случаи:

Задача линейного программирования

Если реализовался подслучай а, то оптимальному плану Задача линейного программирования задачи (1.23) припишем новый базис

Задача линейного программирования

Очевидно, что по построению,

Задача линейного программирования

Снова проверяем, какая из ситуаций, 2 или 3, имеет место для оптимального плана Задача линейного программирования задачи (1.23) и нового базиса (1.26).

Подслучай б означает, что в исходной задаче (1.6) основное ограничение с индексом Задача линейного программирования является линейно зависимым с остальными основными ограничениями этой задачи. Множество планов задачи (1.6) не изменится, если мы удалим это ограничение, т.е. заменим множество индексов Задача линейного программирования на Задача линейного программирования. Для преобразованной задачи (1.6) вспомогательная задача первой фазы получится из задачи (1.23) после удаления ограничения с индексом Задача линейного программирования и искусственной переменной Задача линейного программирования, т.е. заменой множеств Задача линейного программирования и Задача линейного программирования на

Задача линейного программирования

Очевидно, что для новой задачи первой фазы вектор

Задача линейного программирования

является оптимальным базисным планом с базисом

Задача линейного программирования

для которого

Задача линейного программирования

Для плана

Задача линейного программирования

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

2 или 3, имеет место.

Ясно, что не более чем через Задача линейного программирования шагов из основных ограничений задачи (1.6) будут исключены все линейно зависимые ограничения и она будет сведена к задаче

Задача линейного программирования

где

Задача линейного программирования

При этом для задачи (1.27) будет построен базисный план Задача линейного программирования с некоторым базисом

Задача линейного программирования

Дальнейшее решение задачи (1.27) осуществляем симплекс-методом, описанным в подразд. 1.4, используя в качестве начальных построений базисный план Задача линейного программирования с базисом Задача линейного программирования.

Возможно эта страница вам будет полезна:

Теория двойственности в линейном программировании

Определение двойственной задачи. Соотношения двойственности

Рассмотрим задачу линейного программирования, заданную в произвольной форме записи:

Задача линейного программирования
Задача линейного программирования

где Задача линейного программирования — некоторые конечные множества индексов. Задачу линейного программирования

Задача линейного программирования

назовем двойственной по отношению к задаче (2.1). При этом задача (2.1) считается прямой.

Из приведенного определения следует, что для задачи линейного программирования в нормальной форме

Задача линейного программирования

двойственной является задача

Задача линейного программирования

а для задачи в канонической форме

Задача линейного программирования

двойственная задача имеет вид

Задача линейного программирования

Легко проверить, что если в качестве исходной взять задачу линейного программирования (2.2), то двойственной к ней будет задача (2.1).

Сравнивая пары двойственных задач (2.1) и (2.2), приходим к следующему правилу построения двойственной задачи:

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

б) Задача линейного программирования, если Задача линейного программирования-е основное ограничение прямой задачи имело вид неравенства Задача линейного программирования.

Каждой Задача линейного программирования-й переменной Задача линейного программирования прямой задачи соответствует Задача линейного программирования-е основное ограничение двойственной задачи. При этом вид Задача линейного программирования-го основного ограничения двойственной задачи определяется условиями:

а) оно имеет вид равенства, если переменная Задача линейного программирования в прямой задаче не имеет ограничений на знак;

б) оно имеет вид неравенства Задача линейного программирования если в прямой задаче переменная Задача линейного программирования имела ограничение Задача линейного программирования на знак.

Рассмотрим общую задачу линейного программирования (2.1) и двойственную к ней задачу (2.2). Назовем эти задачи парой двойственных задач.

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

Задача линейного программирования

имеет место равенство

Задача линейного программирования

Следствие 1. Для разрешимости одной из задач двойственной пары необходимо и достаточно, чтобы каждая из задач этой пары имела хотя бы один план.

Следствие 2. Для того чтобы одна из задач двойственной пары имела планы, а множество планов другой задачи было пусто, необходимо и достаточно, чтобы целевая функция первой задачи была не ограничена на множестве ее планов.

Следствие 3. Для любых планов

Задача линейного программирования

задач двойственной пары справедливо неравенство

Задача линейного программирования

Следствие 4. Для оптимальности планов

Задача линейного программирования
Задача линейного программирования

задач двойственной пары необходимо и достаточно выполнение равенства

Задача линейного программирования

Задача №5

Записать задачу, двойственную к данной

Задача линейного программирования

Решение:

Чтобы записать задачу, двойственную к данной, приведем систему к виду (2.1)

Задача линейного программирования

Теперь воспользуемся определением (2.2) и запишем задачу, двойственную к данной

Задача линейного программирования

Базисный двойственный базисный план

Далее для определенности будем рассматривать пару двойственных задач (2.5), (2.6), в которой прямая задача имеет каноническую форму записи (2.5) с матрицей

Задача линейного программирования

Вектор Задача линейного программирования назовем двойственным планом, если Задача линейного программирования.

Двойственный план Задача линейного программирования называется базисным двойственным планом, если существует такое множество Задача линейного программирования что

Задача линейного программирования

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

Отметим, что двойственный базисный план однозначно восстанавливается по заданному базису:

Задача линейного программирования

Базисный двойственный план у считается невырожденным, если

Задача линейного программирования

Пусть Задача линейного программирования — базисный двойственный план с базисом Задача линейного программирования. Задача линейного программирования-вектор Задача линейного программирования с компонентами, построенными по правилу

Задача линейного программирования

назовем псевдопланом задачи (2.5), соответствующим базису Задача линейного программирования.

Утверждение 1. Если среди базисных компонент псевдоплана Задача линейного программирования нет отрицательных, т. е.

Задача линейного программирования

то псевдоплан Задача линейного программирования — оптимальный план

задачи (2.5). При этом базисный двойственный план Задача линейного программирования, определяющий псевдоплан Задача линейного программирования, является решением задачи (2.6).

Утверждение 2. Пусть среди базисных компонент Задача линейного программированияЗадача линейного программированияпсевдоплана Задача линейного программирования имеется отрицательная компонента Задача линейного программирования и выполняются неравенства

Задача линейного программирования

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

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

Новый базисный двойственный план Задача линейного программирования и соответствующий ему базис Задача линейного программирования строятся по плану

Задача линейного программирования

где

Задача линейного программирования

произвольный индекс из множества

Задача линейного программирования

единичный Задача линейного программирования-вектор с единицей на Задача линейного программирования-м месте.

Возможно эта страница вам будет полезна:

Двойственный симплекс-метод

Метод решения канонической задачи линейного программирования, рассмотренный в разд. 1, впредь будем называть прямым симплекс-методом.

Опишем двойственный симплекс-метод, который является специальным алгоритмом построения оптимального плана задачи линейного программирования (2.5) посредством преобразования планов двойственной задачи (2.6).

Для решения задачи (2.5) двойственным симплекс-методом, кроме исходных данных Задача линейного программирования на каждой итерации необходимо знать следующие параметры:

1) текущий базисный двойственный план Задача линейного программирования;

2) соответствующий двойственному плану Задача линейного программирования базис

Задача линейного программирования

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

Задача линейного программирования

Опишем общую итерацию двойственного симплекс-метода по шагам. Шаг 1. Найдем базисные компоненты псевдоплана Задача линейного программирования, соответствующего базису

Задача линейного программирования

Шаг 2. Если выполняются неравенства

Задача линейного программирования

то STOP: вектор

Задача линейного программирования

является оптимальным планом задачи (2.5), а вектор Задача линейного программирования — оптимальным планом задачи (2.6). В противном случае перейдем к шагу 3.

Шаг 3. Среди базисных индексов

Задача линейного программирования

выберем индекс Задача линейного программирования, для которого Задача линейного программирования. Подставим Задача линейного программирования-вектор Задача линейного программирования и числа Задача линейного программирования, по правилам

Задача линейного программирования

Если Задача линейного программирования, то STOP: ограничения исходной задачи (2.5) несовместны, а целевая функция двойственной задачи (2.6) не ограничена снизу на множестве ее планов. В противном случае перейдем к шагу 4. Шаг 4. Найдем минимум

Задача линейного программирования

и выберем в качестве индекса Задача линейного программирования любой элемент из множества

Задача линейного программирования

Шаг 5. Построим новый базисный двойственный план Задача линейного программирования и соответствующий ему базис Задача линейного программирования по правилам

Задача линейного программирования

Шаг 6. Вычислим матрицу Задача линейного программирования, обратную к новой базисной матрице

Задача линейного программирования

по правилам, описанным на шаге 6 итерации прямого симплекс-метода (см. подразд. 1.4).

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

Замечания. 1. На шаге 3 выбор индекса Задача линейного программирования и на шаге 4 выбор индекса Задача линейного программирования могут оказаться неоднозначным. Как и в прямом симплекс-методе, это может привести к зацикливанию алгоритма. Для предотвращения зацикливания рекомендуется использовать дополнительные правила, аналогичные приведенным в подразд. 1.6. Например, правило Блэнда для двойственного симплекс-метода сводится к следующему: на шаге 3 индекс Задача линейного программирования однозначно определяется условием

Задача линейного программирования

а на шаге 4 индекс Задача линейного программирования однозначно определяется соотношением

Задача линейного программирования

Легко проверить, что если базисный двойственный план Задача линейного программирования является невырожденным, то для нового базисного плана Задача линейного программирования справедливо неравенство Задача линейного программирования. (В общем случае верно неравенство Задача линейного программирования).

Проблема построения начального базисного двойственного плана Задача линейного программирования является нетривиальной. Для ее решения по аналогии с разделом 1 можно разработать двухфазный двойственный симплекс-метод.

Задача №6

Решить задачу ЛП двойственным симплекс-методом

Задача линейного программирования

приняв в качестве начального базисного двойственного плана вектор

Задача линейного программирования

и базисное множество Задача линейного программирования.

Решение:

Базису Задача линейного программирования соответствует базисная матрица

Задача линейного программирования

Построим матрицу

Задача линейного программирования

Используя

Задача линейного программирования

и осуществим первую итерацию.

Шаг 1. Найдем базисные компоненты псевдоплана Задача линейного программирования, соответствующего базису Задача линейного программирования:

Задача линейного программирования

Шаг 2. Условие

Задача линейного программирования

не выполняется, следовательно, переходим к шагу 3.

Шаг 3. В качестве индекса

Задача линейного программирования

для которого Задача линейного программирования, выберем индекс Задача линейного программирования. Подсчитаем вектор Задача линейного программирования и числа Задача линейного программирования, Задача линейного программирования:

Задача линейного программирования

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

Шаг 4. Найдем минимум

Задача линейного программирования

В данном примере в качестве индекса Задача линейного программирования можно выбрать только индекс Задача линейного программирования.

Шаг 5. Построим новый базисный двойственный план Задача линейного программирования и соответствующий ему базис Задача линейного программирования по правилам

Задача линейного программирования

Шаг 6. По правилам, описанным на шаге 6 прямого симплекс-метода, вычислим матрицу

Задача линейного программирования

обратную к новой базисной матрице

Задача линейного программирования

Переходим ко второй итерации, исходя из новых значений для базисного двойственного плана Задача линейного программирования, базиса

Задача линейного программирования

и матрицы Задача линейного программирования.

Осуществим вторую итерацию.

Шаг 1. Найдем базисные компоненты псевдоплана Задача линейного программирования, соответствующего базису Задача линейного программирования:

Задача линейного программирования

Шаг 2. Поскольку среди компонент

Задача линейного программирования

есть отрицательные, то переходим к шагу 3.

Шаг 3. На данной итерации в качестве индекса Задача линейного программирования, для которого Задача линейного программирования, можно выбрать только индекс Задача линейного программирования. Найдем

Задача линейного программирования

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

Шаг 4. Найдем

Задача линейного программирования

В качестве индекса Задача линейного программирования можно выбрать только индекс Задача линейного программирования.

Шаг 5. Построим новый базисный двойственный план Задача линейного программирования и соответствующий ему базис Задача линейного программирования:

Шаг 6. Вычислим матрицу

Задача линейного программирования

обратную к новой базисной

Задача линейного программирования

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

Шаг 1. Найдем базисные компоненты псевдоплана Задача линейного программирования, соответствующего базису Задача линейного программирования:

Задача линейного программирования

Шаг 2. Все компоненты Задача линейного программирования положительны, следовательно, вектор

Задача линейного программирования

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

Возможно эти страницы вам будут полезны:

  • Графическое решение задач линейного программирования
  • Графический метод решения задач линейного программирования
  • Заказать работу по линейному программированию
  • Помощь по линейному программированию
  • Контрольная работа по линейному программированию
  • Линейное программирование в Excel
  • Курсовая работа по линейному программированию

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

Формальное описание алгоритма. Элементы матрицы нумеруют, начиная от минимального в порядке возрастания, а затем в этом же порядке заполняют матрицу Х0.

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

Дале этот процесс повторяют с незаполненной частью матрицы Х1.

Пример 1. Найти начальный базисный план методом минимального элемента для Табл. 3. следующей задачи.

Таблица. 3.

Ai Bj

1

2

3

4

Bj / ai

1

7(10)

8(11)

5(7)

3(5)

11

2

2(3)

4(4)

5(8)

9(12)

11

3

6(9)

3(4)

1(1)

2(2)

8

Ai / bj

5

9

9

7

bj ai

Цифры в скобках указывают порядок заполнения элементов в матрице Х0 (табл. 3.4).

Соответствующее значение целевой функции равно

3*8 + 1*5 + 3*7 + 5*2 + 6*4 + 8*1 = 92

Таблица 4

Х0

0

3

1

7

11

4

3

0

5

6

0

0

11

6

0

0

0

8

0

8

0

5

9

9

7

0

3

1

0

0

0

Решение транспортной задачи при вырожденном опорном плане

Опорный план называется вырожденным, если число его ненулевых перевозок k меньше ранга матрицы ограничений. В процессе построения начального плана или при его улучшении очередной план может оказаться вырожденным.

Рассмотрим два случая.

1. Вырожденный план является начальным Х0. Тогда выбирают некоторые нулевые элементы матрицы Х0 в качестве базисных так, чтобы при этом не нарушалось условие базисного плана. Число этих элементов равняется . Далее данные элементы заменяют на (где – произвольное, бесконечно малое число) и рассматривают их как обычные базисные элементы плана. Задачу решают как невырожденную, а в последнем оптимальном плане Хk вместо пишут нули.

2. Вырожденный план получается при построении плана Хk+1 на базе Хk, если цепочка в плане Хk содержит не менее двух минимальных нечетных элементов. В таком случае в матрице Хk+1 полагают равным нулю только один из этих элементов, а остальные заменяют на , и далее решают задачу как невырожденную. Если на k-м шаге , то при переходе от Хk к Хk+1 значение целевой функции не изменяется, а в базис вводится элемент , для которого перевозка станет равной .

Пример 2. Решим Т-задачу со следующими условиями (см. Табл.6)

Проверим условие баланса

Предварительный этап. Методом минимального элемента строим начальный базисный план Х0 (Табл. 5)

Таблица 5

C =

ai bj

4

6

8

6

6

2(5)

2(4)

3(6)

4(11)

8

6(12)

4(10)

3(9)

1(3)

10

1(1)

2(6)

2(7)

1(2)

Так как m + n – 1 = 6; k = 4, то план х0 – вырожденный; l = m+ n -1 – k = 2.

Два нулевых элемента Х0 делаем базисными так, чтобы не нарушить условие опорности. Выберем в качестве базисных элементов , и положим их равными ?.

Схема перевозок для плана Х0 показана на рис. 6.

Рис. 6.

Для вычисления предварительных потенциалов выберем начальный пункт А1 и допустим, что . Потенциалы всех остальных пунктов вычисляем по формулам

,

Для проверки оптимальности плана х0 строим матрицу С1, элементы которой вычисляем по соотношению

Так как в матрице С1 элемент С23 = – 3 < 0, то план Х0 – неоптимальный.

Первая итерация. Второй этап.

?*

6*

0

0

?

6

0

0

X0 =

0*

?*

8

0+

X1 =

0

0

6

?

4

0

0

6*

?1 = ?

4

0

0

6

В результате построения Х1 в базис вводим. План Х1 является вырожденным (в цепочке есть два минимальных элемента). Поэтому один из этих элементов, например , в плане Х1 заменяем на ?.

Вторая итерация. Первый этап

0

2

2

0

0

-1

2

С1 =

2

0

-3

+3

С2 =

5

3

0

0

0

1

2

0

0

1

-1

0

-3

Второй этап.

?

6

0

0

?

6

0

0

X1 =

0

0

8*

?*

X2 =

0

0

2

6

4

0

0+

6*

?3 =min {8, 6}= 6

4

0

6

0

Третья итерация. Первый этап.

-1

2

+1

0

0

0

3

С2 =

5

3

С2 =

4

2

0

0

1

-1

0

+1

0

1

0

1

-1

-1

Так как в матрице С3 нет отрицательных элементов, план Х2 – оптимальный.

Подробный разбор симплекс-метода +31

Из песочницы, Математика


Рекомендация: подборка платных и бесплатных курсов Java – https://katalog-kursov.ru/

Пролог

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

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

§1. Постановка задачи линейного программирования

Определение:

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

Общая задача линейного программирования (далее – ЛП) имеет вид:

image

§2. Каноническая форма задачи ЛП

Каноническая форма задачи ЛП:

image

Замечание:

Любая задача ЛП сводится к канонической.

Алгоритм перехода от произвольной задачи ЛП к канонической форме:

  1. Неравенства с отрицательными $inline$b_i$inline$ умножаем на (-1).
  2. Если неравенство вида (?), то к левой части добавляем $inline$s_i$inline$ – добавочную переменную, и получаем равенство.
  3. Если неравенство вида (?), то из левой части вычитаем $inline$s_i$inline$, и получаем равенство.
  4. Делаем замену переменных:

  • Если $inline$x_i ? 0$inline$, то $inline$x_i’= -x_i ? 0$inline$
  • Если $inline$x_i$inline$ — любой, то $inline$x_i= x_i’ – x_i”$inline$, где $inline$x_i’, x_i”? 0$inline$

Замечание:

Будем нумеровать

$inline$s_i$inline$

по номеру неравенства, в которое мы его добавили.

Замечание: $inline$s_i$inline$

?0.

§3. Угловые точки. Базисные/свободные переменные. Базисные решения

Определение:

Точка

$inline$Х ? D$inline$

называется угловой точкой, если представление

$inline$ Х= ?Х^1+ (1-?) Х^2,где Х^1,Х^2 ?D;0< ?<1 $inline$

возможно только при

$inline$Х^1=Х^2 $inline$

.

Иными словами, невозможно найти две точки в области, интервал проходящий через которые содержит

$inline$Х$inline$

(т.е.

$inline$Х$inline$

– не внутренняя точка).

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

Определение:

Пусть есть система m уравнений и n неизвестных (m < n). Разделим переменные на два множества: (n-m) переменные положим равными нулю, а остальные m переменных определяются решением системы исходных уравнений. Если это решение единственно, то тогда ненулевые m переменных называют базисными; нулевые (n-m) переменных – свободными (небазисными), а соответствующие результирующие значения переменных называют базисным решением.

§4. Симплекс-метод

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

Необходимые условия для применения симплекс-метода:

  1. Задача должна иметь каноническую форму.
  2. У задачи должен быть явно выделенный базис.

Определение:

Явно выделенным базисом будем называть вектора вида:

$inline$(..0100..)^T, (..010..)^T,(..0010..)^T…$inline$

, т.е. только одна координата вектора ненулевая и равна 1.

Замечание:

Базисный вектор имеет размерность (m*1), где m – количество уравнений в системе ограничений.

Для удобства вычислений и наглядности обычно пользуются симплекс-таблицами:

image

  • В первой строке указывают «наименование» всех переменных.
  • В первом столбце указывают номера базисных переменных, а в последней ячейке – букву Z (это строка функционала).
  • В «середине таблицы» указывают коэффициенты матрицы ограничений — aij.
  • Последний столбец – вектор правых частей соответствующих уравнений системы ограничений.
  • Крайняя правая ячейка – значение целевой функции. На первой итерации ее полагают равной 0.

Замечание:

Базис – переменные, коэффициенты в матрице ограничений при которых образуют базисные вектора.

Замечание:

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

Замечание:

Коэффициенты в строке функционала берутся со знаком “-”.

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

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

  • Если задача на минимум – выбираем максимальный положительный элемент в последней строке.
  • Если задача на максимум – выбираем минимальный отрицательный.

Такой выбор, действительно, соответствует упомянутому выше принципу: если задача на минимум, то чем большее число вычитаем – тем быстрее убывает функционал; для максимума наоборот – чем большее число добавляем, тем быстрее функционал растет.

Замечание:

Хотя мы и берем минимальное отрицательное число в задаче на максимум, этот коэффициент показывает направление роста функционала, т.к. строка функционала в симплекс-таблице взята со знаком “-”. Аналогичная ситуация с минимизацией.

Определение:

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

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

  • Вектор правых частей почленно делится на ведущий столбец
  • Среди полученных значений выбирают минимальное положительное (отрицательные и нулевые ответы не рассматривают)

Определение:

Такая строка называется ведущей строкой и отвечает переменной, которую нужно вывести из базиса.

Замечание:

Фактически, мы выражаем старые базисные переменные из каждого уравнения системы ограничений через остальные переменные и смотрим, в каком уравнении возрастание новой базисной переменной быстрее всего даст 0. Попадание в такую ситуацию означает, что мы «наткнулись» на новую вершину. Именно поэтому нулевые и отрицательные элементы не рассматриваются, т.к. получение такого результата означает, что выбор такой новой базисной переменной будет уводить нас из области, вне которой решений не существует.

3. Ищем элемент, стоящий на пересечении ведущих строки и столбца.

Определение:

Такой элемент называется ведущим элементом.

4. Вместо исключаемой переменной в первом столбце (с названиями базисных переменных) записываем название переменной, которую мы вводим в базис.

5. Далее начинается процесс вычисления нового базисного решения. Он происходит с помощью метода Жордана-Гаусса.

  • Новая Ведущая строка = Старая ведущая строка / Ведущий элемент
  • Новая строка = Новая строка – Коэффициент строки в ведущем столбце * Новая Ведущая строка

Замечание:

Преобразование такого вида направлено на введение выбранной переменной в базис, т.е. представление ведущего столбца в виде базисного вектора.

6. После этого проверяем условие оптимальности. Если полученное решение неоптимально – повторяем весь процесс снова.

§5. Интерпретация результата работы симплекс-метода

1. Оптимальность

Условие оптимальности полученного решения:

  • Если задача на максимум – в строке функционала нет отрицательных коэффициентов (т.е. при любом изменении переменных значение итогового функционала расти не будет).
  • Если задача на минимум – в строке функционала нет положительных коэффициентов (т.е. при любом изменении переменных значение итогового функционала уменьшаться не будет).

2. Неограниченность функционала

Однако, стоит отметить, что заданный функционал может не и достигать максимума/минимума в заданной области. Алгебраический признак этого можно сформулировать следующим образом:

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

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

3. Альтернативные решения

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

Алгебраический признак существования альтернативы:

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

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

Эпилог

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

Чуть позже напишу статью о практической реализации симплекс-метода, а также несколько статей о Методе искусственных переменных (М-Метод), Методе Гомори и Методе ветвей и границ.

Спасибо за внимание!

P.S.

Если уже сейчас Вы мучаетесь с реализацией симплекс-метода, советую почитать книгу А. Таха Введение в исследование операций — там все неплохо разобрано и в теории, и на примерах; а также посмотрите примеры решения задач matburo.ru — это поможет с реализацией в коде.

Добавить комментарий