Concorde'un Durumu


16

Arka fon

Seyyar satıcı problemi (TSP) en kısa devre sorar ziyaret ettiği şehirlerin belirli bir koleksiyon. Bu sorunun amaçları için, şehirler düzlemde noktalar olacak ve aralarındaki mesafeler olağan Öklid mesafeleri olacak (en yakın tam sayıya yuvarlanmış). Devre "gidiş-dönüş" olmalıdır, yani başlangıç ​​şehrine geri dönmelidir.

Concorde TSP çözücü , Öklid seyyar satıcı sorununun örneklerini çözebilir tam ve çok daha hızlı beklenilenden daha. Örneğin, Concorde 85.900 puanlık bir örneği tam olarak çözebildi , bunların bir kısmı şöyle görünüyordu:Pla85900 Turu Çizim Bölümü

Ancak, bazı TSP örnekleri Concorde için bile çok uzun sürüyor. Örneğin, hiç kimse Mona Lisa'ya dayanan bu 100.000 nokta örneğini çözemedi . (Çözebilirseniz 1000 $ 'lık bir ödül var!)

Concorde kaynak kodu veya yürütülebilir bir dosya olarak indirilebilir . Varsayılan olarak, yerleşik doğrusal program (LP) çözücü QSopt'u kullanır , ancak CPLEX gibi daha iyi LP çözücüleri de kullanabilir.

Meydan okuma

Concorde'un çözmesi beş dakikadan fazla süren üretebileceğiniz en küçük TSP örneği nedir ?

Örneği çıktılamak için bir program yazabilir veya istediğiniz herhangi bir yöntemi kullanabilirsiniz.

puanlama

Örnekte ne kadar az nokta olursa o kadar iyidir. Bağlar, örneğin dosya boyutuna göre kesilir (aşağıya bakın).

Standardizasyon

Farklı bilgisayarlar daha hızlı veya daha yavaş çalışır, bu nedenle çalışma zamanı için ölçüm standardı olarak NEOS Server for Concorde'u kullanacağız . Aşağıdaki basit 2 boyutlu koordinat formunda bir puan listesi gönderebilirsiniz:

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

NEOS'ta kullanılması gereken ayarlar "Concorde verileri (xy-list dosyası, L2 normu)", "Algoritma: Concorde (QSopt)" ve "Rastgele tohum: sabit" tir.

Temel

TSPLIB'nin 1.889 noktalı örneği rl1889.tsp, beş dakikadan fazla olan "Toplam Çalışma Süresi: 871.18 (saniye)" sürüyor. Şöyle görünüyor:

şehirler illüstrasyon rl1889.tsp


2
Sabit Concode vakaları oluşturma ile ilgili SE yazısı .
agtoever

Yanıtlar:


17

88 Şehir, NEOS'ta 341 saniye çalışma süresi

Yakın tarihli bir makalede öklid TSP örneklerini çözmek zor bir aile kurduk. Bu ailenin örneklerini ve bunları oluşturmak için kodu buradan indirebilirsiniz:

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

Bu aileden gelen 88 şehir örneği, NEOS sunucusunda Concorde'u 5 dakikadan fazla sürüyor. Bu aileden gelen 178 şehirli vakanın çözülmesi bir günden fazla sürüyor.


1
Bu harika!!
A. Rex

Çok güzel bir kağıt! İnanılmaz sonuç. Bu kazancı tamamen hak ediyorsunuz!
agtoever

8

77 şehir, 7.24 dakika (434.4 saniye) NEOS ortalama çalışma süresi

Partiye biraz geç kaldım ama 77 düğümlü bir örnek olan weruSnowflake77'ye katkıda bulunmak istiyorum.

Bu örneği, hangi yerel ve küresel özelliklerin, en iyi alt sınırının en kısa bulunan turunun uzunluğuyla eşleşmesi için gereken zaman miktarı üzerinde yukarı yönlü bir baskı uyguladığını anlamaya çalışırken yarattım.

Bu örneği oluşturmak için, bir temel grafikle (13 x 13 kare) başladım ve sonra sistematik olarak yeni noktaları tanıttım veya eski noktaları tercüme ettim, kesmeden önce concorde'u ortalama dallara daha da derinleştiren görünen ayarları korudum.

Teknik, genetik algoritmanın mevcut turları mutasyona uğratmasına ve yeni nesil mutasyonlar için daha kısa turları tutmasına benzer, ancak grafiğin kendisi mutasyona uğratılmakta ve çözülmesi zor grafikler korunmaktadır. Aynı zamanda, iyi alt sınırlar oluşturmaya yardımcı olmak için gevşeme kullanarak grafikleri mutasyona benzememize benzer, ancak tersine gidiyorum, düşük sınırları bulmak zor olan bir grafik oluşturmak için mevcut bir grafiği değiştiriyorum.

Bu süreçte concorde dakikalarını çözen birkaç küçük grafik buldum, ama bu en az 5 dakika concorde alan ilk küçük grafik.

Sabit tohum ve QSopt kullanan NEOS üzerinde 10 deneme çalışması ile ortalama çalışma süresi 7.24 dakika (434.531 saniye) idi. Minimum çalışma süresi 5.6 dakikadır (336.64 saniye). Maksimum çalışma süresi 8.6 dakika (515.80 saniye) idi. Hiçbir deneme atılamadı. Aşağıdaki karşılaştırma tablosu:

Karşılaştırma sonuçları 10'dan fazla çalışmada:

----------------------------------
| 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 listesi, L2 normu):

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

depo

Repo'dan dosya ayarlamada sorun:

  • weruSnowflake77.txt (xy liste dosyası, L2 normu)
  • weruSnowflake77.tsp (TSPLIB biçimi, EUC_2D)


@ A.Rex teşekkürler! Evet, bu en uygun rotalardan biri. (Varsayımsal olarak) aynı optimal uzunlukta birçok farklı yola sahip olmalıdır. Bir örneğin kaç farklı optimum rotaya sahip olabileceğini belirlememiz için iyi bir yol var mı? Concorde dallanır ve kesilirse, aynı uzunlukta olan tüm dalları hatırlayabileceğine eminim ...
Lawrence Weru

5

Python 3, 911 şehir, NEOS'ta 1418 saniye çalışma süresi

Aşağıdaki Python 3.x betiği 911 şehrin koordinatlarını oluşturur. 47739'un en kısa yolunu hesaplamak NEOS 1418 saniye sürdü.

İşte en kısa yolun bir resmi (A. Rex sayesinde): 911 şehir arasındaki en kısa yol

Kod / algoritma, şehirlerin koordinatlarını oluşturmak için temel olarak kullandığım bir dizi değer üretmek için kullandığım Feigenbaum çatallanmasına dayanıyor . NEOS'u şaşırtıcı bir süre alan (gerekli 5 dakikanın çok üzerinde) 1000'in altında birkaç şehir bulana kadar parametreleri denedim.

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]}")

Not: NEOS'ta 5 dakikadan fazla süren daha az sayıda şehirde arama yapan bir senaryom var. Eğer bulursam onları bu cevaba göndereceğim.

Not: Kahretsin! Bu komut dosyasını çalıştıran l bir ile 1156 şehirlerde yerine 1301 sonuçlarının 1811 parametresi biraz üzerinde 4 saatlik Neos üzerinde çalışan zaman benzer parametrelerle diğer durumlarda çok daha fazla olduğunu, ...



@ A.Rex teşekkürler. Ekledi.
agtoever
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.