Biểu đồ quan hệ giữa các thành phần trong ML-Agents

Một phần của tài liệu Xây dựng game đua xe online ứng dụng machine learning (Trang 38)

ML-Agents cho phép sử dụng nhiều thuật toán máy học khác nhau để thực hiện huấn luyện AI, trong đó có 2 thuật tốn RL, đó là Proximal Policy Optimization (PPO)[13] và Soft Actor Critic (SAC).[14]

PPO là một phương pháp on-policy, cố gắng tối ưu hoá và cải thiện policy hiện tại. Điểm mạnh của PPO nằm ở việc nó thừa kế tính hiệu quả dữ liệu và hiệu suất đáng tin cậy từ thuật toán Trust Region Policy Optimization (TRPO) trong khi chỉ sửng dụng thuật tốn tối ưu bậc một thay vì bậc hai.[15]

Ngược lại với PPO, SAC là một phương pháp off-policy, có nghĩa nó khơng phụ thuộc vào policy của agent hiện tại, mà có thể học hỏi từ những kinh nghiệm thu thập được

21

bất cứ lúc nào trong quá khứ. Khi kinh nghiệm được thu thập, chúng được đặt trong một bộ đệm phát lại kinh nghiệm và được rút ra ngẫu nhiên trong quá trình huấn luyện. Nhờ vậy, thuật toán SAC tiết kiệm dữ liệu hơn cả PPO, Tuy nhiên, SAC lại là một thuận toán cho phép có sự hỗn loạn và tự khám phá của AI. Do đó, SAC sẽ có hiệu quả khi được sử dụng tron những môi trường mở. [16]

Tôi chọn thuật toán PPO để tiến hành huấn luyện AI bởi sự ổn định hơn so với SAC khi đặt trong hồn cảnh mơi trường đã được định sẵn và khơng có q nhiều khoảng trống cho sự biến thiên.

2.2.3. Proximal Policy Optimization (PPO) sử dụng Clipped Surrogate Objective

Trong bài viết của mình [18], tác giả đã đưa ra 2 hướng tiếp cận bài tốn có thể sử dụng song song với nhau. Ở đây, ta chỉ đề cập đến hướng tiếp cận cắt ngắn hàm mục tiêu (Clipped Surrogate Objective).

Hình 2 6. Sờ đồ tóm tắt thuật tốn PPO sử dụng Clipped Surrogate Objective

Với vector policy 𝜃, thuật toán TRPO sẽ cố gắng tối đa kết quả đầu ra của hàm mục tiêu surrogate objective

22

𝐿CPI(𝜃) = 𝔼^𝑡[ 𝜋𝜃( 𝑎𝑡 ∣∣ 𝑠𝑡) 𝜋𝜃𝑜𝑙𝑑( 𝑎𝑡 ∣∣ 𝑠𝑡)𝐴

^

𝑡] = 𝔼^𝑡[𝑟𝑡(𝜃)𝐴^𝑡]

Trong đó CPI là viết tắt của conservative policy iteration, tức chính sách lặp lại thận trọng. Nếu không giới hạn lại, Việc tối ưu 𝐿𝐶𝑃𝐼 sẽ dẫn đến việc update policy của thuật tốn TRPO q tốn kém; vì vậy, ta sử dụng PPO để thay đổi đổi điều này, và bỏ qua những thay đổi policy khiến tỉ lệ giữa policy cũ và policy mới 𝑟𝑡(𝜃) vượt quá 1:

𝐿CLIP(𝜃) = 𝔼^𝑡[min (𝑟𝑡(𝜃)𝐴^𝑡,clip(𝑟𝑡(𝜃), 1 − 𝜖, 1 + 𝜖)𝐴^𝑡)]

Với 𝜖 là một siêu tham số và thông thường, 𝜖 = 0.2. Cụ thể, ta cắt ngắn 𝑟𝑡(𝜃) để giá

trị này nằm trong khoảng [1 − 𝜖, 1 + 𝜖] và lấy giá trị nhỏ nhất. Với hướng tiếp cận này, ta có thể chắc chắn rằng hành vi của agent sẽ không lệch đi quá nhiều so với bộ hành vi ứng với policy trước.

