Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Исследование операций и методы оптимизации. Учебное пособие
.pdf
Пусть
C
X
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
()()(
)
(
)
(){
}
µ
Θ=Θ
(
)
µ
Θ
X
(
)
(
)
µ
Θ
(
)
C
C
(
)
()(
)
(
)
(
)
X
(
)
r
m
=
st=
(
)
C
1
– редуцированная матрица, соответствующая вершине
1
.
Опишем способ выбора дуги
1
Xd
поменьше, а оценку
1
вероятность выбора для дальнейшего ветвления множества
уменьшению
µ
1
Xd
приводит к выбору такой дуги
1
0,1=vC
(4.21)
поскольку все маршруты множества
Стремление же увеличить
sr
, . Он
1
Xd
2
основан на стремлении сделать оценку
–
побольше, для того, чтобы увеличить
1
X содержат дугу
1
1
Xd приводит к выбору среди дуг,
2
1
X
.
Стремление к
1
v
,µ,
для которой
v,µ.
удовлетворяющих условию (4.21) той дуги, для которой значение функции
1
+=Θ
v
:
1
vCCv
,min,min,
σρµµ
:
µσσρρ
≠≠
максимально, т.е.
vsr
,max,
1
( )
vCv
:,
0,
µµ
=
Смысл введения функции Θ состоит в том, что величина
оценкой снизу для длины любого маршрута из
v,
является
1
, не содержащего дуги
v,µ,
так как величина
коммивояжер проезжает в случае, когда в маршрут не включена дуга
Построение редуцированных матриц
v,
выражает дополнительное расстояние, которое
1
и
1
1
и вычисление оценок
2
v,µ.
снизу
Положим
1
1
( )
2
=
jiC
,
( ) ( ) ( )
( ) ( )
Искомая редуцированная матрица
≠
srjijiC
,,,,,
=∞+
srji
,,,
1
C
получается из
2
C с
1
2
помощью
описанной выше процедуры редуцирования. Сумма констант редуцирования
равна при этом
sr,Θ, а
величина
2
снизу для целевой функции F(x) на множестве
Рассмотрим теперь множество
содержат дугу
sr
, .
Найдем максимальный связанный путь, который
принадлежит всем маршрутам множества
1
X. Все маршруты из этого множества
1
1
и
11
Θ+=
1
X
.
2
содержит дугу
srXdXd ,
является оценкой
sr
, .
Пусть этот путь начинается в городе
быть
,
или
,
или то и другое одновременно).Чтобы запретить
m и
заканчивается в городе t (может
подцикл, начинающийся и заканчивающийся в
Остальные элементы матрицы
элементам матрицы
1
,
при этом строку, соответствующую городу
1
C
полагаем равными соответствующим
1
81
m,
положим
1
,
1
+∞=mtC
.
r и
столбец
,

соответствующий городу s, в матрицу
C
(
)
C
()(
)
(
)
C
(
)
(
)
(){
}
(
)
()()()()(){
}
(
)
1
маршруты из
Редуцированная матрица расстояний
матрицы
функции
где
τ –
C
F(x) на
1
сумма констант редуцирования
1
X
содержат дугу
1
1
с помощью операции редуцирования. При этом оценка снизу для
1
множестве
11
τ
+=
XdXd
X
1
sr, .
1
1
1
вычисляется по формуле
.
Формирование списка кандидатов на ветвление.
не включаем, поскольку все
для вершины
1
X
получается из
1
После вычисления каждой из оценок
состоит ли множество
в каждом столбце матрицы
от
+∞, то
равна
множество
1
Xd . В
i
этом случае верхняя граница
вычисленных значений
значения
Если
значения
Z
0
X
Z ,
0
и
1
i
1
Xd ,
i
,min
XdZZ = .
00
содержит более одного маршрута и
то множество
X из
X
F(x)
т.е
1
i
1
единственного маршрута. Если в каждой строке и
i
1
i
1
содержит единственный маршрут, длина которого
i
полагается равной минимуму из предыдущего
.
X
оказалось лишь по одному элементу, отличному
1
включается в число кандидатов на ветвление
i
1
Xd (i = 1, 2)
i
следует проверить, не
Z (
наименьшее из уже
0
1
Xd
меньше текущего
i
Остановка производится, если наименьшая из оценок снизу кандидатов на
ветвление не меньше текущего значения
Пример 4.3
Решить методом ветвей и границ задачу коммивояжера с матрицей
∞
∞
=
C
Возьмем в качестве произвольного допустимого маршрута
x . Тогда
0
значение 0Z
∞
–
(верхняя граница длин всех маршрутов).
10252510
215101
102098
∞
15241214
∞
2725810
1,55,4,4,3,3,2,2,1
Z .
0
651015201010
0
=++++=xF – текущее
.
Получим редуцированную матрицу C.
82

∞
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
()(
)
(
)
()()(
)
(
)
()(
)
()(
)
(
)
(
)
∞
∞
=
Нижняя граница d(X) = 10+1+8+10+8+9+12=58. Данное значение является нижней
границей длин всех маршрутов. Заметим, что в идеальном случае поиск решения
заключался бы в выборе ровно одного нулевого элемента в каждой строке и каждом
столбце. Другими словами, если бы такой маршрут нулевой длины мог бы быть
найден, то длина оптимального маршрута равнялась бы 58. Исходя из верхней и
нижней границ можно заключить, что
∞
10252510
215101
102098
∞
15241214
∞
2725810
10
1
8
10
8
∞
~
∞
015150
∞
11490
21210
~
∞
51404
∞
191702
012900
*
≤≤ xF .
6558
∞
∞
∞
0360
1200
CC =
2010
5504
∞
7802
Выберем дугу
02,1 =Θ
Следовательно
Осуществим разбиение (ветвление
маршруты, которые исключают дугу
∞
=
Оценка снизу для правого подмножества
Левое подмножество
(2,3), и
результате будем иметь матрицу на единицу меньшего размера. Далее необходимо
положить
матрицу
sr,
с
помощью вычисления значений функции
,
22,5 =Θ
∞
∞
поэтому вторая строка и третий столбец в матрицу
C
1
01,2 =Θ
,
,
0
0360
0
1200
~
0
2010
0
5504
∞
7802
0
∞
X
будет содержать маршруты, которые всегда включают дугу
1
+∞=2,3
,
чтобы запретить подцикл
5421
3,2, =Θ sr
.
01,3 =Θ
∞
635583,2 ZXdXd <=+=Θ+= .
,
).
Правое подмножество
(2,3).
∞∞
∞
02
42,4 =Θ
,
Поэтому
∞
7802
∞
00500
X
определяется следующим образом
2
C
0360
∞
120
2010
~
5504
{(2,3),(3,2)}. В
15,1 =Θ
,
2
∞∞
∞
v,
µ
Θ
X
будет cодержать все
2
+∞=3,2
.
∞
7302
C
1
53,2 =Θ
,
0310
120
CC =
2010
5004
∞
не
результате получим
22
включаются. В
24,3 =Θ
:
,
∞
030
200
CC =
1
504
702
∞
58058 ZXdXd <=+=+=
01
X
и
X
.
1
v,
µ
Θ
для матрицы
83
C
.
1
Так как
2
X
.
Выберем дугу
1
XdXd <
,
21
sr,
с
1
∞
3
=
1
4
5
Оценка снизу для левого подмножества
∞
τ
В списке кандидатов на ветвление множества
следовательно, будем производить ветвление множества
помощью значений функции

(
)
02,1 =Θ
(
)
(
)
(
)
(
)
(
)
(
)
()(
)
()()(
)
(
)
()(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
()(
)
()()(
)
,
25,1 =Θ
,
21,3 =Θ
,
34,3 =Θ
,
42,4 =Θ
,
22,5 =Θ
Следовательно,
Правая подматрица:
1
∞
3
=
4
4
5
Оценка снизу для правого подмножества
Левая подматрица
Левое подмножество
(4,2), и
результате будем иметь матрицу на единицу меньшего размера. Далее необходимо
положить
получим матрицу
поэтому четвертая строка и второй столбец в матрицу
∞
C
∞∞
702
:
4,3
3
541
4, =Θ sr
,
5421
1
0
030
3
0
200
~
4
4
54
5
0
∞
X будет содержать маршруты, которые всегда включают дугу
3
+∞=
,
чтобы запретить подцикл
2,4, =sr
.
5421
∞
∞
030
200
CC =
4
10
∞∞
702
∞
0000
:
C не включаются. В
3
{(4,2),(2,3),(3,4)}. В
541
624582,4
ZXdXd <=+=Θ+=
результате
014
1
0
∞
03
20
72
∞
∞
~20
1
∞
3
=
3
5
τ
В списке кандидатов на ветвление множества
Минимальная нижняя оценка оказалась у множества
дальнейшего разбиения выбираем множество
Определим дугу
02,1 =Θ
,
Следовательно
Правая подматрица
1
∞
3
=
6
Оценка снизу для правого подмножества
Следовательно, множество
4
5
sr,
с
помощью значений функции
15,1 =Θ
,
,
∞∞
∞∞
702
3, =Θ sr
,
:
5421
1
030
3
20
~
4
10
5
∞
03
~
20
∞
50
∞
030
63558
ZXdXd <=+=+=
013
01,3 =Θ
,
4,3, =sr
∞
653624,3
X исключаем из списка
6
∞
3
5
34,3 =Θ
,
.
5421
000
20
∞∞
10
∞∞
402
∞
:
ZXdXd ==+=Θ+=
.
046
00
20
∞
CC =
X
,
X
4
µ
Θ
11,4 =Θ
,
.
∞
20
X
,
3
X
.
4
CC =
6
3
.
2
X
,
4
v,
для матрицы
22,5 =Θ
следовательно, для
C
.
4
84

Левая подматрица:
(
)
()(
)
(
)
(
)
(
)
(
)
(
)
(
)
(
)
()(
)
()()(
)
(
)
()(
)
Левое подмножество 5X будет содержать маршруты, которые всегда включают дугу
(3,4), и поэтому третья строка и четвертый столбец в матрицу 5C не включаются. В
результате будем иметь матрицу на единицу меньшего размера. Далее необходимо
положить
условие оказалось уже выполненным. В результате получим матрицу
C , чтобы запретить подцикл {(2,3),(3,4), (4,2)}, однако это
5
+∞=2,4
521
∞
∞∞
00
CC =
10
02
∞
τ
521
00
1
02
∞
5
62062 ZXdXd <=+=+=
sr,
с помощью значений функции
15,1 =Θ
,
0
~01
31,4 =Θ
3, =Θ sr
,
∞
∞∞
02
.
045
,
00
0
∞
002
653621,4 ZXdXd ==+=Θ+= /
22,5 =Θ
1,4, =sr
.
1
∞
4
~
5
058
X
2
v,
µ
Θ
521
00
0
∞∞
00
∞
для матрицы 5C
CC =
8
1
∞
=
5
4
5
Оценка снизу для левого подмножества:
В списке кандидатов на ветвление множества 3X , 5X ,
Минимальная нижняя оценка оказалась у множества 5X , следовательно, для
дальнейшего разбиения выбираем множество 5X .
Определим дугу
02,1 =Θ
,
Следовательно,
Правая подматрица:
1
∞
4
=
8
Оценка снизу для правого подмножества:
Следовательно, множество 8X исключаем из списка.
Левая подматрица:
Левое подмножество 7X будет содержать маршруты, которые всегда включают дугу
5
(4, 1), и поэтому четвертая строка и первый столбец в матрицу 7C не включаются. В
результате будем иметь матрицу на единицу меньшего размера. Далее необходимо
положить
=
7
Оценка снизу для левого подмножества:
C , чтобы запретить подцикл {(2,3),(3,4),(4,1),(1,2)}.
7
1
∞
0
5
∞
+∞=2,1
52
0
CC =
7
τ
6262 ZXdXd <=+=+=
.
057
85

В списке кандидатов на ветвление множества 3X , 7X ,
()()()()(){
}
(
)
содержит единственный маршрут с минимальной нижней оценкой, поэтому задача
решена.
1
*
0
Представим процесс решения в виде дерева
1,44,33,22,55,1 xx ==
*
62142010810
=++++== xFZ
.
X
. Множество 7X
2
Рис. 4.2
4.4 Метод Гомори
Метод Гомори основан на применении симплекс-метода и метода
отсечения.
Алгоритм метода
1. Сформулированная задача решается симплекс-методом без учета
целочисленности.
2. Если в результате получено целочисленное оптимальное решение, то
цель достигнута. В противном случае выбирается переменная с
нецелочисленным оптимальным значением (если дробных переменных
несколько, то выбирается та, у которой дробная часть больше).
3. Для выбранной неизвестной записывается условие отсечения её
нецелочисленного значения в виде линейного неравенства. Новое ограничение
добавляется в симплексную таблицу с оптимальным решением, и переходим к
шагу 1.
Признаком отсутствия целочисленного решения является отсутствие
дробных значений коэффициентов в строке с дробным значением базисной
переменной.
86

Для того чтобы сформулировать правило построения условия отсечения,
{
}
[
]
−
=
{
}
{
}
{
}
введем некоторые обозначения. Пусть а есть некоторое действительное число.
Обозначим через [а] целую часть числа а.
Целой частью числа а называется наибольшее целое число, меньшее или
равное а. Приведем примеры нахождения целой части различных чисел:
7
4 −=
=
10
3
;4
5
2
3;0
−=
5
4
;4
−−=
5
.1
Обратите внимание, что если целая часть положительного числа
получается простым отбрасыванием его дробной части, то целая часть
отрицательного числа получается отбрасыванием дробной части числа и
увеличением модуля полученного результата на единицу.
Обозначим далее через {а} дробную часть числа а. Дробная часть числа а
есть разность между данным числом и его целой частью:
.aaa
Для чисел, рассмотренных выше, найдем дробные части
3
7
4
10
2
3
−
5
7
4
10
2
3
5
7
4
=−=
10
)4(
3
,
3
,
5
5
5
4
−=−−−=
5
Дробная часть числа всегда положительна
3
,
0
=−=
5
4
5
1
.
)1(
=−−−=
5
.
:
Чтобы сформулировать условие отсечения в процессе решения задачи
целочисленного линейного программирования, необходимо из последней
(
оптимальной) симплекс-таблицы выписать уравнение, содержащее выбранную
нецелочисленную неизвестную х
n
=+
axax
,
kjkjk
0
где
∑
=
j
x –
k
1
базисная неизвестная
:
к
;
x
–
j
свободная неизвестная
;
a –
0k
нецелочисленное значение базисной переменной. Тогда условие отсечения
будет иметь вид
∑
j
Здесь
Рассмотрим применение метода отсечений на конкретном примере
Пример 4.4
{ }
≥
jj
axa .
kjkj
0
aa —
0,kkj
≤++
xxx
321
xxx
321
jZxx
дробные части соответствующих чисел
max;342
→++= xxxF
321
,2032
≤++
=∈≥
,401079
.2,1,,0
.
.
87

Отбрасывая требование целочисленности, решим заданную задачу как обычную
−
−
−
7573717
−
−
−
−
−
задачу линейного программирования.
БП СЧ
y
1
y
2
20 2 3 1 20/3
40 9 7 10 40/7
x
1
x
2
x
3
CO
F 0 -2 -4 -3
БП СЧ
y
1
x
2
20/7 -13/7 -3/7 -23/7
40/7 9/7 1/7 10/7
x−
1
y−
2
x−
3
F 160/7 22/7 4/7 19/7
В полученном оптимальном решении задачи имеем нецелочисленное значение
неизвестной
x
. Дополнительное ограничение формируем по элементам второй
2
строки:
+
3213
10
7
−++= xyxy
;
9
= xyxy
7
1
+
7
2
40
−
3213
;
7
БП
y
1
x
2
y
3
СЧ
x
1
y
2
x−
3
20/7 -13/7 -3/7 -23/7 40/7 9/7 1/7 10/7 40
-5/7 -2/7 -1/7 -3/7 5
F 160/7 22/7 4/7 19/7
БП
y
1
x
2
y
2
СЧ
x
1
y
3
5
5
5
x
3
F 20 2 4 1
Ответ
: .20,0,5,0
321
==== Fxxx
Резюме
Из материала, изложенного в данной лекции, можно сделать следующие
выводы.
CO
− Целочисленное программирование ориентировано на решение задач
математического программирования, в которых все или некоторые
переменные должны принимать только целочисленные значения.
− Одна из основных трудностей в целочисленном программировании связана с
эффектом ошибки округления.
88

− Методы решения задач целочисленного программирования можно
классифицировать как методы отсечений и комбинаторные методы.
− Название «методы отсечений» связано с тем обстоятельством, что
вводимые дополнительные ограничения отсекают (исключают) некоторые
области многогранника допустимых решений, в которых отсутствуют
точки с целочисленными координатами.
− В основе комбинаторных методов лежит идея перебора всех допустимых
целочисленных решений.
− Наиболее известными методами целочисленного линейного
программирования являются метод ветвей и границ и метод Гомори.
Вопросы для самоконтроля
1.
Какая задача называется полностью целочисленной?
2.
Какая задача называется частично целочисленной?
3.
С чем связана основная трудность в целочисленном программировании?
4.
Дайте характеристику методов отсечения.
5.
Дайте характеристику комбинаторных методов.
6.
Что такое метод ветвей и границ?
7.
Поясните алгоритм решения задачи методом ветвей и границ.
8.
Что такое задача коммивояжера?
9.
Опишите применение метода ветвей и границ при решении задачи
коммивояжера.
10.
На чем основан метод Гомори?
11.
Сформулируйте алгоритм метода Гомори
89

5 РЕШЕНИЕ ЗАДАЧ ОПТИМИЗАЦИИ НА ОСНОВЕ
Nk,...,
1
=
МЕТОДА ДИНАМИЧЕСКОГО ПРОГРАММИРОВАНИЯ
5.1 Принцип работы метода динамического программирования
Метод динамического программирования предназначен для задач,
решение которых может быть представлено как некоторая многошаговая
операция, т.е. последовательность однотипных шагов. Решение на каждом шаге
принимается с учетом результатов предыдущих шагов, а также с учетом
последствий принимаемого решения для последующих шагов.
В менеджменте очень часто встречаются случаи, когда цель оптимального
планирования заключается в установлении наилучшей последовательности тех
или иных работ (производственных операций, этапов строительства различного
рода сооружений и т.д.). Именно эта оптимальная последовательность работ
или действий ведет к наилучшим результатам работы предприятия:
максимальной прибыли, минимуму временных и финансовых затрат,
максимальной рентабельности работы. Нахождение этой оптимальной
последовательности происходит динамически с помощью полного или
частичного перебора возможных вариантов на базе ЭВМ. Машина генерирует
возможный вариант решения, анализирует его и делает вывод о его
перспективности (запоминая его) или неперспективности (отбрасывая его). В
результате такой сортировки на каждом шаге выделяется все меньше и меньше
приемлемых вариантов. В заключение такого динамического анализа
выделяется одно или несколько лучших решений.
К числу задач, для которых может применяться метод динамического
программирования, относится большинство задач планирования на несколько
периодов времени (например, на несколько лет). Шагом в таких задачах является
один плановый период (например, один год). Метод динамического
программирования применяется также для многих задач, в которых имеется
возможность искусственно представить процесс принятия решения как
последовательность из нескольких однотипных шагов.
Общая постановка задачи, решаемой методом динамического
программирования, следующая. Имеется некоторая операция, находящаяся в
начальном состоянии
принимается некоторое решение kU , где k – номер шага (
каждого решения
S
. Операция реализуется за N шагов. На каждом шаге
0
kU
вызывает переход операции из состояния
S в
). Выбор
новое
1−k
состояние
эффективности
,...,,
21
kS , а
kZ .
UUU
,
k
также обеспечивает некоторое значение критерия
Требуется определить последовательность решений
обеспечивающих
экстремальное
(
максимальное
минимальное) значение общего критерия эффективности
значений критерия эффективности на отдельных шагах
90
E,
зависящего от
ZZZ
,...,,
21
.
k
или
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
