Thuật toán của Dijsktra áp dụng cho vấn đề nhân viên bán hàng du lịch


13

Tôi là một người mới (tổng số người mới học về lý thuyết phức tạp tính toán) và tôi có một câu hỏi.

Hãy nói rằng chúng tôi có 'Vấn đề nhân viên bán hàng du lịch', liệu ứng dụng sau đây của Thuật toán Dijkstra có giải quyết được không?

Từ điểm bắt đầu, chúng tôi tính khoảng cách ngắn nhất giữa hai điểm. Chúng tôi đi đến điểm. Chúng tôi xóa điểm nguồn. Sau đó, chúng tôi tính điểm khoảng cách ngắn nhất tiếp theo từ điểm hiện tại và cứ thế ...

Mỗi bước chúng ta làm cho biểu đồ nhỏ hơn trong khi chúng ta di chuyển điểm khoảng cách ngắn nhất có sẵn tiếp theo. Cho đến khi chúng tôi ghé thăm tất cả các điểm.

Điều này sẽ giải quyết vấn đề nhân viên bán hàng đi du lịch.


3
Lưu ý rằng TSP là NP-Complete và thuật toán của Dijkstra có thời gian chạy đa thức. Những gì bạn đề xuất sẽ là giải pháp tiếp theo tầm thường của P = NP? câu hỏi, vì vậy không chắc là cách tiếp cận của bạn hoạt động. Loại lý luận này chỉ là một heuristic, tâm trí!
Raphael

Câu trả lời:


24

Thuật toán của Dijkstra trả về một cây đường đi ngắn nhất, chứa đường đi ngắn nhất từ ​​đỉnh bắt đầu đến đỉnh khác, nhưng không nhất thiết là đường đi ngắn nhất giữa các đỉnh khác hoặc tuyến ngắn nhất truy cập tất cả các đỉnh.

Đây là một ví dụ ngược lại trong đó thuật toán tham lam mà bạn mô tả sẽ không hoạt động:

ví dụ phản tác dụng

một[một,b,c,d,một]một[một,b,d,c,một]một,b,c,dd,một để trở về thành phố bắt đầu.


8

Như đã trả lời trong các câu trả lời khác, đề xuất của bạn không giải quyết được vấn đề Nhân viên bán hàng du lịch một cách hiệu quả, hãy để tôi chỉ ra cách tốt nhất được biết đến trong lĩnh vực tìm kiếm heuristic (vì tôi thấy thuật toán của Dijkstra có liên quan đến lĩnh vực Trí tuệ nhân tạo này) .

(bạn,v)(v,bạn)

Cách tiếp cận tốt nhất (tôi biết) bao gồm chạy thuật toán tìm kiếm heuristic Chi nhánh và Đầu tiên trong đó heuristic là chi phí của Cây kéo dài tối thiểu (MST). Vì MST có thể được tính toán trong thời gian đa thức bằng thuật toán của Prim hoặc thuật toán của Kruskal , nên có thể dự kiến ​​sẽ trả về các giải pháp trong một khoảng thời gian hợp lý. Đối với một cuộc thảo luận tuyệt vời về hai thuật toán này, tôi thực sự khuyên bạn nên xem Hướng dẫn thiết kế thuật toán

Trên thực tế, tôi xin nhấn mạnh rằng phương pháp này được đề xuất là không có nhiều tiến bộ trong lĩnh vực để tìm ra giới hạn tối ưu của vấn đề này để tôi coi đó là một câu hỏi nóng trong lĩnh vực tìm kiếm kết hợp.

Hi vọng điêu nay co ich,


2

Tôi không biết làm thế nào bất cứ ai ở đây không nhận thấy rằng việc áp dụng thuật toán của Dijkstra sẽ hoàn toàn không cần thiết trong trường hợp này? Bạn có thể thực hiện thuật toán tham lam này bằng cách chỉ cần chọn nút gần nhất, được biết là apriori. Thuật toán của Dijkstra được sử dụng để khám phá các đường dẫn, nhưng bạn chỉ thực hiện một bước duy nhất mỗi lần. Điều này rõ ràng không tìm thấy giải pháp tối ưu cho TSP, nhưng nhiều cách tiếp cận rất tốt cũng không tìm thấy nó. Tất cả các công cụ tìm giải pháp tối ưu cho TSP đều đòi hỏi rất cao về mặt tính toán.


1

Câu trả lời là không, đó không phải là cách tốt để giải quyết vấn đề TSP. Một ví dụ phản biện tốt là nơi tất cả các điểm nằm trên một dòng, như sau:

--5 ------------------ 3 ----- 1--0 --- 2 ---------- 4

sử dụng thuật toán của Dijsktra, sẽ khiến người bán hàng nghèo bắt đầu từ điểm 0, đầu tiên chuyển sang 1 rồi đến 2 sau đó đến 3 ect. đó không phải là tối ưu.

Mong rằng sẽ giúp. Hãy xem chương đầu tiên trong cuốn sách xuất sắc của Steven S. Skiena có tên "Thiết kế thuật toán", nó giải thích ví dụ này chi tiết hơn.

Vấn đề TSP không phải là tìm ra con đường ngắn nhất giữa hai điểm, mà là tạo ra một tuyến đường giữa tất cả các điểm tối ưu. Khi bạn có tuyến đường tối ưu, bạn có thể sử dụng Dijsktra để tìm đường đi ngắn nhất giữa mỗi điểm trong tuyến.


2
Dijkstra là một thuật toán đường dẫn ngắn nhất nguồn duy nhất, nhưng nó sẽ không "làm cho" nhân viên bán hàng bắt đầu từ 0, và cũng không trả về một tuyến đường. Nó chỉ trả về cây đường dẫn ngắn nhất, chứa đường dẫn ngắn nhất tới mỗi đỉnh từ đỉnh nguồn đã cho.
Joe

Theo truyền thống, vấn đề TSP [ en.wikipedia.org/wiki/, ] là "Đưa ra một danh sách các thành phố và khoảng cách theo cặp của họ, nhiệm vụ là tìm ra con đường ngắn nhất có thể đến thăm mỗi thành phố chính xác một lần và trở về thành phố gốc. " Về mặt kỹ thuật, không thể đáp ứng các yêu cầu đó trên một con đường-- bạn không được quay lại thành phố bắt đầu hoặc các thành phố lặp lại.
Joe

Tuy nhiên, trên một con đường, nếu chúng ta thư giãn một trong những ràng buộc đó, thì vấn đề là không đáng kể.
Joe

Tất nhiên, Dijkstra sẽ không khiến nhân viên bán hàng bắt đầu từ 0. Nhưng thuật toán được đề xuất trong câu hỏi ban đầu không chỉ định đỉnh bắt đầu; do đó, thuật toán đề xuất có thể buộc người bán hàng kém bắt đầu từ 0. Vì vậy, câu trả lời này là chính xác.
JeffE
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.