Một chi tiết cần lưu ý là khi áp dụng PPO cho một network có các tham số chung cho actor và critic, ta thường thêm vào hàm mục tiêu một thuật ngữ lỗi khi ước tính giá trị và một điều kiện để khuyến khích AI khám phá.

23

CHƯƠNG 3:

HIỆN THỰC HOÁ

3.1. Triển khai hệ thống

Những hướng dẫn cài đặt sau đây được thực hiện trên hệ điều hành Windows 10. Yêu cầu cấu hình: ~13GB ổ cứng

3.1.1. Cài đặt Unity

− Vào website: https://store.unity.com/ và chọn phiên bản muốn tải về. Trong ví dụ bên dưới, phiên bản Personal được chọn.

24

− Tiếp theo, chọn “Start here” trong ơ First-time user, sau đó chọn “Agree and download” để tải Unity Hub Setup

Hình 3.2. Giao diện tải Unity Hub

− Sau khi đã tải và chạy xong file setup, mở Unity Hub, chọn tab Installs, chọn “Add” và tải Unity phiên bản mới nhất (lưu ý: Bạn cần có tài khoản Unity ID để sử dụng Unity Hub)

25

Hình 3.3. Giao diện của Unity Hub

− Sau khi đã tải xong, trở lại tab Projects và chọn New tạo một project mới. Project này sẽ xuất hiện trên Unity Editor.

26

Hình 3.5. Giao diện Unity Editor

3.1.2. Cài đặt môi trường ảo Python

- Truy cập website https://www.python.org/downloads/ và chọn phiên bản cài đặt. Project này sử dụng Python phiên bản 3.8.8. Chạy file setup sau khi tải xong.

27

Hình 3.6. Giao diện website tải Python

− Mở Command Prompt, chuyển hướng đến thư mục project Unity và tạo môi trường ảo Python bằng lệnh sau: python -m venv [tên thư mục môi

trường ảo]

− Kích hoạt mơi trường ảo bằng lệnh: [tên thư mục môi trường

ảo]\Scripts\activate . Tên của thư mụch xuất hiện trong dấu ngoặc đơn

đứng trước đường dẫn thư mục báo hiệu việc khởi tạo môi trường ảo đã thực hiện thành công

28

Hình 3.7. Giao diện Command Prompt khi kích hạot mơi trường ảo thành cơng

− Cài đặt thư viện ML-Agents. Project sử dụng phiên bản 0.24.0: pip install -Iv mlagents==0.24.0

− Cài đặt thự viện PyTorch tương ứng với thư viện ML-Agents và phiên bản của Python. Project sử dụng phiên bản 1.7.1: pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html . Sau khi hồn tất cài đặt, mơi trường ảo nên có đủ các thư viện trong hình.

29

Hình 3.8. Danh sách thư viện cần có trong mơi trưởng ảo

3.1.3. Các thư viện Unity có liên quan

Để có thể xây dựng mơi trường huấn luyện và thiết kế game, ta cịn cần cài đặt một số thư viện của Unity sau đây:

Barracuda: Thư viện dùng để đọc và suy luận mạng neural của Unity. Barracuda hỗ trợ chạy các file neural network (*.nn, *.onnx,…) trên cả CPU và GPU.

Cinemachine: Thư viện hỗ trợ điều khiển camera. ML Agents: Như đã giới thiệu ở trên.

30

EasyRoad3D: Thư viện do bên thứ 3 cung cấp, dùng để tạo đối tượng đường đua và các tiện ích có liên quan. Bao gồm phiên bản miễn phí và trả phí.

Hình 3.9. Cửa sổ Package Manager

Trừ EasyRoads3D, các thư viện trên đều có thể dễ dàng cài đặt qua cửa sổ Package Manager. EasyRoads3D có thể được tìm thấy trên https://store.unity.com/ và thêm vào danh sách thư viện cá nhân của bạn. Mỗi tài khoản Unity ID sẽ có một thư việc cá nhân riêng , có thể được tìm thấy trong tab My Assets trong cửa sổ Package Manager. Ngoài các thư viện hỗ trợ việc lập trình và thiết kế game, Unity Asset Store cịn có rất nhiều thư viện đồ hoạ chất lượng tốt.

