Коммивояжер метод ветвей и границ онлайн. Задача коммивояжёра. Метод ветвей и границ. Практическое применение задачи коммивояжера

Найти неопределённый интеграл (множество первообразных или "антипроизводных") означает восстановить функцию по известной производной этой функции. Восстановленное множество первообразных F (x ) + С для функции f (x ) учитывает константу интегрирования C . По скорости перемещения материальной точки (производной) может быть восстановлен закон движения этой точки (первообразная); по ускорению движения точки - её скорость и закон движения. Как видно, интегрирование - широкое поле для деятельности Шерлоков Холмсов от физики. Да и в экономике многие понятия представляются через функции и их производные и поэтому, например, можно по производительности труда в определённый момент времени (производной) восстановить объём продукции, выпущенный в соответствующее время.

Чтобы найти неопределённый интеграл, требуется довольно небольшое количество основных формул интегрирования. Но процесс его нахождения значительно труднее, чем одно лишь применение этих формул. Вся сложность относится не к интегрированию, а к приведению интегрируемого выражения к такому виду, который даёт возможность найти неопределённый интеграл по упомянутым выше основным формулам. Это означает, что для начала практики интегрирования нужно активизировать полученные в средней школе навыки преобразования выражений.

Учиться находить интегралы будем, пользуясь свойствами и таблицей неопределённых интегралов из урока об основных понятиях этой темы (откроется в новом окне).

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

Теорема 3. Постоянный множитель в подынтегральном выражении можно выносить за знак неопределённого интеграла, т.е.

Теорема 4. Неопределённый интеграл алгебраической суммы конечного числа функций равен алгебраической сумме неопределённых интегралов этих функций, т.е.

(2)

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

(3)

Поскольку этот урок - вводный в решение задач интегрирования, важно отметить две вещи, которые либо уже на самом начальном этапе, либо несколько позже могут вас удивить. Удивление связано с тем фактом, что интегрирование - операция обратная дифференцированию и неопределённый интеграл можно справедливо называть "антипроизводной".

Первая вещь, которой не следует удивляться при интегрировании. В таблице интегралов существуют формулы, которые не имеют аналогов среди формул таблицы производной . Это следующие формулы:

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

Вторая вещь, которой не следует удивляться при интегрировании . Хотя производная любой элементарной функции представляет собой также элементарную функцию, неопределённые интегралы от некоторых элементарных функций уже не являются элементарными функциями . Примерами таких интегралов могут быть следующие:

Для выработки техники интегрирования пригодятся следующие навыки: сокращение дробей, деление многочлена в числителе дроби на одночлен в знаменателе (для получения суммы неопределённых интегралов), преобразование корней в степени, умножение одночлена на многочлен, возведение в степень. Эти навыки нужны для преобразований подынтегрального выражения, в результате которых должна получиться сумма интегралов, присутствующих в таблице интегралов.

Находим неопределённые интегралы вместе

Пример 1. Найти неопределённый интеграл

.

Решение. Видим в знаменателе подынтегрального выражения многочлен, в котором икс в квадрате. Это почти верный признак того, что можно применить табличный интеграл 21 (с арктангенсом в результате). Выносим из знаменателя множитель-двойку (есть такое свойство интеграла - постоянный множитель можно выносить за знак интеграла, выше оно было упомянуто как теорема 3). Результат всего этого:

Теперь в знаменателе сумма квадратов, а это значит, что можем применить упомянутый табличный интеграл. Окончательно получаем ответ:

.

Пример 2. Найти неопределённый интеграл

Решение. Вновь применяем теорему 3 - свойство интеграла, на основании которого постоянный множитель можно выносить за знак интеграла:

Применяем формулу 7 из таблицы интегралов (переменная в степени) к подынтегральной функции:

.

Сокращаем получившиеся дроби и перед нами конечный ответ:

Пример 3. Найти неопределённый интеграл

Решение. Применяя сначала теорему 4, а затем теорему 3 о свойствах, найдём данный интеграл как сумму трёх интегралов:

Все три полученные интеграла – табличные. Используем формулу (7) из таблицы интегралов при n = 1/2, n = 2 и n = 1/5, и тогда

объединяет все три произвольные постоянные, которые были введены при нахождении трёх интегралов. Поэтому в аналогичных ситуациях следует вводить только одну произвольную постоянную (константу) интегрирования.

Пример 4. Найти неопределённый интеграл

