2016-07-02 14 views
15

Đây chỉ là thứ tôi tự nghĩ ra, nhưng có vẻ như đó là một vấn đề thú vị và nó khiến tôi bối rối.Đường đi nhanh nhất với gia tốc tại các điểm

Bạn có một tập hợp các điểm trong không gian hai chiều, với một điểm được chỉ định là "Bắt đầu" và một "Cuối". Mỗi điểm có tọa độ (tính bằng mét từ gốc), nhưng cũng là "số gia tốc" (tính bằng mét/giây của delta-V). Khi đạt đến một điểm (bao gồm cả bắt đầu), bạn có thể tăng tốc lên tới số gia tốc của điểm đó theo bất kỳ hướng nào. Chi phí cạnh phụ thuộc vào tốc độ hiện tại của bạn, nhưng bạn cũng phải di chuyển theo đúng hướng.

Có một thuật toán hiệu quả để tìm đường đi nhanh nhất đến điểm cuối không? Tôi đã không nghĩ ra bất cứ điều gì tốt hơn "Hãy thử mọi con đường và kiểm tra kết quả". Thuật toán đơn giản và khác của Djikstra không hoạt động, bởi vì bạn không thể dễ dàng nói rằng một đường dẫn đến điểm trung gian tốt hơn hoặc xấu hơn điểm khác, nếu bạn đến với vận tốc ban đầu khác nhau.

Nếu điều đó quá dễ, điều gì sẽ xảy ra nếu bạn thêm yêu cầu mà bạn phải dừng ở điểm kết thúc? (nghĩa là, bạn phải có ít hơn giá trị gia tốc của nó khi bạn đạt đến kết thúc.)

EDIT: Để rõ ràng, các vấn đề hướng. Bạn duy trì một vector tốc độ khi bạn đi qua biểu đồ và gia tốc có nghĩa là thêm một vectơ vào nó, có độ lớn được giới hạn ở số gia tốc của điểm đó. Điều này có nghĩa là có những tình huống mà việc xây dựng một vận tốc rất lớn là bất lợi, vì bạn sẽ đi quá nhanh để "chỉ đạo" đối với các điểm có giá trị khác/điểm đến của bạn.

+0

Bạn sẽ phải cung cấp thêm chi tiết. Khái niệm "gia tốc" của bạn sẽ hoạt động như thế nào? Liệu nó có làm giảm tất cả các chi phí cạnh dọc theo một con đường bằng "số gia tốc" không? Điều gì xảy ra nếu bạn tích luỹ "số tăng tốc" vượt xa chi phí cạnh? Việc giới thiệu một khái niệm như "tăng tốc" cho thấy có thể là tốt để giới thiệu một ý tưởng tương ứng về ma sát/kéo, nếu không bạn có thể kết thúc với một "vận tốc không được kiểm soát". Cho đến nay, tôi không nghĩ câu hỏi của bạn đủ rõ ràng để chúng tôi xây dựng một giải pháp phù hợp, nhưng tôi nghĩ nó rất thú vị. – lightalchemist

+2

Tôi nghi ngờ có một giải pháp phân tích cho vấn đề này. Tôi sẽ bắt đầu bằng cách giải quyết một vấn đề đơn giản hơn nhiều trước tiên: tuyến đường nhanh nhất có các điểm trong một trật tự nhất định. (Không gian tìm kiếm đó có một số kích thước bằng số điểm trung gian, và tôi không thể thấy cách tiếp cận tốt hơn là ủ.) Khi bạn có phương pháp đó, bạn có thể tạo Dijkstra đã sửa đổi. – Beta

+0

@lightalchemist Bằng "Tăng tốc", ý tôi là "Thay đổi vận tốc". (Vì vậy, chi phí cạnh = khoảng cách/tốc độ euclide, nhưng chỉ được phép nếu bạn đang đi đúng hướng ... vì vậy) Vận tốc không được kiểm tra là tốt (nó có nghĩa là một câu đố toán học, không phải là mô phỏng ... mặc dù tôi đã làm ban đầu hình dung nó cho một tàu vũ trụ nhặt caches nhiên liệu, do đó ma sát vẫn không phải là một điều.) –

Trả lời

3

Tôi nghĩ rằng yêu cầu mà bạn chỉ sử dụng gia tốc từ mỗi điểm một lần làm cho vấn đề này NP hoàn thành trong trường hợp chung. Hãy xem xét một đầu vào trông như thế này:

enter image description here

Nếu "khoảng cách rất lớn" giữa điểm cuối và phần còn lại của các điểm là đủ lớn để chiếm ưu thế chi phí của giải pháp cuối cùng, việc tìm kiếm một giải pháp tối ưu sẽ đun sôi xuống để tìm một cách để nhận được càng nhiều tăng tốc độ càng tốt từ đầu của đồ thị. Nếu bạn chỉ cho phép mỗi điểm được thông qua một lần, điều này sẽ tương đương với vấn đề đường dẫn Hamilton, đó là NP hoàn thành.

