
ЧМ-2
.pdf
|
|
|
|
21 |
|
|
|
|
|
|
|
xi |
1,2 |
1,3 |
1,4 |
|
1,5 |
yi |
2,337581 |
2,605098 |
2,845925 |
|
3,045925 |
7. Задачи линейного программирования.
Общая постановка задачи ЛП включает целевую функцию
f(x1,x2,x3,...,xn)=c1x1+c2x2+...+cnxn ® max (min) |
(7.1) |
ограничения типа равенств
gi=ai1x1+ai2x2+...+ain xn+bi=0 |
i=1,2,...,k |
(7.2) |
и ограничения типа неравенств
gi=ai1x1+ai2x2+...+ain xn+bi£0 |
i=k+1,k+2,...,n |
(7.3) |
В задачах ЛП в число ограничений очень часто входит условие положительности переменных:
xj ³ 0, |
i = 1, ..., n |
(7.4) |
Обычно оно связано с тем, что xi в этих задачах означает количество объектов i-того типа (производимых, перевозимых, потребляемых и т.п.).
7.1. Графический метод решения задач линейного программирования.
Пусть дана задача:
|
f=С1Х1+С2Х2 ® max |
а11Х1 + а12Х2 £ а1 |
|
а21Х1 + а22Х2 £ а2 |
(7.5) |
... |
|
аm1Х1 + аm2Х2 £ аm. |
|
Введем на плоскости декартову прямоугольную систему координат и сопоставим каждой паре чисел (Х1,Х2) точку плоскости с координатами Х1 и Х2. Выясним, прежде всего, что будет представлять собой множество точек, соответствующих допустимым решениям данной задачи.
Рассмотрим сначала одно линейное неравенство с двумя переменными:

22
а11Х1 + а12Х2 ≤ а2.
Оно, как известно, определяет на плоскости одну из двух частей (полуплоскостей), на которые прямая а11Х1+а12Х2=а1, разбивает плоскость. При этом соответствующая полуплоскость включает и граничную прямую а11Х1+а12Х2=а1 (замкнутая полуплоскость). Чтобы определить, какую именно из двух замкнутых полуплоскостей определяет данное неравенство, достаточно подставить в него координаты одной какойнибудь точки, не лежащей на граничной прямой. Если неравенство удовлетворяется, то искомая полуплоскость та, в которой лежит взятая точка, а если не удовлетворяетсято противоположная ей.
Пусть допустимая область задачи линейного программирования (7.1) оказалась непустой (многоугольник MNP0 на рис. 7.1).
Как геометрически найти оптимальные точки? Оптимальными являются те точки допустимой области, координаты которых доставляют целевой функции наибольшее значение.
Определяем градиент функции →grad f:
→grad f={C1, C2}.
x2
M
С1Х1+ С2Х2=c
A
N
grad f
0 |
x1 |
P
Рис. 7.1
Линия f(x,y)=c при любом значении постоянной c представляет собою прямую, перпендикулярную вектору grad f. Считая c параметром, получаем семейство параллельных прямых (называемых линиями постоянного значения, или линиями уровня функции). Нас интересуют, в соответствии с нашей задачей, те точки допустимой обласи, которые принадлежать линии уровня с наибольшим значением c по сравнению с его значениями для всех других линей уровня, пересекающихся с допустимой областью. Увеличение c
23
соответствует перемещению линии уровня вдоль →grad f. Следовательно, чтобы найти оптимальные точки допустимого множества задачи на максимум, нужно перемещать линии уровня в направлении вектора →grad f, начиная с какого - нибудь фиксированного положения, при котором она пересекается с допустимой областью (точка А на рис. 7.1) до тех пор, пока она не перестанет пересекаться с ней. В точке области допустимых значений, в которой функция f достигает максимума, линия уровня покидает D. Поэтому, если мы найдем проекцию D на направление →grad f, то точка максимума будет проектироваться на конец полученного отрезка. Пересечение допустимой области с линией уровня в том ее положении, когда дальнейшее перемещение дает пустое пересечение, и будет множеством оптимальных точек задачи линейного программирования (на рис. 7.1 это единственная точка N).
Аналогично, при уменьшении c соответствующая линия уровня покинет D в точке минимума f, и эта точка проектируется на начало отрезкапроекции D на направление grad f.
В качестве примера рассмотрим задачу о распределении ресурсов.
Пример. Имеется 300 кг металла, 100 м2 стекла и 160 - человеко-часов рабочего времени; из них изготавливают изделия двух наименований А и Б; стоимость одного изделия А равна 10 $, для его изготовления нужно 4 кг металла, 2 м2 стекла и 2 человеко-часа рабочего времени; стоимость одного изделия Б равна 12 $, для его изготовления нужно 5 кг металла, 1 м2 стекла и 3 человеко-часа рабочего времени; требуется спланировать производство так, чтоб произвести изделия с максимальной стоимостью.
Решение. Допустим, что предприятие выпускает x1 единиц продукции вида A и x2 единиц продукции вида B. Для этого потребуется
единиц металла. Так как в наличии имеется всего 300 единиц металла, то должно выполняться неравенство
4*x1+ 5*x2≤ 300
Аналогичные рассуждения, проведенные для остальных видов сырья и рабочего времени, позволяют записать следующие неравенства
2*x1+ x2≤ 100
2*x1+ 3*x2≤ 160
При этих условиях доход Z, получаемый предприятием, составит
Z = f(x1, x2) = 10*x1 + 12*x2 → max |
(7.6) |

