Допустим, имеется исходная ЗЛП в канонической форме:
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.
|
|
Алгоритм симплекс-метода:
- Определить число и состав базисных и свободных переменных.
- Выразить базисные переменные через свободные переменные.
- Выразить целевую функцию через свободные переменные.
- Построить начальную симплекс-таблицу.
- Проверить решение на оптимальность: если в F-строке (кроме С0) все Сj0, то получено оптимальное решение: X=(B1,...,Bm,0,...,0), F=C0. Если же существует Cj<0, то решение можно улучшить, но предварительно надо проверить факт существования решения.
- Проверить существование решения: рассмотрим все столбцы, у которых Сj<0, если существует хотя бы один столбец, у которого все коэффициенты Ai,j<0, то задача решения не имеет, т.к. множество допустимых решений D не ограничено и целевая функция неограниченно возрастает. Если таких столбцов нет, то переходим к следующему этапу.
- Выбрать свободную переменную, которую надо ввести в базис (выбор разрешающего столбца): это столбец, с минимальным значением Сj (пусть это k-й столбец)
- Выбрать базисную переменную, которую надо вывести из базиса (выбор разрешающей строки): рассмотрим k-й столбец и все его элементы, которые больше нуля, т.е. Ai,k>0; для всех этих элементов находим отношение Bi/Ai,k и выбираем строку, которая соответствует минимальному значению этого отношения (пусть это i-я строка); соответствующая i-я переменная Xi выводится из базиса; при нескольких одинаковых отношениях берем любую строку; элемент Ai,k называется разрешающим элементом.
- Пересчитать симплекс-таблицу: составляем новую симплекс-таблицу заменив в составе базисных переменных Xi на Xk; заполняем сначала новую k-ю строку, записывая в нее элементы старой i-ой строки, поделенные на разрешающий элемент; после заполнения k-ой строки заполняем оставшиеся строки; для этого k-ю строку умножаем последовательно на такие числа, чтобы после сложения ее с каждой строкой старой таблицы в k-ом столбце получить везде ноль (кроме единицы в k-ой строке).
- После заполнения новой симплекс-таблицы алгоритм возвращается к 5-му пункту.
Конец работы алгоритма:
|
|
- либо когда в F-строке все коэффициенты (кроме С0) будут больше нуля, тогда получаем оптимальное решение,
- либо когда существует столбец, у которого Cj<<0 и все коэффициенты Ai,j<<0, в этом случае решения на существует.