Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Zeglarz plynie lodka od startu do mety uczac sie omijac przeszkody oraz
- % zdobywac nagrody.
- % Z kazdego pola akwenu mozna dostac sie do jednego z
- % czterech pol sasiednich (lewo prawo,gora,dol) wykonujac analogiczna do
- % tego celu akcje, z tym ze z powodu przypadkowych podmuchow wiatru przejscie
- % do wybranego stanu nastepuje z pewnym prawdopodobienstwem < 1. Z niezerowym
- % prawdopodobienstwem mozna zas poplynac w bok lub do tylu.
- clear
- liczba_epizodow = 5000; % liczba epizodow uczenia
- max_liczba_krokow = 25; % maksymalna liczba krokow w epizodzie
- % Parametry Q-learningu:
- alfa = 0.1; % szybkosc uczenia
- gamma = 0.7; % wspolczynnik dyskontowania
- % Parametr strategii eps-zachlannej:
- epsylon = 0.3; % wspolczynnik eksploracji podczas uczenia
- load tablica_nagrod;
- % trojwymiarowa tablica uzytecznosci par <stan,akcja>: pierwsze dwa wymiary
- % wskazuja na stan (miejsce na planszy) w ktorym znajduje sie zeglarz,
- % trzeci wymiar to jedna z czterech mozliwych akcji (1-prawo, 2-gora,
- % 3-lewo, 4-dol), a wartosc to aktualna estymata wartosci tak okreslonej pary,
- % np. Q(3,5,2) = 3.68 oznacza, ze uzytecznosc ruchu w gore bedac na planszy
- % na pozycji (3,5) jest aktualnie szacowana na 3.68
- Q = zeros( [size(tablica_nagrod) 4]);
- suma_nagr = zeros(1,liczba_epizodow);
- for epizod=1:liczba_epizodow
- stan = [ceil(rand*length(tablica_nagrod(:,1))) 1]; % losowe pole z pierwszej kolumny
- koniec = 0;
- nr_pos = 0;
- tablica_nag = tablica_nagrod; % kazdy epizod startuje z takim samym
- % srodowiskiem poczatkowym
- suma_nagr(epizod) = 0;
- while (koniec == 0)
- nr_pos = nr_pos + 1; % numer posuniecia
- % 1) wybor akcji zgodnie z przyjฤtฤ strategiฤ :
- % (strategia eps-zachlanna lub softmax)
- wybor = rand;
- if (rand < 1-epsylon)
- [wyb, arg] = max(Q(stan(1), stan(2),:));
- akcja = arg;
- else
- akcja = randi(4);
- end
- % ZMIEN
- % 2) wykonanie ruchu i obserwacja nowego stanu i otrzymanej nagrody,
- % (zmienie ulec moglo takze srodowisko, np. jesli zeglarz zgarnal skarb):
- [stan_n, nagroda,tablica_nag] = srodowisko(stan, akcja, tablica_nag);
- % 3) modyfikacja estymaty uzytecznosci pary <stan,akcja>:
- % (Q-learning)
- [wart_oceny, najlepsza_akcja] = max(Q(stan_n(1),stan_n(2),:));
- Q(stan(1), stan(2), akcja) = Q(stan(1), stan(2), akcja) + alfa * (nagroda + gamma * wart_oceny - Q(stan(1),stan(2),akcja));
- % UZUPELNIJ
- % 4) aktualizacja stanu
- stan = stan_n;
- % Koniec epizodu jesli uzyskano maksymalna liczbe krokow lub
- % dojechano do mety
- if (nr_pos == max_liczba_krokow || stan(2) == length(tablica_nagrod(1,:)))
- koniec = 1;
- end
- suma_nagr(epizod) = suma_nagr(epizod) + nagroda;
- end % while
- if mod(epizod,1000)==0
- sprintf('epizod = %d srednia suma nagrod = %f',epizod,mean(suma_nagr(epizod-999:epizod)))
- end
- end
- sprintf('srednia suma nagrod = %f',mean(suma_nagr))
- save Q Q
- rysuj_akwen(tablica_nagrod,Q);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement