Làm thế nào để đào tạo một mạng lưới thần kinh nhân tạo để chơi Diablo 2 bằng cách sử dụng đầu vào trực quan?


139

Tôi hiện đang cố gắng để có được ANN để chơi một trò chơi video và tôi đã hy vọng nhận được sự giúp đỡ từ cộng đồng tuyệt vời ở đây.

Tôi đã giải quyết trên Diablo 2. Do đó, chơi trò chơi theo thời gian thực và theo quan điểm đẳng cự, với người chơi điều khiển một hình đại diện duy nhất mà máy ảnh đặt ở giữa.

Để làm cho mọi thứ trở nên cụ thể, nhiệm vụ là đưa nhân vật của bạn x điểm kinh nghiệm mà không bị giảm sức khỏe xuống 0, trong đó điểm kinh nghiệm có được thông qua việc tiêu diệt quái vật. Dưới đây là một ví dụ về lối chơi:

đây

Bây giờ, vì tôi muốn mạng chỉ hoạt động dựa trên thông tin mà nó nhận được từ các pixel trên màn hình, nó phải học một đại diện rất phong phú để chơi hiệu quả, vì điều này có lẽ sẽ yêu cầu nó phải biết (ít nhất là) chia thế giới trò chơi thành các đối tượng và cách tương tác với chúng.

Và tất cả các thông tin này phải được dạy cho mạng bằng cách nào đó. Cả đời tôi không nghĩ ra cách huấn luyện thứ này. Ý tưởng duy nhất của tôi là có một chương trình riêng biệt trực quan trích xuất một cái gì đó tốt / xấu trong trò chơi (ví dụ như sức khỏe, vàng, kinh nghiệm) từ màn hình, và sau đó sử dụng chỉ số đó trong một quy trình học tập củng cố. Tôi nghĩ đó sẽ là một phần của câu trả lời, nhưng tôi không nghĩ nó sẽ đủ; có quá nhiều mức độ trừu tượng từ đầu vào trực quan thô đến hành vi hướng đến mục tiêu cho phản hồi hạn chế như vậy để đào tạo một mạng lưới trong suốt cuộc đời tôi.

Vì vậy, câu hỏi của tôi: bạn có thể nghĩ ra cách nào khác để đào tạo một mạng lưới để thực hiện ít nhất một phần của nhiệm vụ này? tốt nhất là không làm cho hàng ngàn ví dụ được dán nhãn.

Chỉ để có thêm một chút định hướng: Tôi đang tìm kiếm một số nguồn học tập củng cố khác và / hoặc bất kỳ phương pháp không giám sát nào để trích xuất thông tin hữu ích trong cài đặt này. Hoặc một thuật toán được giám sát nếu bạn có thể nghĩ ra cách lấy dữ liệu được gắn nhãn ra khỏi thế giới trò chơi mà không phải gắn nhãn thủ công.

CẬP NHẬT (27/11/12):

Kỳ lạ thay, tôi vẫn đang làm việc này và dường như đang đạt được tiến bộ. Bí mật lớn nhất để khiến bộ điều khiển ANN hoạt động là sử dụng các kiến ​​trúc ANN tiên tiến nhất phù hợp với nhiệm vụ. Do đó, tôi đã sử dụng một mạng lưới niềm tin sâu sắc bao gồm các máy Boltzmann bị hạn chế có điều kiện mà tôi đã đào tạo một cách không giám sát (trên video tôi chơi trò chơi) trước khi tinh chỉnh với sự lan truyền ngược thời gian (nghĩa là học tăng cường với tiêu chuẩn ANN chuyển tiếp thức ăn).

Vẫn đang tìm kiếm đầu vào có giá trị hơn, đặc biệt là về vấn đề lựa chọn hành động trong thời gian thực và cách mã hóa hình ảnh màu để xử lý ANN :-)

CẬP NHẬT (21/10/15):