Решение. Когда в знаменателе подынтегральной дроби - одночлен, можем почленно разделить числитель на знаменатель. Исходный интеграл превратился в сумму двух интегралов:

.

Чтобы применить табличный интеграл, преобразуем корни в степени и вот уже окончательный ответ:

Продолжаем находить неопределённые интегралы вместе

Пример 7. Найти неопределённый интеграл

Решение. Если мы преобразуем подынтегральную функцию, возведя двучлен в квадрат и разделив почленно числитель на знаменатель, то исходный интеграл станет суммой трёх интегралов.

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

Наиболее важными методами интегрирования являются:
1) метод непосредственного интегрирования (метод разложения),
2) метод подстановки (метод введения новой переменной),
3) метод интегрирования по частям.

I. Метод непосредственного интегрирования

Задача нахождения неопределенных интегралов от многих функций решается методом сведения их к одному из табличных интегралов.

∫(1-√x) 2 dx=∫(1-2√x+x)dx=∫dx-∫2√xdx+∫xdx=∫dx-2∫x dx+∫xdx=

Пример 3. ∫sin 2 xdx

Так как sin 2 x=(1-cos2x), то
∫sin 2 xdx=(1-cos2x)dx=∫dx-∫cos2xd(2x)=x-sin2x+C

Пример 4. ∫sinxcos3xdx

Так как sinxcos3x=(sin4x-sin2x), то имеем
∫sinxcos3xdx=∫(sin4x-sin2x)dx=∫sin4xd(4x)-∫sin2xd(2x)=-cos4x+cos2x+C

Пример 5. Найти неопределенный интеграл: ∫cos(7x-3)dx

∫cos(7x-3)=∫cos(7x-3)d(7x-3)=sin(7x-3)+C

Пример 6.

II. Метод подстановки (интегрирование заменой переменной)

Если функция x=φ(t) имеет непрерывную производную, то в данном неопределенном интеграле ∫f(x)dx всегда можно перейти к новой переменной t по формуле

∫f(x)dx=∫f(φ(t))φ"(t)dt

Затем найти интеграл из правой части и вернуться к исходной переменной. При этом, интеграл стоящий в правой части данного равенства может оказаться проще интеграла, стоящего в левой части этого равенства, или даже табличным. Такой способ нахождения интеграла называется методом замены переменной.

Пример 7. ∫x√x-5dx

Чтобы избавиться от корня, полагаем √x-5=t. Отсюда x=t 2 +5 и, следовательно, dx=2tdt. Производя подстановку, последовательно имеем:

∫x√x-5dx=∫(t 2 +5) 2tdt=∫(2t 4 +10t 2)dt=2∫t 4 dt+10∫t 2 dt=

Пример 8.

Так как , то имеем

Пример 9.

Пример 10. ∫e -x 3 x 2 dx

Воспользуемся подстановкой -x 3 =t. Тогда имеем -3x 2 dx=dt и ∫e -x 3 x 2 dx=∫e t (-1/3)dt=-1/3e t +C=-1/3e -x 3 +C

Пример 11.

Применим подстановку 1+sinx=t , тогда cosxdx=dt и

III. Метод интегрирования по частям

Метод интегрирование по частям основан на следующей формуле:

∫udv=uv-∫vdu

где u(x),v(x) –непрерывно дифференцируемые функции. Формула называется формулой интегрирования по частям. Данная формула показывает, что интеграл ∫udv приводит к интегралу ∫vdu, который может оказаться более простым, чем исходный, или даже табличным.

Пример 12. Найти неопределенный интеграл ∫xe -2x dx

Решение интегралов - задача легкая, но только для избранных. Эта статья для тех, кто хочет научиться понимать интегралы, но не знает о них ничего или почти ничего. Интеграл... Зачем он нужен? Как его вычислять? Что такое определенный и неопределенный интегралы? Если единственное известное вам применение интеграла – доставать крючком в форме значка интеграла что-то полезное из труднодоступных мест, тогда добро пожаловать! Узнайте, как решать интегралы и почему без этого никак нельзя обойтись.

Изучаем понятие "интеграл"

Интегрирование было известно еще в Древнем Египте. Конечно, не в современном виде, но все же. С тех пор математики написали очень много книг по этой теме. Особенно отличились Ньютон и Лейбниц , но суть вещей не изменилась. Как понять интегралы с нуля? Никак! Для понимания этой темы все равно понадобятся базовые знания основ математического анализа. Сведения о , необходимые и для понимания интегралов, уже есть у нас в блоге.

