Quy hoạch tuần tra lãnh thổ


14

Tôi đang phát triển một trò chơi / mô phỏng nơi các đặc vụ đang chiến đấu giành đất. Tôi có tình huống hiển thị trong hình dưới đây:

Một khu vực lát gạch màu xanh lá cây và đỏ, với những "sinh vật" có màu tương tự

Những sinh vật này đang đi bộ xung quanh và chiếm giữ những mảnh đất mà họ bước lên nếu họ rảnh rỗi. Để làm cho điều này thú vị hơn, tôi muốn giới thiệu hành vi "tuần tra", sao cho các đặc vụ thực sự đi bộ quanh vùng đất của họ để tuần tra khỏi bất kỳ kẻ xâm nhập nào có thể muốn thực hiện.

Về mặt kỹ thuật, mỗi hình vuông được thể hiện dưới dạng x,yvị trí cũng như kích thước thể hiện chiều dài cạnh của nó. Nó cũng chứa thông tin về người chiếm quảng trường. Tất cả các hình vuông được lưu trữ trong một ArrayList.

Làm thế nào tôi có thể giới thiệu hành vi tuần tra? Những gì tôi muốn là cho mỗi đại lý để tuần tra một phần nhất định của khu vực (họ tự phân chia khu vực nào họ sẽ tuần tra). Vấn đề chính tôi đã tìm thấy như sau:

  • Diện tích đất rất ngẫu nhiên, như trong hình. Thật khó để hiểu giới hạn ở mỗi hướng.
  • Làm thế nào họ nên phân chia các khu vực để tuần tra?
  • Các khu vực đất có thể rời rạc, vì nhóm đối lập có thể chiếm lãnh thổ từ giữa.

Tôi đã có ý tưởng lấy hình vuông xa nhất theo mỗi hướng, coi đó là ranh giới của khu vực và phân chia các khu vực dựa trên các ranh giới đó, nhưng điều này có thể bao gồm rất nhiều vùng đất không liên quan.

Làm thế nào tôi nên tiếp cận vấn đề này?


1
Có lẽ bạn có thể nhìn vào một số kỹ thuật xử lý hình ảnh cho ý tưởng? Các thuật toán tăng trưởng khu vực khác nhau chạy đồng thời có thể phát ra từ mỗi tác nhân cho đến khi tất cả các ô thuộc nhóm của chúng được chỉ định một tác nhân tuần tra.
Quetzalcoatl

@Quetzalcoatl: Ý tưởng hay, dễ thực hiện, nhưng điều này sẽ dẫn đến các khu vực tuần tra rất bất bình đẳng. Hãy xem xét các tác nhân màu xanh lá cây trong hình trên. Tác nhân trên cùng bên phải sẽ có ~ 15 ô vuông để che, một hình ở trung tâm chỉ 2.
Junuxx

Ừm, điều này ít nhiều giống như chọn khối gần nhất tiếp theo thuộc về đội của họ từ khối hiện tại.
Tohmas

1
Thật vậy, nó là không hoàn hảo. Có lẽ thay vì sử dụng các tác nhân làm hạt giống cho khu vực phát triển, hạt giống có thể được trồng ngẫu nhiên ban đầu (mỗi hạt một tác nhân). Khi khu vực phát triển đã kết thúc, có thể một bước cân bằng có thể được thực hiện, coi mỗi khu vực như một cụm lớp với các ô như các nút. KNearestNeighbour hoặc KMean hoặc tương tự có thể lặp đi lặp lại cho đến khi một dạng hội tụ nào đó, trong đó các vùng có thể được coi là cân bằng, với mỗi tác nhân sau đó được gán cho hạt giống gần nhất (khoảng cách euclide?). (Tôi nghĩ rằng tôi có thể quá phức tạp điều này, phải có một cách đơn giản hơn ...)
Quetzalcoatl

1
Có lẽ mỗi tác nhân có thể bắt đầu bằng cách đẩy lùi tất cả các tác nhân khác như nam châm. Điều đó sẽ buộc các đặc vụ đến các góc khác nhau của khu vực. Khi các đặc vụ đến nghỉ ngơi, sau đó chia đất như Quetzalcoatl đề nghị. Các khu vực nên được khoảng thậm chí.
tyjkenn

Câu trả lời:


9

Câu hỏi hấp dẫn. Tôi nghĩ một trong những vấn đề đầu tiên bạn phải giải quyết là liệu bạn muốn hành vi tuần tra là tuần tra "tối ưu" hay tuần tra "giống như thật". Tôi chỉ tạo nên những từ này, nhưng ý tôi là:

Tối ưu : Các tác nhân di chuyển theo cách phân phối hoàn hảo vùng phủ sóng của họ cho toàn bộ hệ thống.

Sống động như thật : Các đặc vụ di chuyển và cố gắng tự phân phối một cách bình đẳng nhất có thể, nhưng mỗi người chỉ có quyền truy cập vào dữ liệu cục bộ theo quan điểm của họ.

Tôi sẽ tập trung vào cách tiếp cận thứ hai, mà tôi nghĩ bạn có thể giải quyết bằng cách sử dụng sự pha trộn có trọng số của các kiểu lái khác nhau từ Hành vi chỉ đạo của Craig Reynold cho các nhân vật tự trị . Ý tưởng cơ bản của hành vi lái là sử dụng các lực đơn giản kết hợp để tạo ra sự điều hướng ngẫu hứng xung quanh một môi trường. Trong trường hợp của bạn, tôi nghĩ rằng bạn muốn kết hợp các hành vi lái sau:

  • Tránh né (lãnh thổ bên ngoài) - Các đặc vụ cố gắng ở lại trong lãnh thổ của họ và tránh di chuyển ra ngoài lãnh thổ đó. Đối với một số chủ nghĩa hiện thực, ảnh hưởng của "bước ra ngoài" lãnh thổ không cần phải là 100% ở đây. Một chút "cắt góc" để đi ra ngoài khu vực có lẽ sẽ làm cho chuyển động thực tế hơn.

  • Đi lang thang - Các đặc vụ cố gắng tiếp tục di chuyển và khám phá. Điều này bạn sẽ muốn cân nhắc rất nhiều nếu không các đặc vụ sẽ cố gắng tìm một điểm phân tách tối ưu từ nhau và sau đó "ở lại".

  • Tách (các tác nhân khác) - Các tác nhân cố gắng giữ khoảng cách với các tác nhân khác (để chúng che phủ mặt đất tối đa và không bị vón cục).

  • Tìm kiếm (kẻ xâm lược) - Các đặc vụ cố gắng tiếp cận bất kỳ kẻ xâm lược nào mà chúng phát hiện.

Tôi nghĩ rằng bạn muốn chơi xung quanh với trọng số tương đối linh hoạt. Ví dụ, nếu một tác nhân phát hiện một kẻ xâm lược, trọng số phân tách sẽ giảm xuống. (Nói cách khác, họ chỉ cần trải ra khi họ đang đi săn chứ không phải khi họ tìm thấy ai đó.) Tôi nghĩ rằng nếu bạn chơi xung quanh với các trọng số cho bốn mẫu trên, bạn sẽ có một cái gì đó khá gần với những gì bạn ' Đang tìm kiếm.

Có khá nhiều tài nguyên trực tuyến về cách triển khai "boids" tuân theo các mẫu hành vi được mô tả. Tôi khuyên bạn nên triển khai mã nguồn mở opensteer .


2

Một aproach là để ghi lại, cho mỗi ô, khi nó được "người bảo vệ" ghé thăm lần cuối và bảo vệ liên tục di chuyển đến bất kỳ ô lân cận nào không được chú ý lâu nhất.

Tất nhiên, điều này giả định rằng lãnh thổ được kết nối.

Đây không phải là một giải pháp hoàn hảo, nhưng dễ viết mã, thích ứng với hoàn cảnh thay đổi và hiệu quả. Tôi đã sử dụng thành công thuật toán này cho các cuộc tấn công do thám và quấy rối trong một rts ai tôi đã viết một lúc trước.

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.