Witam ponownie.
W ostatnim wykładzie widzieliście, jak używamy naszych funkcji pomocniczych, aby naprawdę skonfigurować rdzeń naszej funkcjonalności do
trenowania naszych modeli.
Tak więc mieliśmy stan terminala, lokalizację początkową, następną akcję, następną lokalizację i najkrótszą ścieżkę, która
tak naprawdę określa większość tego, jak nasz agent lub jak będzie działać nasze środowisko.
Ostatnią rzeczą, którą musimy zrobić, to wykorzystać nasze szkolenie, aby wykorzystać nasze szkolenie.
Jest to dość proste w sensie tego, co musimy uwzględnić, ale sposób, w jaki to robimy, to inna
historia.
Biorąc to pod uwagę, jeśli używasz innego podejścia lub chcesz to dostosować i eksperymentować,
jest to wysoce zalecane.
Ponadto, jeśli stosujesz inne podejście i chcesz o tym porozmawiać, zachęcamy do podzielenia się
pytaniami i odpowiedziami.
Chętnie omówię to z Tobą.
To świetny pomysł, ponieważ jest tak wiele sposobów na rozwiązanie tego problemu i możesz znaleźć sposób, który jest
o wiele lepszy, bardziej korzystny.
Moglibyśmy ponownie przyjrzeć się zaletom i wadom, bardziej niż szczęśliwi, mogąc o tym porozmawiać.
W porządku.
Więc co mamy zrobić?
Musimy rozpocząć nasze szkolenie.
Na nasze szkolenie.
Chcemy użyć Epsilon.
A więc w zasadzie procent, jaki weźmiemy za najlepszą akcję dla R zamiast akcji losowej.
Ustawmy więc nasz epsilon i ustawmy go na 0. 9 i zrobimy coś podobnego z naszymi wartościami współczynnika
dyskontowego i współczynnika uczenia się.
Zróbmy więc współczynnik dyskontowy równy 0. 9.
Przyjmijmy również nasz współczynnik uczenia się i ustawmy go na 0. 9.
To będzie kurs, którego nasz agent będzie lub powinien się nauczyć.
Chcemy również wziąć pod uwagę liczbę odcinków treningowych, nazwijmy to, i odcinki treningowe.
Mamy więc kilka odcinków treningowych.
Ustawmy to na tysiąc.
Ile razy będzie trenował lub w ilu odcinkach będzie trenował?
Niesamowite.
Teraz zasadniczo to, co chcemy zrobić, to iterować przez każdy odcinek.
Chcemy wziąć zakres naszej liczby odcinków treningowych i ustawić nasz zasadniczo nasz epsilon.
Chcemy znaleźć naszą czasową różnicę.
Aby to ustawić, musimy przyjrzeć się niektórym poprzednim wartościom Q.
Musimy obliczyć naszą pozycję startową w naszym indeksie akcji.
Więc zacznijmy.
Weźmy dużą pętlę for.
A więc mamy nasze cztery odcinki.
W zakresie naszej ilości odcinków treningowych.
No to ruszamy.
Wykluczając jakikolwiek błąd składniowy z mojej strony, chcemy wziąć indeks wiersza i indeks kolumny dla naszej siatki dla
naszej Ms. indeks kolumn.
I powiedział, że docelowa lokalizacja początkowa, potrzebujemy lokalizacji początkowej.
Miejmy więc tę słabą godzinę w każdym odcinku.
Teraz możemy ustawić nasz stan terminala while.
Nie.
Jest stanem końcowym.
Chcemy spojrzeć na indeks wiersza i indeks kolumny.
Dobra.
Następnie ustawmy nasz indeks akcji dla następnej akcji.
Więc potrzebujemy naszego następnego działania.
Ponieważ ten agent przechodzi przez środki dla naszego indeksu akcji, możemy użyć naszej następnej akcji.
I możemy użyć naszego indeksu kolumny indeksu wiersza i nazwijmy nasz epsilon.
Więc chcemy mieć to zamiast naszej losowej akcji, użyjmy indeksu kolumn.
I potrzebujemy Epsilon.
Niesamowite.
Gdybym mógł poprawnie przeliterować.
Tutaj chcemy Epsilon.
W porządku, pozwól, że to usunę.
Dobra.
Pozwól, że zdobędę resztę kodu, a my przejdziemy przez to, abyś nie musiał patrzeć, jak piszę
każdą linijkę.
Ale miej to na uwadze, jak chcemy do tego podejść.
Przesuwając stary wiersz, potrzebowalibyśmy indeksu starego wiersza.
Chcielibyśmy również otrzymać nagrody za nasze kolumny i nasze wiersze.
Musimy przyjrzeć się wartościom kolejki i starym wartościom kolejki, a także musimy obliczyć naszą różnicę
czasową.
Dobra.
Widzisz więc zmianę w kodzie lub aktualizację kodu.
Bierzemy nasz stary indeks wierszy i nasz stary indeks kolumn, aby przyjrzeć się naszemu indeksowi wierszy i indeksowi kolumn.
Nasz indeks kolumny indeksu wiersza równy naszej następnej lokalizacji.
A nasza następna lokalizacja będzie potrzebowała indeksu wiersza, kolumny, indeksu i akcji.
Na koniec patrzymy na nagrody.
Nasze stare wartości Q byłyby wartościami Q ze starym indeksem wiersza, starym indeksem kolumny i ponownie, odwołując się
do naszego indeksu akcji i obliczenia naszej różnicy czasowej, która jest naszą nagrodą, plus współczynnik
dyskontowy pomnożony przez wartości Q z wierszem indeks i indeks kolumny minus stara wartość Q z poprzedniej wartości
Q.
Prawie gotowe, gdy potrzebujemy naszej nowej wartości Q, która jest naszą starą wartością wskazówki, plus szybkość
uczenia się, czasy, różnicę czasową i nasze wartości wskazówki ze starym indeksem wiersza w naszym starym indeksie kolumny równym nowej
wartości wskazówki.
Jeśli chcecie to dalej przedyskutować, ponownie gorąco polecam pytania i odpowiedzi.
Zapraszamy do drukowania.
Spróbuj poeksperymentować ze wszystkimi użytymi tutaj zmiennymi.
Jeśli chcesz zobaczyć ich kształt, zobaczyć, jak można je wykorzystać, do czego się odnosi, gorąco
polecam i chętnie omówię to dalej.
Ostatnia rzecz, którą możemy zrobić, więc mamy małe powiadomienie.
Dodajmy instrukcję print, abyśmy wiedzieli, kiedy szkolenie jest zakończone dla naszych tysięcy wierszy.
W porządku.
Jeśli nie ma błędów składniowych z mojej strony, powinniśmy być gotowi.
Notatnik kolumn zostanie zainicjowany.
Przeprowadziłem wszystko, więc pozwól mi to uruchomić.
Powinno to być bardzo szybkie, ponieważ używamy tylko numpy.
To w pewnym sensie bardzo zoptymalizowany model.
Pozwól, że to kliknę, a następnie poszukamy najkrótszej ścieżki.
W porządku.
Mamy ukończone szkolenie.
Wydrukujmy również najkrótszą ścieżkę dla niektórych opcji startowych.
Więc zaczynamy wiersz trzeci, kolumnę dziewiątą z opcją najkrótszej ścieżki z naszą najkrótszą ścieżką.
Chcemy spojrzeć na wiersz piąty i zero, zaczynając od wiersza dziewiątego i kolumny numer pięć.
Wydrukujmy to.
Niesamowite.
Mamy najkrótszą drogę, ale jeszcze nie skończyliśmy.
Prawie jesteśmy na miejscu.
Widzimy, że nasz listonosz automatycznie uzyskuje najkrótszą drogę od legalnej, którą możemy rozważyć, z naszego miasta
do obszaru pakowania przedmiotów.
Ale co by było z odwrotnym scenariuszem, odnosząc się w zasadzie do tego, czy nasz listonosz
może dostarczyć przesyłkę z dowolnego miejsca w mieście do strefy pakowania?
Ale po przedmiocie musiałby przejść z tego obszaru, z obszaru pakowania do innego miejsca w
mieście, ponieważ musiałby odebrać następny przedmiot.
Co więc możemy zrobić, aby to rozwiązać?
I to jest całkiem proste.
Możesz zmienić kolejność najkrótszej ścieżki.
Pomyśl o tym przez chwilę, a wtedy będzie to rozwiązanie.
Możemy skorzystać z najkrótszej ścieżki.
Więc weźmy napisane pięć i kolumnę drugą, a potem wszystko, co musisz zrobić, to użyć opcji odwrotnej w
Pythonie.
Używamy path dot reverse i możemy wydrukować ścieżkę.
Więc patrzymy na pięć i dwa.
I tam idziemy.
Mamy najkrótszą drogę.
Jest to naprawdę pomocne, jeśli chcesz pobrać obraz w komórce i sprowadzić go, aby porównać i spojrzeć na
te ścieżki.
Ale tak naprawdę możesz zobaczyć ścieżkę, jeśli weźmiesz wydrukowany wyciąg, spójrz na kolumnę
w zamówieniu i zobacz, jak podróżuje sprzedawca.
Tak niesamowita praca, z której korzystasz.
Nauka Q.
To, czego nauczyliśmy się na tym kursie, ma trochę bonusowego i zabawnego scenariusza w sekcji, aby
rozwiązać ten zasadniczo problem z komiwojażerem.
Patrzymy na listonosza, który dostarcza paczki i przedmioty w mieście, aby znaleźć te najkrótsze opcje i
najkrótsze ścieżki.
Gorąco polecam dostosowanie, przetestowanie innych opcji, zmianę hiperparametrów, a jeśli odkryjesz coś lepszego,
jeśli odkryjesz jakiekolwiek zoptymalizowane lub najlepsze parametry do użycia, możesz podzielić się nimi w pytaniach
i odpowiedziach.
Zdumiewający.
Mam nadzieję, że naprawdę wam się podobało.
Dostosuj, eksperymentuj i kontynuuj naukę.
Praca z tobą to świetna zabawa.
Uczę się i cieszę się ja.