Неопределенный интеграл

Пусть у нас есть какая-то функция f(x) .

Неопределенным интегралом функции f(x) называется такая функция F(x) , производная которой равна функции f(x) .

Другими словами интеграл – это производная наоборот или первообразная. Кстати, о том, как читайте в нашей статье.


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

Простой пример:

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


Определенный интеграл

Имея дело с понятием интеграла, мы имеем дело с бесконечно малыми величинами. Интеграл поможет вычислить площадь фигуры, массу неоднородного тела, пройденный при неравномерном движении путь и многое другое. Следует помнить, что интеграл – это сумма бесконечно большого количества бесконечно малых слагаемых.

В качестве примера представим себе график какой-нибудь функции. Как найти площадь фигуры, ограниченной графиком функции?


С помощью интеграла! Разобьем криволинейную трапецию, ограниченную осями координат и графиком функции, на бесконечно малые отрезки. Таким образом фигура окажется разделена на тонкие столбики. Сумма площадей столбиков и будет составлять площадь трапеции. Но помните, что такое вычисление даст примерный результат. Однако чем меньше и уже будут отрезки, тем точнее будет вычисление. Если мы уменьшим их до такой степени, что длина будет стремиться к нулю, то сумма площадей отрезков будет стремиться к площади фигуры. Это и есть определенный интеграл, который записывается так:


Точки а и b называются пределами интегрирования.


Бари Алибасов и группа "Интеграл"

Кстати! Для наших читателей сейчас действует скидка 10% на

Правила вычисления интегралов для чайников

Свойства неопределенного интеграла

Как решать неопределенный интеграл? Здесь мы рассмотрим свойства неопределенного интеграла, которые пригодятся при решении примеров.

  • Производная от интеграла равна подынтегральной функции:

  • Константу можно выносить из-под знака интеграла:

  • Интеграл от суммы равен сумме интегралов. Верно также для разности:

Свойства определенного интеграла

  • Линейность:

  • Знак интеграла изменяется, если поменять местами пределы интегрирования:

  • При любых точках a , b и с :

Мы уже выяснили, что определенный интеграл - это предел суммы. Но как получить конкретное значение при решении примера? Для этого существует формула Ньютона-Лейбница:

Примеры решения интегралов

Ниже рассмотрим несколько примеров нахождения неопределенных интегралов. Предлагаем самостоятельно разобраться в тонкостях решения, а если что-то непонятно, задавайте вопросы в комментариях.


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

Пусть у нас имеется правильная рациональная дробь многочленов от переменной x :
,
где Р m (x) и Q n (x) - многочлены степеней m и n , соответственно, m < n . Мы считаем, что нам известно разложение многочлена Q n (x) на множители:
Q n (x) = s (x-a) n a (x-b) n b ... (x 2 +ex+f) n e (x 2 +gx+k) n g ... .
См. подробнее: Методы разложения многочленов на множители >>>
Примеры разложения многочленов на множители >>>

Общий вид разложения рациональной дроби на простейшие

Общий вид разложения рациональной дроби на простейшие следующий:
.
Здесь A i , B i , E i , ... - действительные числа (неопределенные коэффициенты), которые нужно определить.

Например,
.

Еще один пример:
.

Методы разложения рациональной дроби на простейшие

Сначала мы записываем разложение с неопределенными коэффициентами в общем виде. . Затем освобождаемся от знаменателей дробей, умножая уравнение на знаменатель исходной дроби Q n . В результате получаем уравнение, содержащее и слева и справа многочлены от переменной x . Это уравнение должно выполняться для всех значений x . Далее существует три основных метода определения неопределенных коэффициентов.

1) Можно присвоить переменной x определенные значения. Задавая несколько таких значений, мы получим систему уравнений, из которой можно определить неизвестные коэффициенты A i , B i , ... .
2) Поскольку полученное уравнение и с лева и справа содержит многочлены, то можно приравнять коэффициенты при одинаковых степенях переменной x . Из полученной системы можно определить неопределенные коэффициенты.
3) Можно продифференцировать уравнение и присвоить переменной x определенные значения.

На практике, удобно комбинировать эти методы. Разберем их применение на конкретных примерах.

Пример

Разложить правильную рациональную дробь на простейшие.

Решение

1. Устанавливаем общий вид разложения.
(1.1) ,
где A, B, C, D, E - коэффициенты, которые нужно определить.

