Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. % Zeglarz plynie lodka od startu do mety uczac sie omijac przeszkody oraz
  2. % zdobywac nagrody.
  3. % Z kazdego pola akwenu mozna dostac sie do jednego z
  4. % czterech pol sasiednich (lewo prawo,gora,dol) wykonujac analogiczna do
  5. % tego celu akcje, z tym ze z powodu przypadkowych podmuchow wiatru przejscie
  6. % do wybranego stanu nastepuje z pewnym prawdopodobienstwem < 1. Z niezerowym
  7. % prawdopodobienstwem mozna zas poplynac w bok lub do tylu.
  8. clear
  9.  
  10. liczba_epizodow = 5000; % liczba epizodow uczenia
  11. max_liczba_krokow = 25; % maksymalna liczba krokow w epizodzie
  12.  
  13. % Parametry Q-learningu:
  14. alfa = 0.1; % szybkosc uczenia
  15. gamma = 0.7; % wspolczynnik dyskontowania
  16.  
  17. % Parametr strategii eps-zachlannej:
  18. epsylon = 0.3; % wspolczynnik eksploracji podczas uczenia
  19.  
  20.  
  21.  
  22. load tablica_nagrod;
  23.  
  24. % trojwymiarowa tablica uzytecznosci par <stan,akcja>: pierwsze dwa wymiary
  25. % wskazuja na stan (miejsce na planszy) w ktorym znajduje sie zeglarz,
  26. % trzeci wymiar to jedna z czterech mozliwych akcji (1-prawo, 2-gora,
  27. % 3-lewo, 4-dol), a wartosc to aktualna estymata wartosci tak okreslonej pary,
  28. % np. Q(3,5,2) = 3.68 oznacza, ze uzytecznosc ruchu w gore bedac na planszy
  29. % na pozycji (3,5) jest aktualnie szacowana na 3.68
  30. Q = zeros( [size(tablica_nagrod) 4]);
  31.  
  32.  
  33. suma_nagr = zeros(1,liczba_epizodow);
  34.  
  35. for epizod=1:liczba_epizodow
  36. stan = [ceil(rand*length(tablica_nagrod(:,1))) 1]; % losowe pole z pierwszej kolumny
  37.  
  38. koniec = 0;
  39. nr_pos = 0;
  40. tablica_nag = tablica_nagrod; % kazdy epizod startuje z takim samym
  41. % srodowiskiem poczatkowym
  42.  
  43. suma_nagr(epizod) = 0;
  44.  
  45. while (koniec == 0)
  46. nr_pos = nr_pos + 1; % numer posuniecia
  47.  
  48.  
  49. % 1) wybor akcji zgodnie z przyjฤ™tฤ… strategiฤ…:
  50. % (strategia eps-zachlanna lub softmax)
  51. wybor = rand;
  52. if (rand < 1-epsylon)
  53. [wyb, arg] = max(Q(stan(1), stan(2),:));
  54. akcja = arg;
  55. else
  56. akcja = randi(4);
  57. end
  58. % ZMIEN
  59.  
  60. % 2) wykonanie ruchu i obserwacja nowego stanu i otrzymanej nagrody,
  61. % (zmienie ulec moglo takze srodowisko, np. jesli zeglarz zgarnal skarb):
  62. [stan_n, nagroda,tablica_nag] = srodowisko(stan, akcja, tablica_nag);
  63.  
  64. % 3) modyfikacja estymaty uzytecznosci pary <stan,akcja>:
  65. % (Q-learning)
  66.  
  67. [wart_oceny, najlepsza_akcja] = max(Q(stan_n(1),stan_n(2),:));
  68. Q(stan(1), stan(2), akcja) = Q(stan(1), stan(2), akcja) + alfa * (nagroda + gamma * wart_oceny - Q(stan(1),stan(2),akcja));
  69.  
  70.  
  71. % UZUPELNIJ
  72.  
  73.  
  74. % 4) aktualizacja stanu
  75. stan = stan_n;
  76.  
  77.  
  78. % Koniec epizodu jesli uzyskano maksymalna liczbe krokow lub
  79. % dojechano do mety
  80. if (nr_pos == max_liczba_krokow || stan(2) == length(tablica_nagrod(1,:)))
  81. koniec = 1;
  82. end
  83. suma_nagr(epizod) = suma_nagr(epizod) + nagroda;
  84.  
  85. end % while
  86. if mod(epizod,1000)==0
  87. sprintf('epizod = %d srednia suma nagrod = %f',epizod,mean(suma_nagr(epizod-999:epizod)))
  88. end
  89. end
  90. sprintf('srednia suma nagrod = %f',mean(suma_nagr))
  91. save Q Q
  92. rysuj_akwen(tablica_nagrod,Q);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement