Phát triển một máy phát địa hình


12

Gần đây tôi mới hỏi câu hỏi này và kết luận dường như là việc sử dụng lập trình di truyền ( GP ) cho Sáng tạo nội dung trò chơi theo thủ tục chưa thực sự được thực hiện. Tôi muốn thay đổi điều đó.

Tôi khá chắc chắn GP có thể được triển khai để giúp tìm một máy tạo địa hình mới. Câu hỏi tôi nhận được là làm thế nào điều này có thể đạt được?

Tất cả các GP đều có một vài phần cơ bản có thể khái quát cho tất cả các GP (lựa chọn cha mẹ, tái tổ hợp, đột biến, sinh tồn). Tôi có thể tự mình tìm ra. Vấn đề phát sinh trong các phần cụ thể vấn đề. Đây là cách bạn biểu diễn vấn đề trong mã (cái này thường sử dụng cây) và cách bạn đánh giá mức độ tốt của trình tạo (đây có thể là một hoặc nhiều giá trị).

Các câu hỏi ngắn gọn:

  • Làm thế nào bạn sẽ đại diện cho một trình tạo địa hình theo cách có thể được phân tích thành một cây?

  • Những loại địa hình này sẽ phải tạo ra? (sơ đồ chiều cao, đồ thị đỉnh, ...)

    Điều này càng ít dựa trên một hightmap thì càng tốt.

  • Điều gì sẽ được sử dụng để đánh giá sự phù hợp của một giải pháp?

    ví dụ: chúng tôi muốn địa hình thú vị để chúng tôi có thể có một trong các giá trị là thay đổi trung bình trong các chỉ tiêu cho mỗi đỉnh trên địa hình.


1
Tôi thực sự cảm thấy bạn không muốn GP cho việc này, nhưng GA. Các thuật toán để tạo ra tiếng ồn, ví dụ, thực sự khó tạo ra khi đang di chuyển và việc tạo ra một chức năng thể dục sẽ khó hơn so với việc tạo ra một hệ thống thỏa mãn nó. GA phù hợp hơn để điều chỉnh các tham số của một hệ thống hiện có.
DampeS8N

GP làm cho các giải pháp thú vị mà con người không bao giờ thực sự nghĩ đến. Đó là những gì tôi đang tìm kiếm. GP rất khó sử dụng, và đây có lẽ sẽ không phải là cách tốt nhất để sử dụng nó trong ngành, nhưng nó sẽ cho thấy một số tính khả thi lớn nếu nó xảy ra.
Alex Shepard

Câu trả lời:


11

Bạn có thể gặp may mắn với cách tiếp cận tương tự như hình ảnh di truyền của Karl Sims .

Ông sử dụng một tập hợp đơn giản của các nhà khai thác trong một LISP giống như ngôn ngữ như vậy mà đầu ra của bất kỳ nhà điều hành có thể được sử dụng để ảnh hưởng đến hình ảnh, tương tự như trong một số ngôn ngữ đổ bóng (ví dụ. Một vô hướng sẽ là một giá trị xám, một vector3sẽ RGB, vv .. ).

Mặc dù tôi đoán đó là công cụ triển khai, nhưng điều bạn có thể muốn là từ khóa của anh ấy, trong đó (iirc) chứa tất cả những điều cơ bản:

  • chức năng trig (sin, cos, tan , v.v.)
  • Chức vụ (x, y )
  • toán tử cơ bản ( sqrt, pow, abs, inverse )
  • chức năng tiếng ồn ( fBm, noise2, noise3 )
  • fractals khác ( mandelbrot, julia )
  • chức năng nội suy ( lerp, quad, step, smoothstep )

(Một số điều trên có thể không nằm trong triển khai của anh ấy; tôi đã tìm thấy công việc của anh ấy từ lâu và thực sự đã thực hiện một vài nỗ lực về những gì bạn mô tả trong nhiều năm - vì vậy những ký ức có thể bị rò rỉ :)

Giữ cho nó thú vị (và nhanh chóng)

Tôi đã có một chút may mắn với cách tiếp cận đa tầng giúp giảm đáng kể số lượng tiến hóa chết.

  1. một tập hợp các phạm vi được tạo cho mỗi toán tử (hoặc bị đột biến từ các vòng trước)
    • những lý tưởng này giữ các giá trị trong phạm vi "lành mạnh" cho từng chức năng, nhưng có thể phát triển thành các phạm vi có kết quả hữu ích đáng ngạc nhiên, có vẻ như là điều "đúng" phải làm
  2. tạo một vài cây thuật toán
    • cho mỗi cái này tạo ra một vài bản đồ chiều cao ở các vị trí ngẫu nhiên và đánh giá thể lực
    • nếu chúng ta có nhiều trận đấu hay thì hãy phát triển xuống nhánh này một chút, làm nhiễu các phạm vi từ bước 1 một chút ở mỗi đứa trẻ
    • nếu không, có lẽ chúng ta đã có phạm vi xấu, quay lại bước 1