Chỉ cần nhớ rằng tôi đã hỏi câu hỏi này vào ngày hôm sau, và nghĩ rằng tôi nên đề cập rằng đây không còn là một ý tưởng điên rồ nữa. Kể từ lần cập nhật cuối cùng của tôi, DeepMind đã xuất bản bài báo tự nhiên của họ về việc nhận các mạng thần kinh để chơi các trò chơi Atari từ các đầu vào trực quan . Thật vậy, điều duy nhất ngăn tôi sử dụng kiến ​​trúc của họ để chơi, một tập hợp con hạn chế, của Diablo 2 là thiếu quyền truy cập vào công cụ trò chơi cơ bản. Kết xuất với màn hình và sau đó chuyển hướng nó đến mạng chỉ là quá chậm để đào tạo trong một khoảng thời gian hợp lý. Do đó, có lẽ chúng ta sẽ không thấy loại bot này chơi Diablo 2 sớm, nhưng chỉ vì nó sẽ chơi thứ gì đó hoặc là nguồn mở hoặc có quyền truy cập API vào mục tiêu kết xuất. (Quake có lẽ?)



Một sự khác biệt lớn giữa vấn đề lái xe trong bài báo và trò chơi là trong vấn đề lái xe, đầu vào trực quan là một đại diện trạng thái đầy đủ: nếu có chướng ngại vật bên phải - rẽ trái, nếu có chướng ngại vật bên trái đúng. Tuy nhiên, trong một trò chơi, bạn thường phải đưa ra quyết định dựa trên những thứ không được hiển thị trên màn hình. Bất cứ khi nào bạn vào một cửa hàng, nó có thể trông giống nhau, nhưng bạn cần phải mua các mặt hàng khác nhau.
Don Reba

1
Để tốt nhất trong hồi ức của tôi, Diablo 2 sử dụng các tấm sprite dễ dàng trích xuất. Nó khá đơn giản để buộc các đối tượng (người chơi, kẻ thù, v.v.) vào một danh sách các họa tiết liên quan. Nó không giải quyết vấn đề các đối tượng bị che khuất bởi nhau, nhưng đó là một sự khởi đầu.
Ryan Jenkins

@zergylord Sẽ rất hữu ích nếu bạn có thể nói bạn muốn giữ vững tiêu chí của mình như thế nào về a) Chơi Diablo 2 và b) bằng cách sử dụng các pixel được vẽ trên màn hình làm nguồn đầu vào duy nhất của bạn. Nếu bạn muốn làm mọi thứ dễ dàng hơn với chính mình, tôi nghĩ bạn sẽ phải thư giãn một (hoặc cả hai) những thứ đó một chút - bạn có sẵn sàng làm điều đó không?
Stompchicken

1
Bỏ phiếu để đóng như quá rộng.
Ciro Santilli 郝海东 冠状 病 事件

Câu trả lời:


54

Tôi có thể thấy rằng bạn lo lắng về cách đào tạo ANN, nhưng dự án này ẩn giấu một sự phức tạp mà bạn có thể không nhận ra. Nhận dạng đối tượng / nhân vật trên các trò chơi máy tính thông qua xử lý hình ảnh là một nhiệm vụ rất khó khăn (không phải là điên rồ đối với các game FPS và RPG). Tôi không nghi ngờ về các kỹ năng của bạn và tôi cũng không nói là không thể thực hiện được, nhưng bạn có thể dễ dàng dành thời gian để nhận ra công cụ hơn gấp 10 lần so với việc thực hiện ANN (giả sử bạn đã có kinh nghiệm với các kỹ thuật xử lý hình ảnh kỹ thuật số ).

Tôi nghĩ ý tưởng của bạn rất thú vị và cũng rất tham vọng . Tại thời điểm này bạn có thể muốn xem xét lại nó. Tôi cảm thấy rằng dự án này là một cái gì đó bạn đang lên kế hoạch cho trường đại học, vì vậy nếu trọng tâm của công việc thực sự là ANN, bạn có lẽ nên chọn một trò chơi khác, một cái gì đó đơn giản hơn.

Tôi nhớ rằng một người khác đã tìm kiếm lời khuyên về một dự án khác nhưng cách nào đó tương tự cách đây không lâu. Thật đáng để kiểm tra.

Mặt khác, có thể có các cách tiếp cận tốt hơn / dễ dàng hơn để xác định các đối tượng trong trò chơi nếu bạn chấp nhận đề xuất. Nhưng trước tiên, hãy gọi dự án này cho những gì bạn muốn nó là: một bot thông minh .

