Thuật toán xác định lộ trình nhanh nhất?


17

Giả sử chúng ta đi từ 1 đến 5. Tuyến đường ngắn nhất sẽ là 1-4-3-5 (tổng cộng: 60 km).

Đồ thị

Chúng ta có thể sử dụng thuật toán của Dijkstra để làm điều đó.

Bây giờ vấn đề là, tuyến đường ngắn nhất không phải lúc nào cũng là tuyến nhanh nhất, vì kẹt xe hoặc các yếu tố khác.

Ví dụ:

  • 1-2 được biết là thường xuyên bị kẹt xe, vì vậy cần tránh.
  • Đột nhiên một tai nạn xe hơi xảy ra dọc theo 4-3, vì vậy nó cũng nên tránh.
  • Vân vân...

Vì vậy, có lẽ chúng ta có thể tăng tốc trên tuyến 1-4-5, vì không có kẹt xe / tai nạn, vì vậy sẽ đến 5 nhanh hơn.

Đó là ý tưởng chung, và tôi chưa nghĩ về nhiều chi tiết hơn.

Có thuật toán nào để giải quyết vấn đề này không?


3
Đây có phải là bài tập về nhà không? Đây không phải chỉ là en.wikipedia.org/wiki/Travelling_salesman_probols để duyệt qua biểu đồ có trọng số?
StuperUser

9
@StuperUser: Không, TSP là một mạch gồm tất cả các nút không trùng lặp. Trong trường hợp mẫu, chẳng hạn, không cần nhấn nút 2.
David Thornley

2
@DavidThornley tôi thấy. Vì vậy, Dijkstra là cho tuyến đường ngắn nhất trên đồ thị có trọng số? Và TSP đang truy cập vào mọi nút?
StuperUser

1
@Stuper: Truyền tải ngắn nhất, vâng
BlueRaja - Danny Pflughoeft

2
@StuperUser, chỉ FYI, TSP là một vấn đề NP-Complete mạnh mẽ mà không có giải pháp nào có thể chạy trong thời gian đa thức. ... Bây giờ bạn đã biết.
riwalk

Câu trả lời:


5

Vì bạn đã đưa tắc nghẽn vào bức tranh, hãy cẩn thận, bạn không bị bắt bởi Nghịch lý của Braess . Nếu mọi người chọn con đường tối ưu, nó sẽ dẫn đến thời gian đi lại tồi tệ hơn cho mọi người.


49

Có: Dijkstra

Dijkstra hoạt động tốt như vậy cho tình huống này.
Bạn chỉ cần sử dụng thời gian chứ không phải khoảng cách là trọng lượng của mỗi cung.


9
Thông thường, 'khoảng cách' trong Dijkstra sẽ có trọng số cho tất cả mọi thứ, chi phí / phí cầu đường, ưu tiên đường cao tốc, giới hạn tốc độ - chỉ sử dụng khoảng cách chỉ là cách tiếp cận đơn giản nhất. Đây là điều làm cho thuật toán trở nên thông minh
Martin Beckett

6
Mặc dù Dijsktra sẽ làm, nhưng tôi thường chọn A * cho bất kỳ công việc tìm đường nghiêm túc nào; heuristic sẽ giúp rất nhiều.
Mircea Chirea

6
Liên kết: A * thuật toán tìm kiếm . Đó là một phần mở rộng của phương pháp Dijkstra.
mgkrebbs

Chừng nào còn có một heuristic có thể áp dụng, A * sẽ vượt trội hơn Dijkstra (về hiệu suất).
bummzack

Một heuristic đáng ngưỡng mộ sẽ hơi khó khăn khi tìm thấy ở đây vì chúng ta dường như tính đến nhiều yếu tố (chẳng hạn như kẹt xe).
pwny

16

Đúng. Thuật toán của Dijkstra sẽ giải quyết vấn đề này.

Vấn đề trong trường hợp của bạn là bạn tự động giả định con đường ngắn nhất tương đương với quãng đường đã đi, trong khi thực tế nó tương đương với CHI PHÍ của việc đi theo lộ trình.

Nếu một đường dẫn có khoanh vùng thì CHI PHÍ của nó sẽ cao hơn và thuật toán vẫn được áp dụng.


Vâng xin lỗi nếu tôi không sử dụng từ ngữ đúng. Ý tôi là "tuyến đường thuận tiện nhất" (chi phí tối thiểu nhất)
anta40

11

Bạn chỉ cần có thể thay thế khoảng cách của bạn với thời gian giữa các nút và giải quyết nó theo cùng một cách.


10

Dijkstra

Như đã nói, nó không chỉ được sử dụng cho khoảng cách ngắn nhất. Tôi tin rằng hoạt hình này cung cấp một sự hiểu biết tốt về "sức mạnh" (vì thiếu một từ tốt hơn) của Dijkstra:

Dijkstra

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.