Tuy nhiên...

Bây giờ tôi đã thuận tiện bỏ qua thuật toán thể dục , tôi chủ yếu sử dụng phương pháp "lựa chọn không tự nhiên" của Karl Sims, nơi bạn thấy thế hệ hiện tại ở giữa một đám con (được phổ biến bởi Công cụ quyền lực của Kai ngày trước - đây là một hình ảnh của những gì tôi có nghĩa là ) ..

Tuy nhiên, bạn có thể có một bộ hình ảnh đào tạo, có thể một số từ hình ảnh vệ tinh và một vài hình ảnh nhân tạo có phẩm chất đặc biệt và sau đó có thể sử dụng phân tích wavelet hoặc 2D FFT trên chúng so với địa hình bạn đang thử nghiệm?

Đây là một chủ đề thú vị, nhưng tôi nghi ngờ những gì bạn cần một câu trả lời trên :)

CHỈNH SỬA: à. đã phải xóa một loạt các liên kết vì tôi là người dùng mới: - |


Điều này dường như dẫn đến điều tương tự mà tôi đã nhận được, các thuật toán không có nghĩa là tạo ra nội dung ngẫu nhiên liên tục mà là để đào tạo thế hệ theo một tập hợp kết quả duy nhất hoặc giới hạn ... và vẫn cần một con người đưa ra lựa chọn.
James

Từ những gì tôi có thể hình dung thể dục sẽ phải dựa trên một số phân tích thống kê về kết quả. Các yếu tố mà tôi có thể đưa ra là lượng phương sai bên trong một địa hình được tạo trung bình trên một số địa hình được tạo ra (tối đa hóa) và giá trị độ lệch chuẩn (tối thiểu hóa, cho sự ổn định của phương sai). Nhưng sau đó tôi đoán chúng ta sẽ phải tối đa hóa sự thay đổi độ cao trung bình giữa hai địa hình được tạo ra.
Alex Shepard

1
@Alex có lẽ bài báo này cũng sẽ được quan tâm. Tôi tưởng tượng nếu bạn bật một số kỹ thuật được đề cập lên đầu, bạn có thể sử dụng nó để hướng dẫn tập thể dục. (Hoặc nó cũng có thể là những gì bạn muốn :)
pentaphobe

@phobius WOAH !! Mát mẻ. Tôi cần khám phá thêm, nhưng có vẻ rất hứa hẹn. Bây giờ để biến nó thành một vấn đề tìm kiếm ...
Alex Shepard

2

Tôi không chắc bạn có thể trả lời câu hỏi này không nhưng tôi cảm thấy một lời giải thích về lý do tại sao có thể là một câu trả lời đủ hữu ích. Vì vậy, câu trả lời ngắn gọn:

  • Bạn sẽ muốn chọn một thế hệ địa hình nơi các khía cạnh nhất định của nó có thể được dựa trên các giá trị dữ liệu. Điều này không khó thực hiện nhưng đòi hỏi bạn phải chọn một thế hệ địa hình. Vì khu vực tôi đang làm việc thuộc thế hệ voxel, những thứ như tốc độ lấy mẫu, đường hầm, mức độ cao, v.v. sẽ là những thứ có thể được đưa vào dữ liệu và 'tiến hóa' hơn.
  • Loại đi đôi với phần đầu tiên. Việc bạn đi với hình thức thế hệ nào không quan trọng miễn là bạn có thể thiết lập các thuộc tính khác nhau của nó. Sự lựa chọn này nên có nhiều hơn để làm với loại trò chơi bạn đang muốn thực hiện.
  • Đây là nơi nó bị phá vỡ. Tôi không thể nghĩ ra cách nào để đo lường điều này ngoài một Người thực sự nhìn ra thế giới và nói "Ôi thật tuyệt". Nhưng điều này loại bỏ máy tính tự lặp lại. Điều này cũng ngụ ý rằng cuối cùng bạn sẽ sử dụng hình thức thế hệ này để tạo ra một thế giới duy nhất, tìm kiếm một thế giới 'tốt nhất' trái ngược với thế giới ngẫu nhiên mỗi lần.