Một phương pháp để thực hiện các bot truy cập vào bộ nhớ của máy khách trò chơi để tìm thông tin liên quan, chẳng hạn như vị trí của nhân vật trên màn hình và đó là tình trạng sức khỏe. Đọc bộ nhớ máy tính là chuyện nhỏ, nhưng tìm ra chính xác nơi mà trong bộ nhớ cần tìm là không. Máy quét bộ nhớ như Cheat Engine có thể rất hữu ích cho việc này.

Một phương pháp khác , hoạt động theo trò chơi, bao gồm thao tác xử lý thông tin kết xuất. Tất cả các đối tượng của trò chơi phải được hiển thị trên màn hình. Điều này có nghĩa là vị trí của tất cả các đối tượng 3D cuối cùng sẽ được gửi đến thẻ video để xử lý. Hãy sẵn sàng cho một số gỡ lỗi nghiêm trọng.

Trong câu trả lời này, tôi đã mô tả ngắn gọn 2 phương pháp để thực hiện những gì bạn muốn thông qua xử lý hình ảnh. Nếu bạn quan tâm đến chúng, bạn có thể tìm hiểu thêm về chúng trong Khai thác trò chơi trực tuyến (chương 6), một cuốn sách tuyệt vời về chủ đề này.


43

CẬP NHẬT 2018-07-26: Thế đấy! Bây giờ chúng ta đang tiếp cận điểm mà loại trò chơi này sẽ có thể giải quyết được! Sử dụng OpenAI và dựa trên trò chơi DotA 2, một đội có thể tạo ra một AI có thể đánh bại các game thủ bán chuyên nghiệp trong trò chơi 5v5 . Nếu bạn biết DotA 2, bạn sẽ biết trò chơi này khá giống với các trò chơi giống Diablo về mặt cơ học, nhưng người ta có thể lập luận rằng nó thậm chí còn phức tạp hơn do cách chơi của đội.

Đúng như mong đợi, điều này đạt được nhờ những tiến bộ mới nhất trong việc tăng cường học tập với học sâu và sử dụng các khung trò chơi mở như OpenAI giúp giảm bớt sự phát triển của AI kể từ khi bạn có được API gọn gàng và cũng vì bạn có thể tăng tốc trò chơi (AI đã chơi tương đương với 180 năm chơi với chính nó mỗi ngày!).

Vào ngày 5 tháng 8 năm 2018 (trong 10 ngày!) , Nó đã được lên kế hoạch để hố AI này trước các game thủ DotA 2 hàng đầu. Nếu điều này diễn ra, mong đợi một cuộc cách mạng lớn, có thể không được trung gian hóa như việc giải quyết trò chơi Go, nhưng dù sao nó cũng sẽ là một cột mốc lớn cho trò chơi AI!

CẬP NHẬT 2017-01: Lĩnh vực này đang chuyển động rất nhanh kể từ thành công của AlphaGo và có các khung mới để tạo điều kiện phát triển các thuật toán học máy trên các trò chơi gần như mỗi tháng. Dưới đây là danh sách những cái mới nhất tôi tìm thấy:

  • OpenAI's Universe : một nền tảng để chơi hầu như mọi trò chơi bằng cách sử dụng máy học . API có trong Python và nó chạy các trò chơi đằng sau môi trường máy tính từ xa của VNC, vì vậy nó có thể chụp ảnh của bất kỳ trò chơi nào! Bạn có thể có thể sử dụng Universe để chơi Diablo II thông qua thuật toán học máy!
  • Phòng tập của OpenAI : Tương tự như Vũ trụ nhưng nhắm mục tiêu cụ thể vào các thuật toán học tập củng cố (vì vậy đây là một dạng khái quát của khung được AlphaGo sử dụng nhưng cho nhiều trò chơi hơn). Có một khóa học về Udemy bao gồm ứng dụng học máy vào các trò chơi như breakout hoặc Doom bằng OpenAI Gym.
  • TorchCraft : cầu nối giữa Torch (khung học máy) và StarCraft: Brood War.
  • pyGTA5 : một dự án xây dựng những chiếc xe tự lái trong GTA5 chỉ sử dụng các ảnh chụp màn hình (với rất nhiều video trực tuyến ).

Thời gian rất thú vị!

CẬP NHẬT QUAN TRỌNG (2016-06): Theo ghi nhận của OP, vấn đề đào tạo mạng nhân tạo này chỉ chơi các trò chơi trực quan hiện đang được một số tổ chức nghiêm túc giải quyết, với kết quả khá hứa hẹn, như DeepMind Deep-Qlearning-Network (DQN ) .

Và bây giờ, nếu bạn muốn tham gia thử thách cấp độ tiếp theo, bạn có thể sử dụng một trong những nền tảng phát triển trò chơi tầm nhìn AI khác nhau như ViZDoom , một nền tảng được tối ưu hóa cao (7000 khung hình / giây) để đào tạo các mạng để chơi Doom chỉ bằng các đầu vào trực quan :

ViZDoom cho phép phát triển các bot AI chơi Doom chỉ bằng thông tin hình ảnh (bộ đệm màn hình). Nó chủ yếu dành cho nghiên cứu trong học máy trực quan, và đặc biệt là học tăng cường. ViZDoom dựa trên ZDoom để cung cấp cơ chế trò chơi.

Và kết quả khá tuyệt vời, hãy xem các video trên trang web của họhướng dẫn hay (bằng Python) tại đây!

Ngoài ra còn có một dự án tương tự cho Quake 3 Arena, được gọi là Quagents , cũng cung cấp quyền truy cập API dễ dàng vào dữ liệu trò chơi cơ bản, nhưng bạn có thể loại bỏ nó và chỉ sử dụng ảnh chụp màn hình và API để kiểm soát tác nhân của mình.

Tại sao một nền tảng như vậy hữu ích nếu chúng ta chỉ sử dụng ảnh chụp màn hình? Ngay cả khi bạn không truy cập dữ liệu trò chơi cơ bản, một nền tảng như vậy vẫn cung cấp:

  • triển khai trò chơi hiệu suất cao (bạn có thể tạo nhiều dữ liệu / lượt chơi / thế hệ học tập với ít thời gian hơn để thuật toán học tập của bạn có thể hội tụ nhanh hơn!).
  • API đơn giản và nhanh nhạy để kiểm soát các tác nhân của bạn (nghĩa là, nếu bạn cố gắng sử dụng đầu vào của con người để điều khiển trò chơi, một số lệnh của bạn có thể bị mất, do đó, bạn cũng sẽ xử lý sự không tin cậy của đầu ra của mình ...).
  • dễ dàng thiết lập các kịch bản tùy chỉnh .
  • kết xuất tùy chỉnh (có thể hữu ích để "đơn giản hóa" hình ảnh bạn nhận được để dễ xử lý)
  • Chơi đồng bộ ("lần lượt") (vì vậy ban đầu bạn không cần thuật toán của mình hoạt động trong thời gian thực, đó là một sự giảm độ phức tạp rất lớn).
  • các tính năng tiện lợi bổ sung như khả năng tương thích đa nền tảng, tương thích retro (bạn không có nguy cơ bot của mình không hoạt động với trò chơi nữa khi có bản cập nhật trò chơi mới), v.v.

Tóm lại, điều tuyệt vời ở các nền tảng này là chúng làm giảm bớt nhiều vấn đề kỹ thuật trước đây mà bạn phải giải quyết (cách thao tác đầu vào trò chơi, cách thiết lập kịch bản, v.v.) để bạn chỉ phải xử lý thuật toán học tập chinh no.

Vì vậy, bây giờ, hãy làm việc và biến chúng ta thành bot hình ảnh AI tốt nhất từ ​​trước đến nay;)


Bài đăng cũ mô tả các vấn đề kỹ thuật phát triển AI chỉ dựa vào đầu vào trực quan:

Trái ngược với một số đồng nghiệp của tôi ở trên, tôi không nghĩ vấn đề này là khó chữa. Nhưng nó chắc chắn là một khó khăn!

