2010-10-10 68 views
8

Tôi phải thực hiện một dự án về thuật toán di truyền, và tôi đã có ý tưởng điều chỉnh các đặc điểm (ví dụ: vũ khí được sử dụng, vv) của bot người bắn súng đầu tiên. Ví dụ, tôi sẽ đại diện cho các đặc điểm dưới dạng một chuỗi, với 10 bit đầu tiên đại diện cho xác suất chọn weapon1, 10 bit tiếp theo thể hiện xác suất chọn weapon2, v.v. Do đó tôi sẽ nhận được chuỗi tối ưu và do đó có thể tìm ra bộ vũ khí tối ưu tôi nên sử dụng là gì.Thuật toán di truyền trong trò chơi

Vấn đề hiển nhiên mà tôi đang đối mặt là cách tìm các giá trị tập thể dục. Ý tưởng của tôi là nếu tôi muốn tìm tập thể dục của một chuỗi, tôi buộc bot phải sử dụng vũ khí tương ứng và chơi trò chơi với nó và sử dụng điểm số cuối cùng của bot làm thể lực. Vấn đề là tôi sẽ cần phải chơi không có trò chơi LỚN.

Có loại mô phỏng nào mà tôi có thể làm không? Ví dụ, tôi có thể bằng cách nào đó có được một chức năng f, nơi tôi sẽ ăn trong các đặc điểm của bot (ví dụ: vũ khí, vv) và nó sẽ trả về các giá trị thể dục tương ứng? Trò chơi FPS nguồn mở có cung cấp thư viện như vậy không?

Tùy chọn khác sẽ là đi vào mã nguồn của trò chơi và sau đó tiếp tục mô phỏng các kịch bản khác nhau và ghi nhận điểm số trong từng trường hợp. Tôi không muốn có thêm sự phức tạp của việc đi vào nguồn của trò chơi, vì đây là một dự án ngắn (1 tháng).

Cảm ơn.

Trả lời

4

Tôi nghĩ dự án của bạn rất phức tạp cho dự án một tháng.

Nó không phải là khá thú vị nhưng có lẽ bạn có thể nhìn vào chiến lược chơi cho một trò chơi hội đồng quản trị hoặc trò chơi thẻ thay thế. Đây là một tình huống đơn giản hơn nhiều và nhiều trò chơi có thể dễ dàng và nhanh chóng được mô phỏng cho phép bạn sử dụng thuật toán di truyền để tìm ra một chiến lược chơi tốt. Nó sẽ dạy cho bạn các nguyên tắc của các thuật toán di truyền mà không yêu cầu bạn phải hiểu cơ thể khổng lồ của mã nguồn cần thiết để mô phỏng một game bắn súng người đầu tiên.

+0

Hmm .... lấy điểm. Nhưng nếu chỉ có tôi có thể tìm ra cách để mô phỏng một FPS, tôi nghĩ rằng tôi có thể có thể làm điều đó trong một tháng. Hoặc một số loại trò chơi khác, như một trò chơi bóng đá. Có thư viện nào để làm điều đó, mà không đi vào mã trò chơi của họ? – Karan

+0

Có bất kỳ trò chơi FPS nguồn mở nào không? – Dane

+0

@ Dane: Vâng, bạn có thể tìm thấy nhiều trang trên trang này: http://en.wikipedia.org/wiki/List_of_freeware_first-person_shooters - Tất cả những người có giấy phép GNU GPL là mở cửa, và một số khác là nguồn mở quá. –

0

Chức năng thể dục của bạn có thể là số tiền mà DPS cho một bot giao dịch chống lại đối thủ vịt ngồi. Ví dụ. có bot tấn công người chơi và không đánh trả lại.

Bạn có thể ghi nhớ tập thể dục, vì vậy các cá nhân trùng lặp không phải được kiểm tra lại.


Hoặc, bạn có thể làm cho sự sống còn của fittest bằng chữ bằng cách đặt 2 cá nhân vào các nhóm đối diện và xem ai giết người.

Vì về mặt kỹ thuật, bạn không cần chức năng thể dục, chỉ là cách để so sánh các cá nhân.

Để giảm số lượng so sánh, các cá nhân từ mỗi thế hệ có thể được so sánh qua một giải đấu, giống như

A 
    }-> A 
B 
     }-> C 
C 
    }-> C 
D 

trong đó cho thấy rằng hai cá nhân hàng đầu là C, sau đó A.

+0

Nếu tôi làm như thế này, tôi vẫn sẽ cần phải mô phỏng một cuộc chiến giữa 2 chương trình, và tôi sẽ cần phải làm toàn bộ rất nhiều những điều này sẽ mất rất nhiều thời gian. Nếu có chức năng thư viện thực hiện điều này cho tôi (ví dụ, lấy vũ khí của chương trình làm đầu vào và trả lại ai thắng cuộc chiến), thì nó sẽ thực sự tuyệt vời, vì tôi sẽ không phải luôn luôn nhìn thấy toàn bộ cuộc chiến, Tôi sẽ chỉ nhận được kết quả ngay lập tức. – Karan

+0

@ user280454: Bạn có thể tăng tốc mọi thứ bằng cách đưa ra các giả định nhất định, giống như một bot có súng sẽ luôn đánh bại một bot chỉ bằng một con dao. – AlcubierreDrive

+0

@ user280454: Tôi đã thêm một giải pháp thay thế mới vào đầu câu trả lời của tôi: hãy tập thể dục = DPS một cá nhân chống lại người chơi vịt ngồi. – AlcubierreDrive

0

Bạn có thể sử dụng bot đã tồn tại để tạo dữ liệu, nếu có sẵn và nếu điều này là có thể.

Ngoài ra, bạn có thể sử dụng Autohotkey (tìm kiếm google) để tạo ra một chuỗi phím & nhấn chuột và làm cho bot bằng cách nào đó phát tự động theo cách câm.

+0

Vấn đề với việc sử dụng một bot đã tồn tại là để làm cho nó sử dụng vũ khí nhất định, tôi sẽ cần phải nhận được vào mã của bot, phải không? – Karan

+0

tất nhiên, tôi không bao giờ giả định khác – BROCK

2

Tôi đồng ý với Mark Byers, nó hơi tham vọng cho dự án 1 tháng.

Dù sao, bạn có thể muốn xem NERO (Nhà phát triển robot thần kinh tiến hóa), là trò chơi dựa trên thuật toán của Ken Stanley NEAT (NeuroEvolution of Augmenting Topologies).

Bạn cũng có thể muốn có một cái nhìn tại các giấy tờ Stanley:

Một số triển khai của NEAT tồn tại cho các ngôn ngữ khác nhau, do đó có thể là một sự khởi đầu.

+0

Được rồi. Tôi đã nghĩ về một ý tưởng khác, không quá tham vọng. Làm thế nào về tôi thiết kế một GA mà có thể chơi rắn trên riêng của mình? Tôi lo lắng điều này có thể là quá dễ dàng của một dự án. Bạn nghĩ sao? – Karan

+0

@ user280454: Điều đó sẽ rất thú vị, bạn luôn có thể triển khai phiên bản "mở rộng" của con rắn, ví dụ, bạn sẽ dịch chuyển xung quanh màn hình, hoặc bom hoặc không có thứ gì đó, để làm cho nó phức tạp hơn một chút :) nếu tôi nhớ rõ, một trong những ví dụ bạn sẽ tìm thấy trong trang web NEAT đề cập đến một cái gì đó tương tự (một bot tìm đường của nó thông qua một labirint hoặc một cái gì đó như thế). – nico

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