2. Избавимся от знаменателей дробей. Для этого умножим уравнение на знаменатель исходной дроби (x-1) 3 (x-2)(x-3) . В результате получаем уравнение:
(1.2)
.

3. Подставим в (1.2) x = 1 . Тогда x - 1 = 0 . Остается
.
Отсюда .
Подставим в (1.2) x = 2 . Тогда x - 2 = 0 . Остается
.
Отсюда .
Подставим x = 3 . Тогда x - 3 = 0 . Остается
.
Отсюда .

4. Осталось определить два коэффициента: B и C . Это можно сделать тремя способами.
1) Подставить в формулу (1.2) два определенных значения переменной x . В результате получим систему из двух уравнений, из которой можно определить коэффициенты B и C .
2) Открыть скобки и приравнять коэффициенты при одинаковых степенях x .
3) Продифференцировать уравнение (1.2) и присвоить переменной x определенное значение.

В нашем случае, удобно применить третий способ. Возьмем производную от левой и правой частей уравнения (1.2) и подставим x = 1 . При этом замечаем, что члены, содержащие множители (x-1) 2 и (x-1) 3 дают нуль, поскольку, например,
, при x = 1 .
В произведениях вида (x-1) g(x) , дифференцировать нужно только первый множитель, поскольку
.
При x = 1 второй член обращается в нуль.

Дифференцируем (1.2) по x и подставляем x = 1 :
;
;
;
3 = -3 A + 2 B ; 2 B = 3 + 3 A = 6 ; B = 3 .

Итак, мы нашли B = 3 . Остается найти коэффициент C . Поскольку при первом дифференцировании мы отбросили некоторые члены, то дифференцировать второй раз уже нельзя. Поэтому применим второй способ. Поскольку нам нужно получить одно уравнение, то нам не нужно находить все члены разложения уравнения (1.2) по степеням x . Мы выбираем самый легкий член разложения - x 4 .

Выпишем еще раз уравнение (1.2) :
(1.2)
.
Раскрываем скобки и оставляем только члены вида x 4 .
.
Отсюда 0 = C + D + E , C = - D - E = 6 - 3/2 = 9/2 .

Сделаем проверку. Для этого определим C первым способом. Подставим в (1.2) x = 0 :
0 = 6 A - 6 B+ 6 C + 3 D + 2 E ;
;
. Все правильно.

Ответ

Определение коэффициента при старшей степени 1/(x-a)

В предыдущем примере мы сразу определили коэффициенты у дробей , , , присваивая, в уравнении (1.2) , переменной x значения x = 1 , x = 2 и x = 3 . В более общем случае, всегда можно сразу определить коэффициент при старшей степени дроби вида .

То есть если исходная дробь имеет вид:
,
то коэффициент при равен . Таким образом, разложение по степеням начинается с члена .

Поэтому в предыдущем примере мы сразу могли искать разложение в виде:


.

В некоторых простых случаях, можно сразу определить коэффициенты разложения. Например,


.

Пример с комплексными корнями знаменателя

Теперь разберем пример, в котором знаменатель имеет комплексные корни.

Пусть требуется разложить дробь на простейшие:
.

Решение

1. Устанавливаем общий вид разложения:
.
Здесь A, B, C, D, E - неопределенные коэффициенты (действительные числа), которые нужно определить.

2. Освобождаемся от знаменателей дробей. Для этого умножаем уравнение на знаменатель исходной дроби :
(2.1) .

3. Заметим, что уравнение x 2 + 1 = 0 имеет комплексный корень x = i , где i - комплексная единица, i 2 = -1 . Подставим в (2.1) , x = i . Тогда члены, содержащие множитель x 2 + 1 дают 0 . В результате получаем:
;
.
Сравнивая левую и правую части, получаем систему уравнений:
-A + B = -1 , A + B = -1 .
Складываем уравнения:
2 B = -2 , B = -1 , A = -B -1 = 1 - 1 = 0 .
Итак, мы нашли два коэффициента: А = 0 , B = -1 .

4. Заметим, что x + 1 = 0 при x = -1 . Подставим в (2.1) , x = -1 :
;
2 = 4 E , E = 1/2 .

5. Далее удобно подставить в (2.1) два значения переменной x и получить два уравнения, из которых можно определить C и D . Подставим в (2.1) x = 0 :
0 = B + D + E , D = -B - E = 1 - 1/2 = 1/2 .

