Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример расчета задания со схемами.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.09 Mб
Скачать

Решение задачи коммивояжера с помощью нейронной сети Хопфилда

    1. Запускаем программу Hopfield_commivoyageur и после ввода имени файла с заданными межгородскими расстояниями, ввода числа перебираемых начальных позиций и номера первой из этих позиций, а также времени поиска, будет производиться перебор наилучших из найденных вариантов маршрутов и наикратчайший из них выведется на экран. Необходимо испытать несколько разных начальных позиций и первой из них, чтобы выбрать наилучший результат. В данном случае наилучший результат составляет 34,78 и этот результат и соответствующий ему маршрут совпадает с ранее найденным.

Решение задачи коммивояжера методом динамического программирования

Метод дается в изложении, данном в [1]. Это решение было предложено Беллманом, Хелдом и Кэрпом. Предложенный ими алгоритм является более общим, чем метод ветвей и границ, и применим к более широкому классу задач упорядочивания, но требует значительно больших объемов памяти и времени вычислений.

Не рассматривая подробно математическое обоснование метода, приводим его работу на конкретном примере.

Пусть имеется сеть городов, показанная на рис.2.

Требуется найти кратчайший замкнутый маршрут, соединяющий все города. Составляем матрицу расстояний для этой сети.

Номера городов

0

1

2

3

4

5

0

4

10

13

4

8

1

2

9

7

6

7

2

8

5

5

5

9

3

5

8

5

7

10

4

6

4

4

9

4

5

5

1

4

8

3

Решение

На нулевом шаге ищется решение для пяти вариантов при k=0.

Шаг 0, k=0.

f(s0,0)=c0,5=8; f(s1,0)=c1,5=7; f(s2,0)=c2,5=9; f(s3,0)=c3,5=10; f(s4,0)=c4,5=4.

Шаг 1, k=1.

f(s0,{s1})=c0,1+f(s1,0)=4+7=11;

f(s0,{s2})=c0,2+f(s2,0)=10+9=19;

f(s0,{s3})=c0,3+f(s3,0)=13+10=23;

f(s0,{s4})=c0,4+f(s4,0)=4+4=8;

f(s1,{s0})=c1,0+f(s0,0)=2+8=10;

f(s1,{s2})=c1,2+f(s2,0)=9+9=18;

Далее находим f(s1,{s3})=17; f(s1,{s4})=10; f(s2,{s0})=16; f(s2,{s1})=12; f(s2,{s3})=c2,3+f(s3,0)=5+10=15; f(s2,{s4})=9; f(s3,{s0})=13; f(s3,{s1})=15; f(s3,{s2})=14; f(s3,{s4})=11; f(s4,{s0})=14; f(s4,{s1})=11; f(s4,{s2})=13; f(s4,{s3})=19.

Шаг 2, k=2.

f(s0,{s1,s2})=min[c0,1+f(s1,{s2}), c0,2+f(s2,{s1})]=min[4+18; 10+12]=22;

f(s0,{s1,s3})=21; f(s0,{s1,s4})=14; f(s0,{s2,s3})=25; f(s0,{s2,s4})=17; f(s0,{s3,s4})=23;

f(s1,{s0,s2})=21; f(s1,{s0,s3})=20; f(s1,{s0,s4})=10; f(s1,{s2,s3})=21; f(s1,{s2,s4})=18; f(s1,{s3,s4})=18;

f(s2,{s0,s1})=15; f(s2,{s0,s3})=18; f(s2,{s0,s4})=16; f(s2,{s1,s3})=20; f(s2,{s1,s4})=15; f(s2,{s3,s4})=16;

f(s3,{s0,s1})=16; f(s3,{s0,s2})=21; f(s3,{s0,s4})=13; f(s3,{s1,s2})=17; f(s3,{s1,s4})=18; f(s3,{s2,s4})=14;

f(s4,{s0,s1})=14; f(s4,{s0,s2})=20; f(s4,{s0,s3})=22; f(s4,{s1,s2})=16; f(s4,{s1,s3})=21; f(s4,{s2,s3})=min[c4,2+f(s2,{s3}), c4,3+f(s3,{s2})]=min[4+15,9+14]=19;

Шаг 3, k=3.

f(s0,{s1,s2,s3})=min[c0,1+f(s1,{s2,s3}); c0,2+f(s2,{s1,s3}); c0,3+f(s3,{s1,s2})]=

=min[4+21; 10+20; 13+17]=25;

f(s0,{s1,s2,s4})=20; f(s0,{s1,s3,s4})=22;

f(s0,{s2,s3,s4})=min[c0,2+f(s2,{s3,s4}); c0,3+f(s3,{s2,s4}); c0,4+f(s4,{s2,s3})]=

=min[10+16; 13+14; 4+19]=23;

f(s1,{s0,s2,s3})=27; f(s1,{s0,s2,s4})=19; f(s1,{s0,s3,s4})=20; f(s1,{s2,s3,s4})=21;

f(s2,{s0,s1,s3})=21; f(s2,{s0,s1,s4})=15; f(s2,{s0,s3,s4})=18; f(s2,{s1,s3,s4})=23;

f(s3,{s0,s1,s2})=20; f(s3,{s0,s1,s4})=18; f(s3,{s0,s2,s4})=21; f(s3,{s1,s2,s4})=20;

f(s4,{s0,s1,s2})=19; f(s4,{s0,s1,s3})=24; f(s4,{s0,s2,s3})=22; f(s4,{s1,s2,s3})=24;

Шаг 4, k=4.

f(s0,{s1,s2,s3,s4})=min[c0,1+f(s1,{s2,s3,s4}), c0,2+f(s2,{s1,s3,s4}), c0,3+f(s3,{s1,s2,s4}),

c0,4+f(s4,{s1,s2,s3})]=min[4+21, 10+23, 13+20, 4+24]=25;

f(s1,{s0,s2,s3,s4})=min[c1,0+f(s0,{s2,s3,s4}), c1,2+f(s2,{s0,s3,s4}), c1,3+f(s3,{s0,s2,s4}),

c1,4+f(s4,{s0,s2,s3})]=min[2+23, 9+18, 7+21, 6+22]=25;

f(s2,{s0,s1,s3,s4})=23;

f(s3,{s0,s1,s2,s4})=20;

f(s4,{s0,s1,s2,s3})=25;

Шаг 5, k=5.

f(s5,{s0,s1,s2,s3,s4})=min[c5,0+f(s0,{s1,s2,s3,s4}), c5,1+f(s1,{s0,s2,s3,s4}),

c5,2+f(s2,{s0,s1,s3,s4}),c5,3+f(s3,{s0,s1,s2,s4}), c5,4+f(s4,{s0,s1,s2,s3})]=min[5+25,

1+25, 4+23, 8+20, 3+25]=26.

Итак, значение целевой функции f{x}=26. Сам маршрут найдем, если будем двигаться в обратном направлении с пятого шага к нулевому, проходя по минимальному значению (выделено жирным шрифтом).

Итак, получим следующие дуги маршрута: 5-1, 1-0, 0-4, 4-2, 2-3, 3-5. Итоговый маршрут (начиная с города 0): 0-4-2-3-5-1-0. Легко убедиться, что длина маршрута действительно составляет 26 единиц.