Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы решения задач оптимизации. Учебное пособие
.pdf
4. Графическое решение задачи линейного программирования
41
Во-первых, мы должны определить направление возрастания (убы-
вания) целевой функции. Целевая функция нашей задачи известна:
f = 7x1 + 2x2.
Мы также знаем, что задача состоит в том, чтобы найти точку, в
которой данная функция принимает максимально возможное на этом
наборе ограничений значение, Следовательно, для решения этой задачи
необходимо определить направление возрастания целевой функции.
x
1
x
2
#1
#2
#3
#4
A
B
C
D
E
F
е
Рис. 4.1.
Окончание: е – область допустимых решений задачи
Приравняем выражение целевой функции к некоторому числу.
Например, возьмем для удобства число 14:
7x1 + 2x2 = 14.
Теперь мы можем построить прямую, соответствующую данному
уравнению:
x1 = 0, тогда x2 = 7,
x2 = 0, тогда x1 = 2.

4. Графическое решение задачи линейного программирования
42
Точки для построения прямой: (0; 7) и (2; 0).
Прямая, соответствующая целевой функции, показана на рис. 4.2, а
пунктирной линией. Очевидно, что для любой точки, принадлежащей этой
прямой, значение целевой функции равно 14 (например, точка (0; 7); x1 = 0,
x2 = 7, f = 14). Теперь нам необходимо определить направление возрастания
целевой функции. Мы можем это сделать, построив перпендикуляр к нашей
прямой (7x1 + 2x2 = 14). Если использовать для сравнения точку (x1 = 0, x2 =
= 0, f = 0), направление от точки (0; 0) (показано стрелкой, рис. 4.2, б) является направлением возрастания целевой функции.
x
1
x
2
#1
#2
#3
A
B
C
D
E
F
7x1 + 2x2 = 14
а
Рис. 4.2.
Целевая функция: а – линия целевой функции
x
1
x
2
#1
#2
#3
A
B
C
D
E
F
7x1 + 2x2 = 14
ЦФ
б
Рис. 4.2.
Продолжение: б – направление возрастания целевой функции
Можно также для определения направления возрастания построить
вторую прямую, например, 7x1 + 2x2 = 28. Тогда перпендикуляр от первой
прямой ко второй будет показывать нам направление возрастания целевой
функции.

4. Графическое решение задачи линейного программирования
43
Мысленно передвигая прямую (7x1 + 2x2 = 14) вдоль направления
возрастания целевой функции мы должны определить точку (вершину
многоугольника), которую воображаемая линия пересечет последней. Эта
точка будет соответствовать оптимальному решению задача. Для нашего
примера точкой оптимума будет являться вершина E (рис. 4.2, в). Эта
вершина образуется в результате пересечения прямых, соответствующих
ограничениям № 1 и № 4.
Для того чтобы определить значения переменных в точке E, нам
нужно решить систему из двух уравнений с двумя неизвестными:
3x1 + 2x2 = 24,
–4x1 + 3x2 = –24.
x
1
x
2
#1
#2
#3
#4
A
B
C
D
E
F
ЦФ
в
Рис. 4.2.
Окончание: в – нахождение оптимального решения
Выразим из первого уравнения переменную x2:
2x2 = 24 – 3x1 x2 = 12 – 1,5x1.

4. Графическое решение задачи линейного программирования
44
Подставляем полученное выражение во второе уравнение:
–4x1 + 3(12 – 1,5x1) = –24 –4x1 + 36 – 4,5x1) =
= –24 –8,5x1 = –60 x1 = 7,059.
Тогда x2 = 12 – 1,57,059x1 = 12 – 10,5885 = 1,412. Теперь мы можем
вычислить значение целевой функции в данной точке:
f = 77,059 + 21,412 = 49,413 + 2,824 = 52,237.
Решение задачи получено: x1 = 7,059, x2 = 1,412, f = 52,237.
Еще раз отметим, что оптимальное решение задачи линейного программирования всегда соответствует точке, являющейся пересечением двух
прямых. В процессе решения может выясниться, что задача имеет множество решений. Это бывает в том случае, когда прямая, соответствующая
целевой функции, совпадает с одной из граней области допустимых решений. Также возможен вариант, когда задача вообще не имеет решения. Эти
случаи мы разберем более подробно в следующем разделе пособия.