31

Hình 3.10. Một số thư viện bên thứ 3 trong My Assets

3.2. Xây dựng môi trường huấn luyện AI 3.2.1. Ý tưởng 3.2.1. Ý tưởng

3.2.1.1. Thiết lập Agent

Ý tưởng được sử dụng trong đề tài này lấy cảm hứng từ thuật tốn dị đường: đặt các checkpoint dọc suốt đường đua và thưởng cho agent mỗi khi đi qua checkpoint theo đúng hướng với hướng của checkpoint.

Việc đi khỏi đường đua là khơng được khuyến khích, vì thế ta đặt tường dọc 2 bên đường đua để ép agent và cả người chơi hồn thành vịng đua mà khơng sử dụng “đường tắt”.

32

Một hướng giải quyết việc đi tắt phổ biến trong các game đua xe là kiểm tra

checkpoint. Ta lưu lại checkpoint gần nhất mà xe đã đi qua và chỉ tính điểm khi xe đi qua checkpoint gần nhất phía trước checkpoint đó.

Ta có thể thêm một số điểm thưởng và điểm phạt khác để tăng tốc độ huấn luyện cho agent: thưởng khi xe đi hướng đến checkpoint tiếp theo, thưởng khi xe chạy nhanh, phạt khi xe va chạm với tường. Các điểm thưởng này có thể được tinh chỉnh trong quá trình huấn luyện.

Hình 3.11. Các sensor của Agent

Phần tử KartAgent được gắn vào đối tượng xe ta muốn huấn luyện. Ý nghĩa của các thơng số có trong KartAgent:

33

Hình 3.12. Component KartAgent

34

1 Max Step Số bước học tối đa agent có thể học trong một episode. Episode sẽ kết thúc khi agent vượt quá số bước học.

2 Mode Gồm 2 chế độ: Traning và Inferencing. Biến mode phải luôn ở chế độ Traning trong suốt khoá huấn luyện. Khi ở chế độ Inferencing, ở behaviour tương ứng của agent cần phải có một neural network được gán vào.

3 Difficulty Độ khó với 3 lựa chọn: Easy, Medium và Hard 4 Observation Mask Những layer có để được thấy bới sensor

5 Sensors Mảng chứa các sensor của Agent. Một sensor bao gồm transform xác định vị trí và hướng nhìn, một biến chỉ tầm nhìn và một biến chỉ khoảng cách để agent cho rằng xe đã “va chạm” với vật thể

6 Agent Sensors Transform Gốc của các sensor transform 7 Hit Penalty Mức phạt khi agent va chạm tường 8 Pass Checkpoint Reward Thưởng khi agent đi qua một checkpoint 9 Towards Checkpoint

Reward

Thưởng khi agent đi đúng hướng để đến checkpoint, được cộng ở mỗi frame

10 Speed Reward Thưởng khi agent tăng tốc về phía checkpoint, được cộng ở mỗi frame

35

12 Booster Pickup Reward Thưởng khi agent nhặt vật phẩm tăng tốc 13 Snail Pickup Reward Phạt khi agent nhặt vật phẩm giảm tốc 14 Penalty Threshold Mức phạt tối đa trước khi agent tự reset một

episode

15 Out Of Bound Mask Layer cho biết xe đã ở ngoài đường đua 16 Track Mask Layer chỉ đường đua

36

Hình 3.13. Component Behaviour Parameters

Phần tử Behaviour Parameteres ứng với agent. Ý nghĩa của các thông số:

STT Tên thông số Ý nghĩa

1 Behaviour Name Mặc định là “ArcadeDriver”

2 Vector Observation Một vector lập trình (phân biệt với vector khơng gian) chứa các quan sát của agent. Space size chỉ số lượng biến quan sát được agent gửi đi, bao gồm lần lượt: gia tốc của xe, hướng đên checkpoint tiếp theo, hướng đến vật

37