Vấn đề đầu tiên như đã chỉ ra ở trên là sự thể hiện trạng thái của trò chơi : bạn không thể biểu thị trạng thái đầy đủ chỉ bằng một hình ảnh duy nhất, bạn cần duy trì một số loại ghi nhớ(sức khỏe nhưng cũng có các đối tượng được trang bị và các vật phẩm có sẵn để sử dụng, nhiệm vụ và mục tiêu, v.v.). Để lấy thông tin như vậy, bạn có hai cách: bằng cách truy cập trực tiếp vào dữ liệu trò chơi, đây là cách đáng tin cậy và dễ dàng nhất; hoặc bạn có thể tạo một bản trình bày trừu tượng về những thông tin này bằng cách thực hiện một số thủ tục đơn giản (mở kho, chụp ảnh màn hình, trích xuất dữ liệu). Tất nhiên, trích xuất dữ liệu từ ảnh chụp màn hình sẽ khiến bạn phải thực hiện một số quy trình được giám sát (mà bạn xác định hoàn toàn) hoặc không được giám sát (thông qua thuật toán học máy, nhưng sau đó sẽ tăng quy mô rất phức tạp ...). Đối với học máy không giám sát, bạn sẽ cần sử dụng một loại thuật toán khá gần đây gọi là thuật toán học cấu trúc (học cấu trúc dữ liệu thay vì cách phân loại chúng hoặc dự đoán giá trị).http://techtalks.tv/talks/54422/

Sau đó, một vấn đề khác là ngay cả khi bạn đã lấy tất cả dữ liệu bạn cần, trò chơi chỉ có thể quan sát được một phần . Do đó, bạn cần đưa một mô hình trừu tượng của thế giới và cung cấp cho nó thông tin được xử lý từ trò chơi, ví dụ như vị trí của hình đại diện của bạn, nhưng cũng là vị trí của các mục nhiệm vụ, mục tiêu và kẻ thù bên ngoài màn hình. Bạn có thể xem xét Bộ lọc hạt hỗn hợp của Vermaak 2003 cho việc này.

Ngoài ra, bạn cần phải có một tác nhân tự trị , với các mục tiêu được tạo động. Một kiến ​​trúc nổi tiếng bạn có thể thử là tác nhân BDI, nhưng có lẽ bạn sẽ phải điều chỉnh nó để kiến ​​trúc này hoạt động trong trường hợp thực tế của bạn. Ngoài ra, còn có Petri Net đệ quy, mà bạn có thể kết hợp với tất cả các loại biến thể của lưới petri để đạt được những gì bạn muốn vì nó là một khung rất linh hoạt và được nghiên cứu kỹ lưỡng, với các quy trình chứng minh và chứng minh tuyệt vời.

Và cuối cùng, ngay cả khi bạn làm tất cả những điều trên, bạn sẽ cần tìm cách mô phỏng trò chơi ở tốc độ tăng tốc (sử dụng video có thể tốt, nhưng vấn đề là thuật toán của bạn sẽ chỉ hiển thị mà không có kiểm soát và có thể cố gắng cho bản thân nó là rất quan trọng cho việc học). Thật vậy, người ta biết rằng thuật toán hiện đại cần nhiều thời gian hơn để học điều tương tự mà con người có thể học (thậm chí nhiều hơn với việc học tăng cường), do đó, nếu không thể tăng tốc quá trình ( tức là, nếu bạn không thể tăng tốc thời gian trò chơi), thuật toán của bạn thậm chí sẽ không hội tụ trong một đời ...

Để kết luận, những gì bạn muốn đạt được ở đây là ở giới hạn (và có thể vượt xa một chút) của các thuật toán hiện đại . Tôi nghĩ rằng nó có thể là có thể, nhưng ngay cả khi nó là, bạn sẽ dành rất nhiều thời gian , bởi vì đây không phải là một vấn đề lý thuyết mà là một vấn đề thực tế bạn đang tiếp cận ở đây, và do đó bạn cần phải thực hiện và kết hợp rất nhiều phương pháp tiếp cận AI khác nhau để giải quyết nó.

Vài thập kỷ nghiên cứu với cả nhóm làm việc về nó có thể không đủ, vì vậy nếu bạn ở một mình và làm việc bán thời gian (vì bạn có thể có một công việc để kiếm sống), bạn có thể dành cả đời mà không cần đến bất cứ nơi nào gần một giải pháp làm việc.

