A Q-learning módszer alkalmazása NXT robotok irányítására
Q-learning Bevezetés A Q-learning tanulási módszer ismertetése Példa a Q-learning-re Fény keresése Q-learningel
A Q-learning tanulási módszer ismertetése A Q-learning jutolomrendszerre épül A Q-learning képlete: Q(a; i) = Q(a; i) + (R(i) + Q(a1; j) - Q(a; i)) Q - a Q-értékek táblázata a - az elõzõ cselekvés i - az elõzõ állapot j - az új állapot, amely az elõzõ mûvelet eredménye.a1 - az a mûvelet, amely a legnagyobb Q értét produkálja. a tanulási ráta (0 1). R - a jutalomfüggvény
Példa a Q-learning-re Juson ki a robot az éületből
Példa a Q-learning-re A tétkék vektorokkal ábrázolva, és a jutalmazás ABCDEF A B C D E F-10 0 R mátrix (jutalom mátrix)
Fénykeresés a Q-learning algoritmussal Próbáljunk kialakítani egy Q-learning projektet a Lego Robotics Incention System (RIS) segítségével. Annak érdekében, hogy használható mérések legyenek, a robotnak szüksége lesz arra, hogy a mintát két fényszenzorról olvassa be, ezért egyet a jobb, egy másikat a bal oldalra kell felszerelni, majd az értékeket összehasonlítani. A robotra még kell két lökhárító: egy előre, egy hátra; ezekben egy nyomásérzékelő van, hogy ha nekimegy valaminek akkor érzékelje.
A robot lehetséges cselekvési lehetőlégei Cselekv és ID Motor A, BCselekvés leírása 1Stop, stopA robot nem mozog 2Stop, előre forogLasan balra fordul 3Stop, hátra forogLassan jobbra fordul 4Előre forog, stopLassan jobbra fordul 5Előre forog, előre forogElőre halad 6Előre forog, hátra forogÉlesen fordul jobbra 7Hátra forog, előre forogÉlesen fordul balra 8Hátra forog, stopEnyhén balra kanyarodik 9Hátra forog, hátra forogTolat
Egy néhány metódus public static void performAction(byte [] motorCommand) { // Motor A: if(motorCommand[0] == 0) Motor.A.stop(); else if(motorCommand[0] == 1) Motor.A.forward(); else Motor.A.backward(); // Motor C: if(motorCommand[1] == 0) Motor.C.stop(); else if(motorCommand[1] == 1) Motor.C.forward(); else Motor.C.backward(); try { Thread.sleep(450); } catch(InterruptedException ie) {} Motor.A.stop(); Motor.C.stop (); }
Egy néhány metódus int previousLightValue = e[4]; int lightValue = Sensor.S2.readValue(); if(previousLightValue == lightValue) { ++repeating; } else repeating = 0; if(repeating > 5) e[3] = 1; else e[3] = 0; e[4] = (byte)Sensor.S2.readValue(); LCD.showNumber(e[4]); }
Köszönöm a figyelmet!