phẩm tăng tốc tiếp theo, hướng đến vật phẩm giảm tốc tiếp theo, hướng đến xe ở phía trước, 10 sensor và biến chỉ nút tăng tốc của agent. Stacked vectors chỉ số lượng vector quan sát được chồng lên trước khi gửi đến cho

behaviour, nghĩa là với stacked vectors = n, ngoài các quan sát ở step hiện tại, behaviour sẽ nhận thêm n-1 vector quan sát của các step trước đó để tính tốn

3 Vector Action Bao gồm một vector 2 chiều chỉ các thông số trong một hành động và loại khơng gian vector. Loại khơng gian có 2 loại: không gian số nguyên (Discrete) và không gian số thực (Continuous). Với đề tài của chúng ta, những hành động cơ bản mà người chơi có thể làm là bấm các nút tăng tốc, phanh và rẽ, vì thế tương ứng, chúng ta có khơng gian vector là số nguyên, 3 nhánh vector tượng trưng cho 3 nút bấm và độ dài các nhánh con này tương ứng với trạng thái từng nút (Rẽ: trái – không – phải; Tăng tốc: có – khơng; Phanh: có – khơng)

4 Model Neural network dùng cho chế độ suy luận, với lựa chọn chạy trên CPU hay GPU

Bảng 3.2. Các thông số của Behaviour Parameters

38

Hệ thống bao gồm mặt đường và 2 bức tưởng chắn 2 bên cùng với các checkpoint, tất cả được tạo bằng EasyRoads3D. [19]

Hình 3.14. Giao diện của EasyRoads3D trên Unity Editor

39

Hệ thống checkpoint và tưởng chắn được tự động khởi tạo từ tính năng side objects của EasyRoads3D. Các đối tượng được khởi tạo cách đều nhau dọc trên đường đua.

Hình 3.16. Hệ thống checkpoint và tường chắn

Đặt một số vật phẩm trên đường đua. Vật phẩm tăng tốc có hình tia sét cịn vật phẩm giảm tốc có hình con ốc sên giúp dễ dàng nhận biết. Các vật phẩm trên đường đua giúp cải thiện trải nghiệm chơi game cũng như tăng độ phức tạp của môi trường.

40

Hình 3.17. Vật phẩm tăng tốc và giảm tốc trên đường đua

3.2.3. Thiết lập huấn luyện AI

Trong đề tài này, việc huấn luyện được chia làm ba giai đoạn:

− Ở giai đoạn đầu của quá trình huấn luyện, việc thưởng cho xe khi tăng tốc là khơng cần thiết, vì ở thời điểm này agent vẫn chưa học được cách định hướng trong môi trường. Cũng trong thời kỳ này, ta giới hạn điểm phạt tối đa trong quá trình học để khi điểm phạt vượt ngưỡng, episode sẽ kết thúc ngay lập tức. Điều này giúp agent nhanh chóng học cách né tránh điểm phạt vì thời gian học càng lâu đồng nghĩa với việc thưởng càng nhiều. Gian đoạn này thường kéo dài khoảng 300.000 bước.

− Khi agent đã làm quen với mội trường, ta bước vào giai đoạn 2. Ta đã có thể tăng điểm thưởng tăng tốc, tăng mức phạt khi va chạm với tường cũng như giới hạn điểm phạt. Mục đích của việc này là để agent có thời gian để học cách thốt ra khỏi tưởng và trở lại đường đua trong trường hợp va chạm với tường chắn xảy ra. Giai đoạn 2 kéo dài 300.000 – 400.000 bước.

41

− Giai đoạn 3 tiến hành khi xe đã có thể dễ dàng hồn thành cả vòng đua và việc episode kết thúc vì quá ngưỡng phạt hiếm khi xãy ra. Ở giai đoạn này, ta muốn agent có thể học . Ta thêm một phần thưởng / mức phạt nhỏ cho mỗi frame agent va chạm với xe khác. Đồng thời, ta đặt phần thưởng mỗi khi agent nhặt vật phầm tăng tốc và đặt mức phạt khi nhặt vật phẩm giảm tốc. Ta ngừng việc huấn luyện khi agent đạt 1,2 triệu – 1,3 triệu bước.

