Tạo người ngẫu nhiên với nhân khẩu học


8

Tôi muốn có những người ngẫu nhiên với các sở thích được tạo ra cho một trò chơi chiến lược kinh tế. Để đơn giản, giả sử mỗi người có tuổi (số), diện tích nhà và loại của nó (thành phố, làng, ...) và sở thích (như kem, ..).

Vấn đề là, nếu tôi sử dụng thế hệ ngẫu nhiên thống nhất (chọn tuổi ngẫu nhiên, nhà và sở thích), tất cả mọi người sẽ được ... phân phối đồng đều và sẽ không có nhân khẩu học để người chơi khám phá. Ý tôi là, ví dụ, những người trẻ tuổi thích soda, ngoài ra những người sống trong làng có xu hướng thích bao bì màu đỏ (=> người chơi vận chuyển nó với bao bì khác nhau đến quốc gia sẽ bán được nhiều hơn). Tôi muốn có những người được tạo ra để luôn có một số tính năng nhân khẩu học đặc biệt (mà bản thân trò chơi không phải biết) có trong dữ liệu.

Các tính năng không phải và không giống với các tính năng trong thế giới thực, thuật toán sẽ hoạt động mà không yêu cầu bất kỳ cơ sở dữ liệu bên thứ 3 nào. Các ngôi nhà cho mọi người được đưa ra làm đầu vào từ bước thế hệ trước dưới dạng một loạt các bộ định cư và dung lượng (do đó cũng là loại).
Điều gì có thể là thủ tục chung cho loại thế hệ thủ tục này?

Câu trả lời:


5

Tạo nhân khẩu học của bạn với phân phối ngẫu nhiên có trọng số . Trước khi tạo số liệu thống kê cho bất kỳ người nào, hãy quyết định số liệu thống kê có trọng số cho các nhóm của bạn (ví dụ: nhóm tuổi, vị trí, v.v.). Sau đó, khi tạo một người, hãy lấy thông tin nhóm của họ trước (có thể ngẫu nhiên hoặc một số phương pháp khác để gán người cho nhóm). Sau đó sử dụng thông tin nhóm của một cá nhân để cân nhắc số liệu thống kê về sở thích của họ.

Ngoài ra, bạn có thể tạo người theo từng giai đoạn. Tạo mọi thứ một cách ngẫu nhiên, sau đó qua nhiều lần lặp lại, thay đổi sở thích của mọi người để thu hút sự đồng nhất. Ví dụ, nếu ở khu vực A, những người trẻ tuổi nói "soda" thay vì "pop" cao hơn một chút, qua nhiều lần lặp lại sẽ dẫn đến tăng, và cuối cùng "soda" sẽ là cụm từ thống trị được sử dụng để nói về nước đường.

Bạn thậm chí có thể tiến thêm một bước này và cho phép các khu vực xung quanh cung cấp ảnh hưởng tùy thuộc vào tính đồng nhất của sở thích của họ. Ví dụ, nếu trong các lần lặp lại của bạn, điều đó xảy ra rằng phần lớn mọi người có một sở thích hơn một người khác, ảnh hưởng đó có thể lan sang các khu vực xung quanh.

Hãy tưởng tượng bạn có một thuộc tính có hai sự lựa chọn, soda hoặc pop. Nếu bạn hình dung thông tin này với dữ liệu vị trí của bạn trên một lưới có màu đen và trắng, nó sẽ trông giống như tiếng ồn trắng. Hoàn toàn ngẫu nhiên. Bây giờ bạn bắt đầu những gì thực chất là một máy tự động di động. Các thuộc tính sẽ thay đổi tùy thuộc vào tần số của các thuộc tính xung quanh chúng. Ví dụ: một lựa chọn soda, được bao quanh bởi 3 lựa chọn pop sẽ tự thay đổi thành pop. Sau nhiều lần lặp, bạn sẽ bắt đầu nhận được các khu vực địa phương nơi mỗi lựa chọn là soda hoặc pop. Những vùng đó sẽ phát triển và cuối cùng tiếng ồn trắng của bạn biến thành những hòn đảo đen trắng. Với nhiều sự lựa chọn hơn, nó có thể trông giống như video này do ai đó tạo ra trong trận chiến Pokémon ( ở đây nhiều hơn về thí nghiệm đó ).


Tùy chọn đầu tiên là cuối cùng tôi quyết định thực hiện vì nó yêu cầu trả trước ít thông tin nhất (có thể thay đổi sau này để có giải pháp phức tạp hơn, nhưng để thử nghiệm nó phù hợp nhất với tôi). Ngoài ra, bạn có thể cụ thể hơn về quy trình lặp không? Tôi không chắc chắn nếu tôi hiểu nó đến một điểm tôi có thể thực hiện nó.
wonderra

1
@wondra Tôi đã thêm một đoạn khác và một ví dụ trực quan.
MichaelHouse

3

Bạn dường như có một loạt các thuộc tính có thể nhìn thấy mà bản thân chúng không thực sự có hiệu ứng chơi trò chơi (tuổi, địa điểm ...) nhưng cung cấp một gợi ý cho các thuộc tính vô hình, liên quan đến trò chơi (sở thích của chúng).

Những gì bạn có thể làm là tạo ngẫu nhiên các thuộc tính hiển thị trước và sau đó khi tạo các thuộc tính liên quan đến trò chơi, thiên vị chúng tùy thuộc vào các thuộc tính hiển thị.

Ví dụ, công thức cho sự ưa thích vị ngọt có thể là random(0, 100) - random(0, age). Điều này làm cho một người cao tuổi thích đồ ngọt ít có khả năng hơn một đứa trẻ thích đồ ngọt.


Một lựa chọn khác là xác định một vài khuôn mẫu nhân vật (trẻ em, người già, nữ doanh nhân, hipster, punk ...) và gán các giá trị mặc định cho chúng.

Khi bạn tạo một nhân vật mới, hãy chọn một bản mẫu. Sau đó, khi bạn cuộn cho các thuộc tính ký tự, cuộn nhiều số ngẫu nhiên và chọn giá trị gần nhất với giá trị mặc định của bản mẫu cho thuộc tính đó. Bằng cách đó, phần lớn các nhân vật của bạn sẽ có xu hướng phù hợp với khuôn mẫu của họ, nhưng có thể và sẽ có những ngoại lệ. Bạn càng tạo ra nhiều cuộn, bạn sẽ càng ít ngoại lệ.

Khi có một tập hợp các bản mẫu được xác định trước là không đủ thủ tục đối với bạn, bạn thậm chí có thể tạo ngẫu nhiên bộ bản mẫu và các thuộc tính mặc định của chúng. Người chơi của bạn sau đó vẫn có thể phát hiện ra mối tương quan giữa các nhân vật dựa trên cùng một khuôn mẫu ngẫu nhiên. Ví dụ, những người thích soda cũng thích đóng gói màu đỏ, bởi vì (người chơi chưa biết) có một khuôn mẫu có cả sở thích soda mặc định cao và ưu tiên đỏ mặc định cao và tất cả đều bắt nguồn từ nó.

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.