Vì vậy, lời khuyên quan trọng nhất của tôi ở đây sẽ là bạn hạ thấp kỳ vọng của mình và cố gắng giảm sự phức tạpvề vấn đề của bạn bằng cách sử dụng tất cả thông tin bạn có thể, và tránh càng nhiều càng tốt dựa vào ảnh chụp màn hình (nghĩa là cố gắng nối trực tiếp vào trò chơi, tìm kiếm tệp DLL) và đơn giản hóa một số vấn đề bằng cách thực hiện các quy trình được giám sát, đừng để thuật toán học mọi thứ (nghĩa là bỏ xử lý hình ảnh càng nhiều càng tốt và dựa vào thông tin trò chơi nội bộ, sau này nếu thuật toán của bạn hoạt động tốt, bạn có thể thay thế một số phần của chương trình AI của mình bằng xử lý hình ảnh, do đó đạt được mục tiêu đầy đủ của bạn, ví dụ: nếu bạn có thể làm cho một cái gì đó hoạt động khá tốt, bạn có thể cố gắng phức tạp hóa vấn đề của mình và thay thế các quy trình được giám sát và dữ liệu trò chơi bộ nhớ bằng các thuật toán học máy không giám sát trên ảnh chụp màn hình).

Chúc may mắn, và nếu nó hoạt động, đảm bảo xuất bản một bài viết, bạn chắc chắn có thể nổi tiếng vì giải quyết một vấn đề thực tế khó khăn như vậy!


27

Vấn đề bạn đang theo đuổi là khó hiểu theo cách bạn đã xác định nó. Nó thường là một sai lầm khi nghĩ rằng một mạng lưới thần kinh sẽ "kỳ diệu" học được sự tái hiện phong phú của một vấn đề. Một thực tế tốt cần ghi nhớ khi quyết định liệu ANN có phải là công cụ phù hợp cho một nhiệm vụ hay không là nó là một phương pháp nội suy. Hãy suy nghĩ, liệu bạn có thể đóng khung vấn đề của mình như tìm một xấp xỉ của hàm, trong đó bạn có nhiều điểm từ hàm này và có nhiều thời gian để thiết kế mạng và đào tạo nó.

Vấn đề bạn đề xuất không vượt qua bài kiểm tra này. Điều khiển trò chơi không phải là một chức năng của hình ảnh trên màn hình. Có rất nhiều thông tin người chơi phải lưu giữ trong bộ nhớ. Đối với một ví dụ đơn giản, thường đúng là mỗi khi bạn vào một cửa hàng trong một trò chơi, màn hình trông giống nhau. Tuy nhiên, những gì bạn mua phụ thuộc vào hoàn cảnh. Cho dù mạng có phức tạp đến đâu, nếu các pixel màn hình là đầu vào của nó, nó sẽ luôn thực hiện cùng một hành động khi vào cửa hàng.

Bên cạnh đó, có vấn đề về quy mô. Nhiệm vụ bạn đề xuất đơn giản là quá phức tạp để học trong bất kỳ khoảng thời gian hợp lý nào. Bạn nên xem aigamedev.com để biết cách trò chơi AI hoạt động. Mạng thần kinh nhân tạo đã được sử dụng thành công trong một số trò chơi, nhưng theo cách rất hạn chế. Game AI rất khó và thường tốn kém để phát triển. Nếu có một cách tiếp cận chung về xây dựng mạng lưới thần kinh chức năng, ngành công nghiệp rất có thể đã bị thu giữ trên đó. Tôi khuyên bạn nên bắt đầu với nhiều ví dụ đơn giản hơn nhiều, như tic-tac-toe.


Đủ công bằng. Bạn có thể gọi hầu hết mọi thứ giống như mạng ANN, nhưng nó khó có thể dẫn đến một cuộc thảo luận thực chất. :)
Don Reba

Heh yeah ... Tôi nên giải thích động lực của tôi sâu hơn. Tôi biết có nhiều cách tốt hơn để tạo AI trò chơi, nhưng tôi đang làm điều này để đẩy các giới hạn của trình giả lập ANN mà tôi đã nâng cấp. Xem: stanford.edu/group/pdplab/pdphandbook
zergylord

1
Trong mọi trường hợp, Don Reba đều đúng, tôi cũng không nghĩ rằng việc học một chiến lược cho một thứ như Diablo mà không kết hợp nhiều kiến ​​thức trước đây và rút ra các tính năng hữu ích mà phương pháp học tăng cường có thể dựa vào là khả thi. Chỉ học từ đầu vào video sẽ vô cùng khó khăn nếu không sử dụng máy tính ngày nay.
ahans

