2_0
.pdfкоторой оптимальное решение находится на допустимых базисных решени- ях. Поэтому для решения ЗЛП надо найти начальное допустимое базисное решение и указать правило перехода к новому не худшему.
Если ввести обозначения
|
100 |
|
|
|
0,5 |
|
|
1 |
1 |
|
0 |
|
0 |
|
||||||
|
= 120 |
, |
|
1 = |
1 |
, |
|
2 = 1 , |
|
3 = |
0 |
, |
|
4 = |
1 |
, |
|
5 = |
0 |
, |
B |
A |
A |
A |
A |
A |
|||||||||||||||
|
300 |
|
|
3 |
|
|
1 |
0 |
|
0 |
|
1 |
|
то систему ограничений можно записать в векторной форме
B = x1 A1 + x2 A2 + x3 A3 + x4 A4 + x5 A5 .
Это представление является разложением вектора B по векторам
A1, A2 , A3, A4 , A5. За базис этой системы векторов можно взять систему еди-
ничных векторов Б1 = ( A3, A4 , A5 ). Допустимое базисное решение будет оп-
ределять начальный опорный план.
Выпишем начальный опорный план и значение целевой функции для него. Для этого свободные переменные приравниваем к нулю: x1 = 0, x2 = 0, а базисные переменные после этого находят из системы:
x3 = 100, x4 = 120, x5 = 300.
X 1 = (0,0,100,120,300), Z′ (X 1 ) = −300 0 − 500 0 + 0 100 + 0 120 + 0 300 = 0.
Решение задачи принято оформлять симплекс-таблицами.
Таблица 2.2.2. Первая симплекс-таблица задачи 2.2.1
↓
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
θ = θ02 |
= min |
bi |
||||
|
|
|
|
|
|
|
|
|
|
|
А1 |
|
|
А2 |
|
А3 |
|
А4 |
|
|
А5 |
||||||||||||||||
|
|
Б1 |
СБ |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
В1 |
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
|
|
|
− 300 |
|
− 500 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
1 |
|
|
|
|
|
0 |
|
0 |
|
|
|
0 |
|
|
a i 2 |
>0 a |
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i 2 |
||
← |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
×(−1) ×( |
−500) |
||||||||||||||
|
|
|
0 |
100 |
0,5 |
|
[1] |
|
1 |
|
0 |
|
|
|
0 |
100 |
|
||||||||||||||||||||
|
А3 |
|
|
|
|
||||||||||||||||||||||||||||||||
|
|
|
|
0 |
120 |
1 |
|
1 |
|
0 |
|
1 |
|
|
|
0 |
120 |
|
←| |
|
|
| |
|||||||||||||||
|
|
А4 |
|
|
|
|
|
|
|
||||||||||||||||||||||||||||
|
|
|
|
0 |
300 |
3 |
|
1 |
|
0 |
|
0 |
|
|
|
1 |
300 |
|
|
|
|
| |
|||||||||||||||
|
|
А5 |
|
|
|
|
|
|
|
||||||||||||||||||||||||||||
|
|
|
z j |
− cj |
0 |
300 |
|
500 |
|
0 |
|
0 |
|
|
|
0 |
|
|
|
|
|
|
|
||||||||||||||
|
|
Индексная строка рассчитывается следующим образом: |
|
|
|
|
|
||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Z ( |
|
|
) = ∑ci |
|
bi = |
|
|
|
, |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
С |
В |
|
|
|
|
|
|
|
i=1
20
m
z j − c j = ∑ciБ xi j − c j = C Бi Аj − c j , j = 1,5.
|
|
i=1 |
|
В первой симплексной таблице имеем |
|
||
Z ( |
|
Б1 ) = 0 100+0 120+0 300 = 0, |
z1-c1 = 0 0,5+0 1+0 3– (–300) =300, |
X |
|||
|
|
z2-c2 = 0 1+0 1+0 1– (–500) = 500, |
z3-c3 = 0 1+0 0+0 0–0 = 0, |
|
|
z4-c4 = 0 0+0 1+0 0 −0 = 0, |
z5-c5 = 0 0+0 0+0 – 0 = 0. |
Симплексная таблица составляется следующим образом. В первой строке шапки симплекс-таблицы указаны векторы исходной системы ограни- чений задачи, а во второй – коэффициенты при переменных в целевой функ- ции задачи. В первом столбце (столбец Б1 ) указаны векторы, образующие ба- зис заданной системы векторов, а во втором – коэффициенты целевой функ- ции при базисных переменных. Во всех остальных клетках таблицы (кроме последней строки, о которой будет сказано далее) стоят коэффициенты раз- ложения соответствующих векторов по векторам базиса.
Так как для нашей задачи выбран единичный базис, то в первой сим- плексной таблице в столбцах B1, A1, A2 , A3, A4 , A5 будут стоять соответст-
вующие коэффициенты системы ограничений.
Последняя строка называется индексной или (m +1)-й. Во втором столбце этой строки стоит значение целевой функции при проверяемом опорном плане. В нашем случае Z′ (X Б1 ) = 0. Во всех остальных клетках ин-
дексной строки находятся оценки оптимальности z j − c j для векторов исход-
ной системы. Здесь z j – значение целевой функции, если в неё вместо пере-
менных подставить коэффициенты разложения вектора A j по векторам бази- са, а cj – коэффициенты целевой функции при соответствующих перемен-
ных.
Число z j − c j показывает, на сколько уменьшиться значение целевой функции, если переменную x j увеличить на единицу.
Отсюда следует правило проверки решения на оптимальность:
1)проверяем знаки z j − c j ;
2)если все z j − c j ≤ 0 , то оптимальное решение найдено, есть минимум
Z;
3) если имеются z j − c j > 0, то составляем новую симплексную табли-
цу и опять проверяем знаки чисел в индексной строке. Итерации продолжаем до тех пор, пока не получим в индексной строке все неотрицательные числа
21
или установим отсутствие конечного решения задачи ( z j − c j > 0, а все числа ai′ j ≤ 0 для некоторого j).
Проверяем первый опорный план на оптимальность.
Из-за того, что в индексной строке есть положительные числа, то он не оптимален.
Переходим к новому плану. Вектор, вводимый в базис, выбираем по
наибольшему числу в индексной строке. Это есть вектор А2 .
Вектор, выводимый из базиса, выбираем по симплексному отношению. В общем виде симплексное отношение для Аj находится по формуле
θ = θ0 j |
= min |
|
bi |
|
( i = |
|
|
|
; |
j = |
|
). |
||
|
|
1,m |
1,n |
|||||||||||
|
|
|
||||||||||||
|
x >0 x |
|
|
|
|
|
|
|
|
|
|
|||
|
ij |
i j |
|
|
|
|
|
|
|
|
|
|
||
В нашем случае |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
θ = θ02 |
= min |
100 |
, |
120 |
, |
300 |
|
= 100 . |
||||||
|
|
|
||||||||||||
|
|
1 |
1 1 |
|
|
|
|
Симплексное отношение находится лишь для положительных aij . Та-
ким образом, из базиса выводим вектор А3 .
Столбец, в котором находится вектор, вводимый в базис, называется разрешающим, строка, в которой находится вектор, выводимый из базиса − разрешающей. Элемент, находящейся на пересечении разрешающего столбца и строки – разрешающим элементом.
Разрешающий элемент выделен квадратными скобками и жирно. Составляем новую симплексную таблицу. Для этого пересчитываем
коэффициенты исходной системы по методу полных жордановых исключе- ний. Это правило состоит в следующем.
Встолбце А2 мы должны получить единичный столбец. Для этого раз- решающую строку вычитаем из второй и третьей строк.
Вобщем, при составлении новой симплекс-таблицы надо разрешаю- щую строку поделить на разрешающий элемент, разрешающий столбец за- менить единичным столбцом с единицей на месте разрешающего элемента. Элементы, которые находятся не в разрешающей строке и столбце, иногда удобно пересчитывать по правилу прямоугольника (вторая модификация правила полных Жордановых исключений):
Таблица 2.2.3. Правило прямоугольника
|
|
|
|
|
|
|
|
apr |
… |
apj |
|
|
a′ |
… |
0 |
|
|
pr |
|||||
… |
|
… |
|
|
… |
|
… |
air |
… |
[aij] |
|
a′ |
= a / a |
… |
1 |
|
|
|
|
ir |
ir ij |
|
|
22
Правило прямоугольника состоит из следующих шагов.
1) Элементы разрешающей i-й строки делим на разрешающий элемент таблицы aij .
2) Для того чтобы в направляющем столбце все остальные элементы
стали равными нулю, элементы полученной строки умножаем последова- |
|||||||||
тельно |
на (−apj ) ( p = 1,2,...,i − 1,i + 1,...m) |
и прибавляем к соответствующем |
|||||||
элементам p -й строки. Тогда вместо числа apr в p-й строке станет число |
|||||||||
3) |
a′ |
= a |
|
− |
air apj |
или a′ |
= |
apr aij − air apj |
. |
pr |
|
|
|||||||
|
pr |
|
|
|
pr |
|
aij |
||
|
|
|
|
|
aij |
|
Числитель в этой формуле вычисляется как определитель второго по- рядка, за первую диагональ надо брать диагональ, на которой находится пе- ресчитывающийся элемент. Например,
b′ |
= b − |
b1 a32 |
= 300 − |
100 1 |
= |
300 1− 100 1 |
= 200, a′ |
= 1− |
0 1 |
= 1 |
|
|
|
|
|||||||
3 |
3 |
a12 |
1 |
1 |
35 |
1 |
|
|||
|
|
|
|
Для контроля индексную строку можно также пересчитывать по этому правилу. В нашем случае разрешающую строку умножаем на (-500) и при- бавляем к индексной строке. Схема этих вычислений изображена справа от табл. 2.2.1.
После проведённых вычислений получили вторую симплекс-таблицу,
табл. 2.2.4.
Таблица 2.2.4. Вторая симплекс-таблица задачи 2.2.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Б2 |
|
|
|
|
|
|
|
|
А1 |
|
А2 |
|||
|
|
СБ2 |
|
|
|
||||||||||
|
|
|
В2 |
||||||||||||
|
|
|
− 300 |
− 500 |
|||||||||||
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
− 500 |
100 |
0,5 |
1 |
||||||||
|
А2 |
|
|||||||||||||
|
|
|
|
0 |
20 |
[0,5] |
0 |
||||||||
|
А4 |
|
|||||||||||||
|
|
|
|
0 |
200 |
2,5 |
0 |
||||||||
|
А5 |
|
|||||||||||||
|
|
|
z j − cj |
− 50000 |
50 |
0 |
|
|
|
|
|
|
|
|
|
|
|
bi |
|
|
|
|
А3 |
|
А4 |
|
А5 |
|
|
|
|
|||||
0 |
|
|
0 |
|
0 |
|
ai1 |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
← | |
|
1 |
|
|
0 |
|
0 |
200 |
|
|||||||
|
|
|
|
|
|
|
|
(−1)(−5)(−100) |
||||||
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
40 |
|
|||
−1 |
|
1 |
|
0 |
|
|||||||||
− 1 |
|
|
0 |
|
1 |
80 |
|
|
| |
|||||
−500 |
|
|
0 |
|
0 |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Получили второе опорное решение:
X 2 = (0,100,0,20,200), Z′ (X 2 ) = −50 000.
Значение целевой функции на втором шаге решения уменьшится на ве- личину (z2 − с2 ) θ , т.е.
23
Z′ (X 2 ) = Z′ (X 1 )− (z2 − с2) θ = 0 − 500 100 = −50 000.
Второе опорное решение не является оптимальным, так как в индекс- ной строке есть положительное число. Аналогично предыдущему переходим к третьему опорному плану. В базис вводим вектор А1, а из базиса выводим вектор А4 . Для этого разрешающую строку умножаем на (-1), (-5), (-100) и прибавляем соответственно к первой, третьей и индексной строке. Индекс- ную строку для контроля можно находить по правилу расчёта индексной строки.
Получили третью симплексную таблицу.
Таблица 2.2.5. Третья симплекс-таблица задачи 2.2.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
А1 |
|
А2 |
|
А3 |
|
|
А4 |
|
А5 |
||||||
|
Б3 |
|
СБ |
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
В3 |
|
|
||||||||||||||||||||||||
|
|
|
|
− 300 |
− 500 |
0 |
|
0 |
|
0 |
||||||||||||||||||||
|
|
|
|
|
3 |
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
− 500 |
|
80 |
0 |
1 |
|
2 |
|
− 1 |
|
0 |
|||||||||||||||
|
А2 |
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
− 300 |
|
40 |
1 |
0 |
|
-2 |
|
2 |
|
0 |
|||||||||||||||
|
А1 |
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
0 |
|
|
100 |
0 |
0 |
|
4 |
|
− 5 |
|
1 |
||||||||||||||
|
А5 |
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
z j |
− cj |
|
− 52 000 |
0 |
0 |
|
− 400 |
|
− 100 |
|
0 |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y |
|
|
y |
|
y |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
2 |
|
3 |
||||||
|
|
|
|
|
|
|
|
|
|
3 = (40,80,0,0,100) ; Z′ ( |
|
|
3 ) = Zmin′ |
= −52 000 |
|
|
||||||||||||||
|
|
|
|
|
|
|
|
X |
X |
|
|
или
Z′ (X 3 ) = Z′ (X 2 )− (z1 − с1) θ = −50000 − 40 50 = −52000.
Третий план оптимален и единственный, потому что свободные векто- ра имеют отрицательные оценки.
Из табл. 2.2.5 выписываем значение целевой функции и оптимальное значение переменных задачи 2.2.1.
Z |
max |
= −Z′ |
= 300 40 + 500 80 = 52000 , X |
max |
= (40,80) . |
|
min |
|
|
Приведем алгоритм решения ЗЛП симплекс-методом
1)Модель задачи приводим к каноническому виду с неотрицательными правыми частями.
2)Находим начальный опорный план (в каждом уравнении должна быть переменная с коэффициентом единица, которая входит только в одно уравнение).
24
3)Составляем симплексную таблицу.
4)Проверяем знаки z j − c j .
5)Если все z j − c j ≤ 0 , то оптимальное решение найдено, есть минимум
Z.
6) Если имеются z j − c j > 0 , то составляем новую симплексную табли-
цу и опять проверяем знаки чисел в индексной строке. Итерации продолжаем до тех пор, пока не получим в индексной строке все неотрицательные числа или установим отсутствие конечного решения задачи ( z j − c j > 0 , а все числа
ai′ j ≤ 0 для некоторого j).
7) Новую симплексную таблицу пересчитываем по правилу полных жордановых исключений.
Замечание 1. Если задача задана на max, то не обязательно переходить к нахождению min. Можно решать задачу на max, но тогда в индексной стро- ке надо получить неотрицательные оценки. В базис вводят вектор с наи- меньшей отрицательной оценкой.
Замечание 2. Разрешающий элемент можно выбирать из условия
max θ (z j − c j ) . Таким способом можно уменьшить количество итераций.
z j −c j >0
3. Решаем задачу с помощью Поиска решений в Excel
Методика решения задачи симплекс-методом с использованием Microsoft Excel
Алгоритм получения решения задачи симплекс-методом с использова- нием офисного приложения Microsoft Excel рассмотрим на примере 2.2.1. Математическая модель задачи имеет следующий вид:
|
|
0,5x + x |
≤ 100, |
|
|
|||
|
|
|
1 |
2 |
|
|
|
|
Z = 300x |
+ 500x → max, |
x |
+ x |
≤ 120, |
x |
≥ 0, x ≥ 0. |
||
|
||||||||
1 |
2 |
|
1 |
2 |
|
1 |
2 |
|
|
|
3x |
+ x |
≤ 300, |
|
|
||
|
|
|
|
|
||||
|
|
1 |
2 |
|
|
|
Для получения решения исходной задачи будем использовать над- стройку «Поиск решения».
Ввод исходных данных задачи
При решении задачи линейного программирования симплекс-методом с использованием офисного приложения Microsoft Excel необходимо сначала ввести данные задачи. Для этого создается новая рабочая книга Microsoft Excel, в свободные ячейки которой вносятся коэффициенты целевой функ- ции, левой части ограничений, значения правой части ограничений.
25
Экранная форма для ввода условий задачи имеет следующий вид
(рис. 2.2.2):
Рис. 2.2.2
Вячейках В4:С4 находятся значения коэффициентов целевой функции;
вмассиве В6:С8 – коэффициенты левой части ограничений; в столбце Е6:Е8 значения правой части ограничений. Ячейки В2:С2 соответствуют перемен- ным задачи, а в ячейке Е2 будет отображаться значение целевой функции.
Сюда необходимо ввести формулу, по которой это значение рассчитывается, то есть 300x1 + 500x2 . Для этого курсор ставится в ячейку и далее набирается
следующее выражение: = В2* В4 + С2*С4 .
Имена ячеек можно набирать непосредственно с клавиатуры, либо де- лая на них ссылку мышью.
Значение целевой функции также можно рассчитать, используя над- стройку «Мастер функций», а именно, функцию «СУММПРОИЗВ». Для этого необходимо выполнить следующие действия:
поставить курсор в поле Е2;
выбрать на панели инструментов кнопку fx ;
в окне «Категория» выбрать «Математические». В окне «Выберите функцию» − «СУММПРОИЗВ» (рис. 2.2.3) и нажать «ОК»;
Рис. 2.2.3
26
Ввести аргументы функции: в строку «Массив 1» выражение В2:С2, а в строку «Массив 2» выражение В4:С4 (можно, выделять соответствующие массивы с помощью мыши) (рис. 2.2.4) и нажать «ОК»;
Рис. 2.2.4
После этого в ячейке Е2 появится текущее значение целевой функции, вычисленное по введенной формуле. Оно равно нулю, так как переменные в данный момент равны нулю.
Аналогично в ячейки D6:D8 вводятся формулы для расчета левых час- тей ограничений (рис. 2.2.5):
Рис 2.2.5
Для ячейки D6 формула имеет вид 0,5x + x , а ее реализация в ячейке: |
|
1 |
2 |
= B2* B6 + C2*C6 или =СУММПРОИЗВ(В2:C2; В6:C6). |
|
Для ячейки D7 формула имеет вид x + x , а ее реализация в ячейке: |
|
1 |
2 |
= B2* B7 + C2* C7 или = СУММПРОИЗВ(В2:C2; В7:C7). |
|
Для ячейки D8 формула имеет вид 3x + x , а ее реализация в ячейке: |
|
1 |
2 |
= B2* B8 + C2*C8 или = СУММПРОИЗВ(В2:C2; В8:C8).
Как видно, формулы для расчета левой части ограничений отличаются друг от друга только именем второго массива (строчки коэффициентов огра-
27
ничения), первый же массив (массив значений переменных) один и тот же. Поэтому можно ввести формулу один раз, а затем скопировать ее, сделав аб- солютную ссылку на массив переменных В2:C2.
Для того, чтобы сделать абсолютную ссылку на определенный столбец, необходимо поставить символ $, перед буквой, обозначающей имя столбца. Например $В2:$C2. Чтобы зафиксировать строку, символ $, ставится перед номером строки: В$2:C$2. Если необходимо сделать абсолютную ссылку на конкретную ячейку (ячейки), символ $ ставится и перед именем столбца и перед номером строки: $В$2:$C$2.
Абсолютную ссылку на ячейку (ячейки) можно сделать, нажав клавишу F4, когда курсор находится в поле имени ячейки. При однократном нажатии клавиши будет сделана абсолютная ссылка на массив или ячейку ($В$2: $C$2). Если клавишу нажать дважды, будет сделана абсолютная ссылка на номер строки (В$2: C$2). При следующем нажатии клавиши ссылка будет сделана на имя столбца ($В2: $C2).
При данном способе реализации симплекс-метода достаточно сделать ссылку лишь на соответствующую строку: В$2: C$2. В то же время допусти- ма и абсолютная ссылка на конкретный массив ячеек: $В$2: $C$2.
Таким образом, для ячейки D6 формула будет иметь вид = B$2* B6 + С$2*С6 или = СУММПРОИЗВ(В$2: C$2;В6:C6) (в случае абсо- лютной ссылки на массив = СУММПРОИЗВ($В$2: $C$2;В6:C6)).
Затем эту формулу необходимо скопировать в ячейки D7 и D8. Копи- ровать формулу можно с помощью клавиш «Ctrl-Insert» − копировать и клавиш «Shift-Insert» − вставить. Другой способ копирования формул − по- ставить курсор в ячейку, содержащую формулу и протянуть ее за правый нижний угол на все ячейки, в которые ее необходимо скопировать.
После этого экранная форма условий задачи будет иметь вид (рис. 2.2.6).
Рис. 2.2.6
Ввод ограничений
Для получения решения задачи используется надстройка «Поиск ре- шения», которая находится в меню «Сервис».
28
Рис. 2.2.7
Вдиалоговом окне «Поиск решения» (рис. 2.2.7) необходимо выпол- нить следующие действия:
Поставить курсор в поле «Установить целевую ячейку» и ввести ад- рес ячейки, в которой находится формула для расчета значения целевой функции (можно сделать ссылку на ячейку мышью). В примере это ячейка
E2.
Выбрать критерий оптимизации целевой функции (максимизация, ми- нимизация или точное значение). В примере это максимум.
Поставить курсор в поле «Изменяя ячейки» и ввести адрес массива, в котором находятся значения переменных. В примере это В2:C2. Адрес мож- но внести также с помощью выделения мышью соответствующих ячеек.
Вокне «Ограничения» выбрать кнопку «Добавить», после чего поя-
вится окно «Добавление ограничения» (рис. 2.6.8).
Рис. 2.2.8
В поле «Ссылка на ячейку» ввести адрес ячейки, в которой содержит- ся левая часть ограничения. (Это можно сделать путем выделения мышью соответствующей ячейки на экране). В поле знака открыть список предла- гаемых знаков и выбрать нужный. В поле «Ограничения» ввести адрес ячейки, содержащей правую часть ограничений. В примере первое ограниче- ние: D6<=E6 в диалоговом окне представлено следующим образом (рис. 2.2.9)
29