Xin chào và chào mừng đến với hướng dẫn này.
Trong hướng dẫn trước, chúng tôi đã khởi tạo bản đồ và bây giờ là thời gian cho những thứ thú vị.
Chúng tôi tạo ra cốt lõi và chúng tôi làm điều đó với một lớp học.
Tất nhiên bạn sẽ thấy rằng lớp học này rất thực tế để tạo ra một số thứ có nhiều thuộc tính, vì như
bạn thấy, không chỉ tôi đang xác định một số biến cho ô tô của mình mà còn cả một số
hàm, tất nhiên là chức năng làm cho xe di chuyển sang trái, sang phải hoặc đi thẳng.
Vì vậy, chúng tôi có một số biến quan trọng để mô tả môi trường.
Ví dụ, chúng ta có góc, là góc giữa trục x và trục hướng của ô
tô.
Sau đó, chúng ta có vòng quay, là vòng quay cuối cùng của nó, ghi nhớ 0 độ, 20
độ hoặc -20 độ.
Khi đó ta có vận tốc, toạ độ x của véc tơ vận tốc và toạ độ Y của véc tơ
vận tốc, rồi đến véc tơ toạ độ vận tốc X và vận tốc y.
Sau đó, chúng tôi có các cảm biến và tín hiệu, và điều đó rất quan trọng.
Chiếc xe mà chúng tôi đang sản xuất sẽ có ba cảm biến kể từ một cảm biến hai và cảm biến ba.
Một bộ cảm biến sẽ phát hiện nếu có bất kỳ mùi hương nào phía trước xe.
Sau đó, cảm biến hai là cảm biến sẽ phát hiện xem có bất kỳ mùi hương nào ở bên trái của xe hay không.
Và cảm biến ba là cảm biến sẽ phát hiện xem có bất kỳ mùi hương nào ở bên phải xe hay không.
Và sau đó từ ba cảm biến này, chúng ta nhận được tín hiệu, đó là tín hiệu được nhận bởi mỗi
cảm biến.
Vì vậy, tín hiệu một là tín hiệu nhận được bởi cảm biến một.
Tín hiệu hai là tín hiệu nhận được bởi cảm biến hai và tín hiệu ba là tín hiệu nhận được bởi cảm biến ba.
Và vì vậy nó hoạt động như thế nào?
Tín hiệu một là mật độ gửi xung quanh cảm biến một.
Tín hiệu hai là mật độ mùi xung quanh cảm biến hai và tín hiệu ba là mật độ cát xung quanh cảm
biến ba.
Và làm thế nào để chúng tôi tính toán mật độ này của cát?
Chà, điều đó rất đơn giản.
Chúng tôi lấy một số hình vuông lớn xung quanh mỗi cảm biến.
Đây thực sự là những hình vuông có kích thước 200 x 200.
Và với mỗi ô vuông, chúng ta chia số ô trong ô vuông cho tổng số ô
trong ô vuông đó là 20 nhân 20 bằng 400.
Và điều đó cho chúng ta mật độ của cát vì những cái đó tương ứng với cát.
Chúng tôi làm điều này cho mỗi cảm biến và điều đó cho chúng tôi mật độ cát xung quanh mỗi cảm biến.
Đó là các tín hiệu.
Được rồi.
Vì vậy, bây giờ chúng ta có mọi thứ để phát hiện cát và sau đó chúng ta có chức năng di chuyển.
Và tất nhiên, chức năng di chuyển là những gì sẽ cho phép lõi đi bên trái đi thẳng hoặc đi thẳng sang
bên phải.
Vì vậy, chúng ta hãy lướt qua nó một cách nhanh chóng.
Ở đây chúng ta có cập nhật vị trí của lõi với vị trí cuối cùng của nó, chính là vị trí
đi qua đây và vectơ vận tốc.
Vì vậy nhờ vectơ vận tốc, vị trí sẽ được cập nhật theo hướng của vectơ vận tốc.
Sau đó, chúng tôi nhận được vòng quay mà chúng tôi sẽ đi sâu hơn trong đoạn mã ngay tại đây.
Xoay tương đương với hành động với hành động xoay ở đây chúng ta sẽ chọn hành động và sau đó nhận được xoay.
Và vì vậy sự tự quay này tương đương với sự quay vòng.
Đây là cách xoay này mà chúng ta biết cách chúng ta cần xoay lõi quay sang trái hoặc
sang phải.
Sau đó, chúng tôi cập nhật góc, mà tôi nhắc nhở là góc giữa trục x và trục hướng
của lõi.
Và sau đó khi lõi đã di chuyển, thì chúng ta phải cập nhật các cảm biến và tín hiệu vì tất
nhiên khi lõi vừa quay thì các cảm biến cũng vừa quay, và do đó chúng ta cần phải xoay chúng bằng cách
sử dụng chức năng xoay và để mà chúng tôi thêm vị trí mới.
Và tại sao chúng ta có vectơ này là 30 số 0?
Đó chỉ đơn giản là vì 30 là khoảng cách giữa lõi và cảm biến.
Bạn biết đấy, đó là khoảng cách giữa lõi và những gì lõi phát hiện được.
Và sau khi các cảm biến được cập nhật, tốt, thì đã đến lúc cập nhật các tín hiệu.
Và vì vậy ở đây chúng tôi thực hiện chính xác những gì tôi giải thích để tính toán các tín hiệu.
Chúng tôi nhận được tọa độ X của cảm biến của chúng tôi, sau đó chúng tôi lấy tất cả các ô từ trừ mười đến cộng mười.
Sau đó, chúng tôi làm tương tự với tọa độ Y, lấy tất cả các ô từ trừ mười đến cộng mười.
Do đó, chúng tôi nhận được hình vuông 20 x 20 pixel xung quanh cảm biến và bên trong hình vuông này, chúng tôi tính tổng tất
cả các điểm ảnh.
Vì vậy, về cơ bản chúng tôi tính tổng tất cả các ô vì các ô chứa không hoặc một.
Và vì trong bình phương 20 x 20 có 20 nhân 20 bằng 400 ô.
Chúng ta chia nó cho 400 để có mật độ của một lần bên trong hình vuông.
Và đó là cách chúng tôi nhận được tín hiệu về mật độ của các tế bào xung quanh cảm biến.
Và chúng tôi cũng làm như vậy đối với cảm biến thứ hai và cảm biến thứ ba để lấy tín hiệu thứ hai và tín hiệu
thứ ba.
Được chứ.
Vì vậy, đó là để phát hiện cảm giác.
Và sau đó ba dòng mã ở đây rất quan trọng.
Đó là một phần thưởng tệ khác mà chúng tôi muốn trao cho chiếc xe của mình khi nó đang đến một trong các cạnh của bản
đồ.
Chúng tôi không muốn chiếc xe lao vào một số bức tường và do đó chúng tôi muốn phạt nó, trừng phạt nó khi nó
đến quá gần một bức tường.
Và do đó, đó là những gì chúng tôi làm ở đây.
Nếu cảm biến đầu tiên lớn hơn dài hơn trừ mười, thì cảm biến đó lớn hơn ở đây vì khoảng cách này ở đây
dài hơn.
Vì vậy, lâu hơn, trừ mười là ngay ở đây.
Vì vậy, nếu cảm biến lớn hơn một x dài hơn, trừ đi mười liên quan đến tất cả các điểm ở đây,
đó là nếu chiếc xe đang tiến gần đến mép bên phải của bản đồ hoặc nếu cảm biến của bản thân một X thấp hơn mười.
Vì vậy, đó là ngay tại đây.
Nếu ô tô đang tiến gần đến mép trái của bản đồ hoặc nếu cảm biến Y lớn hơn lớn hơn trừ
10, thì đó là mép trên của bản đồ.
Và hoặc nếu cảm biến tự y thấp hơn 10, đó là cạnh dưới của bản đồ.
Và vì vậy nếu cảm biến tiếp cận bất kỳ cạnh nào trong số bốn cạnh này, chúng tôi sẽ đặt tín hiệu của
cảm biến.
Tín hiệu một là tín hiệu của cảm biến một.
Chúng tôi sẽ đặt nó là một.
Và thế có nghĩa là gì?
Điều đó có nghĩa là gửi đầy đủ, giống như một mật độ đầy đủ của mùi hương.
Nó giống như điều tồi tệ nhất mà bạn có thể nhận được.
Có rất nhiều ý nghĩa rằng nó sẽ dừng xe của bạn.
Vì vậy, tín hiệu sẽ là một và do đó chiếc xe sẽ nhận được phần thưởng khủng khiếp.
Được rồi.
Và sau đó chúng tôi làm tương tự cho tín hiệu hai và tín hiệu ba từ cảm biến hai và cảm biến ba.
Được rồi.
Và sau đó chúng tôi tạo lớp trò chơi.
Vì vậy, về cơ bản đó là lớp để tạo trò chơi vì cho đến nay chúng tôi chỉ tạo ra ô tô.
Và tất nhiên bây giờ, chúng ta phải tạo bản đồ, chúng ta phải tạo ra chính trò chơi để chúng ta sẽ
không chơi trò chơi.
Đó là AI của chúng tôi sẽ chơi trò chơi.
Và trò chơi thực sự là để tránh các chướng ngại vật và đi từ sân bay đến trung tâm thành phố và ngược lại.
Vì vậy, trong lớp trò chơi này, chúng ta cần tạo một số đối tượng như chiếc xe, sau đó chúng ta cần xác định chức
năng cập nhật là quan trọng nhất.
Và thực sự chúng tôi sẽ tập trung vào điều đó ngay bây giờ vì đó là trong chức năng cập nhật này,
chúng tôi sẽ chọn hành động mà xe phải làm tại mỗi thời điểm để hoàn thành mục tiêu của nó.
Và hành động này chính xác là đầu ra của mạng thần kinh của chúng ta, mạng thần kinh sẽ là trung tâm của
trí tuệ nhân tạo của chúng ta.
Và vì vậy hành động này được bộ não của chiếc xe quay lại, mà tôi nhắc nhở là đối tượng của lớp hiện tại của chúng
ta sẽ được thực hiện trong tệp AI của chúng ta.
Và đối tượng này có một phương thức được gọi là cập nhật và nó lấy đầu vào là phần thưởng cuối cùng và tín hiệu
cuối cùng.
Vì vậy, phần thưởng cuối cùng tất nhiên là phần thưởng cuối cùng mà chiếc xe có được.
Và tín hiệu cuối cùng tất nhiên là tín hiệu cuối cùng của ba cảm biến.
Tín hiệu một từ cảm biến một tín hiệu hai từ cảm biến hai tín hiệu ba từ cảm biến ba.
Nhưng sau đó tôi bổ sung thêm hai yếu tố đầu vào khác, đó là định hướng của chiếc xe đối với mục tiêu.
Vì vậy, ví dụ, nếu chiếc xe đang hướng tới mục tiêu, thì định hướng sẽ bằng không.
Nếu nó hơi lệch sang phải, thì định hướng sẽ gần 45 độ.
Và nếu nó hơi lệch sang trái, hướng sẽ gần -45 độ.
Vì vậy, đó là đầu vào thứ tư của trạng thái đầu vào của chúng tôi.
Và sau đó có một đầu vào cuối cùng là định hướng trừ.
Vì vậy, thông thường các đầu vào của mạng nơ-ron là độc lập.
Không có sự tuyến tính, nhưng sẽ không thực sự quan trọng nếu chúng ta thêm điều này vì mạng nơ-ron sẽ chỉ sửa
lỗi đó với các trọng số.
Nhưng vẫn còn, tôi nhận thấy rằng bằng cách thêm định hướng trừ này, tốt, cho phép chiếc xe, việc đào
tạo chiếc xe ổn định việc khám phá.
Bạn biết đấy, chúng tôi đang làm điều này để AI không phải lúc nào cũng khám phá theo cùng một hướng.
Bằng cách thêm hướng trừ này, chúng tôi đảm bảo rằng nó khám phá theo cả hai hướng, phải hoặc trái.
Và vì vậy, đây là ba tín hiệu, cộng với định hướng và định hướng trừ là năm đầu vào của vectơ được
mã hóa của chúng tôi, sẽ đi vào mạng.
Đó là vectơ đầu vào của chúng tôi sẽ đi vào mạng.
Và sau khi nó đi vào mạng, tốt, mạng sẽ trả về kết quả đầu ra, đó là hành động để
chơi tại mỗi thời điểm.
Và đầu ra được trả về bởi chức năng cập nhật này chứa chính mạng và các đầu ra
của mạng.
Và do đó, đó là lý do tại sao chúng ta phải nhập tín hiệu cuối cùng là trạng thái đầu vào và cũng
là phần thưởng ít hơn, bởi vì hành động chơi cũng phụ thuộc vào phần thưởng ít hơn.
Được rồi.
Và sau đó chúng tôi cập nhật điểm trung bình của các phường, chúng tôi cập nhật vòng quay, chúng tôi sử dụng chức
năng di chuyển để xoay xe theo hành động đã được chọn.
Chúng tôi cập nhật khoảng cách của ô tô đến mục tiêu và chúng tôi cập nhật vị trí của các cảm biến.
Cả một quả bóng, hai quả bóng và quả bóng ba tương ứng với các quả bóng sẽ đại diện cho các cảm biến trên bản đồ.
Bạn sẽ thấy điều đó rất nhanh chóng.
Và đây là phần rất quan trọng bởi vì đó là nơi chúng tôi phạt xe nếu nó đi trên
một ít cát, bởi vì như bạn thấy, điều này có nghĩa là nếu chiếc xe ở trên một số cát, tốt, nó sẽ bị giảm tốc độ.
Vì vậy, đó là nơi chúng tôi giảm vận tốc của nó.
Bạn biết đấy, vận tốc của nó thường là sáu, như bạn có thể thấy ở đây.
Và nếu nó dính vào cát, nó sẽ là một.
Vì vậy, nó sẽ được làm chậm lại một.
Bạn sẽ thấy chiếc xe sẽ giảm tốc độ như thế nào khi nó đi vào một bãi cát.
Vì vậy, nó bị chậm lại và bên cạnh đó, nó nhận được phần thưởng không tốt.
Nó nhận được một phần thưởng trừ một.
Và đó thực sự là phần thưởng tồi tệ nhất mà bạn có thể nhận được.
Phần thưởng tốt nhất là một.
Phần thưởng tệ nhất là trừ một và phần thưởng nằm trong khoảng trừ một đến cộng một.
Và ngược lại, nếu chiếc xe không ở trên bãi cát, thì nó vẫn giữ tốc độ bình thường, tốc độ sáu.
Và sau đó chúng tôi thêm một cái gì đó khác.
Nếu nó đang tiến gần hơn đến mục tiêu, thì nó sẽ nhận được một phần thưởng tích cực hơn một chút.
Và nếu nó càng ngày càng xa mục tiêu, thì nó sẽ nhận được một phần thưởng hơi âm, trừ đi 0. 2.
Và sau đó là các điều kiện cuối cùng liên quan đến phần thưởng.
Chà, đó là nếu lõi quá gần với một trong các cạnh, như chúng ta đã nói trước đó.
Hãy nhớ khi chúng ta nói về cát đầy đủ?
Chà, nếu lõi đến quá gần mép trái của bản đồ, nó sẽ bị trừ một phần thưởng.
Nếu nó đến quá gần mép phải của bản đồ, nó sẽ nhận được phần thưởng là hai trừ một.
Và nếu nó đến quá gần mép dưới của bản đồ, nó sẽ nhận được phần thưởng trừ đi một phần thưởng.
Và nếu nó đến quá gần phía trên bên trái của bản đồ, nó sẽ nhận được phần thưởng trừ đi một phần thưởng.
Vì vậy, đó là một hình phạt khủng khiếp.
Và vì vậy bạn sẽ thấy nó sẽ học nhanh như thế nào để không phải lao vào thứ khác.
Được rồi.
Và sau đó điều này là để cập nhật mục tiêu khi mục tiêu đã đạt được.
Vì vậy, bạn biết đấy, khi ô tô đến sân bay, mục tiêu đầu tiên là góc trên bên trái của bản
đồ, trong khi mục tiêu chuyển sang góc dưới cùng bên phải của bản đồ, đó là trung tâm thành phố và đó chính xác là
những gì chúng tôi Làm ở đây.
Chúng tôi cập nhật tọa độ X của mục tiêu và tọa độ Y của mục tiêu, sau đó chúng tôi cập nhật khoảng cách từ
ô tô đến mục tiêu.
Được rồi.
Và sau đó điều đó ít quan trọng hơn.
Đó chỉ là một lớp sẽ thêm các công cụ vẽ để chúng ta có thể vẽ một số con đường hoặc một số chướng ngại vật
trên bản đồ liên quan nhiều hơn đến hang động.
Bạn có thể có một cái nhìn nếu bạn muốn.
Tôi sẽ cung cấp phiên bản đáng khen ngợi của mã này và tôi sẽ cung cấp một số thông tin tham khảo nếu bạn muốn tìm hiểu sâu hơn và cách
thực hiện điều đó với Sky V.
Nhưng chúng ta đang tiến xa hơn từ trí tuệ nhân tạo, vì vậy tôi sẽ không đi sâu vào chi tiết của
nó.
Và điều đó cũng tương tự cho phần mã cuối cùng ở đây với lớp ứng dụng xe hơi.
Đó chỉ là thêm các nút API, xóa, lưu và tải.
Vì vậy, đó là những gì chúng tôi làm ở đây.
Xóa phần lưu canvas.
Và điều đó thực sự rất quan trọng.
Đó là để chúng tôi có thể cứu AI, lưu bộ não để bạn có thể sử dụng lại nó sau này bằng cách sử dụng chức năng
tải, là một công cụ khác mà chúng tôi thêm trên bản đồ để tải bộ não của ô tô,
đó là tải bộ nhớ của xe, cách điều hướng trong bản đồ.
Và cuối cùng chúng ta có phần cuối cùng của đoạn mã cuối cùng chạy toàn bộ
thứ chạy bản đồ và chính AI.
Và trên thực tế, đó là những gì chúng tôi sẽ làm ngay bây giờ.
Hãy xem mọi thứ chúng tôi tạo ra trong đoạn mã này.
Vì vậy, ngay bây giờ AI không được triển khai.
Vì vậy, mã sẽ có một chuyển động rất ngẫu nhiên.
Nó thực sự sẽ giống như một con côn trùng.
Nhưng đừng lo lắng, chúng tôi sẽ khắc phục điều đó.
Không chỉ chúng tôi sẽ huấn luyện nó di chuyển như một chiếc ô tô thật và huấn luyện nó di chuyển theo một số con đường và tránh
một số chướng ngại vật.
Vì vậy, chúng ta hãy làm điều này.
Tôi sẽ chọn mọi thứ và thực hiện.
Và đây là bản đồ và đây là chiếc xe.
Được rồi.
Vì vậy, đó là một điều nhỏ ở đây mà bạn thấy rằng trông giống như một con côn trùng là chiếc xe của chúng tôi.
Vì vậy, như tôi đã nói với bạn, các hành động là hoàn toàn ngẫu nhiên.
Vì vậy tại mỗi thời điểm ô tô lựa chọn ngẫu nhiên hành động đi thẳng sang trái hay sang phải.
Vì vậy, đó là lý do tại sao nó tạo ra một số chuyển động vô nghĩa, và đó là lý do tại sao nó trông giống như một con côn trùng.
Vì vậy, chúng tôi sẽ sửa chữa điều đó, tất nhiên.
Và tất nhiên, vì AI được kích hoạt, nên nó sẽ không hoạt động, đó là sân bay ở đây
hoặc trung tâm thành phố ở phía dưới bên phải của bản đồ.
Và chúng tôi sẽ khắc phục tất cả điều này bằng cách tạo ra cái Tôi để chúng tôi triển khai AI vào lõi này hoặc côn trùng này.
Vì vậy, bạn có thể thấy ba quả bóng ở đây, quả bóng màu vàng, quả bóng màu đỏ và quả bóng màu trắng.
Đó là ba cảm biến của chúng tôi.
Vì vậy, đó là những gì sẽ phát hiện nếu có một số mùi hương xung quanh nó.
Và nói về mùi hương, chúng ta hãy ném một ít.
Vì vậy, để làm như vậy, tôi chỉ cần thực hiện một cú nhấp chuột trái vào đây và.
Bạn biết đấy, vẽ một số gửi bằng cách vẫn nhấp chuột trái.
Vì vậy, ngay bây giờ tôi đang thêm một số cát, chúng tôi có thể thêm một số nữa.
Vì vậy, mỗi lần tôi thêm cát, như bạn có thể thấy, đó là đặt những cái vào mảng cát.
Đó là mảng cát, đó là tọa độ 0 0 của điểm gốc.
Và ở đây có rất nhiều cái.
Và như bạn có thể thấy, tốt, điều đó thật tốt.
Chiếc xe vừa đi lên bãi cát đã bị giảm tốc độ.
Vì vậy, như bạn có thể thấy ngay bây giờ, nó thực sự đang giảm tốc độ vì nó đang tiếp tục trên cát và ngay bây giờ
nó đang cố gắng thoát ra.
Và những gì chúng tôi sẽ làm là chúng tôi sẽ vẽ một số con đường và chúng tôi sẽ vẽ một số con đường từ sân bay đến trung tâm thành phố,
và chúng tôi sẽ huấn luyện xe ô tô bám đường và tránh chướng ngại vật.
Được rồi.
Và như bạn có thể thấy, có nút rõ ràng để dọn sạch cát.
Có nút lưu để lưu lại bộ não của xe.
Và trên thực tế, có một đường cong điểm số mà chúng tôi đã nói đến giúp lưu lại con mắt, giúp lưu mô hình của bạn, thực
sự là bộ não của chiếc xe của bạn.
Và sau đó bạn có thể biết, khi bạn để lại mã hoặc tắt máy tính của mình và bạn muốn quay
lại nó một lần nữa, bạn có thể sử dụng nút tải để tải mô hình của mình, nghĩa là tải bộ não và điều
đó sẽ được đào tạo mắt của chiếc xe của bạn.
Được rồi.
Vì vậy, bây giờ tôi không thể chờ đợi để bắt đầu tạo ra cái Tôi.
Điều này sẽ rất thú vị.
Chúng tôi sẽ tạo ra mạng lưới thần kinh của mình và chúng tôi sẽ trừng phạt chiếc xe ngay khi nó không làm những gì chúng tôi muốn.
Vì vậy, hãy làm điều đó từ hướng dẫn tiếp theo.
Và cho đến khi đó, hãy tận hưởng.
TÔI.