Прореживаем его так же, как в предыдущем алгоритме: 1 2 3 6 4 5 7 8 1.
Докажем, что его длина превышает оптимум не более, чем на.50%.
Пусть {i1, i2,…,i2m}- множество вершин из V’, выписанных в порядке появления их на оптимальном маршруте коммивояжера. Тогда по неравенству треугольника имеем для паросочетаний
S1 = {(i1, i2), (i3, i4),…} и S 2 = {(i2, i3), (i4, i5),…}:
Dпостр £ D МОД + D МПС < Dопт + D МПС , и Dопт ³ D(S1) + D(S2) ³ 2×D МПС Þ.
Приведем пример того, что эта оценка неулучшаема. МОД – k треугольников.
при
3.7. ТОЧНЫЕ МЕТОДЫ РЕШЕНИЯ NP-ПОЛНЫХ ЗАДАЧ.
№29 Решение задачи коммивояжера методом ветвей и границ.
- |
2 |
- |
8 |
3 |
7 |
2 |
- |
2 |
- |
1 |
3 |
- |
2 |
- |
2 |
1 |
2 |
8 |
- |
2 |
- |
2 |
1 |
3 |
1 |
1 |
2 |
- |
3 |
7 |
3 |
2 |
1 |
3 |
- |
На основе чего делать ветвление? Фиксируем любую часть пути – цепочку длины D.
На вершинах, не вошедших в цепочку, построим МОД.
Dопт – оптимальная длина при фиксированной цепочке,
-длина перемычки, Dопт ≥ D + DМОД + Dперем.= Dпостр
Если Dпостр ³ R , то цепочку можно отбросить (R – сам цикл). R – рекорд, т.е. если R - D £ DМОД + Dперем, то цепочка не улучшает рекорд, Þ отсечение.
Некоторые
ребра можно выкидывать. Если из гамильтонова цикла выкинем любое ребро, то
останется цепочка, для которой Dопт ³ DМОД (v), Þ
R ³ Dопт ³ DМОД (v) + r (на множестве всех вершин графа, r-длина любого ребра, вошедшего в оптимальный
цикл). Получаем r £ R – DМОД (v).
Если r > R – DМОД (v), то это ребро в улучшающий цикл не войдет.
Чтобы улучшить рекорд, необходимо r < R – DМОД (v). Решаем:
1. Сначала строим текущий рекордный цикл R:
fR=14
2. Строим МОД алгоритмом Тарьяна: 1 – 2 – 5 – 3 – 4 – 6, D МОД =7
3. Отбросим ребра (1,4) и (1,6), длина которых.³ f R - D МОД = 14-17 = 7. Вершина 1 имеет степень 2 Þ ребра (1,2) и (1,5) участвуют в цепи, хорда (2,5) не участвует (иначе возникнет цикл). Начнем построение с вершины 5, ее степень больше, чем у 2.
Для вершины 1?: fR-D=14-8=6 Для вершины 2: fR-D=14-7=7
Þ Ветвим и делаем перепроверку, т.к. получен новый рекорд: fR=12
fR-D=12-7=5=5= улучшения нет, Þ отсечение.
Для вершины 6: ,
Для нижней вершины 3: D=10, fR-D=14-10=4
,
Для нижней вершины 4: D=9, fR-D=14-9=5
Þ ветвим, но мы получили цикл, Þ (r<12-7=5, оставляем. Стоп.)
Все висячие вершины раскрыты Þ R – оптимален, fR=12.
Этот метод работает, если граф неориентированный ( для построения МОД).
№30. Задача оптимального распределения ограниченного ресурса.
Пусть задан ресурс R ³ 0 и n потребителей со своими функциями прибыли j i(x). Требуется распределить ресурс между потребителями: R = Si ri , ri ³ 0, максимизируя суммарную прибыль Si j i(ri). Заметим, что любая часть оптимального распределения сама является оптимальным распределением (принцип Беллмана).
Пусть Fk(y) ={ j k(xk) + Fk+1(y-xk)} - максимальная прибыль потребителей с номерами от k до n-1 при распределении между ними ресурса y и Fn(y) = j n(y). ЕслиR и ri – целые, то, меняя k от n-1 до 1 (метод динамического программирования), мы найдем максимальную прибыль F1(R). Трудоемкость = O(n×R2).
Пример: 3 экзамена за 8 дней. j i – оценка на экзамене, x - время на подготовку.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.