Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы решения задач оптимизации. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
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. Тогда система
преобразуется к следующему виду:
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]