Доля Конкорд


16

Фон

Проблема продавця подорожі (TSP) вимагає найкоротшого кола, який відвідує дану колекцію міст. Для цілей цього питання міста будуть точками в площині, а відстані між ними будуть звичайними евклідовими відстанями (округленими до найближчого цілого числа). Схема повинна бути "в зворотному напрямку", тобто вона повинна повернутися до стартового міста.

Вирішувач Concorde TSP може вирішити екземпляри евклідової завдання комівояжера, точно і набагато швидше , ніж можна було б очікувати. Наприклад, Concorde зміг точно вирішити екземпляр 85 900 точок , частини якого виглядають так:Сегмент малювання пла85900 Тур

Однак деякі випадки TSP займають занадто багато часу, навіть для Concorde. Наприклад, ніхто не зміг вирішити цей екземпляр на 100 000 балів на основі Mona Lisa . (Пропонується приз у розмірі 1000 доларів, якщо ви зможете вирішити це!)

Concorde доступний для завантаження у вигляді вихідного коду або виконуваного файлу. За замовчуванням він використовує вбудований лінійний програмовий (LP) розв'язувач QSopt , але він також може використовувати кращі розв'язувачі LP, такі як CPLEX.

Змагання

Який найменший екземпляр TSP, який ви можете згенерувати, на вирішення якого потрібен більше п'яти хвилин ?

Ви можете написати програму для виведення примірника або скористатися будь-яким іншим способом, який ви хочете.

Оцінка балів

Чим менше балів у екземплярі, тим краще. Зав'язки будуть розбиті на розмір файлу екземпляра (див. Нижче).

Стандартизація

Різні комп'ютери працюють швидше або повільніше, тому ми будемо використовувати NEOS-сервер для Concorde як стандарт вимірювання для виконання. Ви можете подати список точок у такій простій 2-денній формі координат:

#cities
x_0 y_0
x_1 y_1
.
.
.
x_n-1 y_n-1

Параметри, які слід використовувати в NEOS, це "дані Concorde (файл xy-списку, норма L2)", "Алгоритм: Concorde (QSopt)" та "Випадкове насіння: виправлено".

Базова лінія

Екземпляр 1,889 -бальної точки rl1889.tspвід TSPLIB займає "Загальний час роботи: 871,18 (секунди)", що становить більше п'яти хвилин. Це виглядає приблизно так:

відсутність ілюстрацій для міст rl1889.tsp


2
Відповідна посада SE щодо створення важких випадків Concode.
agtoever

Відповіді:


17

88 міст, 341 секунди виконання в NEOS

У недавньому документі ми побудували сімейство важких для вирішення випадків евклідової TSP. Ви можете завантажити екземпляри з цієї родини, а також код для їх генерації тут:

http://www.or.uni-bonn.de/%7Ehougardy/HardTSPInsances.html

88-ти міський екземпляр цієї родини займає Concorde на сервері NEOS більше 5 хвилин. Екземпляр із 178 міст цієї родини потребує вже більше ніж один день для вирішення.


1
Це дивно!!
А. Рекс

Дуже приємний папір! Дивовижний результат. Ви цілком заслуговуєте на це виграш!
19

8

77 міст, 7,24 хвилин (434,4 секунди) середній час роботи в NEOS

Я трохи запізнююся на вечірку, але я хотів би внести 77-вузловий екземпляр, weruSnowflake77.

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

Для побудови цього примірника я почав з базового графіка (13 х 13 квадратних), а потім систематично вводив нові точки або перекладав старі точки, зберігаючи ті корективи, які, здавалося, змусили Concorde заглиблюватися в свої гілки перед тим, як вирізати.

Методика подібна до того, як генетичний алгоритм мутує існуючі тури та зберігає більш короткі тури для наступного покоління мутацій, за винятком того, що сам мутаційний графік мутується та зберігаються складніші для вирішення графіки. Це також схоже на те, як ми мутуємо графіки, використовуючи релаксації, щоб допомогти побудувати хороші нижні межі, за винятком того, що я йду навпаки, мутуючи існуючий графік, щоб побудувати графік зі складними для пошуку нижніми межами.

У ході цього процесу я знайшов кілька менших графіків, для вирішення яких потрібні конкорденні хвилини, але це перший перший невеликий графік, який я знайшов, що займає конкорде мінімум 5 хвилин.