Điều đó nói rằng, vấn đề của bạn có một số quy tắc bổ sung trên đầu nó (khoảng cách là euclide, biểu đồ luôn hoàn tất) có thể sẽ làm cho vấn đề trở nên dễ dàng hơn.

+1

Tôi không nghĩ rằng đó là vấn đề đường dẫn Hamilton (có thể khó hơn , không dễ dàng hơn), bởi vì không có đảm bảo rằng việc truy cập mọi điểm sẽ là tốt nhất. Tăng tốc là tốc độ, không chỉ là tăng tốc độ ... vì vậy nếu bạn phải thay đổi hướng rất nhiều để đạt mọi điểm, bạn có thể đi ra khỏi nó di chuyển chậm hơn nếu bạn nhấn 4 hoặc 5 tất cả đều gần với colinear của bạn Nơi Đến. –

+0

Umm ... Tôi nghĩ bạn có thể cần xác định rõ cách thức hoạt động của vật lý trong mô hình của bạn. Khi tôi đọc nó, tôi hiểu rằng sự tăng tốc là một "tăng tốc" đơn giản khiến cho bất kỳ cạnh tương lai nào rẻ hơn để đi qua. – hugomg

+0

OK, đã chỉnh sửa vấn đề để làm cho nó rõ ràng hơn. Tôi đã nghĩ rằng hướng quan trọng (vì vậy nếu vận tốc của bạn là đủ cao, nó sẽ có hiệu quả không phải là một đồ thị hoàn chỉnh). Tôi nghĩ rằng tôi đồng ý rằng trong vấn đề như bạn mô tả nó, nó có thể đi xuống một con đường Hamilton trong những tình huống nhất định. –

3

Bạn có thể thử giải quyết vấn đề này ngược bằng cách truy tìm đường dẫn đệ quy từ đầu đến nút khác, sau đó chỉ định tốc độ tối đa dọc theo đường để có thể chuyển từ nút đó sang nút khác. Quy tắc hủy sẽ là nếu đường dẫn từ nút hiện tại sang nút tiếp theo tồn tại với vận tốc ít hơn và ít thời gian hơn từ kết thúc, điều này có nghĩa là đường dẫn khác tối ưu hơn theo mặc định vì nó có thể tiếp cận nhiều nút hơn và tốn ít thời gian hơn. Khi đường dẫn đến nút bắt đầu, nó sẽ được tính toán lại dựa trên tốc độ tối đa có thể đạt được khi bắt đầu và được lưu trữ. Sau đó, bạn thu thập con đường với ít thời gian hơn.

Bạn phải tìm kiếm bất kỳ đường dẫn nào có sẵn tại đây, vì các đường dẫn có sẵn trên biểu đồ của bạn phụ thuộc vào trạng thái trước đây với cơ chế gián tiếp, sử dụng tốc độ thấp hơn cho phép nhiều lựa chọn hơn.

+0

Tôi không chắc tôi hiểu tất cả câu trả lời của bạn ... tâm trí làm rõ một vài điều trông giống như họ có thể sai với tôi? "chỉ định tốc độ tối đa dọc theo dòng để có thể chuyển từ nút đó sang nút khác" có vẻ như mất quá nhiều thông tin, vì bạn có thể tiếp cận một số nút chứ không phải các nút khác hoặc đạt một số nút nhưng chỉ ở phạm vi tốc độ ngăn chặn bạn tiếp cận những người khác, v.v. Trong "Quy tắc hủy sẽ là nếu đường dẫn từ hiện tại đến nút tiếp theo tồn tại với ít vận tốc và ít thời gian hơn từ kết thúc", bạn có ý nghĩa gì bởi "vận tốc ít hơn?" Đôi khi vận tốc là tốt. –

+0

Giới thiệu về "tốc độ tối đa" - nó có thể là mỗi nút, một nút gần với véc-tơ sẽ cho phép tốc độ cao hơn. "Ít vận tốc" có nghĩa là nếu bạn đang truy vấn đường AB, xác định vận tốc có thể đạt được khi chuyển sang A để đến B, tìm ra rằng có một đường dẫn tại B đến từ A nhưng tốn ít thời gian hơn để đạt B VÀ chậm hơn AB, điều này có nghĩa là con đường hiện tại của bạn bị chậm lại và có thể bị loại bỏ. – Vesper

+0

Nhưng có một báo trước tôi đã nghĩ về: Nếu bạn bắt đầu ở A và có thể truy cập A để tăng tốc thì sao? Thuật toán này sẽ thất bại sau đó, nếu có một nút phía sau A. Tưởng tượng cấu hình: B --- A --- C, nguồn là A, đích là C, và bạn có thể tăng tốc cho 5 tại A, và cho 10 tại B, với AC là khá dài. Con đường thích hợp có thể kết thúc ABAC, nếu bạn di chuyển ở 4 từ A đến B, trở về 6 từ B đến A, và sau đó 11 từ A đến C, sẽ nhanh hơn so với 5 từ A đến C, và nhanh hơn ABC. – Vesper

Các vấn đề liên quan