Ê!
Tao vừa cho ra mắt một AI có khả năng tự học chơi TFT nè https://github.com/silverlight6/TFTMuZeroAgent . Theo tao biết thì đây là AI thuần túy đầu tiên (không có luật chơi do người đặt ra, kiến thức về game, hay bộ luật nào cả) có thể học chơi TFT đấy.
Cứ thoải mái clone repo và tự chạy thử đi. Cần Python3, numpy, tensorflow, và collections. Có một số thư viện Python tích hợp sẵn như time và math cũng cần, nhưng tao nghĩ 3 thư viện trên là đủ rồi. Chưa có file requirements đâu nha. TensorFlow hỗ trợ GPU thì cần Linux hoặc WSL.
AI này được xây dựng dựa trên mô phỏng trận đấu TFT set 4 do Avadaa tạo ra. Tao đã mở rộng mô phỏng để bao gồm tất cả hành động của người chơi, bao gồm lượt chơi, cửa hàng, pool tướng… Cả hai phía trong mô phỏng đều được đơn giản hóa để chứng minh tính khả thi. Ví dụ như bên người chơi không có nhân bản tướng hay rèn đồ, còn bên mô phỏng trận đấu thì không có đồ của Kayn.
AI này không cần bất kỳ input nào từ người chơi và học hoàn toàn bằng cách tự đấu với chính nó. Nó được cài đặt bằng tensorflow, dùng thuật toán mới của Google, MuZero.
Không có GUI vì AI không cần. Tất cả output được ghi vào file log.txt. Input là thông tin về người chơi và bàn cờ được mã hóa thành vector ~10000 đơn vị. Trạng thái game hiện tại là vector 1342 đơn vị, còn 8.7k đơn vị kia là quan sát từ 8 frame để biết game đang diễn biến thế nào. Việc mã hóa vector 1342 đơn vị được lấy cảm hứng từ AI Dota của OpenAI. Thông tin về cách họ mã hóa trạng thái thì xem paper của AI Dota nhé. Phần 8 frame được lấy cảm hứng từ việc cài đặt MuZero cho Atari, cũng dùng 8 frame. Input đa thời gian cũng được dùng trong các game như cờ vua và tictactoe.
Đây là output cho đội hình của một trong các team. Tao train nó bằng 2 người chơi để rút ngắn thời gian mỗi ván và giữ cho output là zero-sum, nhưng phương pháp này hỗ trợ bất kỳ số lượng người chơi nào. Các bạn có thể thay đổi số lượng người chơi trong file config. Hình này cho thấy cách hiển thị đội hình. Đây là kết quả cuối một ván.
Hình thứ hai cho thấy game bắt đầu như thế nào. Tất cả các hành động làm thay đổi bàn cờ, ghế dự bị, hay ghế dự bị đồ đều được ghi lại như bên dưới. Cái này cho thấy 2 đơn vị được thêm vào lúc bắt đầu game. Sau đó người chơi thứ hai mua một Lisandra và di chuyển Elise lên bàn cờ. Timestep là nano giây tính từ đầu lượt của mỗi người chơi. Chủ yếu để debug thôi. Nếu hành động không làm thay đổi trạng thái game thì sẽ không được ghi lại. Ví dụ, nếu nó cố mua ô thứ 0 trong shop 10 lần mà không refresh, thì chỉ ghi lại lần đầu tiên, còn 9 lần kia thì không.
Nó hoạt động tốt nhất với GPU, nhưng do độ phức tạp của TFT, hiện tại nó chưa tạo ra được đội hình cấp cao nào. Nếu được train trên 1000 GPU trong một tháng hoặc hơn như Google làm được, thì nó sẽ tạo ra một AI mà không người nào có thể thắng nổi. Nếu train trên 50 GPU trong 2 tuần, thì có lẽ nó sẽ tạo ra một AI ngang tầm người chơi bạc hoặc vàng. Những dự đoán này dựa trên quỹ đạo mà AI Dota của OpenAI thể hiện, điều chỉnh theo tốc độ train nhanh hơn mà MuZero có thể làm so với các thuật toán hiện đại được dùng khi tạo ra AI Dota. Ưu điểm khác của các mô hình này là chúng chơi giống người. Chúng không tuân theo một bộ luật nào cả. Mọi thứ nó làm đều là do nó tự học.
Dự án này đang trong quá trình phát triển mở nhưng đã đạt đến MVP (minimum viable product), tức là khả năng train. Môi trường chưa hoàn toàn không lỗi. Phiên bản này hiện tại chưa hỗ trợ checkpoint, export, hay train đa GPU, nhưng tao hy vọng sẽ thêm vào sau này.
Với những code purist, cái này chỉ là ý tưởng cơ bản hoặc MVP thôi, chứ không phải sản phẩm hoàn thiện. Có nhiều chỗ code có thể đơn giản hóa hơn, hoặc có dòng comment ra vì lý do này hay lý do khác. Thông cảm cho tao xíu nha.
KẾT QUẢ
Sau một ngày train trên một GPU, 50 ván, AI đã bắt đầu học cách phản ứng với thanh máu bằng cách thực hiện nhiều hành động hơn khi máu ít, so với khi máu nhiều. Nó đang học được rằng mua nhiều bản sao của cùng một tướng là tốt và chơi tướng cấp cao hơn cũng có lợi. Ở ván 50, AI đã mua 3 Kindred (tướng 3 sao) và đặt lên bàn cờ. Nếu dùng thuật toán chọn ngẫu nhiên thì điều này gần như không thể.
Đến ván 72, một trong các đội hình đã dùng Wukong cấp 3 và bắt đầu hiểu rằng dùng vàng có sẽ dẫn đến kết quả tốt hơn. Ở các ván trước đó, AI thường kết thúc ván với 130 vàng.
Cách đây vài tháng tao đã cài đặt thuật toán A2C. Đó không phải là thuật toán dựa trên lập kế hoạch, mà là thuật toán RL được train TD truyền thống hơn. Sau 2000 ván từ thuật toán đó, nó không nhân ba tướng như Kindred.
Thật không may là tao không có phần cứng mạnh lắm vì máy tính của tao đã 7 năm tuổi rồi, nhưng tao rất mong chờ xem thuật toán này có thể làm được gì nếu tao chia việc cho cả 4 GPU hoặc trên một cấu hình mạnh hơn.
Với những người lo lắng về vấn đề bản quyền, mô phỏng này không phải là bản sao hoàn chỉnh của game và nó không phải là set hiện tại. Hiện tại không có cách nào để người chơi đấu với bất kỳ AI nào trong số này và nó còn rất lâu nữa mới có thể dùng AI trong game thật. Để AI có thể dùng trong game thật, nó cần được train trên set hiện tại và có phương pháp trích xuất thông tin trạng thái game từ client. Hiện tại cả hai điều này đều không thể. Do bản chất dựa trên thời gian của AI, có thể là không thể input trạng thái game vào và để nó tìm ra nước đi tốt nhất.
Tao hy vọng sẽ phát hành cả môi trường và cơ chế bước cho cộng đồng học tăng cường (RL) để dùng làm môi trường benchmark. Có rất nhiều khía cạnh của TFT làm cho nó trở thành một game tuyệt vời để thử RL. Đó là một game thông tin không hoàn hảo với bộ hành động đa chiều. Nó có độ dài ván khác nhau với nhiều con đường dẫn đến thành công. Nó là zero-sum nhưng nhiều người chơi. Quyết định phải được thay đổi tùy thuộc vào RNG. Nó cũng là game thông tin không hoàn hảo duy nhất có cộng đồng người chơi lớn và cộng đồng theo dõi lớn. Nó cũng là một trong số ít game trong RL có lượt chơi dài ngắn khác nhau. Ví dụ cờ vua mỗi lượt chỉ có một nước đi, cờ vây cũng vậy, nhưng TFT bạn có thể thực hiện bao nhiêu hành động tùy thích trong lượt của mình. Cũng có một hàm phi tuyến tính (giai đoạn chiến đấu) sau khi kết thúc lượt của tất cả người chơi, không giống như hầu hết các game cờ khác.
Tất cả các câu hỏi kỹ thuật sẽ được trả lời một cách kỹ thuật.
TLDR: Tạo ra một AI để chơi TFT. Thiếu phần cứng để làm cho nó đủ mạnh để đánh bại người thật. Giới thiệu một môi trường và cơ chế bước cho cộng đồng Học tăng cường.