З 10 пробних пробігів в NEOS з використанням фіксованого насіння та QSopt, середній час роботи становив 7,24 хвилини (434,531 секунди). Мінімальний час виконання - 5,6 хвилин (336,64 секунди). Максимальний час роботи склав 8,6 хвилин (515,80 секунди). Жодні випробування не були відхилені. Повна таблиця еталонів нижче:

Результати тестування протягом 10 пробіжок:

----------------------------------
| Run | Job ID# | Total running  |
|     |         | time (seconds) |
|-----|---------|----------------|
| 1   | 7739963 | 513.44         |
| 2   | 7740009 | 336.64         |
| 3   | 7740023 | 514.25         |
| 4   | 7740029 | 447.97         |
| 5   | 7740038 | 357.10         |
| 6   | 7740072 | 447.47         |
| 7   | 7740073 | 336.19         |
| 8   | 7740075 | 515.80         |
| 9   | 7740088 | 361.26         |
| 10  | 7740091 | 515.19         |
----------------------------------

weruSnowflake77 (список xy, норма L2):

77
-700 -700
700 -700
200 0
0 200
-200 0
0 -200
0 0
-600 600
-500 600
-400 600
-300 600
-200 600
-100 600
0 600
100 600
200 600
300 600
400 600
500 600
600 600
-600 -600
-500 -600
-400 -600
-300 -600
-200 -600
-100 -600
0 -600
100 -600
200 -600
300 -600
400 -600
500 -600
600 -600
600 -500
600 -400
600 -300
600 -200
600 -100
600 0
600 100
600 200
600 300
600 400
600 500
-600 -500
-600 -400
-600 -300
-600 -200
-600 -100
-600 0
-600 100
-600 200
-600 300
-600 400
-600 500
-500 -500
-400 -400
-300 -300
-200 -200
-100 -100
100 100
200 200
300 300
400 400
500 500
100 -100
200 -200
300 -300
400 -400
500 -500
-100 100
-200 200
-300 300
-400 400
-500 500
700 700
-700 700

Сховище

Проблема встановити файли з репо:

  • weruSnowflake77.txt (файл списку xy, норма L2)
  • weruSnowflake77.tsp (формат TSPLIB, EUC_2D)

Класно! Ось картинка вашого примірника, якщо ви хочете відредагувати його у своєму дописі: i.stack.imgur.com/DnJ7T.png
A. Rex

@ A.Rex дякую! Так, це один із оптимальних маршрутів. Він повинен (гіпотетично) мати безліч різних маршрутів однакової оптимальної довжини. Чи є для нас хороший спосіб оцінити, скільки різних оптимальних маршрутів може мати примірник? Якщо Concorde робить гілку та обрізає, я думаю, він міг би запам'ятати всі гілки однакової довжини ...
Lawrence Weru

5

Python 3, 911 міст, 1418 секунд часу роботи в NEOS

Наступний сценарій Python 3.x генерує координати 911 міст. На обчислення найкоротшого шляху 47739 знадобилося NEOS 1418 секунд .

Ось зображення найкоротшого шляху до тебе (завдяки А. Рексу): найкоротший шлях між 911 містами

Код / алгоритм ґрунтується на біфуркації Фейгенбаума , яку я використав для генерування ряду значень, які я використав як основу для генерації координат міст. Я експериментував з параметрами, поки не знайшов у кількох містах менше 1000, що НЕОС зайняло дивовижну кількість часу (набагато вище необхідних 5 хвилин).

x = 0.579
coords = []
for _ in range(1301):
    if int(3001*x) not in coords:
        coords.append(int(3001*x))
    x = 3.8*x*(1-x)
coords = list(zip(coords, coords[::-1]))
print(len(coords))
for coord in coords:
    print(f"{coord[0]} {coord[1]}")

PS: У мене працює сценарій у пошуках меншої кількості міст, які також займають> 5 хвилин у NEOS. Я опублікую їх у цій відповіді, якщо знайду їх.

PS: Чорт! Запуск цього сценарію з параметром l 1811 замість 1301 призводить до 1156 міст із часом роботи в NEOS трохи більше 4 годин , що набагато більше, ніж в інших випадках із подібними параметрами ...


Ось малюнок вашої екскурсії по 911-му місту, якщо ви хочете відредагувати його у своїй публікації: i.imgur.com/G1ZPX0k.png
A. Rex

@ A.Rex спасибі Додав.
agtoever
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.