Quá trình huấn luyện được theo dõi trực tiếp trên Unity và số liệu đầu ra được theo dõi trên Tensorboard.

Hình 3.18. Giao diện TensorBoard

3.3. Xây dựng đồ hoạ game

Đồ hoạ game được thiết kế theo hướng chân thật pha hiện đại, tạo cảm giác mới mẻ cho người chơi.

Thiết kế xe được outsource, lấy cảm hứng từ thiết kế xe của game Mario Kart 8, [20] gồm 6 màu: Hồng (Bubblegum), Xanh da trời (Cloud), Bạc (Carbon), Đỏ (Red), Cam

42

vàng (Sunshine) và Violet (Tím). Mỗi xe có thơng số vật lý khác nhau nên phải tiến hành huấn luyện AI riêng cho từng loại xe.

Hình 3.19. 6 loại xe trong đề tài, theo thứ tự từ trái sang phải: Bubblegum, Carbon, Clou, Red, Sunshine, Violet

Texture & Material cho mặt đất được tìm từ Unity Asset Store,[21][22]

43

Hình 3.21. Gói asset Sand Materials – Nguồn: Unity Asset Store [22]

3.4. Xây dựng game UI 3.4.1. Màn hình nhập cảnh 3.4.1. Màn hình nhập cảnh

Màn hình nhập cảnh đơn giản gồm tiêu đề UIT KART, một chiếc xe mẫu và nút Play.

44

3.4.2. Màn hình chọn xe

Màn hình chọn xe gồm 6 panel chọn xe nhỏ được phân bố đều trên màn hình. Phần chọn người lái được đem xuống phía dưới hình ảnh hiện thị xe

Hình 3.23. Màn hình chọn xe chế độ Versus

3.4.3. Màn hình HUD

Màn hình HUD của game được chia chia làm 2 cụm:

Ở góc trái trên là minimap của đường đua. Mỗi chấm tròn biểu thị một xe trên đường đua. Xe của người chơi được biểu thị bằng một chấm lớn hơn.

Ở góc bên phải của màn hình là các thơng tin của vịng đua, bao gồm thời gian đua, số vịng đua đã hồn thành và vị trí của xe hiện tại.

Vịng phía dưới được cố tính để trống để dành chỗ cho điều khiểm cảm ứng có thể được cài đặt sau này.

45

Hình 3.24. Màn hình chính của game

3.4.4. Màn hình kết thúc game

Khi người chơi về đích, điều khiển xe sẽ ngắt kết nối, HUD trong game sẽ được ẩn đi. Dòng chữ “FINISHED” chạy ngang từ trái qua, báo hiệu trò chơi đã kết thúc.

Sau khoảng 3 giây, bảng xếp hạng trôi dần từ trên xuống. Trong thời gian này, những xe chưa hồn thành vịng vẫn sẽ tiếp tục chạy.

46

Hình 3.25. Màn hình kết thúc game

47

CHƯƠNG 4:

THỰC NGHIỆM VÀ ĐÁNH GIÁ

4.1. Thực nghiệm

4.1.1. Thiết lập thực nghiệm

Thực nghiệm được tiến hành trực tiếp trên Unity theo quy trình huấn luyện đã đề cập. Sau đó, các AI đã được huấn luyện thực hiện đua ở 2 môi trường mới. Số vòng đua mỗi lần đua là 3 vòng, lấy kết quả trực tiếp từ đồng hồ in-game và sau đó lấy trung bình cộng sau 3 lần đua. Số liệu này sẽ được so sánh với kết quả trung bình của 3 người chơi khác nhau khi đua lần đầu tiên. Trong trường hợp agent khơng thể hồn thành vào đua trong một khoảng thời gian dài, kết quả lần đua sẽ được biểu thị bằng dấu – và khơng được tính trong kết quả trung bình.

Thực nghiệm được thực hiện trên máy tính cá nhân có cấu hình gồm vi xử lý CPU Intel

Một phần của tài liệu Xây dựng game đua xe online ứng dụng machine learning (Trang 38)

Tải bản đầy đủ (PDF)

(75 trang)