
- •3 Симплекс-метод решения задачи линейного программирования
- •3.1 Векторная запись задачи линейного программирования. Опорный план
- •3.2 Сущность симплекс-метода
- •3.2.1 Пример решения задачи линейного программирования симплекс-методом
- •3.2.2 Решение задачи в общем виде. Симплексная таблица
- •3.3 Решение задачи производственного планирования симплекс-методом
- •3.4 Вопросы и упражнения
3.2.2 Решение задачи в общем виде. Симплексная таблица
Вернемся к решению
задачи в общем виде из раздела 3.2, начиная
с исходного опорного плана Х = (b1,
b2, . . . bm,).
Обозначим z целевую функцию задачи. На
исходном плане значение целевой функции
,
так как слагаемые, соответствующие
небазисным переменным, обратятся в 0.
Для применения
симплекс-метода к системе необходимо
приписать еще одно ограничение -
критериальное: z -= 0.
В решенном примере это было четвертое ограничение. Поскольку в этом примере базисные переменные исходного опорного плана (х5-7) не входили в целевую функцию, то и в критериальное ограничение они не вошли. В общем случае это не так. Например, если бы задача имела вид:
max-5х1+ 2х3
-2,5х1– 0,5х2+ х3+ 0,5х5 = 1
1,5х1+ 0,5х2+ х4 - 0,5х5 + х6= 4
-3х1+ 5х4 + х7= 7
х1-70
то в качестве
базисных в исходном опорном плане
следовало бы взять переменные х3,
х6и х7. Одна из них - х3- входит в целевую функцию. Уравнение z
-= 0 здесь приняло бы вид:z+ 5х1- 2х3= 0. Чтобы увеличитьz, здесь следовало бы
увеличить х3. Но переменная х3и так является базисной, уже равна 1, и
из ограничений следует, что увеличить
ее до большего значения невозможно.
Такое затруднение возникло из-за того,
что после добавления критериального
ограничения столбцы коэффициентов
перестали быть единичными. Базисные
переменные должны входить в него с
нулевыми коэффициентами, а в последней
задаче это не так.
Чтобы избежать
этого, выразим базисную переменную х3
из первого ограничения через
небазисные (-2,5х1– 0,5х2+ х3+ 0,5х5= 1х3= 1 +
+ 2,5х1+ 0,5х2- 0,5х5)
и подставим в целевую функцию: z = -5х1+ 2х3= -5х1+
+ 2*(1 + 2,5х1+ 0,5х2- 0,5х5) = 2 + х2- х5.
Теперь уравнение z -= 0 примет вид:z+ х2- х5= 2, т.е. вид уравнения (4`) из
системы (16). Рекомендуется сравнить
остальные ограничения последней задачи
с уравнениями (16): они в точности совпадают;
и целевая функция взята из того же
примера.
Итак, в общем случае после введения критериального ограничения столбцы при базисных переменных могут перестать быть единичными. Чтобы избежать этого, выразим базисные переменные x1-mиз ограничений через небазисные:
x1 = b1 - a1 m+1xm+1 - . . . -a1 nxn
…
x i = b i - a i m+ 1xm+ 1 - . . . -a i nxn
…
xm = bm - am m+1xm+1 - . . . -am nxn
и подставим их в
целевую функцию: z==c1(b1-
-a1 m+1xm+1- . . . -a1 nxn)
+ . . . +cm(bm-am
m+1xm+1- . . . -am
nxn)
+cm+1x
m+1+ . . . +
+
cnxn.
После приведения
подобных членов и переноса свободного
члена в правую часть критериальное
ограничение примет следующий вид: z+xm+1(c1a1
m+1+ . . .+
cmam
m+1 - c
m+1) + . . . + xn(c1a1
n+ . . . + cmam
n - cn)
= c1b1
+
+ . . . +cmbm;
илиxm+1(-cm+1)
+ … +xn(
-cn)
=
.
Обозначим
коэффициенты при переменных xjв критериальном ограничении -j
= -cj;
а свободный член этого ограничения -d=
.
Отметим, что
коэффициенты при базисных переменных
в критериальном ограничении будут
нулевыми, что и требовалось получить.
Но и эти нулевые коэффициенты также
можно рассчитать по формулам (-cj):
поскольку базисные переменные входят
лишь в одно ограничение, в этих формулах
только одно слагаемое в сумме слева
будет ненулевым. Для базисных переменных
.
Таким образом, критериальное ограничение примет вид:
z+= d
Теперь исходные данные задачи линейного программирования можно записать в виде симплексной таблицы(таблица 7).
Каждая строка таблицы соответствует одному ограничению задачи линейного программирования ((m+1)-я строка - критериальному ограничению).
Левая часть таблицы (первые три столбца) является вспомогательной - в ней в первом столбце указывается номер строки, во втором (xб) - базисная переменная, соответствующая каждой строке (та, которая входит в это ограничение с коэффициентом 1), в третьем (сб) - коэффициент целевой функции при соответствующей базисной переменной.
В правой части таблицы в столбце В указаны свободные члены системы ограничений (в (m+1)-ой строке - значение целевой функции на опорном плане d), а все остальные столбцы соответствуют переменным задачи линейного программирования, и в них указаны коэффициенты при этих переменных в каждом ограничении.
Над обозначениями переменных в верхней части таблицы рекомендуется указывать соответствующие коэффициенты целевой функции.
Таблица 7 – Симплексная таблица
|
|
|
|
c1 |
. . . |
cj |
. . . |
cn |
№ |
xб |
cб |
В |
х1 |
. . . |
хj |
. . . |
хn |
1 |
. . . |
. . . |
b1 |
a 11 |
. . . |
a 1j |
. . . |
a1n |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
i |
. . . |
. . . |
bi |
a i1 |
. . . |
aij |
|
ain |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
. . . |
m |
. . . |
. . . |
bm |
a m1 |
. . . |
a mj |
. . . |
amn |
m+1 |
|
|
d |
1 |
. . . |
j |
. . . |
n |
Идея дальнейшего решения заключается в том, чтобы в критериальном ограничении увеличивать первое слагаемое (z) за счет уменьшения суммы остальных (свободный член - постоянная величина). При этом в той сумме, которую необходимо уменьшить, отличные от нуля коэффициенты стоят только при небазисных переменных (так как базисным соответствуют единичные столбцы). Небазисные переменные равны нулю, их значения можно только увеличивать. При этом увеличиваться должны значения тех небазисных переменных, при которых стоят отрицательные коэффициенты j(чтобы сумма уменьшалась). Однако увеличение этих переменных ограничивается другими уравнениями системы.
Лемма 1 (критерий оптимальностиплана). Если всеj0, то текущий опорный план - оптимальный.
Доказательство
следует из того, что небазисные
переменные равны нулю. Их можно только
увеличивать, при этом, так какj0, то целевая функция
уменьшается, так как в уравненим (z+= d) значениеd- const.
Рассмотрим исходную симплексную таблицу для решенного выше примера (таблица 8). Поскольку для расчетов предполагается использовать средства электронной таблицы MicrosoftExcel, слева и сверху от таблицы 8 указаны номера строк и столбцов электронной таблицы.
В диапазон ячеек D1:К5 введены исходные данные примера. Исходя из них, заполнена вспомогательная часть таблицы в А2:С5. ВD6 введена формула =-D1, которая затем скопирована по строке до К6 (таким образом введены свободный член и коэффициенты критериального ограничения).
Таблица 8 – Исходная симплексная таблица
|
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
1 |
|
|
|
|
-5 |
0 |
2 |
0 |
0 |
0 |
0 |
2 |
N |
xб |
cб |
B |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
3 |
1 |
x5 |
0 |
2 |
-5 |
-1 |
2 |
0 |
1 |
0 |
0 |
4 |
2 |
x6 |
0 |
5 |
-1 |
0 |
1 |
1 |
0 |
1 |
0 |
5 |
3 |
x7 |
0 |
7 |
-3 |
0 |
0 |
5 |
0 |
0 |
1 |
6 |
m+1 |
|
|
0 |
5 |
0 |
-2 |
0 |
0 |
0 |
0 |
Таким образом, в таблице 8 записана система (15).
Итак, если все j0, то задача решена (это критерий оптимальности для задачи на максимум). Если это не так, необходимо перейти к другому опорному плану. Для этого выберем столбец таблицы, в котором нарушен критерий оптимальности, т.е. некоторыйk-й столбец, такой, чтоk< 0. Этот столбец называют разрешающим (очевидно, он не базисный, так как иначе было быk= 0). Преобразуем симплексную таблицу таким образом, чтобы переменная хквошла в базис (т.е. в набор базисных переменных), а некоторая другая переменная из него вышла.
В этом примере среди коэффициентов jесть отрицательный:3= -2 < 0 (k= 3). Поэтому при преобразовании системы (15) в систему (16) в базис входила переменная x3. Далее в разделе 3.2.1 мы определяли, какую переменную следует вывести из базиса, и для этого подсчитывали отношения 2/2 и 5/1.
Для выбора переменной, которая должна выйти из базиса, для всех положительных элементов k-го столбца подсчитывают отношения bi/aiки выбирают из них наименьшее. Соответствующую строку (пусть это будет t-ая строка) также называют разрешающей, а коэффициент аtk- разрешающим элементом.
В таблице 8 положительные aiк= ai3находятся в первой и второй строках. Наименьшее из отношений bi/aiксоответствует первой строке:min{b1/a13; b2/a23} = {2/2; 5/1} = {1; 5} = 1. Таким образом, разрешающая строка - первая, т.е. t = 1. Разрешающий элемент аtk= а13= 2. В таблице 8 он выделен заливкой. При преобразовании системы (15) в систему (16) из базиса выходила переменная x5, которая соответствует первой строке.
Левая (вспомогательная) часть новой таблицы будет отличаться только содержанием t-й строки столбцов хби сб: вместо хtи сt там будет стоять соответственно хки ск, так как переменная хtиз базиса выйдет, а хквойдет.
Правая часть таблицы подвергнется преобразованию методом Гаусса. Цель преобразования - получить единичный столбец при переменной хк, причем единица должна будет стоять на месте разрешающего элемента, т.е. в t-ой строке. Общие формулы для таких преобразований выглядят следующим образом (со штрихом обозначены элементы новой таблицы):
аtj`= аtj/ аtk;
bt`= bt / аtk– вся разрешающая строка делится на разрешающий элемент, при этом на его месте получают 1;
аij`= аij - аtj`* аik= аij - аtj * аik/ аtk;
bi`= bi - bt`* аik= bi - bt * аik/ аtk– из всех остальных строк вычитают преобразованную разрешающую строку, умноженную на элемент, стоящий в преобразуемой строке в разрешающем столбце (при этом на его месте получают 0, так как из него вычитают его же, умножив на 1);
j`=j - аtj`*k=j- аtj *k/ аtk ;
d`= d - bt`*k= d - bt *k/ аtk– то же самое делают с критериальной строкой.
Докажем, что при применении этих формул мы действительно сможем построить новый план по тому же правилу (приравняв базисные переменные к свободным членам). Для этого нужно, чтобы новые свободные члены оказались неотрицательными, иначе такой план не будет допустимым.
Лемма 2 (окритерии допустимоститаблицы).При преобразовании таблицы она сохраняет допустимость, т.е. bi`0,i.
Доказательство.
Свободные члены вычисляются по формуле bi`= bi - bt * аik/ аtk.
Здесь bi, bt0 (т.к. предыдущая таблица – допустимая); аtk> 0 (по способу выбора разрешающего элемента).
Если аik 0 , то bi`0 (к неотрицательному числу прибавляют неотрицательное).
Если аik> 0, то разделим обе части неравенства bi - bt * аik/ аtk0 на аik. Получим: bi - bt * аik/ аtk0bi / аik- bt/ аtk 0 bi / аikbt/ аtk
Последнее неравенство истинно по способу выбора разрешающего элемента. Следовательно, будет истинно и первое из этих трех неравенств, т.е. bi`0.
Лемма доказана.
Таким образом, при правильном выборе разрешающего элемента преобразованной системе уравнений по-прежнему можно поставить в соответствие опорный план так же, как это делалось для исходной таблицы.
Лемма 3 (об изменении значения целевой функции).При переходе к следующему опорному плану значение целевой функции не убывает: d`d.
Доказательство. Новое значение целевой функции вычисляется по формуле d`= d - bt *k/ аtk. Здесь аtk> 0,k< 0, bt0.
Если bt > 0, то d`> d.
Есди bt = 0, то d`= d.
Лемма доказана.
Лемма 4 (о неограниченности целевой функции). Если в разрешающем столбце нет возможности выбрать разрешающий элемент (нет положительных элементов, все аik0), то целевая функция задачи линейного программирования не ограничена.
Доказательство.Пустьk< 0, все аik0.
Хо= (b1, . . .,bm, 0, . . ., 0) - исходный опорный план;k-я переменная - небазисная.
Рассмотрим семейство планов:
Х()= (b1-a1k,b2-a2k,.
. .,bm-amk,
0, . . ., 0,,
0, . . .,0),0.
Эти планы допустимые. В самом деле, так как все аik0, все переменные здесь неотрицательные. В выполнении остальных ограничений легко убедиться, подставив эти планы в систему ограничений задачи (14). В самом деле, в каждом ограничении при этом будет получено:
bi–aik*+aik*=bi
Последнее ограничение
будет иметь вид: z +
=
d. Подставим в него план Х().
При этом все слагаемые при небазисных
переменных, кроме –го, обратятся в ноль
(при небазисных тоже, потому что при
этих переменных коэффициенты в
критериальном ограничении равны нулю).
z + k*= d; z = d -k*. Так какk<0,+z+(при стремлении к бесконечности значение целевой функции тоже будет стремиться к плюс бесконечности). Таким образом, на допустимых планах целевая функция может принимать неограниченно большие значения.
Лемма доказана.
Теорема о сходимости симплекс-метода. Если после каждого этапа симплекс-метода значение целевой функции возрастает, то алгоритм дает решение задачи линейного программирования в конечное число шагов.
Доказательство.
На каждом этапе мы получаем текущий
опорный план (вершину ОДП). Число опорных
планов конечно (не больше, чем число
способов выбора m переменных из n -*).
Так как по предположению целевая функция
возрастает, то мы второй раз не получим
пройденный план, а значит, в конечное
число этапов получим решение.
Целевая функция не убывает по лемме 3. Если ее значение не изменяется, то возможно зацикливание (хотя оно встречается довольно редко). В систему может быть вставлен специальный блок для проверки на зацикливание. По той же лемме 3 значение целевой функции может не измениться только если bt = 0, т.е. в очередном опорном плане базис был вырожденным.
Из формулы для пересчета целевой функции (d`= d - bt *k/ аtk) следует, что при выборе разрешающего столбца можно заранее определить, на сколько изменится ее значение: наk* bt / аtk. Следовательно,если критерий оптимальности нарушен не в одном, а в нескольких столбцах таблицы, то выбрать в качестве разрешающего лучше тот из них, для которого это изменение будет больше. Тогда решение задачи может быть получено быстрее, за меньшее число этапов.
Вторая симплексная таблица для решенного примера примет вид таблицы 9.
Для того, чтобы получить ее в MicrosoftExcel, следует скопировать диапазон ячеек А1:К6 на диапазон А7:К11. Затем отредактируем вспомогательную часть таблицы: в В8 вместо x5введем x3, а в С8 вместо 0 введем 2.
Затем отредактируем диапазон D8:К11. Для этого в D8 введем формулу =D3/$G3*. Она вводится для того, чтобы обе части третьего ограничения разделить на G3, т.е. на 2.
В D9 введем формулу =D4-D$8*$G4. Скопируем последнюю формулу на диапазон ячеек D10:D11. В результате в D10 появится формула =D5-D$8*$G5, а в D11 формула =D6-D$8*$G6. Это делается для того, чтобы из всех остальных строк, кроме разрешающей, вычесть преобразованную разрешающую (она в 8-й строке электронной таблицы), умноженную соответственно на 1 (в G4), 0 (в G5) и -2 (в G6).
Выделим формулы в диапазоне D8:D11 и скопируем их на диапазон ячеек Е8:К11. В результате столбец коэффициентов при x3станет единичным.
Таблица 9 – Вторая симплексная таблица
|
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
7 |
N |
xб |
cб |
B |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
8 |
1 |
х3 |
2 |
1 |
-2,5 |
-0,5 |
1 |
0 |
0,5 |
0 |
0 |
9 |
2 |
x6 |
0 |
4 |
1,5 |
0,5 |
0 |
1 |
-0,5 |
1 |
0 |
10 |
3 |
x7 |
0 |
7 |
-3 |
0 |
0 |
5 |
0 |
0 |
1 |
11 |
m+1 |
|
|
2 |
0 |
-1 |
0 |
0 |
1 |
0 |
0 |
Таким образом, в таблице 9 записана система (16).
Отметим, что для пересчета критериального ограничения можно использовать два способа:
а) описанный выше метод Гаусса (поскольку это такое же линейное ограничение, как и остальные mограничений);
б) можно заново
перестроить его по выведенным ранее
формулам j
= -
cj; d =
(по своей сути это означает выражение
базисных переменных из ограничений
через небазисные и подстановку их в
критериальное ограничение).
При использовании для расчетов электронной таблицы способ (а) предпочтительнее.
Тем не менее, если ввести в D11 другую формулу =СУММПРОИЗВ($C8:$C10;D8:D10)-D1, и именно ее скопировать по строке до К11, то результат вычислений получится тем же самым, что приведен в таблице 9. В самом деле, d= 2*1 + 0*4 + 0*7 – 0 = 2 (здесь, в отличие от других столбцов, вычитать 0 не обязательно, но ячейка D1 все равно нулевая);1= 2*(-2,5) + 0*1,5 + 0*(-3) – (-5) = 0;2 = 2*(-0,5) + 0*0,5 + 0*0 – - 0 = -1; коэффициент при базисной переменной3== 2*1 + 0*0 + 0*0 – 2 = 0 и т.д.
Если в исходной симплексной таблице базисные переменные входят в целевую функцию, то в ней построить критериальную строку можно только способом (б).
В таблице 9 критерий оптимальности нарушен в столбце коэффициентов при x2. Положительный коэффициент в этом столбце только один – 0,5. Это разрешающий элемент, в таблице 9 он выделен. Следовательно, x2войдет в базис вместо x6. В результате преобразований будет получена таблица 10.
Для того, чтобы получить эту таблицу, диапазон ячеек А7:К11 скопируем на диапазон А12:К16. В В14 вместо x6введем x2. Затем отредактируем диапазонD13:К16. Для этого в D14 введем формулу =E9/$F9. Она вводится для того, чтобы обе части второго (разрешающего) ограничения разделить на F9, т.е. на 0,5. В D13 введем формулу =D8-D$14*$F8. Скопируем последнюю формулу на диапазон ячеек D15:D16. Это делается для того, чтобы из всех остальных строк, вычесть преобразованную разрешающую, умноженную соответственно на -0,5, 0 и -1.
Выделим формулы в диапазоне D13:D16 и скопируем их на диапазон ячеек Е13:К16. В результате столбец коэффициентов при x2станет единичным.
Тот же результат был бы получен, если бы в D16 вместо формулы =D11-D$14*$F11 стояла формула =СУММПРОИЗВ($C13:$C15;D13:D15)-D1, и именно она была бы скопирована на диапазон Е16:К16.
Таблица 10 – Оптимальная симплексная таблица
|
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
12 |
N |
xб |
cб |
B |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
13 |
1 |
х3 |
2 |
5 |
-1 |
0 |
1 |
1 |
0 |
1 |
0 |
14 |
2 |
x2 |
0 |
8 |
3 |
1 |
0 |
2 |
-1 |
2 |
0 |
15 |
3 |
x7 |
0 |
7 |
-3 |
0 |
0 |
5 |
0 |
0 |
1 |
16 |
m+1 |
|
|
10 |
3 |
0 |
0 |
2 |
0 |
2 |
0 |
Таким образом, в таблице 10 записана система (17).
В критериальном ограничении последней симплексной таблицы нет отрицательных коэффициентов. Следовательно, оптимальный план найден. А именно, небазисные переменные x1= x4= x5= x6= 0, а базисные (их список находится в столбцеxб) равны свободным членам (в столбце В): x3= 5, x2= 8, x7= 7. Оптимум равен 10.
Итак, Х(*)= Х(2)= (0; 8; 5; 0; 0; 0; 7),z(*)=z(2)= 10.
Алгоритм симплекс-метода можно представить в виде блок-схемы, приведенной на рисунке 26.
Рисунок 26 – Блок-схема симплекс-метода
Решение задачи на минимум отличается только критерием оптимальности - все коэффициенты критериального ограничения должны быть неположительны (соответственно, разрешающий столбец выбирается по положительному элементу).
При решении задач целесообразно соблюдать следующие рекомендации:
а) Если среди ограничений задачи линейного программирования имеются неравенства, или не все переменные являются неотрицательными, начните решение с приведения задачи к канонической форме. Проверьте, все ли свободные члены неотрицательны, и имеется ли базис. Если нет, проверьте, нельзя ли этого добиться простыми преобразованиями.
б) Чтобы избежать ошибки, разрешающий элемент в таблице следует выделять.
в) На каждой итерации симплекс-метода целесообразно проверять, соблюдены ли в таблице следующие элементарные правила:
1) Не должен нарушаться критерий допустимости. Отрицательный элемент в столбце В - признак ошибки в расчетах, причем скорее всего она была допущена при выборе разрешающей строки.
2) Должен присутствовать полный набор единичных столбцов при базисных переменных, причем единица должна стоять в той строке, которой эта переменная соответствует, а в остальных - нули.
3) Одно из средств контроля правильности вычислений - подсчет критериальной строки двумя способами: методом Гаусса и через сумму произведений (результаты должны совпадать).
4) При переходе к следующей симплексной таблице значение целевой функции должно, по крайней мере, не убывать (если задача на максимум) или не возрастать (если она на минимум).
Несоблюдение этих правил лишает смысла все остальные действия.
г) Из заключительной симплексной таблицы необходимо извлечь решение задачи линейного программирования или указать, почему она неразрешима.