Симплекс-метод решения ЗЛП

Допустим, имеется исходная ЗЛП в канонической форме:
F(X)=c1X1+c2X2+...+cnXn => max

a1,1X1+a1,2X2+...+a1,nXn=b1
a2,1X1+a2,2X2+...+a2,nXn=b2
.....................
am,1X1+am,2X2+...+am,nXn=bm

В общем случае m любых переменных можно выразить через оставшиеся (n-m) переменных, например - X1...Xm через Xm+1...Xn:

X1=B1-(A1,m+1Xm+A1,m+2Xm+2+...+A1,nXn)
...........................................................
Xm=Bm-(Am,m+1Xm+1+Am,m+2Xm+2+...+Am,nXn)

Здесь коэфициенты Вi и Аi,j выражаются через bi и ai,j.

Переменные X1... Xm называются базисными, а Xm+1...Xn- свободными.

Если положить Xm+1=...=Xn=0, то Xi=Bi и если при этом все Bi =0, то и Xi =0, и такой вектор:

X=(B1, B2,..., Bm, 0, 0,..., 0)

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


F=C0-(Cm+1Xm+1+...+ CnXn)

Здесь коэффициенты C0, Cm+1,..., Cn выражаются через сj, Bi, ai, j.

Начальная симплекс-таблица

Составим по этим данным так называемую начальную симплекс-таблицу.

Базис. Перем. Своб. Перем. X1 ....... Xi ....... Xm Xm+1 ....... Xk ....... Xn
X1 B1   .......   .......   A1,m+1 ....... A1,k ....... A1,n
X2 B2   .......   .......   A2,m+1 ....... A2,k ....... A2,n
..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....
Xi Bi   .......   .......   Ai,m+1 ....... Ai,k ....... Ai,n
..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....
Xm Bm   .......   .......   Am,m+1 ....... Am,k ....... Am,n
F(X) C0   .......   .......   Cm+1 ....... Ck ....... Cn


Замечание: В простейшем случае в качестве базисных переменных можно взять такие m переменных, каждая из которых входит только в одно ограничение, причем с положительным знаком, а все свободные члены bi>0.

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

  1. Определить число и состав базисных и свободных переменных.
  2. Выразить базисные переменные через свободные переменные.
  3. Выразить целевую функцию через свободные переменные.
  4. Построить начальную симплекс-таблицу.
  5. Проверить решение на оптимальность: если в F-строке (кроме С0) все Сj0, то получено оптимальное решение: X=(B1,...,Bm,0,...,0), F=C0. Если же существует Cj<0, то решение можно улучшить, но предварительно надо проверить факт существования решения.
  6. Проверить существование решения: рассмотрим все столбцы, у которых Сj<0, если существует хотя бы один столбец, у которого все коэффициенты Ai,j<0, то задача решения не имеет, т.к. множество допустимых решений D не ограничено и целевая функция неограниченно возрастает. Если таких столбцов нет, то переходим к следующему этапу.
  7. Выбрать свободную переменную, которую надо ввести в базис (выбор разрешающего столбца): это столбец, с минимальным значением Сj (пусть это k-й столбец)
  8. Выбрать базисную переменную, которую надо вывести из базиса (выбор разрешающей строки): рассмотрим k-й столбец и все его элементы, которые больше нуля, т.е. Ai,k>0; для всех этих элементов находим отношение Bi/Ai,k и выбираем строку, которая соответствует минимальному значению этого отношения (пусть это i-я строка); соответствующая i-я переменная Xi выводится из базиса; при нескольких одинаковых отношениях берем любую строку; элемент Ai,k называется разрешающим элементом.
  9. Пересчитать симплекс-таблицу: составляем новую симплекс-таблицу заменив в составе базисных переменных Xi на Xk; заполняем сначала новую k-ю строку, записывая в нее элементы старой i-ой строки, поделенные на разрешающий элемент; после заполнения k-ой строки заполняем оставшиеся строки; для этого k-ю строку умножаем последовательно на такие числа, чтобы после сложения ее с каждой строкой старой таблицы в k-ом столбце получить везде ноль (кроме единицы в k-ой строке).
  10. После заполнения новой симплекс-таблицы алгоритм возвращается к 5-му пункту.

Конец работы алгоритма:

  1. либо когда в F-строке все коэффициенты (кроме С0) будут больше нуля, тогда получаем оптимальное решение,
  2. либо когда существует столбец, у которого Cj<<0 и все коэффициенты Ai,j<<0, в этом случае решения на существует.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: