![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
d) Минимизировать z = 5хх + 4х2
при ограничениях
Зх, + 2х2>5, 2хх + 3х2>7, хх, х2 > 0 и целые.
е) Максимизировать z = 5хх + 7х2 при ограничениях
2хх +х2< 13, 6хх + 9х2<41, х,, ж2>Оицелые.
Глава 9. Целочисленное линейное программирование
3. Решите задачи из предыдущего упражнения, предполагая, что на переменную Xj не налагается условие целочисленности.
4. Покажите графически, что следующая задача ЦЛП не имеет допустимых решений, а затем проверьте этот результат с помощью метода ветвей и границ.
Максимизировать z = 2х1 + х2
при ограничениях
10х, + 10х2 < 9, 10х, + 5х2> 1, хр х2 > 0 и целые.
5. Решите следующую задачу методом ветвей и границ. Максимизировать z = 18х, + 14х2 + 8х3 + 4х4
при ограничениях
15х, + 12х2 + 7х3 + 4х4 + х5 < 37, х,, х2, х3, х4, х5 = 0 или 1.
9.2.2. Метод ветвей и границ в системе TORA
Модуль целочисленного программирования системы TORA позволяет интерактивно генерировать деревья подзадач в методе ветвей и границ. Чтобы воспользоваться этой возможностью, в выходном окне модуля целочисленного программирования выберите опцию User-guided В&В (Учебный режим метода ветвей и границ). В этом окне представлена вся информация, необходимая для создания дерева подзадач. На рис. 9.9 показан внешний вид окна, в котором представлен корень N10 дерева подзадач, которое соответствует задаче ЛПО на рис. 9.6 (файл ch9ToraB&BEx9-2-l.txt). Каждый узел определяется двумя цифрами, перед которыми стоит буква N. Левая цифра определяет строку таблицы, в которой находится узел, а правая цифра представляет порядковое значение в пределах той же строки. Например, обозначение N10 на рис. 9.9 указывает, что узел 0 расположен в строке 1 (это единственный узел в этой строке). В программе TORA может быть не более 10 подзадач в одной строке. Но помните, что в автоматическом режиме нет каких-либо ограничений на количество генерируемых подзадач.
Далее следует выбрать переменную ветвления, щелкнув на любом из узлов, помеченных "х?". Эти узлы выделены зеленым цветом. Если щелкнуть на записи одного узла над областью, где расположено дерево, появится соответствующее решение. Как показано на рис. 9.10, из решения для узла N10 видно, что х, = 3,75 и х2 = 1,25. Также следует обратить внимание на то, какие переменные ограничены целыми значениями. Щелчок на любой из переменных приведет к автоматическому созданию двух подзадач, которые соответствуют выделенной переменной ветвления. На рис. 9.11 показан результат выбора х, в качестве переменной ветвления в узле N10. К дереву были добавлены узлы N20 (соответствует новому ограничению х, < 3) и N21 (соответствует новому ограничению х, > 4). В узле N20 получено целочисленное решение, поэтому он считается прозондированным. Прозондированные узлы выделяются красным или пурпурным цветом. Пурпурный цвет используется тогда, когда в прозондированном узле была достигнута текущая нижняя граница значения целевой функции, что в данном случае произошло с узлом N20. Узел N21 пока не прозондирован. Поэтому щелчок на нем приведет к созданию следующих узлов в строке 3 дерева. Этот процесс продолжается до тех пор, пока не будут прозондированы все узлы (т.е. пока все они не будут выделены красным или пурпурным цветами).
9.2. Методы решения задач целочисленного программирования
Рис. 9.10. Выбор переменной ветвления
Глава 9. Целочисленное линейное программирование
В верхнем правом углу выходного окна автоматически отслеживается нижняя и верхняя границы целевой функции. Эти границы вычисляются автоматически при зондировании узлов. TORA отбрасывает подзадачи, значения целевых функций которых выходят за текущие границы. Тем не менее можно убрать границы (т.е. снять флажок с опции) для создания полного дерева подзадач. В этом случае узел будет прозондирован только тогда, когда будет получено целочисленное решение или если оно будет недостижимо.
Важно отметить, что в автоматическом режиме TORA выполняет последовательное решение подзадач по принципу "первым пришел — первым ушел". Поэтому, вероятнее всего, поиск вручную может привести к более эффективному дереву подзадач, поскольку пользователь может осуществить лучший выбор следующего зондируемого узла.
УПРАЖНЕНИЯ 9.2.2
1. Следующее упражнение было создано для того, чтобы продемонстрировать неестественное поведение метода ветвей и границ в некоторых ситуациях даже для небольших по размеру задач. В частности, обратите внимание на то, сколько подзадач будет проверено прежде, чем будет найден оптимум.
Минимизировать у
при выполнении условий
2(ж,+ *, +... +*16) + г/= 15. Все переменные двоичные.
9.2. Методы решения задач целочисленного программирования 421
Используя программу TORA в автоматическом режиме, ответьте на следующие вопросы.
a) Сколько подзадач было решено прежде, чем было найдено оптимальное решение?
b) Сколько подзадач было решено прежде, чем была проверена оптимальность найденного решения?
2. Дана следующая задача ЦЛП.
Максимизировать z — 18х, + 14лс2 + 8х3 при выполнении условий
15х, + 12л;2+ 7х3 < 43,
xlt х2, х3 — неотрицательные целые.
В системе TORA в режиме пошагового выполнения создайте дерево подзадач с вычислением границ целевой функции и без такового. Как повлияет знание границ целевой функции на количество сгенерированных подзадач? Для сравнения всегда выбирайте переменную ветвления с наименьшим индексом и зондируйте все задачи в текущей строке слева направо, затем переходите на следующую строку.
3. Вернитесь к задаче из упражнения 2. Преобразуйте эту задачу в задачу ЦЛП с двоичными переменными, затем решите ее в программе TORA в автоматическом режиме. Сравните размеры деревьев подзадач в каждом из упражнений.
4. В следующей задаче ЦЛП с двоичными переменными с помощью TORA сгенерируйте дерево подзадач.
Максимизировать z = Зх, + 2хг - 5х3 - 2х4 + Зхь
при выполнении условий
х, + х2 + х3 + 2xi + хь < 4, 7ж, + Зх3 - 4xt + Зх5 < 8, Их, - 6х2 + Зх4 - Зх6 > 3, ж,, х2, х3, xf, хь = О или 1.
5. Используя программу TORA в режиме пошагового выполнения, покажите, что следующая задача не имеет допустимого решения.
Максимизировать z = 2х, + х2
при выполнении условий
10х, + НЦ, < 9, 10х, + 5х2 > 1, xv х2 = 0 или 1.
6. С помощью TORA создайте дерево подзадач в методе ветвей и границ для следующей частично-целочисленной задачи и найдите ее оптимальное решение.
Максимизировать z = х, + 2х2 - Зх3
при выполнении условий
Зх, + 4х2 - х3 < 10, 2jc, - Зх2 + 4х3 < 20, х,, х2 неотрицательные целые, х3>0.
Глава 9. Целочисленное линейное программирование
7. В системе TORA создайте дерево подзадач для следующей задачи, полагая, что выполняется только одно ограничение.
Максимизировать г = ж1 + 2дг2 - Здг3
при выполнении условий
20х1 + \Ьх2- х3<10, 12x, + 3x2 + 4x3<13, х„ х2, х3>0.
8. Преобразуйте представленную ниже задачу в частично-целочисленную, после чего в системе TORA сгенерируйте для нее дерево подзадач. Каким будет оптимальное решение?
Максимизировать z = хх + 2лг2 + 5jc3
при выполнении условий
\-хх + \Ъхг - Ъхг\>\Ь, 2х1+х2 + х3<10, х1г х2, х3 > 0.
9.2.3. Метод отсекающих плоскостей
Данный метод, как и метод ветвей и границ, начинает работу с оптимального решения "обычной" (непрерывной) задачи линейного программирования. Однако вместо ветвления и построения границ этот метод видоизменяет пространство допустимых решений, последовательно прибавляя специальным образом построенные ограничения (именуемые отсечениями). Рассмотрим сначала идею этого метода на графическом примере, а затем покажем, как отсечения строятся алгебраически.
Пример 9.2.2
Продемонстрируем применение метода отсекающих плоскостей для решения следующей задачи ЦЛП.
Максимизировать z = 7jc, + 10х2
при ограничениях
+ Зх2 < 6, Чхл+х3<ЗЬ, xv х2> 0 и целые.
Данный метод путем добавления отсечений (отсекающих плоскостей) преобразует пространство допустимых решений соответствующей задачи линейного программирования в выпуклый многогранник, вершина которого, соответствующая оптимуму, является целочисленной и представляет решение исходной задачи. На рис. 9.12 показан пример двух таких отсечений. Мы начинаем с оптимального решения непрерывной задачи линейного программирования (хх, х2) = (4,5, 3,5) и z = 66,5. Затем прибавляем отсечение I, которое вместе с ограничениями исходной задачи линейного программирования приводит к оптимальному решению (xv х2) = (4 у, 3) с z = 62. После этого прибавляется отсечение II, которое вместе с отсечением I и исходными ограничениями приводит к оптимальному решению (jc,, х2) — (4, 3) с z = 58. Последнее решение является полностью целочисленным, как и требуется.
9.2. Методы решения задач целочисленного программирования
Прибавленные отсечения не отбрасывают ни одной исходной допустимой целочисленной точки, но должны проходить по меньшей мере через одну целочисленную точку (допустимую или недопустимую). Этим основным требованиям должно удовлетворять любое отсечение.
В общем случае может потребоваться любое (конечное) число отсечений для достижения полностью целочисленной экстремальной точки. В действительности количество необходимых для этого отсечений не зависит от размерности задачи в том смысле, что для решения задачи с небольшим количеством переменных и ограничений может потребоваться больше отсечений, чем для задачи большой размерности.
Рис. 9.12. Последовательность построения отсечений
Метод отсекающих плоскостей начинает работу с решения непрерывной задачи линейного программирования. В симплекс-таблице, соответствующей оптимальному решению задачи линейного программирования, следует выбрать одну из строк (называемую производящей), для которой базисная переменная нецелочисленная. Искомое отсечение строится на основании дробных составляющих коэффициентов производящей строки. По этой причине его называют дробным отсечением. Покажем построение дробного отсечения на нашем примере.
При дополнительных переменных хъ и х4 для ограничений 1 и 2 оптимальная симплекс-таблица исходной задачи имеет следующий вид.
Базис | Х1 | хг | хз | Xi | Решение |
z | 63/22 | 31/22 | 66,5 | ||
хг | 7/22 | 1/22 | 3,5 | ||
Х1 | -1/22 | 3/22 | 4,5 |
Оптимальным непрерывным решением является jc1 = 4,5, jc2 = 3,5, хг = 0, xt = О иг = 66,5. Целочисленное отсечение получается в предположении, что все переменные задачи являются целочисленными. Поскольку коэффициенты исходной целевой функции являются целочисленными, то и значение г, соответствующее целочисленному решению, должно быть целочисленным.
Информация, содержащаяся в симплекс-таблице, соответствующей оптимальному решению, может быть записана в виде следующих уравнений.
z-уравнение: z + ||x3+|±х4 = 66^, ^..-уравнение: хг+^хг +^*4 =3^-^-уравнение: -^х, =4^.
Глава 9. Целочисленное линейное программирование
Так как в этом примере г, хх и х2 должны быть целочисленными и все они на данный момент имеют дробные значения в оптимальной симплекс-таблице, любое из трех уравнений можно использовать в качестве производящей строки для построения отсечения. Выберем (произвольно) для этой цели z-уравнение.
Z+ 22 ХЪ + 22*4 = ^2 (пРОИЗВОДЯ1Чая z-строка).
Для построения дробного отсечения каждый из нецелочисленных коэффициентов раскладывается на целую и дробную части при условии, что дробная часть является строго положительной. Например,
5 2
И)-
Разложение коэффициентов производящей z-строки приводит к следующему уравнению.
При переносе всех целочисленных слагаемых в левую часть уравнения, а всех дробных слагаемых в правую часть получаем следующее.
z+ 2V*4-66 = l-g*3-£*4.
Поскольку все переменные в рассматриваемой задаче принимают целочисленные значения, левая часть последнего уравнения должна быть целочисленной, откуда следует, что и правая часть также должна принимать целые значения. Перепишем ее следующим образом.
i-lir -S-r =1 2 22 3 22 4 2
:х __z.x =jl_(1£x +±х) • - ' " \22*3 + 22 4/'
Поскольку х3, xt > О, выражение в скобках является неотрицательным. Поэтому величина т_тгхэ -£*4. будучи целочисленной, не может превышать 1/2. Следовательно, необходимое условие целочисленности можно записать следующим образом.
--2-х <0 2 22 3 22 4-и'
Это и есть дробное отсечение, порожденное z-строкой. Нетрудно убедиться, что ранее найденное оптимальное непрерывное решение хх = 4,5, х2 = 3,5, х3 = О, х4 = 0 не удовлетворяет отсечению. Действительно, так как xa = xt = О, отсечение не удовлетворяется (оно приводит к неравенству 1/2 <0). Следовательно, если мы присоединим отсечение к конечной симплекс-таблице, то оптимальное решение новой симплекс-таблицы будет "двигаться" в направлении выполнения ограничения целочисленности. Можно таким же образом построить отсечение, исходя из производящей л^-строки или лг2-строки. Рассмотрим сначала jCj-строку. Имеем
Xl~22X3 + 22ХА = 4 2 (пРоизв°ДяЩая *f строка). Операция разложения приводит к уравнению
v(-1+iM0+£h=K)-
Соответствующим отсечением является
21.. 3... 1
9.2. Методы решения задач целочисленного программирования
Аналогично
*2 + z2x3 + 22Х4 = 3 2 (пРоизв°Дящая *2"стРока) записывается в виде
v(0+i)v(0+Ata=(3+2-)-
Следовательно, в данном случае отсечение имеет вид
——х ——х + — <0 22*3 22 4 + 2
Любое из трех отсечений может быть использовано на первой итерации метода отсекающих плоскостей. Поэтому нет необходимости строить все три отсечения перед выбором одного из них.
Выбирая (произвольно) отсечение, порожденное д:2-строкой, записываем его следующим образом.
'22ХЪ~72Х4 + $\=~2' 51 ~° (отсечение
Это ограничение добавляется в качестве дополнительного в оптимальную симплекс-таблицу задачи.
Базис | *i | х2 | Хз | X» | Si | Решение |
z | 63/22 | 31/22 | 66,5 | |||
хг | 7/22 | 1/22 | 3,5 | |||
Х1 | -1/22 | 3/22 | 4,5 | |||
«1 | -7/22 | -1/22 | -0,5 |
Таблица представляет оптимальное, но недопустимое решение. Для восстановления допустимости решения применим двойственный симплекс-метод (см. раздел 4.4), что приведет к следующей симплекс-таблице.
Базис | Х1 | хг | хз | Хл | S1 | Решение |
z | ||||||
хг | ||||||
Х1 | 1/7 | -1/7 | Ц | |||
Хз | 1/7 | -22/7 |
Из-за дробных значений переменных jc, и х3 последнее решение все еще нецелочисленное. Выберем лг,-строку в качестве производящей, т.е.
vKh+(-'+fh=K)-
Соответствующее отсечение имеет вид
~4xa~7s,+s2=~i' s2~° (отсечение2).
426 Глава 9. Целочисленное линейное программирование
Присоединяя отсечение 2 к последней симплекс-таблице, получаем следующее.
базис | Хх | Хг | Хз | Ха | S1 | s2 | Решение |
z | |||||||
хг | |||||||
хх | 1/7 | -1,7 | ц | ||||
хз | 1/7 | -22/7 | |||||
S2 | -1/7 | -6/7 | -4/7 | ||||
Применение двойственного таблице. | симплекс-метода | приводит к | следующей | симплекс- | |||
Базис | xx | хг | хз | ха | Si | s2 | Решение |
z | |||||||
хг | |||||||
хх | -1 | ||||||
хз | -4 | ||||||
ха | -7 |
Оптимальное решение (jc, = 4, хг = 3, г — 58), определяемое последней симплекс-таблицей, является целочисленным. То, что все элементы данной симплекс-таблицы являются целочисленными, не случайность. Это типичное явление при использовании дробных отсечений.
Важно подчеркнуть, что применение дробного отсечения предполагает целочис-ленность всех переменных, включая дополнительные. Это значит, что данный метод применим только к решению полностью целочисленных задач.
Важность этого продемонстрируем на следующем примере. Рассмотрим ограничение
1 13
х. +-х2 <-,
1 3 2 2
л:,, хг> О и целые.
С точки зрения решения соответствующей задачи ЦЛП это ограничение преобразуется в уравнение путем введения неотрицательной дополнительной переменной s,, т.е.
1 13
1 3 - 1 2
Применение дробного отсечения предполагает, что ограничение имеет допустимое целочисленное решение по всем переменным, т.е. xv х2 и s,. Рассмотрев это уравнение, можем сказать, что оно может иметь допустимое целочисленное решение переменных хх и х2 лишь в том случае, если переменная s, принимает нецелочисленные значения. Следовательно, применение дробного отсечения приведет к недопустимому целочисленному решению, так как все переменные xlt х2 и s, не могут одновременно быть целочисленными. Тем не менее ограничение имеет допустимые целочисленные решения для рассматриваемых переменных х: и х2.
9.2. Методы решения задач целочисленного программирования 427 Есть две возможности исправить эту ситуацию.
1. Можно умножить все ограничения на соответствующую константу для устранения дробей. Например, приведенное выше ограничение умножается на 6, что приводит к неравенству 6xt + 2х2 < 39. Любое целочисленное решение переменных х, и х2 автоматически дает целочисленное значение дополнительной переменной. Однако этот тип преобразования применим лишь для простых ограничений, так как значения необходимых целочисленных коэффициентов в некоторых случаях могут быть чрезвычайно большими.
2. Можно использовать специальные отсечения, именуемые частично-целочисленными. Они ориентированы на решение задач, в которых лишь часть переменных должна принимать целочисленные значения, а остальные (включая дополнительные) остаются непрерывными. Детальное изложение таких отсечений в этой главе не рассматривается (см. [3]).
УПРАЖНЕНИЯ 9.2.3
1. В примере 9.2.2 покажите графически, может ли каждое из следующих ограничений служить в качестве правильного отсечения.
a) х, + 2х2 < 10.
b) 2х, + л:2 < 10.
c) Зх2<10.
d) Зх1+х2<15.
2. В примере 9.2.2 покажите графически, как следующие два правильных отсечения могут привести к оптимальному целочисленному решению.
Отсечение I. х, + 2х2 < 10.
Отсечение II. 3xj + х2 < 15.
3. Запишите отсечения I и II в примере 9.2.2 через уравнения для переменных х, и х2 и покажите, что они совпадают с отсечениями, которые графически показаны на рис. 9.12.
4. Покажите, что дробное отсечение не приводит к допустимому решению в приведенной ниже задаче, если не устранены все дроби в ограничении.
Максимизировать z = хх + 2х2
при ограничениях
1 13 1 2 " 4 х,, х2 > 0 и целые.
5. Решите следующие задачи методом отсекающих плоскостей и сравните оптимальное целочисленное решение с решением, полученным путем округления соответствующего оптимального непрерывного решения.
а) Максимизировать г = 4х, + 6х2 + 2хъ
при ограничениях
4х,-4х2<5,
-х, + 6х2< 5,
-х, + х2 + х3< 5,
х,, х2, х3> 0 и целые.
Глава 9. Целочисленное линейное программирование
Ь) Максимизировать г = Зх, + хг + 3jc3 при ограничениях
~ху + 2х2 + х3 < 4, 4лг2 - Зх3 < 2, х1-3х2 + 2х3<3, xv х2, х3 > 0 и целые.
9.2.4. Вычислительный взгляд на задачи ЦЛП
На сегодняшний день, несмотря на 40 лет интенсивных исследований, не существует вычислительного алгоритма, приемлемого для решения всех разнообразных задач целочисленного программирования. Из представленных в этой главе двух алгоритмов метод ветвей и границ считается более эффективным — практически все коммерческие программы, предназначенные для решения задач ЦЛП, используют этот метод. Метод отсекающих плоскостей более сложен и менее надежен, кроме того его реализация порождает серьезные проблемы, связанные с ошибками машинного округления. Было много попыток сделать этот метод эффективным для компьютерных вычислений, но они не увенчались большими успехами. В большинстве случаев метод отсекающих плоскостей используется как дополнительный метод при решении подзадач, генерируемых в процессе применения метода ветвей и границ.
Наиболее важным фактором, влияющим на процесс вычислений в целочисленном программировании, является количество целочисленных переменных. Существующие алгоритмы не решают задачу ЦЛП последовательно, т.е. не позволяют получать промежуточные целочисленные решения, отличные от оптимального, поэтому с вычислительной точки зрения в задаче ЦЛП необходимо ограничиться по возможности меньшим числом переменных, принимающих целочисленные значения. Следующие советы могут оказаться полезными при решении практических задач.
1. Аппроксимировать целочисленные переменные непрерывными, где это возможно.
2. Сузить, насколько возможно, интервалы допустимых значений целочисленных переменных.
3. Избегать в модели ЦЛП использования нелинейных функций.
Уровень развития методов решения целочисленных задач не удовлетворяет требованиям, которые диктуются их практической важностью. Маловероятно, что в целочисленном программировании будет получен новый теоретический прорыв. Представляется более вероятным, что новые технологические достижения в области компьютерной техники могут предложить новые пути повышения эффективности алгоритмов решения задач ЦЛП.
9.3. ЗАДАЧА КОММИВОЯЖЕРА
Задачи такого типа известны под общим названием задача коммивояжера, в "классической" формулировке которой коммивояжер пытается определить кратчайший маршрут для одноразового посещения п городов. По существу, эта задача является задачей о назначениях с дополнительными ограничениями, которые гарантируют исключение из оптимального решения неполных замкнутых маршрутов. (В задаче коммивояжера замкнутый маршрут, проходящий через
9.3. Задача коммивояжера
каждый пункт только один раз, называется циклом; цикл, проходящий через все пункты, называется полным, в противном случае — частичным или подциклом.) В задаче коммивояжера с п городами можно определить такие переменные:
|1,если город j достижим из города i, У [0, в противном случае.
Имея значения dtj, расстояния от города i до города j (считается, что йц = °° при i=j), задачу коммивояжера можно формализовать следующим образом.
Минимизировать г = ХХ^Л
при ограничениях
2Х= 1,1=1,2, ■■■'п<
7=1 и
хц = 0 или 1,
решение должно быть полным циклом.
Ограничения задачи, кроме последнего, определяют обычную задачу о назначениях (см. раздел 5.4). В общем случае нет гарантии, что оптимальное решение задачи коммивояжера может быть получено путем решения соответствующей задачи о назначениях, т.е., что оптимальное решение задачи о назначениях образует полный цикл. Более вероятно, что оно будет содержать частичные циклы, соединяющие вместе некоторые подмножества узлов сети. На рис. 9.13 показана задача коммивояжера, состоящая из 5-ти городов. Ребра, соединяющие узлы (города) сети, соответствуют дорогам с двухсторонним движением. На этом рисунке показано решение задачи коммивояжера и частичные циклы, соответствующие решению задачи о назначениях. Если задача о назначениях формирует полный цикл, то это будет оптимальным решением задачи коммивояжера. Если оптимальное решение задачи о назначениях состоит из нескольких частичных циклов, то в эту задачу добавляются специальные ограничения, удаляющие решения с частичными циклами. Такие ограничения будут показаны далее в этом разделе.
Задача S-ти городов Решение задачи коммивояжера Решение задачи о назначениях (х12 — Хх — xw — x4i — х31 — 1) (хи — хп — xls — хн — ХЧ| — 1)
Рис. 9.13. Пример задачи коммивояжера для 5-ти городов
Глава 9. Целочисленное линейное программирование
Основные методы решения задачи коммивояжера построены на тех же основах, что и методы ветвей и границ и отсекающих плоскостей, рассмотренные в разделе 9.2. Прежде чем представлять эти методы, рассмотрим пример, демонстрирующий универсальность задачи коммивояжера для описания различных практических ситуаций (см. также упражнения 9.3.1).
Дата публикования: 2014-11-18; Прочитано: 501 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!