6. Подставим в (2.1) x = 1 :
0 = 2(A + B) + 4(C + D) + 4 E ;
2(C + D) = -A - B - 2 E = 0 ;
C = -D = -1/2 .

К идее метода ветвей и границ приходили многие исследователи, но Литтл с соавторами на основе указанного метода разработали удачный алгоритм решения ЗК и тем самым способствовали популяризации подхода. С тех пор метод ветвей и границ был успешно применен ко многим задачам, для решения ЗК было придумано несколько других модификаций метода, но в большинстве учебников излагается пионерская работа Литтла.

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

Таблица 2

Таблица 3

Таблица 4

Изложим алгоритм Литтла на примере 1 предыдущего раздела. Повторно запишем матрицу:

Нам будет удобнее трактовать С ij как стоимость проезда из города i в город j. Допустим, что добрый мэр города j издал указ выплачивать каждому въехавшему в город коммивояжеру 5 долларов. Это означает, что любой тур подешевеет на 5 долларов, поскольку в любом туре нужно въехать в город j. Но поскольку все туры равномерно подешевели, то прежний минимальный тур будет и теперь стоить меньше всех. Добрый же поступок мэра можно представить как уменьшение всех чисел j-го столбца матрицы С на 5. Если бы мэр хотел спровадить коммивояжеров из j-го города и установил награду за выезд в размере 10 долларов, это можно было бы выразить вычитанием 10 из всех элементов j-й той строки. Это снова бы изменило стоимость каждого тура, но минимальный тур остался бы минимальным. Итак, доказана следующая лемма.

Вычитая любую константу из всех элементов любой строки или столбца матрицы С, мы оставляем минимальный тур минимальным.

Для алгоритма нам будет удобно получить побольше нулей в матрице С, не получая там, однако, отрицательных чисел. Для этого мы вычтем из каждой строки ее минимальный элемент (это называется приведением по строкам, см. табл. 3), а затем вычтем из каждого столбца матрицы, приведенной по строкам, его минимальный элемент, получив матрицу, приведенную по столбцам, см. табл. 4).

Прочерки по диагонали означают, что из города i в город i ходить нельзя. Заметим, что сумма констант приведения по строкам равна 27, сумма по столбцам 7, сумма сумм равна 34.

Тур можно задать системой из шести подчеркнутых (выделенных другим цветом) элементов матрицы С, например, такой, как показано на табл. 2. Подчеркивание элемента означает, что в туре из i-го элемента идут именно в j-тый. Для тура из шести городов подчеркнутых элементов должно быть шесть, так как в туре из шести городов есть шесть ребер. Каждый столбец должен содержать ровно один подчеркнутый элемент (в каждый город коммивояжер въехал один раз), в каждой строке должен быть ровно один подчеркнутый элемент (из каждого города коммивояжер выехал один раз); кроме того, подчеркнутые элементы должны описывать один тур, а не несколько меньших циклов. Сумма чисел подчеркнутых элементов есть стоимость тура. На табл. 2 стоимость равна 36, это тот минимальный тур, который получен лексикографическим перебором.

Теперь будем рассуждать от приведенной матрицы на табл. 2. Если в ней удастся построить правильную систему подчеркнутых элементов, т.е. систему, удовлетворяющую трем вышеописанным требованиям, и этими подчеркнутыми элементами будут только нули, то ясно, что для этой матрицы мы получим минимальный тур. Но он же будет минимальным и для исходной матрицы С, только для того, чтобы получить правильную стоимость тура, нужно будет обратно прибавить все константы приведения, и стоимость тура изменится с 0 до 34. Таким образом, минимальный тур не может быть меньше 34. Мы получили оценку снизу для всех туров.

Теперь приступим к ветвлению. Для этого проделаем шаг оценки нулей. Рассмотрим нуль в клетке (1,2) приведенной матрицы. Он означает, что цена перехода из города 1 в город 2 равна 0. А если мы не пойдем из города 1 в город 2? Тогда все равно нужно въехать в город 2 за цены, указанные во втором столбце; дешевле всего за 1 (из города 6). Далее, все равно надо будет выехать из города 1 за цену, указанную в первой строке; дешевле всего в город 3 за 0. Суммируя эти два минимума, имеем 1+0=1: если не ехать «по нулю» из города 1 в город 2, то надо заплатить не меньше 1. Это и есть оценка нуля. Оценки всех нулей поставлены на табл. 5 правее и выше нуля (оценки нуля, равные нулю, не ставились).

