Читаем Системная технология полностью

Аналогично и для любой пары вида ic+N ic число появлений в системе неравенств (9.2.4) для определенного значения ik равно (а-3)!. Здесь надо учесть то обстоятельство, что ik и ik+a-1 «неподвижны», т.е. они не могут участвовать в парах вида ic+N ic.

Таким образом, каждая пара элементов вида ic ic+N, не образующая ребро, инцидентное гамильтонову циклу, а также каждая пара вида ic+N ic появятся в правой части системы неравенств, записанных для определенного значения ik, точно (а-3)! раз, а ребра, инцидентные гамильтонову циклу, точно ((а-3)!-1) раз.

Задавая последовательно значения ik от i1 до in, мы получаем каждый раз новые системы неравенств. При этом относительно любого ребра ic, ic+N участок ik, ik+1, ... , ik+a-1 «передвигается», вследствие чего любые пары ic+N ic или ic, ic+N участвуют в a-N(k+a-1-n-k+1=a-N) системах неравенств (9.2.4). То обстоятельство, что пары вида (ic+N, ic) с участием элементов ik и ik+a-1 в каждой системе неравенств невозможны, приводит к уменьшению числа появлений каждого такого вида пар ic+N ic в системе (9.2.4) для данного N на две.

Ребра ic ic+1 участвуют, таким образом, в (а-1) системах неравенств, если, конечно, (а-3)!-1 ? 1 или а ? 5, т.е., если они по условию вообще появляются в правой части системы неравенств для любого ik.

Отсюда очевидно, что любое ребро ?(ikik+N), N ? 1, графа будет повторяться в правых частях п систем неравенств (9.2.4) (а – N) раз для ik= i1, i2, ..., in.

Следовательно, правая часть системы (9.2.4) примет вид:

Итак, условие а-оптимальности примет вид:

для а ? 5.

После простых преобразований получаем

для а ? 5.

Отсюда получаем условие n-оптимальности (а=n): И, далее, условие (n+1)-оптимальности (а=n+1), т.е. условие оптимальности собственно гамильтонова цикла, принимает вид Можно усилить условие (9.2.7), введя вместо проверки суммарного неравенства проверку по всем k. Получим условия а-оптимальности гамильтонова цикла в виде: Выше было показано, что а1-оптимальный гамильтонов цикл а2-оптимален, если а1 > а2. Поэтому условие оптимальности гамильтонова цикла можно преобразовать к виду (а=n+1):


9.3. Алгоритм

«Принцип обогащения» применительно к решению задачи о коммивояжере (ЗОК) заключается в следующем: с помощью некоторого условия проверить все ветви графа на наличие полезных свойств (в данном случае это «способность» участвовать в оптимальном гамильтоновом цикле) и для дальнейшего решения задачи оставить только эти «полезные» ветви. В случае, когда используемое условие достаточно сильно, после этой проверки останутся только ветви оптимального гамильтонова цикла. В другом случае из рассмотрения будет исключена часть ветвей графа, что дает возможность сократить время поиска решения с применением какого-либо алгоритма.

Таким образом, весь процесс решения задачи делится на 2 стадии: первая – «обогащение» исходного числового массива, вторая – применение алгоритма поиска на «обогащенном» массиве.

Реализация первой стадии при решении ЗОК возможна с применением полученного в разделе 9.2 условия оптимальности гамильтонова цикла в графе G с п вершинами.

Условие оптимальности можно использовать для «обогащения» исходного множества ветвей графа: после проверки всех ветвей графа на условие оптимальности число ветвей, которое целесообразно использовать при дальнейшем решении ЗОК, сократится. Ввиду очевидной простоты описание алгоритма не приводится.

Опыт применения этого условия для графов с п = 11–67 показал, что после однократного применения такой операции ко всем ветвям графа число ветвей в обогащенном массиве сокращается, как правило, до 15% от первоначального.

Для поиска оптимального гамильтонова цикла на обогащенном массиве использовался следующий метод. Известно, что существующие алгоритмы решения ЗОК не ставят целью обеспечение или проверку а-оптимальности получаемого гамильтонова цикла.

Предлагаемый алгоритм основан на последовательном обеспечении а-оптимальности решения ЗОК на обогащенном массиве исходных данных и состоит в выполнении следующих операций.

Алгоритм «а-оптимум».

0. Задаем произвольно исходный гамильтонов цикл i1, ..., ik, ..., in, i1 с весом ? (i1, ..., in, i).

1. 3адаем значение а; а=4,5, ...,п, п+1.

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже