Hiểu các yêu cầu
- Tất cả người chơi có một số lượng hạn chế kẻ thù liền kề.
Trước hết, chúng ta đang nói về điểm sinh sản của người chơi, không phải vị trí hiện tại của người chơi tại một điểm nhất định trong trò chơi. Chỉ cần đưa nó ra khỏi đường đi.
Liền kề được xác định rõ khi chúng ta nói về một biểu đồ. Chúng ta có thể nghĩ về một bản đồ thể hiện khả năng điều hướng trên bản đồ - từ bây giờ là "biểu đồ".
Nếu nút có thể có nhiều nhất một điểm sinh sản, thì việc nói chúng là "liền kề" có ý nghĩa. Lưu ý: Tôi sẽ không ràng buộc các nút để có một điểm sinh sản duy nhất, vì những lý do sẽ rõ ràng sau này.
Để xây dựng biểu đồ, chúng ta sẽ cần xem xét những thứ như tường, cầu, thang, điểm dịch chuyển tức thời hoặc thậm chí xem xét không gian bay nếu có thể có người chơi có thể bay. Mỗi nút đại diện cho một vị trí đi qua; mỗi kết nối đại diện cho một phong trào có thể.
Lưu ý: biết kích thước và hình dạng của các nút và làm việc với các nút thực sự liền kề. Đừng coi các nút là một điểm. Đừng coi các kết nối là có độ dài. Ngoài ra, sử dụng các nút lồi.
Biểu đồ có thể đã được biên dịch trước (bản đồ được tạo bởi một nhà thiết kế); mặt khác, nó có thể được tạo khi đang bay nếu bản đồ được tạo ngẫu nhiên.
- Tất cả người chơi có cơ hội như nhau để gặp kẻ thù liền kề.
Tôi sẽ cho rằng kẻ thù là những người chơi khác. Một lần nữa, chỉ cần đưa nó ra khỏi đường đi.
Giả sử mỗi người chơi thực hiện một bước đi ngẫu nhiên, xác suất tìm thấy người chơi tại một điểm nhất định - trên một không gian bằng phẳng, không có chướng ngại vật - sẽ được đưa ra bởi một hàm (Gaussian) của khoảng cách đến điểm sinh sản - kể từ bây giờ chức năng".
Vì chúng tôi đang làm việc trên biểu đồ, thay vào đó chúng tôi sẽ chú thích các giá trị trên biểu đồ.
- Kích thước bản đồ không phải tăng tỷ lệ thuận với số lượng người chơi.
Nếu chúng ta có một ràng buộc là có một điểm sinh sản duy nhất cho mỗi nút, thì để thêm nhiều người chơi, chúng ta sẽ cần các nút nhỏ hơn. Nếu chúng tôi quyết định biểu đồ trước khi chúng tôi biết chúng tôi sẽ có bao nhiêu người chơi, chúng tôi có thể phải chia nhỏ các nút cho trò chơi cụ thể.
- Những hạn chế này không được thực thi với các không gian bất khả xâm phạm.
Tôi không có ý định thêm trở ngại để giải quyết vấn đề. Au contraire , tôi cần phải làm việc với những trở ngại. Nếu họ không ở đó, việc thực hiện sẽ đơn giản hơn.
Dung dịch
Chúng tôi đang cố gắng đặt N điểm sinh sản sao cho cơ hội gặp người chơi khác tại tất cả các điểm sinh sản đó là bằng nhau.
Chúng ta có thể lấy thước đo sai số là tổng của sự khác biệt của các cơ hội với giá trị trung bình của các cơ hội. Chúng tôi đang cố gắng giảm thiểu điều đó (trên thực tế, chúng tôi muốn làm cho nó 0).
Để làm như vậy, chúng ta cần biết cơ hội gặp một người chơi trên mỗi nút của biểu đồ.
Để tính toán cơ hội đó, bắt đầu bằng không. Vì cơ hội tìm thấy một người chơi trên bất kỳ nút nào, khi không có người chơi, bằng không. Và sau đó, với mỗi điểm sinh sản, hãy đi bộ biểu đồ thêm vào cơ hội chú thích giá trị của hàm cho điểm sinh sản hiện tại.
Lưu ý 1: Thêm hoặc di chuyển điểm sinh sản sẽ ảnh hưởng đến cơ hội gặp người chơi cho tất cả bản đồ.
Lưu ý 2: Theo dõi mức độ mỗi điểm sinh sản ảnh hưởng đến cơ hội, sẽ giúp mọi việc dễ dàng hơn.
Lưu ý 3: Vì các nút có kích thước, mức độ bạn có thể gặp lỗi = zero phụ thuộc vào kích thước của các nút. Bạn có thể chính xác hơn bằng cách làm việc với các phạm vi giá trị (cơ hội tối thiểu và tối đa, tùy thuộc vào vị trí cụ thể của các điểm sinh sản trong nút).
Đặt các điểm sinh sản ngẫu nhiên, sau đó bắt đầu di chuyển chúng theo cách mà lỗi trở nên nhỏ hơn (xem xét một chuyển động có thể xảy ra và nếu gây ra lỗi giảm, hãy giữ lại, nếu không sẽ hoàn nguyên nó). Và tiếp tục làm như vậy cho đến khi chúng tôi không thể cải thiện thêm nữa (quá nhiều lần lặp mà không cải thiện, hoặc lỗi là 0).
Lưu ý 4: Khi di chuyển điểm sinh sản, bạn có thể sử dụng cơ hội gặp người chơi (không bao gồm điểm sinh sản bạn sẽ di chuyển) để chọn ngẫu nhiên một vị trí mới cho điểm sinh sản sao cho vị trí có cơ hội gặp người chơi gần hơn có nghĩa là nhiều khả năng. Tôi nhắc nhở bạn rằng di chuyển điểm sinh sản sẽ ảnh hưởng đến giá trị trung bình.
Hành vi dự kiến là điểm sinh sản quá gần nhau di chuyển xa nhau và điểm sinh sản quá xa nhau đến gần hơn. Cho đến khi chúng đạt đến trạng thái cân bằng.
Nếu tại bất kỳ lần lặp nào, bạn có nhiều điểm sinh sản trên một nút (điều này là không thể, vì chúng sẽ có xu hướng di chuyển xa nhau, nhưng có thể nếu bạn có các nút đủ lớn), hãy tách nút và tiếp tục giải quyết. Bất kỳ phân chia của nút là hợp lệ.
Giải pháp trên sẽ tiếp cận lỗi = không, nhưng không được bảo đảm để đạt đến không. Bạn có thể làm là chạy nó cho đến khi nó đạt đến mức tối thiểu cục bộ ... Về lý thuyết, sau đó bạn có thể chia các nút để làm cho nó chính xác bằng 0 ... Tuy nhiên, điều đó tương đương với việc điều chỉnh tọa độ điểm sinh sản!
Hãy thử mô phỏng ủ để di chuyển điểm sinh sản trong nút. Mặc dù, thành thật mà nói, có lẽ không đáng để bận tâm với mức độ chi tiết như vậy.
Tôi muốn làm rõ rằng kết quả cho một bản đồ phẳng không có chướng ngại vật sẽ không được phân phối đồng đều các điểm. Thay vào đó, nếu bản đồ có các cạnh (nghĩa là nếu nó không bao quanh), thì sẽ có nhiều điểm sinh sản gần các cạnh hơn, điều này là do các điểm ở trung tâm có thể được tiếp cận từ nhiều hướng hơn, làm tăng cơ hội gặp phải Những người chơi khác ở đó. Do đó, các điểm xa hơn gần trung tâm để bù.