5.1. Стандартная форма задачи ЛП
45
5. СИМПЛЕКС–МЕТОД
Как мы уже знаем, графический метод позволяет находить оптимальное решение задачи линейного программирования, при этом существенную роль играет число переменных в рассматриваемой задаче. Очевидно, что для решения задач, с числом переменных более трех необходим более универсальный метод нахождения оптимального решения. Таким методом является симплекс-метод. Симплекс-метод является алгебраической реализацией идеи направленного перебора вершин многоугольника, соответствующего области допустимых решений задачи. Из
предыдущего пункта мы знаем, что оптимальное решение задачи линейного программирования, если оно есть, всегда совпадает с угловой точкой, т.е. точкой являющейся пересечением двух прямых. При решении
симплекс-методом мы последовательно передвигаемся от одной угловой
точки области решений к другой, улучшая при этом значение целевой
функции. Процесс продолжается до тех пор, пока не будет найдено оптимальное решение задачи.
Для того чтобы начать решение задачи линейного программирования симплекс-методом, необходимо сначала привести задачу к стандартной форме.
5.1. Стандартная форма задачи ЛП
Задача считается записанной в стандартной форме, если выполняются следующие требования [5].
1. Все ограничения задачи преобразуются в равенства с неотрица-
тельной правой частью.
2. Все переменные задачи должны быть неотрицательными.
3. Целевая функция задачи предполагает либо максимизацию, либо
минимизацию.
Пример 5.1. Приведем к стандартной форме задачу, которую мы
решали графическим методом.
Максимизировать целевую функцию f = 7x1 + 2x2 при выполнении
следующих ограничений
3x1 + 2x2 24,

5. Симплекс–метод
46
x1 + 2x2 12,
x1 – x2 –3,
–4x1 + 3x2 –24,
х1 0, х2 0.
В данной задаче все ограничения записаны в виде неравенств, и
нам необходимо преобразовать их в равенства. Кроме того, в ограничениях 3 и 4 в правой части неравенства находится отрицательное число. Чтобы избавиться от него, умножим левую и правую части неравенств на –1.
Не забудем, что при этом меняется также знак неравенства:
3x1 + 2x2 24,
x1 + 2x2 12,
–x1 + x2 3,
4x1 – 3x2 24,
х1 0, х2 0.
Чтобы преобразовать неравенства в равенства, вводим дополнительные переменные. Тип дополнительной переменной зависит от типа
неравенства. Если неравенство имеет знак , то в выражение вводится
дополнительная «остаточная» переменная со знаком «+». Если же неравенство имеет знак , то в выражение вводится дополнительная «избыточная» переменная со знаком «–». Количество дополнительных переменных будет равно числу ограничений задачи:
3x1 + 2x2 + x3 = 24,
x1 + 2x2 + x4 = 12,
–x1 + x2 + x5 = 3,
4x1 – 3x2 + x6 = 24,
х1, х2, x3, x4, x5, x6, 0.
Необходимо также проверить, соблюдается ли условие неотрицательности переменных. В рассматриваемом примере все переменные за-

5.1. Стандартная форма задачи ЛП
47
дачи, включая дополнительные, являются неотрицательными, следовательно, мы можем записать задачу в стандартной форме.
Максимизировать целевую функцию f = 7x1 + 2x2 + 0x3 + 0x4 + 0x5 +
+ 0x6 при выполнении следующих ограничений:
3x1 + 2x2 + x3 = 24,
x1 + 2x2 + x4 = 12,
–x1 + x2 + x5 = 3,
4x1 – 3x2 + x6 = 24,
х1, х2, x3, x4, x5, x6, 0.
В случае же, если одна или несколько переменных задачи являются
свободными, т.е. могут принимать как положительные, так и отрицательные значения, для приведения задачи к стандартной форме необходимо
использовать подстановку. Свободную переменную хj представляют как
разность двух неотрицательных переменных:
xj = x
j
+
– x
j
-
, где x
j
+
, x
j
-
0.
В этом случае, если переменная xj принимает отрицательное значение, например, xj = –5, то положим x
j
+
= 0, а x
j
-
= 5. Если же переменная xj
принимает положительное значение (xj = +5), тогда x
j
+
= 5 и x
j
-
= 0. При
этом обе переменные (x
j
+
и x
j
-
) остаются неотрицательными.
Эту подстановку необходимо произвести во всех ограничениях задача, а также в выражении целевой функции.
Пример 5.2. Привести задачу линейного программирования к
стандартной форме.
Максимизировать f = 4x1 + 2х2 + 3х3 при выполнении условий:
2x1 – х2 + 3х3 8,
7x1 + 3х2 + 2х3 4,
3x1 – 5x2 – 4х3 = 10,
х1, х2 0,
х3 – свободная переменная.