Выберем максимальную из этих оценок (в примере есть несколько оценок, равных единице, выберем первую из них, в клетке (1,2)).

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

Что касается первого класса, то в нем надо рассмотреть матрицу на табл. 6 с вычеркнутой первой строкой и вторым столбцом.

Таблица 5

Таблица 7

Дополнительно в уменьшенной матрице поставлен запрет в клетке (2,1), т.к. выбрано ребро (1,2) и замыкать преждевременно тур ребром (2,1) нельзя. Уменьшенную матрицу можно привести на 1 по первому столбцу, так что каждый тур, ей отвечающий, стоит не меньше 35. Результат наших ветвлений и получения оценок показан на рис. 6.

Кружки представляют классы: верхний кружок - класс всех туров; нижний левый - класс всех туров, включающих ребро (1,2); нижний правый - класс всех туров, не включающих ребро (1,2). Числа над кружками - оценки снизу.

Продолжим ветвление в положительную сторону: влево - вниз. Для этого оценим нули в уменьшенной матрице C на табл. 7. Максимальная оценка в клетке (3,1) равна 3. Таким образом, оценка для правой нижней вершины на рис. 7 есть 35+3=38. Для оценки левой нижней вершины на рис. 7 нужно вычеркнуть из матрицы C еще строку 3 и столбец 1, получив матрицу C[(1,2), (3,1)] на табл. 8. В эту матрицу нужно поставить запрет в клетку (2,3), так как уже построен фрагмент тура из ребер (1,2) и (3,1), т.е. , и нужно запретить преждевременное замыкание (2,3). Эта матрица приводится по столбцу на 1 (табл. 9), таким образом, каждый тур соответствующего класса (т.е. тур, содержащий ребра (1,2) и (3,1)) стоит 36 и более.

Таблица 9

Таблица 11

Оцениваем теперь нули в приведенной матрице C[(1,2), (3,1)] нуль с максимальной оценкой 3 находится в клетке (6,5). Отрицательный вариант имеет оценку 38+3=41. Для получения оценки положительного варианта убираем строчку 6 и столбец 5, ставим запрет в клетку (5,6), см. табл. 10. Эта матрица неприводима. Следовательно, оценка положительного варианта не увеличивается (рис. 8).

Оценивая нули в матрице на табл. 10, получаем ветвление по выбору ребра (2,6), отрицательный вариант получает оценку 36+3=39, а для получения оценки положительного варианта вычеркиваем вторую строку и шестой столбец, получая матрицу на табл. 11.

В матрицу надо добавить запрет в клетку (5,3), ибо уже построен фрагмент тура и надо запретить преждевременный возврат (5,3). Теперь, когда осталась матрица 2х2 с запретами по диагонали, достраиваем тур ребрами (4,3) и (5,4). Мы не зря ветвились, по положительным вариантам. Сейчас получен тур: 1>2>6>5>4>3>1 стоимостью в 36. При достижении низа по дереву перебора класс туров сузился до одного тура, а оценка снизу превратилась в точную стоимость.

Итак, все классы, имеющие оценку 36 и выше, лучшего тура не содержат. Поэтому соответствующие вершины вычеркиваются. Вычеркиваются также вершины, оба потомка которой вычеркнуты. Мы колоссально сократили полный перебор. Осталось проверить, не содержит ли лучшего тура класс, соответствующий матрице С , т.е. приведенной матрице С с запретом в клетке 1,2, приведенной на 1 по столбцу (что дало оценку 34+1=35). Оценка нулей дает 3 для нуля в клетке (1,3), так что оценка отрицательного варианта 35+3 превосходит стоимость уже полученного тура 36 и отрицательный вариант отсекается.

Для получения оценки положительного варианта исключаем из матрицы первую строку и третий столбец, ставим запрет (3,1) и получаем матрицу. Эта матрица приводится по четвертой строке на 1, оценка класса достигает 36 и кружок зачеркивается. Поскольку у вершины «все» убиты оба потомка, она убивается тоже. Вершин не осталось, перебор окончен. Мы получили тот же минимальный тур, который показан подчеркиванием на табл. 2.

Удовлетворительных теоретических оценок быстродействия алгоритма Литтла и родственных алгоритмов нет, но практика показывает, что на современных ЭВМ они часто позволяют решить ЗК с n = 100. Это огромный прогресс по сравнению с полным перебором. Кроме того, алгоритмы типа ветвей и границ являются, если нет возможности доводить их до конца, эффективными эвристическими процедурами.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: