Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Промежуточные вычислении 11 страница



d) Минимизировать z = 5хх + 4х2

при ограничениях

Зх, + 2х2>5, 2хх + 3х2>7, хх, х2 > 0 и целые.

е) Максимизировать z = 5хх + 7х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х12 + х3<10, х х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 Хз 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) Зх12<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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.027 с)...