18

Có vẻ như trung tâm của dự án này đang khám phá những gì có thể xảy ra với ANN, vì vậy tôi khuyên bạn nên chọn một trò chơi mà bạn không phải xử lý hình ảnh (từ câu trả lời của người khác ở đây, có vẻ như là một nhiệm vụ thực sự khó khăn trong trò chơi thời gian thực). Bạn có thể sử dụng API Starcraft để xây dựng bot của mình, họ cung cấp cho bạn quyền truy cập vào tất cả trạng thái trò chơi có liên quan.

http://code.google.com.vn/p/bwapi/


2

Bước đầu tiên bạn có thể nhìn vào sự khác biệt của các khung liên tiếp. Bạn phải phân biệt giữa nền và quái vật thực tế. Tôi đoán thế giới cũng có thể chứa hình ảnh động. Để tìm ra những người đó, tôi sẽ cho nhân vật di chuyển xung quanh và thu thập mọi thứ di chuyển với thế giới thành một hình ảnh / hoạt hình nền lớn.

Bạn có thể phát hiện và xác định kẻ thù có tương quan (sử dụng FFT). Tuy nhiên, nếu các hình ảnh động lặp lại chính xác pixel thì sẽ nhanh hơn nếu chỉ nhìn vào một vài giá trị pixel. Nhiệm vụ chính của bạn sẽ là viết một hệ thống mạnh mẽ sẽ xác định khi một đối tượng mới xuất hiện trên màn hình và sẽ dần dần tất cả các khung của khung sprite vào cơ sở dữ liệu. Có lẽ bạn phải xây dựng các mô hình cho các hiệu ứng vũ khí là tốt. Chúng nên được trừ đi để chúng không làm xáo trộn cơ sở dữ liệu đối thủ của bạn.


2
Làm quen với trò chơi Diablo II, tôi có thể nói rằng nó sử dụng 256 màu (trừ khi một số chế độ sử dụng màu cao hoặc màu thật). Nó cũng sử dụng rất nhiều các sprite để hiển thị các đối tượng khác nhau. Nếu bạn có thể trích xuất một số họa tiết (thậm chí từ ảnh chụp màn hình), bạn có thể huấn luyện công cụ của mình để nhận ra các đối tượng dựa trên sprite (ví dụ: 'Thuốc chữa bệnh nhỏ' sẽ luôn trông giống nhau). Tuy nhiên, nếu tôi tìm hiểu sâu hơn về công cụ cụ thể của Diablo II, sẽ có nhiều câu hỏi hơn nữa. Chúc may mắn
Ivaylo Slavov

1

Giả sử bất cứ lúc nào bạn có thể tạo ra một tập hợp 'kết quả' (có thể liên quan đến xác suất) từ một tập hợp tất cả các 'động tác' có thể, và có một số khái niệm về tính nhất quán trong trò chơi (ví dụ: bạn có thể chơi cấp độ X nhiều lần một lần nữa), bạn có thể bắt đầu với N mạng nơ-ron với trọng số ngẫu nhiên và để mỗi người trong số họ chơi trò chơi theo cách sau:

1) Với mỗi 'di chuyển' có thể, hãy tạo một danh sách các 'kết quả' có thể có (với xác suất liên quan) 2) Đối với mỗi kết quả, hãy sử dụng mạng lưới thần kinh của bạn để xác định 'giá trị' liên quan đến 'kết quả' (ví dụ: số từ -1 đến 1, 1 là kết quả tốt nhất có thể có, -1 là kém nhất) 3) Chọn 'di chuyển' dẫn đến thăm dò cao nhất * điểm 4) Nếu di chuyển dẫn đến 'thắng' hoặc 'thua', dừng lại, nếu không thì quay lại bước 1

Sau một khoảng thời gian nhất định (hoặc 'thắng' / 'thua'), hãy đánh giá mức độ gần gũi của mạng lưới thần kinh với 'mục tiêu' (điều này có thể sẽ liên quan đến một số kiến ​​thức về miền). Sau đó loại bỏ 50% (hoặc một số phần trăm khác) của các NN ở xa mục tiêu nhất, thực hiện trao đổi chéo / đột biến của 50% hàng đầu và chạy lại bộ NN mới. Tiếp tục chạy cho đến khi một NN thỏa đáng xuất hiện.