Thuật toán di truyền thường được sử dụng để giải quyết một vấn đề đã biết trong đó bạn có thể xác định môi trường thông qua các quy tắc. Sau đó, bạn có thể tạo các tập dữ liệu đại diện cho các thuộc tính khác nhau ảnh hưởng đến cách mọi thứ phản ứng với các quy tắc. Sau đó, máy tính sẽ chơi một 'vòng' với tập dữ liệu ban đầu, chọn số X hàng đầu, trộn các giá trị của chúng sau khi ghép chúng lại với nhau và thực hiện một vòng khác .. Một ví dụ phổ biến về điều này là 'nhân giống một con troll tốt hơn' (thực hiện việc nhân giống để tìm một tập hợp các giá trị mà troll thường làm rất tốt trong môi trường của nó (Có thể săn và ăn, giết hoặc tránh xa dân làng, có thể thu thập các chiến lợi phẩm và tích lũy tất cả các vật thể sáng bóng mà nó mong muốn, v.v.).

Tôi chỉ không chắc chắn những gì bạn đang cố gắng thực hiện có thể áp dụng trong lĩnh vực tạo địa hình. Điều duy nhất tôi có thể đưa ra là các loại đánh giá nội dung trò chơi mà bạn không muốn lập kế hoạch cho một thế giới nhưng muốn tạo ra một thế giới mà AI có thể được tính toán một cách độc đáo hoặc đại loại như thế. Ngay cả với điều này tuy nhiên bạn đang tìm kiếm một thế giới duy nhất hoặc ít nhất là giới hạn.


À ... tôi nghĩ bạn đang nhầm lẫn các thuật toán tiến hóa với các chương trình di truyền. EA được sử dụng để tối ưu hóa và điều chỉnh đầu vào cho một thuật toán. GP được sử dụng để xây dựng thuật toán và đó là những gì tôi đang tìm kiếm. Câu trả lời tốt mặc dù. Lưu ý: những địa hình này không cần phải thực tế, chỉ thú vị.
Alex Shepard

Nếu bạn không thể định nghĩa 'thú vị' theo cách lập trình, thì bạn sẽ gặp vấn đề tôi đang cố gắng giải đáp.
James

0

Những loại địa hình này sẽ phải tạo ra? (sơ đồ chiều cao, đồ thị đỉnh, ...)

Chắc chắn là một đồ thị đỉnh (một lưới), nó là lưu trữ nhỏ gọn và có thể được rasterized (t shipated) theo yêu cầu.

Làm thế nào bạn sẽ đại diện cho một trình tạo địa hình theo cách có thể được phân tích thành một cây?

Automata di động. Tôi có thể nghĩ về hai triển khai:

  1. Máy tự động đặt quy tắc, có thể có các yếu tố của máy tự động hữu hạn (khi trạng thái hiện tại, như số lần truy cập hoặc thời gian nhàn rỗi, được tính đến).

    • Mỗi nút được khởi tạo với một trạng thái ngẫu nhiên
    • Mỗi nút có một thể hiện của bộ giải
    • Mỗi người giải tiếp tục tính toán trạng thái tiếp theo cho đến khi hết quy tắc hoặc đạt đến trạng thái lý tưởng (Tôi đã thực hiện ở đây)
    • Tất cả các trạng thái tiếp theo được tính toán trước và sau đó được áp dụng tất cả cùng một lúc trước khi bắt đầu tính toán tiếp theo, vì vậy thứ tự tính toán sẽ không thành vấn đề

Bản thân bộ quy tắc có thể được biểu diễn dưới dạng cây quyết định phân nhánh hoặc lô lệnh đơn giản (không chắc nó có hoạt động không)

Nó chỉ là một quy tắc được đặt cho mỗi nút

  1. Các nhà xây dựng thế giới. Thay vì áp dụng một bộ giải cho mỗi nút đơn, bạn có thể tạo chỉ một bó trong số chúng và cho phép chúng điều hướng lưới.

    • Mỗi người xây dựng có bộ quy tắc riêng của mình
    • Ngăn chặn chúng xâm nhập vào nút bị chiếm bởi nhà xây dựng khác
    • Mỗi người xây dựng có thể được đại diện như một nhánh của cây
    • Trong quá trình xây dựng tiến hóa có thể nhân đôi

Tuy nhiên, tôi e rằng cách tiếp cận thứ hai cần được hỗ trợ bởi cách thứ nhất: tính ngẫu nhiên ban đầu cần được làm mịn và tôi không chắc liệu các nhà xây dựng có thể thực hiện được mẹo hay không. Tất cả các tế bào sống đều có ty thể.

Điều gì sẽ được sử dụng để đánh giá sự phù hợp của một giải pháp?

Tính toàn vẹn của địa hình kết quả - nó không nên trông giống như một mớ hỗn độn. Và sự đa dạng - nói chung, chúng tôi muốn có càng nhiều biến thể có sẵn được thể hiện càng tốt (vùng đất bằng phẳng từ mép này sang mép khác không có gì thú vị). Có lẽ một cái gì đó phức tạp hơn như làm thế nào các nút lân cận khớp với nhau (lãnh nguyên ở giữa sa mạc, cái gì?)

Hãy tự thử nó với trình tạo lưới của tôi khi / nếu có thời gian rảnh =)

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.