24
Таким образом, математически задачу можно сформулировать так:
Найти max Z = 10*x1 + 12*x2 |
|
при ограничениях |
|
4*x1+ 5*x2£ 300 |
|
2*x1+ x2£ 100 |
(7.7) |
2*x1+ 3*x2£ 160 |
|
x1 ³ 0; x2 ³ 0. |
|
Введем на плоскости прямоугольную декартову систему координат x10x2. Известно, что геометрическое место точек на плоскости, координаты которых удовлетворяют системе линейных неравенств, образуют выпуклый многоугольник.
Этот многоугольник называется многоугольником решений данной системы неравенств. Стороны этого многоугольника располагаются на прямых, уравнения которых получаются, если в неравенствах системы знаки неравенств заменить на знаки равенств. А сам этот многоугольник есть общая часть полуплоскостей, на которые делит плоскость каждая из указанных прямых.
Вычертим эти прямые (рис 7.2).
x2 |
|
|
|
|
|
|
100 |
- |
|
|
|
|
|
90 |
- |
(2) |
|
|
|
|
80 |
- |
|
|
|
|
|
70 |
- |
|
|
|
|
|
60 |
- |
(1) |
|
|
|
|
50 |
- P |
|
|
|
|
|
40 |
- |
|
M R |
|
|
|
30 |
- |
• |
|
|
|
|
20 |
- |
→grad f |
|
|
|
|
10 |
- |
F |
(3) |
|
||
0 |
|
˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ |
|
x1 |
||
|
|
10 |
20 30 40 |
50 60 70 80 |
90 100 |
Рис. 7.2
Полуплоскости в пересечении дают многоугольник решений 0PRF. При этом, любая точка из внутренности многоугольника удовлетворяет всем
25
неравенствам (7.7).
Рассмотрим линейную форму (7.6) f(x1, x2) = 10*x1 + 12*x2.
Выберем внутреннюю точку M0(x1,x2), например x1=10, x2=30, и вычислим значение целевой функции Z0=F(10,30)=10*10+12*30=460.
Уравнение 10*x1+12*x2=Z0 определяет на плоскости геометрическое место точек, в которых прямая f(x1,x2) принимает постоянное значение Z0. Меняя значение Z0, получаем различные прямые, однако все они параллельны между собой, т.е. образуют семейство параллельных прямых. Эти прямые перпендикулярны вектору →grad f=10→e1+12→e2. Вектор →grad f указывает направление, двигаясь в котором, мы переходим от меньших значений формы к большим. Теперь должно быть ясным, что оптимальное решение определяется точкой R(35,30) (рис.7.2), и наибольшее значение формы f равно 10*35+12*35=710.
Итак, оптимальное решение задачи найдено x1=30, x2=35.
7.2. Симплекс метод решения задач линейного программирования.
На практике в задачах планирования приходится решать задачи линейного программирования с очень большим числом переменных. При большом числе переменных мы не можем воспользоваться графическим методом, и нужны иные способы решения задачи.
Канонический вид задачи ЛП. Прежде всего задачу линейного программирования (ЛП) приводят к некоторому стандартному виду, называемому каноническим.
Как мы знаем, общая постановка задачи ЛП включает целевую функцию
f(x1,x2,x3,...,xn)=c1x1+c2x2+...+cnxn ® max (min)
ограничения типа равенств
gi=ai1x1+ai2x2+ |
...+ain xn+bi=0 |
i=1,2,...,k |
и ограничения типа неравенств |
|
|
gi=ai1x1+ai2x2+... |
+ain xn+bi£0 |
i=k+1,k+2,...,n |
Всюду ниже мы будем считать, что на переменные наложено условие
xj ³ 0, |
i = 1, ..., n |
Прежде всего отметим, что при разработке методов решения задач ЛП достаточно рассматривать задачи минимизации, поскольку любая задача на максимум сводится к задаче на минимум путем замены целевой функции f на новую целевую функцию F= -f.
26
Далее, мы можем исключить из состава ограничений неравенства. Для этого вводятся l дополнительных положительных переменных xn+1,xn+2,...,xn+l, и задача приобретает вид
min f(x1,...,xn,xn+1,...,xn+l)=c1*x1+c2*x2+...+cn+l*xn+l |
(7.8) |
|
(здесь cn+1= cn+2= ... = cn+l = 0), |
|
|
a11x1+ a12x2+ ... + a1,n xn |
= b1 |
|
............. |
|
|
ak1x1+ ak2x2+ ... + ak,n xn |
= bk |
(7.9) |
ak+1,1x1+ ak+1,2x2+ ... + ak+1,n+1xn+1= bk+1 |
|
|
............. |
|
|
ak+l,1x1+ ak+l,2x2+ ... + ak+l,n+lxn+l = bk+l |
|
|
xj ³ 0, j = 1, ..., n + l . |
(7.10) |
|
Как мы видим, каноническая форма задачи ЛП |
(7.8)-(7.10) есть |
частный случай ее общей постановки, который отличается от общего тем, что здесь нет ограничений типа неравенств, кроме условий положительности, и отыскиваются лишь точки минимума целевой функции.
Из общей теории разрешимости задач ЛП нам известно, что одним из решений такой задачи является вершина многогранника допустимых значений. Поэтому мы можем найти решение путем перебора всех вершин, вычисляя там целевую функцию и выбирая ту вершину, где ее значение минимально. Но при большом числе переменных и ограничений число вершин такого многогранника огромно, и перебор всех вершин приводит к большому объему вычислений. Желательно организовать этот перебор так, чтобы не рассматривать вершины, где значение целевой функции заведомо больше, чем в уже рассмотренных вершинах. Одним из способов такого рационального перебора вершин является так называемый симплекс-метод.
Симплекс размерности n - это простейший многогранник этой размерности. Так, 2-симплекс - это любой треугольник, 3-симплекс - это любой тетраэдр и т. п. Слово симплекс означает «простейший».
Идея симплекс-метода такова. Найдем какую-либо одну (начальную) вершину многогранника допустимых значений. Будем перебирать все ребра, выходящие из этой вершины, пока не найдем ребра, при перемещении вдоль которого целевая функция убывает. Если такого ребра нет, то начальная вершина есть точка минимума. Если же ребро с указанным свойством найдется, то мы переходим вдоль этого ребра к следующей вершине, и начинаем перебор ребер, выходящих из нее.
Таким образом, мы движемся по ребрам многогранника, всякий раз переходя к вершине с меньшим значением целевой функции, пока не прибудем в точку ее минимума.
Опишем численную реализацию этой идеи для задачи ЛП в
27
канонической форме.
Отметим, что среди ограничений (7.9) могут быть взаимозависимые (скажем, одно из равенств равно сумме двух других). Ограничения, являющиеся следствиями других ограничений, необходимо отбросить, поскольку они не содержат никакой дополнительной информации о значениях неизвестных. Пусть после такого отбрасывания осталось m ограничений типа равенств:
a11x1+ a12x2+ ... + a1nxn = b1
a21x1+ a22x2+ ... + a2nxn = b2 (7.11)
. . . . . . . . . . . .
am1x1+ am2x2+ ... + amnxn = bm
Здесь n - это общее число неизвестных, включая дополнительные (балансовые) переменные. Коэффициенты aij, bj - заданные числа (но, вообще говоря, новые, полученные после приведения к каноническому виду и отбрасывания зависимых уравнений). Поскольку любая система из m > n линейных уравнений с n неизвестными, либо зависима, либо несовместна, то мы должны считать, что m<n. Случай m=n не относится к теории оптимизации: в этом случае решение системы (7.11) единственно, т. е. многогранник допустимых значений состоит из единственной точки, проблемы выбора между различными точками этого многогранника не стоит.
Поэтому мы должны рассматривать лишь случай m<n.
Алгоритм симплексного метода состоит из следующих пяти шагов: 1. Выразим первые m переменных x1,x2,x3,...,xm через остальные с помощью уравнений (7.11):
x1= p1+ q1,m+1 xm+1+ q1,m+2 xm+2+ ... + q1n xn |
|
||||
x2 = p2 + q2,m+1 xm+1 + q2,m+2 xm+2 + ... + q2n xn |
(7.12) |
||||
................ |
|
|
|
|
|
xm = pm + qm,m+1xm+1+ qm,m+2xm+2+ ... + qmnxn. |
|
||||
Для этого |
достаточно |
решить |
систему (7.11) |
относительно |
|
неизвестных |
x1,x2,x3,...,xm, |
считая |
переменные |
xm+1,xm+2,...,xn |
|
фиксированными. |
p1,p2,...,pm |
|
|
||
Свободные |
члены |
неотрицательные. |
Переменные |
||
x1,x2,x3,...,xm |
называют базисными |
(зависимыми), а |
xm+1,xm+2,...,xn- |
||
небазисными (свободными). |
|
|
|
|
|
Представление (7.12) |
позволяет найти начальную вершину (опорное |
решение). Для этого достаточно положить xm+1=xm+2=...=xn=0 и вычислить переменные x1,x2,x3,...,xm по формулам (7.12). Тем самым мы находим одно из неотрицательных базисных решений: (p1,p2,...,pm,0,...,0).
2. Кроме того, мы можем подставить правые части (7.12) в выражение целевой функции вместо x1,x2,x3,...,xm, и получить ее выражение через
|
28 |
свободные переменные: |
|
F = d0+ dm+1·xm+1+ ... + dn·xn. |
(7.13) |
Поскольку в начальной вершине xm+1=...=xn=0, то функция F принимает в этой вершине значение d0.
Выясним, не является ли начальная вершина оптимальной, т.е. не дает ли она решение задачи минимизации F. Она является точкой минимума, если при любом изменении свободных переменных значение F только увеличивается. Поскольку xj³0, то это произойдет при условии dj³0,
j=m+1,...,n.
Итак, если все коэффициенты при свободных неизвестных в представлении (7.13) неотрицательны, то точка минимума уже найдена.
3. Допустим, что это не так, и среди этих коэффициентов имеются отрицательные коэффициенты. Пусть для конкретности dm+1 <0. Тогда, при увеличении xm+1 значение F уменьшается. Увеличение переменной xm+1 (с сохранением нулевых значений остальных свободных переменных) соответствует перемещению из начальной вершины вдоль некоторого ребра.
Такое перемещение можно совершать до тех пор, пока базисные переменные в соответствии с уравнениями (7.12) остаются положительными.
При xm+1= x(1)m+1, xm+2=0,...,xn=0.
Формула (7.12) дает
xi = pi + qi,m+1x(1)m+1, i=1,2,...,m.
Если все коэффициенты qi,m+1 положительны, то базисные переменные
положительны при любом x(1)m+1³0. |
Это значит, |
что в |
этом случае |
x(1)m+1 можно увеличивать безгранично |
(это возможно, |
если |
многогранник |
допустимых значений неограничен). Тогда F неограниченно убывает, т. е. задача минимизации не имеет решения.
4. Но на практике этот случай встречается редко. Обычно решение существует, и, соответственно, среди коэффициентов qi,m+1 имеются отрицательные коэффициенты. Если qi,m+1, то условие положительности xi приводит к условию:
x*m+1 < -pi/qi,m+1
(правая часть этого неравенства положительна). Возможное наибольшее значение xm+1 есть, таким образом,
x*m+1= min { —p i/qi,m+1} qi<0.
Этому значению соответствует вершина, в которую мы попадаем, двигаясь вдоль ребра. Значение F в этой вершине меньше, чем в начальной вершине.
5. Здесь мы выбираем в качестве новых базисных переменных
29
x1,x2,...,xm-1,xm+1, выражаем их и целевую функцию F через свободные переменные, и повторяем все вычисления и рассуждения, приведенные
выше. В результате мы либо обнаружим, что эта вершина дает решение, либо перейдем в новую вершину. В конце концов, мы получим решение. Можно доказать, что количество вершин, которые придется перебрать при использовании этого метода, имеет порядок O(n), в то время как общее количество вершин имеет порядок O(2n).
В качестве примера рассмотрим задачу о распределении ресурсов.
Пример. Имеется 300 кг металла, 100 м2 стекла и 160 - человеко-часов рабочего времени; из них изготавливают изделия двух наименований А и Б; стоимость одного изделия А равна 10 $, для его изготовления нужно 4 кг металла, 2 м2 стекла и 2 человеко-часа рабочего времени; стоимость одного изделия Б равна 12 $, для его изготовления нужно 5 кг металла, 1 м2 стекла и 3 человеко-часа рабочего времени; требуется спланировать производство так, чтоб произвести изделия с максимальной стоимостью.
Решение. Если x1, x2 есть количество изделий А и Б соответственно, то задача такова:
f(x1, x2) = 10·x1 + 12·x2 ® max
при ограничениях
4·x1+ 5·x2£ 300 2·x1+ x2£ 100 2·x1+ 3·x2£ 160
Приводим задачу к каноническому виду. Для этого нужно ввести 3 балансовых переменных (по числу неравенств) x3, x4, x5, и записать ограничения в виде
4·x1 + 5·x2 + x3 = 300 |
|
2·x1+ x2 + x4= 100 |
(7.14) |
2·x1+ 3·x2+ x5= 160 |
|
x1,2,3,4,5³ 0 |
|
и заменить целевую функцию f на F: |
|
F(x1,x2)=-f(x1,x2)=-10·x1- 12·x2- 0·x3 - 0·x4 - 0·x5 ® min |
(7.15) |
Мы должны выбрать 3 базисных переменных. Здесь удобно взять в качестве базисных балансовых пеpеменные x3,x4,x5, поскольку они легко выражаются из ограничений (7.14):
x3= 300 |
- 4x1- 5x2 |
|
x4= 100 |
- 2x1- x2 |
(7.16) |
30
x5= 1602x1- 3x2
Полагая свободные переменные x1, x2 равными нулю, находим начальную вершину (первое опорное решение)
x(0)1=0, x(0)2=0, x(0)3=300, x(0)4=100, x(0)5=160.
Значение F в этой вершине равна 0. Подставляя (7.16) в (7.15) находим, что вид выражения (7.15) не меняется. Поскольку коэффициенты при свободных переменных отрицательны, то это решение не оптимальное: значение F может быть уменьшено путем увеличения как x1, так и x2.
Положим x2=0 и будем увеличивать x1. Во всех соотношениях (7.16) коэффициенты при x1 отрицательны, что приводит к оценкам
x1<300/4=75, x1<100/2=50, x1<160/2=80.
Таким образом, x1 можно увеличивать до 50, и при x1=50, x2=0 мы находим новую вершину (второе опорное решение).
x(1)1= 50, x(1)2= 0, x(1)3= 100, x(1)4= 0, x(1)5 = 60.
Значения x3, x4, x5 здесь найдены из (7.16). Целевая функция F в этой вершине равно -500; как и следовало ожидать, оно меньше, чем в предыдущей вершине.
Теперь выберем в качестве нового базиса ненулевые переменные x1,x3,x5. Их необходимо выразить через свободные переменные x2 и x4. Это можно сделать так. Считая x2 и x4 фиксированными, перенесем их в правую часть (7.14). Получим систему из трех уравнений с тремя неизвестными
x1,x3,x5:
4x1+ x3= 300 - 5x2 2x1= 100 - x2 - x4 2x1+ x5= 160 - 3x2
Ее легко разрешить: из второго уравнения
x1= 50 - 0,5x2 - 0,5x4,
и подставляя это выражение в первое и третье уравнения, окончательно получаем
x1= 50 - 0,5x2 - 0,5x4
x3= 100 - 3x2+ 2x4 (7.17) x5= 60 - 2x2+ x4
Подставляя эти выражения в (7.15), имеем
F = -500- 7x2+ 5x4.