Ah, thêm một GA vào hỗn hợp, thú vị. Thật không may, vì tôi thực sự có mạng gửi các thao tác nhấn phím / chuột như một hành động, tôi cần một máy tính vật lý trên mỗi mạng>. <Một vấn đề khác là không gian trạng thái của môi trường không rời rạc (về mặt kỹ thuật, nhưng tại một hạt rất mịn). Ví dụ, hãy tưởng tượng kết quả có thể xảy ra khi nhấp chuột: Một nhân vật dưới sự điều khiển của mạng có thể di chuyển hoặc tấn công, nhưng kẻ thù cũng có thể di chuyển, và sẽ có sự khác biệt về pixel trong môi trường từ những thứ như bóng tối và hiệu ứng thời tiết .
zergylord

Theo quan điểm của tôi, chỉ có rất nhiều bạn có thể làm với mạng lưới thần kinh. Có vẻ như tốt nhất nó có thể được sử dụng như là một hàm heuristic có thể học được của một số khái niệm về một không gian trạng thái riêng biệt. Để kết hợp sự biến đổi của kẻ thù, có lẽ bạn sẽ phải sử dụng một số phép thuật khác, sau đó bạn có thể sử dụng điều đó để tạo ra một tập hợp các trạng thái kết quả có thể có trên mỗi lần di chuyển với xác suất liên quan. Ngoài ra, miễn là có một khái niệm tĩnh về cấu hình ban đầu và cuối cùng, bạn chỉ có thể chạy từng mạng lưới thần kinh một lần.
tstramer

1

Tôi nghĩ rằng đặt cược tốt nhất của bạn sẽ là một kiến ​​trúc phức tạp bao gồm một vài mạng / có thể: tức là một người nhận ra và phản hồi các vật phẩm, một cho cửa hàng, một cho chiến đấu (có thể ở đây bạn sẽ cần một để nhận ra kẻ thù, một cho các cuộc tấn công), v.v. .

Sau đó thử nghĩ về lối chơi Diablo II đơn giản nhất có thể, có lẽ là một Barbarian. Sau đó, giữ cho nó đơn giản lúc đầu, như Act I, chỉ khu vực đầu tiên.

Sau đó, tôi đoán 'mục tiêu' có giá trị sẽ là sự biến mất của các đối tượng và làm giảm thanh sức khỏe (ghi điểm ngược).

Khi bạn đã thực hiện các nhiệm vụ riêng biệt, 'đơn giản hơn' này, bạn có thể sử dụng ANN 'chính' để quyết định ANN phụ nào sẽ kích hoạt.

Đối với đào tạo, tôi chỉ thấy ba tùy chọn: bạn có thể sử dụng phương pháp tiến hóa được mô tả ở trên, nhưng sau đó bạn cần chọn thủ công 'người chiến thắng', trừ khi bạn mã hóa toàn bộ chương trình riêng biệt cho điều đó. Bạn có thể có mạng 'xem' ai đó chơi. Tại đây, họ sẽ học cách mô phỏng một người chơi hoặc một nhóm phong cách của người chơi. Mạng cố gắng dự đoán hành động tiếp theo của người chơi, được củng cố để đoán chính xác, v.v. Nếu bạn thực sự có được ANN, bạn muốn điều này có thể được thực hiện với trò chơi video, không cần chơi trò chơi trực tiếp thực tế. Cuối cùng, bạn có thể để mạng chơi trò chơi, có kẻ thù chết, tăng cấp, lấy lại sức khỏe, v.v. như là sự củng cố tích cực và cái chết của người chơi, mất sức khỏe, v.v. như là sự củng cố tiêu cực. Nhưng xem làm thế nào ngay cả một mạng đơn giản đòi hỏi hàng ngàn bước đào tạo cụ thể để học ngay cả các nhiệm vụ đơn giản,

Tất cả trong tất cả các dự án của bạn là rất tham vọng. Nhưng tôi nghĩ người ta có thể 'về lý thuyết đã xong', cho đủ thời gian.

Hy vọng nó sẽ giúp bạn và may mắ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.