5. Симплекс–метод
48
Для преобразования задачи в стандартную форму вводим дополнительные переменные в неравенства 1 и 2, а также вместо свободной переменной х3 вводим подстановку:
x3 = x
3
+
– x
3
-
, где x
3
+
, x
3
-
0.
Максимизировать f = 4x1 + 2х2 + 3x
3
+
– 3x
3
-
+ 0x4 + 0x5 при выполне-
нии условий:
2x1 – х2 + 3x
3
+
– 3x
3
-
– x4 = 8,
7x1 + 3х2 + 2x
3
+
– 2x
3
-
+ x5 = 4,
3x1 – 5x2 – 4x
3
+
+ 4x
3
-
= 10,
х1, х2, x
3
+
, x
3
-
, x4, x5 0,
5.2. Определение базисных решений
Задача линейного программирования, записанная в стандартной
форме, содержит m линейных равенств с п неизвестными переменными
(m < n) [5]. При этом множество из n переменных можно разделить на два
множества: первое множество содержит m базисных (ненулевых) переменных, которые образуют базисное решение системы m линейных уравнений; второе множество содержит соответственно n – m переменных,
которые являются небазисными и приравниваются к нулю. Если все переменные принимают неотрицательные значения, то полученное базисное
решение является допустимым, в противном случае – недопустимым.
Пример 5.2. Найти все базисные решения систем из двух уравне-
ний с пятью неизвестными (m = 2, n = 5) и определить какие из них являются допустимыми:
х1 + x2 + 4x3 +2x4 +3x5 = 8,
4х1 + 2x2 + 2x3 + x4 + 6x5 = 4,
х1, x2, x3, x4, x5 0.
Общее число базисных решений системы линейных уравнений из m
уравнений с n неизвестными можно определить по формуле

5.2. Определение базисных решений
49
5
10
32
n! !
( n m )!m! ! !
.
Поскольку система содержит два уравнения, то по определению
каждое базисное решение должно включать только две переменные, Соответственно, еще три из пяти переменных будут в данном случае небазисными, т.е. равными нулю. Для определения базисных решений воспользуемся методом перебора вершин.
1. Нулевые (небазисные) переменные: х3, х4 и x5. Тогда система
преобразуется к следующему виду:
х1 + x2 = 8,
4х1 + 2x2 = 4.
Из первого уравнения выражаем, например, х1 = 8 – x2, и подстав-
ляем это выражение во второе уравнение:
4(8 – x2) + 2x2 = 4 32 – 4x2 + 2x2 = 4 –4x2 + 2x2 = 4 – 32 –2x2 = –28.
Итак, x2 = 14, а х1 = 8 – 14 = –6.
Результат. Полученное базисное решение (х1 = –6, x2 = 14) является
недопустимым, так как переменная х1 принимает отрицательное значение.
2. Нулевые (небазисные) переменные: х2, х4 и x5. Тогда система
преобразуется к следующему виду:
х1 + 4x3 = 8,
4x1 + 2x3 = 4.
Решаем систему уравнений. Выражаем из первого уравнения: х1 =
= 8 – 4x3, подставляем это выражение во второе уравнение:
4(8 – 4x3) + 2x3 = 4 32 – 16x3 + 2x3 = 4 –14x3 = –28 x3 = 2.
Возвращаемся к первому уравнению: х1 = 8 – 42 = 0.
Результат. Полученное базисное решение (х1 = 0, x3 = 2) является
допустимым и единственным.
3. Нулевые (небазисные) переменные: х2, х3 и x5. Тогда система
преобразуется к следующему виду:
х1 + 2x4 = 8,

5. Симплекс–метод
50
4x1 + x4 = 4.
Решаем систему уравнений. Выражаем из второго уравнения: х4 =
= 4 – 4x1, подставляем это выражение в первое уравнение:
x1 + 2(4 – 4x1) = 8 x1 + 8 – 8x1 = 8 –7x1 = 0 x1 = 0.
Возвращаемся ко второму уравнению: х4 = 4 – 0 = 4.
Результат. Полученное базисное решение (х1 = 0, x4 = 4) является
допустимым и единственным.
4. Нулевые (небазисные) переменные: х2, х3 и x4. Тогда система
преобразуется к следующему виду:
х1 + 3x5 = 8,
4x1 + 6x5 = 4.
Решаем систему уравнений. Выражаем из первого уравнения: х1 =
= 8 – 3x5, подставляем это выражение во второе уравнение:
4(8 – 3x5) + 6x5 = 4 32 – 12x5 + 6x5 = 4 –6x5 = –28 x5 = 14/3.
Возвращаемся к первому уравнению: х1 = 8 – 3(14/3) = –6.
Результат. Полученное базисное решение (х1 = –6, x5 = 14/3) является
недопустимым, так как переменная х1 принимает отрицательное значение.
5. Нулевые (небазисные) переменные: х1, х4 и x5. Тогда система пре-
образуется к следующему виду:
x2 + 4x3 = 8,
2x2 + 2x3 = 4.
Решаем систему уравнений. Выражаем из первого уравнения: х2 =
= 8 – 4x3, подставляем это выражение во второе уравнение:
2(8 – 4x3) + 2x3 = 4 16 – 8x3 + 2x3 = 4 –6x3 = –12 x3 = 2.
Возвращаемся к первому уравнению: х2 = 8 – 42 = 0.
Результат. Полученное базисное решение (х2 = 0, x3 = 2) является
допустимым и единственным.
6. Нулевые (небазисные) переменные: х1, х3 и x5. Тогда система
преобразуется к следующему виду:
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
