Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алабин Б.К. Курс лекций по методам исследования операций.doc
Скачиваний:
57
Добавлен:
02.05.2014
Размер:
1.54 Mб
Скачать

2.3. Идея решения задачи

Идея решения задачи состоит в присвоении каждой вершине заданного графа некоторого числа, называемого индексом и равного величине пути от начальной вершины до фиксированной (или от фиксированной до конечной). Присвоение индекса осуществляется с помощью дерева, в котором от начальной вершины до любой фиксированной существует путь, причем единственный, содержащий промежуточные вершины только по одному ряду.

Очевидно, что существует дерево, в котором все вершины имеют opt индексы. Такое дерево можно построить преобразованием любого исходного дерева для заданного графа с корнем в начальной или конечной вершине, испытывая поочередно все дуги исходного графа, не вошедшие в данное дерево.

Определение. Любой граф без циклов называется деревом.

Любое дерево обладает замечательным свойством: всякий путь на дереве определяется однозначно. Чтобы построить дерево для орграфа, нужно отвлечься от ориентации его дуг.

Дадим индуктивное определение индекса (по рекуррентной схеме). Положим, что на всех дугах (ai, aj) орграфа заданы веса v(ai, aj) и последовательность вершин а0,…, аn. Тогда при прямом ходе:

I(а0) ≡ |S(а0, а0) ≡ 0,

I(а1) ≡ |S(а0, а1) ≡ I(а0) + v(a0, a1) = v(a0, a1),

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

I(ai) ≡ |S(а0, аi) = I(ai1) + v(ai1, ai),

i = 2,…, n;

при обратном ходе:

I(an) ≡ |S(аn, аn) ≡ 0,

I(an1) ≡ |S(аn1, аn) = I(an) + v(аn1, аn) = v(аn1, аn),

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

I(ai) ≡ |S(ai, an) = I(ai+1) + v(ai, ai+1),

i = n – 2,…, 0.

Однако при реализации такой схемы необходимо потребовать выполнения следующего условия: подпуть оптимального пути есть путь оптимальный (это условие не работает, когда проявляется последействие, т.е. когда для I(ai) нет выбора).

2.4. Алгоритм решения задачи с помощью произвольного дерева маршрутов

0. Исходные данные: орграф [A, R] в графическом представлении с весами v(ai, aj) на дугах.

1. Определяем начальную и конечную вершины a0 и an.

2. Строим произвольное дерево маршрутов с корнем в a0 (прямым ходом):

а) организуем вектор вершин М и вектор дуг Д, начальную вершину a0 заносим в М;

б) исходящие дуги (а0, ак) заносим в Д, а вершины аk – в М;

в) для каждого аk находим все исходящие дуги (аk, ае); если аеМ, то заносим ее в М, а дугу (аk, ае) – в Д; иначе переходим к новой ае;

г) проверка: если М содержит не все вершины из А, то выбираем новую аk и переходим к (в); иначе – КОНЕЦ.

3. Индексируем все вершины аk построенного дерева, образуя вектор индексов I.

4. Строим opt дерево, улучшая индексы вершин:

а) дополнительно к Д организуем вектор дуг антидерева – АД;

б) включаем в дерево очередную дугу (ai, aj) антидерева и проверяем: если индекс aj улучшился, то дугу (ai, aj) заносим в вектор Д вместо дуги (аk, аj), которую заносим в АД, и переходим к (3). Иначе – переходим к следующей дуге антидерева. И так далее, пока индекс хотя бы одной вершины можно улучшить.

В результате получаем:

1) индекс аn есть длина opt пути: I(an) = opt |S(а0, аn)|;

2) путь S(а0, аn) однозначно определяется на построенном дереве обратным ходом.

Соседние файлы в предмете Методы оптимизации