рдорд╛рдЙрдВрдЯреЗрди рдХрд╛рд░: рд╕реБрджреГрдвреАрдХрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ рдЪреБрдиреМрддреА рдХрд╛ рд╕рдорд╛рдзрд╛рди

рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХрдо рдореВрд▓реНрдпрд╡рд╛рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╢реНрд░реЗрдгреА рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕реЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреНрд╕рд░ рд╡реЗ рд╕рд░рд▓ рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рд╕реБрджреГрдвреАрдХрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдЙрдВрдЯреЗрди рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕реЗ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдореЗрд░рд╛ рдирд╛рдо рдУрд▓реЗрдЧ Svidchenko рд╣реИ, рдЕрдм рдореИрдВ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдПрдЪрдПрд╕рдИ рдХреЗ рд╢рд╛рд░реАрд░рд┐рдХ, рдЧрдгрд┐рддреАрдп рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рд╕реНрдХреВрд▓ рдореЗрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рддреАрди рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВ рдПрдХ рд╢реЛрдзрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЗрдЯрдмреНрд░реЗрдиреНрд╕ рд░рд┐рд╕рд░реНрдЪ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдореЙрд╕реНрдХреЛ рд╕реНрдЯреЗрдЯ рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА рдХреЗ рдПрд╕рдПрд╕рд╕реА рдореЗрдВ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рдореЙрд╕реНрдХреЛ рдЯреАрдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рд╕реНрдХреВрд▓реА рдмрдЪреНрдЪреЛрдВ рдХреЗ рдСрд▓-рд░реВрд╕реА рдУрд▓рдВрдкрд┐рдпрд╛рдб рдХрд╛ рд╡рд┐рдЬреЗрддрд╛ рдмрди рдЧрдпрд╛ред

рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?


рдпрджрд┐ рдЖрдк рд╕реБрджреГрдвреАрдХрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдЙрдВрдЯреЗрди рдХрд╛рд░ рдЪреБрдиреМрддреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИред рдЖрдЬ рд╣рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдЬрд┐рдо рдФрд░ рдкреНрдпреЛрд░рдЯреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдЕрдЬрдЧрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг


рджреНрд╡рд┐-рдЖрдпрд╛рдореА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдПрдХ рдХрд╛рд░ рдХреЛ рджреЛ рдкрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЦреЛрдЦрд▓реЗ рд╕реЗ рджрд╛рд╣рд┐рдиреА рдкрд╣рд╛рдбрд╝реА рдХреА рдЪреЛрдЯреА рдкрд░ рдЪрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдмрд▓ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рд╡рд╣рд╛рдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЗрдВрдЬрди рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдПрдХ рдПрдЬреЗрдВрдЯ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ) рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдХреЗ рд╕рд╣реА рдкрд╣рд╛рдбрд╝реА рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рдЬрд▓реНрджреА рдЪрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдорд╢реАрди рдирд┐рдпрдВрддреНрд░рдг рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрдкрд┐рд╕реЛрдб рдХреЛ рдЪрд░рдг рджрд░ рдЪрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ, рдПрдЬреЗрдВрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рд░рд╛рдЬреНрдп рдПрд╕ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЖрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрднреА-рдХрднреА рдорд╛рдзреНрдпрдо рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдкрд┐рд╕реЛрдб рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ, рдПрд╕ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реА рд╡рдХреНрд░ рдкрд░ рдХрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ (рдПрдХ рд╕рдордиреНрд╡рдп рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рддрд╣ рд╕реЗ рдЦреБрдж рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдФрд░ рджреВрд╕рд░рд╛ рд╕рддрд╣ рдкрд░ рдЗрд╕рдХреА рдЧрддрд┐ рд╣реИ (рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде)ред рд░рд┐рд╡рд╛рд░реНрдб рдЖрд░ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рд╕рдВрдЦреНрдпрд╛ -1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рд╣рдо рдПрдЬреЗрдВрдЯ рдХреЛ рдПрдкрд┐рд╕реЛрдб рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ: рдХрд╛рд░ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рдзрдХреНрдХрд╛ рджреЗрдВ, рдХреБрдЫ рднреА рди рдХрд░реЗрдВ рдФрд░ рдХрд╛рд░ рдХреЛ рджрд╛рдИрдВ рдУрд░ рдзрдХреНрдХрд╛ рджреЗрдВред рдпреЗ рдХреНрд░рд┐рдпрд╛рдПрдВ 0 рд╕реЗ 2. рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдпрджрд┐ рдХрд╛рд░ рд╕рд╣реА рдкрд╣рд╛рдбрд╝реА рдХреЗ рд╢реАрд░реНрд╖ рддрдХ рдкрд╣реБрдВрдЪрддреА рд╣реИ рдпрд╛ рдПрдЬреЗрдВрдЯ рдиреЗ 200 рдХрджрдо рдЙрдард╛рдП рд╣реИрдВ рддреЛ рдПрдкрд┐рд╕реЛрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ


Habr├й рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА DQN рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд▓реЗрдЦрдХ рдиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдерд╛ред рдлрд┐рд░ рднреА, рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рдореЗрдВ рдпрд╣рд╛рдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ред

рд╕реБрджреГрдвреАрдХрд░рдг рд╕реАрдЦрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд░рд╛рдЬреНрдп рдЕрдВрддрд░рд┐рдХреНрд╖ рдПрд╕, рдПрдХреНрд╢рди рд╕реНрдкреЗрд╕ рдП, рдЧреБрдгрд╛рдВрдХ рдХреЗ рдПрдХ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЧрд╛рдорд╛, рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ T рдФрд░ рд░рд┐рд╡рд╛рд░реНрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ R. рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд░рд┐рд╡реЙрд░реНрдб рдлрд╝рдВрдХреНрд╢рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдПрдХ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рд▓рдХреНрд╖реНрдп рд╕рдВрдЪрдпреА рдкреБрд░рд╕реНрдХрд╛рд░ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдирд╛ рд╣реИред  sumt=0Trt cdot Gammat, рдЬрд╣рд╛рдВ t рдорд╛рдзреНрдпрдо рдореЗрдВ рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ T рдкреНрд░рдХрд░рдг рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдзрд┐рдХрддрдо рд╕рдВрдЪрдпреА рдЗрдирд╛рдо рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рдореВрд▓реНрдп-рд╕рдорд╛рд░реЛрд╣ V рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдмрд╢рд░реНрддреЗ рдХрд┐ рд╣рдо рд░рд╛рдЬреНрдп рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ: рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдПрдЧреАред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдореА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрдпреВ-рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдХреЗ рд╣рдо рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд╕рдВрдЪрдпреА рдЗрдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд░рд╛рдЬреНрдп рдПрд╕ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд╣рдо рдмрд╕ рдПрдХ рдРрд╕рд╛ рдЪреБрдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреВ (рдПрд╕, рдП) рдЕрдзрд┐рдХрддрдо рд╣реИред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрдпреВ-рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реА рд╣реА рдПрдХ рддрдХрдиреАрдХ рд╣реИ рдбреАрдк рдХреНрдпреВ рдиреЗрдЯрд╡рд░реНрдХ (DQN)ред рдЙрдирдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреНрдпреВ-рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВред

рдкрд░реНрдпрд╛рд╡рд░рдг


рдЕрдм рдЪрд▓рд┐рдП рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рд╕реАрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдЙрдВрдЯреЗрдирдХрд╛рд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдЕрдиреБрдХрд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВред рдЬрд┐рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдирдХ рд╕реБрджреГрдвреАрдХрд░рдг рд╕реАрдЦрдиреЗ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рд╣рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдп рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЬрд┐рдо рдореЙрдбреНрдпреВрд▓ рдкрд░ рдореЗрдХ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдирд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реИ:
import gym env = gym.make("MountainCar-v0") 

рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд▓реЗрдЦрди рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдЖрдЗрдП рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • env.reset() - рд╡рд░реНрддрдорд╛рди рдПрдкрд┐рд╕реЛрдб рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдИ рд╢реБрд░реБрдЖрдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  • env.step(action) - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдПрдХ рдЗрдирд╛рдо, рдЪрд╛рд╣реЗ рдПрдкрд┐рд╕реЛрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рдбреАрдмрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
  • env.seed(seed) - рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ env.reset () рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред
  • env.render() - рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╣рдореЗрдВ DQN рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИ


DQN рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬреЛ рдПрдХ рдХреНрдпреВ-рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ, рдбреАрдкрдорд╛рдЗрдВрдб рдиреЗ рдЕрдЯрд╛рд░реА рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ , рдЬрд┐рд╕рдореЗрдВ рдХрдВрд╕рдЯреНрд░рдХреНрд╢рдирд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрди рдЦреЗрд▓реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдорд╛рдЙрдВрдЯреЗрди рдХрд╛рд░ рдПрдХ рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЦреБрдж рдХреЛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ 32 рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреА рджреЛ рдЫрд┐рдкреА рдкрд░рддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ред рдкреНрд░рддреНрдпреЗрдХ рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рдд рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рд╕рдХреНрд░рд┐рдпрдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ ReLU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд░рд╛рдЬреНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдирдВрдмрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рдХреНрдпреВ-рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдиреБрдорд╛рди рдорд┐рд▓рддрд╛ рд╣реИред

рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛

 import torch.nn as nn model = nn.Sequential( nn.Linear(2, 32), nn.ReLU(), nn.Linear(32, 32), nn.ReLU(), nn.Linear(32, 3) ) target_model = copy.deepcopy(model) #    def init_weights(layer): if type(layer) == nn.Linear: nn.init.xavier_normal(layer.weight) model.apply(init_weights) 

рдЪреВрдБрдХрд┐ рд╣рдо GPU рдкрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдирд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╣рд╛рдБ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 #     CPU,  тАЬcudaтАЭ    тАЬcpuтАЭ device = torch.device("cuda") model.to(device) target_model.to(device) 

рдбрд┐рд╡рд╛рдЗрд╕ рдЪрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╣рдореЗрдВ рдПрдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреНрд░рдорд┐рдХ рд╡рдВрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рднрд╛рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред рд╣рд╛рдВ, рдПрдХ рд╕реЗ рдмрдврд╝рдХрд░ рдПрдХ рд╣реИрдВред

 optimizer = optim.Adam(model.parameters(), lr=0.00003) 

рд╕рдм рдПрдХ рд╕рд╛рде
 import torch.nn as nn import torch device = torch.device("cuda") def create_new_model(): model = nn.Sequential( nn.Linear(2, 32), nn.ReLU(), nn.Linear(32, 32), nn.ReLU(), nn.Linear(32, 3) ) target_model = copy.deepcopy(model) #    def init_weights(layer): if type(layer) == nn.Linear: nn.init.xavier_normal(layer.weight) model.apply(init_weights) #   ,     (GPU  CPU) model.to(device) target_model.to(device) #  ,        optimizer = optim.Adam(model.parameters(), lr=0.00003) return model, target_model, optimizer 


рдЕрдм рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рддреНрд░реБрдЯрд┐ рдлрд╝рдВрдХреНрд╢рди, рдЗрд╕рдХреЗ рд╕рд╛рде рдврд╛рд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛, рдФрд░ рд╡рдВрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдмреИрдЪ рд╕реЗ GPU рддрдХ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 state, action, reward, next_state, done = batch #       state = torch.tensor(state).to(device).float() next_state = torch.tensor(next_state).to(device).float() reward = torch.tensor(reward).to(device).float() action = torch.tensor(action).to(device) done = torch.tensor(done).to(device) 

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдХреНрдпреВ-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдирдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВрдЧреЗ:

 target_q = torch.zeros(reward.size()[0]).float().to(device) with torch.no_grad(): #     Q-function    target_q = target_model(next_state).max(1)[0].view(-1) target_q[done] = 0 target_q = reward + target_q * gamma 

рдФрд░ рд╡рд░реНрддрдорд╛рди рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА:

 q = model(state).gather(1, action.unsqueeze(1)) 

Target_q рдФрд░ q рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:

 loss = F.smooth_l1_loss(q, target_q.unsqueeze(1)) #      optimizer.zero_grad() #     loss.backward() #   . ,       for param in model.parameters(): param.grad.data.clamp_(-1, 1) #    optimizer.step() 

рд╕рдм рдПрдХ рд╕рд╛рде
 gamma = 0.99 def fit(batch, model, target_model, optimizer): state, action, reward, next_state, done = batch #       state = torch.tensor(state).to(device).float() next_state = torch.tensor(next_state).to(device).float() reward = torch.tensor(reward).to(device).float() action = torch.tensor(action).to(device) done = torch.tensor(done).to(device) #  ,       target_q = torch.zeros(reward.size()[0]).float().to(device) with torch.no_grad(): #     Q-function    target_q = target_model(next_state).max(1)[0].view(-1) target_q[done] = 0 target_q = reward + target_q * gamma #   q = model(state).gather(1, action.unsqueeze(1)) loss = F.smooth_l1_loss(q, target_q.unsqueeze(1)) #      optimizer.zero_grad() #     loss.backward() #   . ,       for param in model.parameters(): param.grad.data.clamp_(-1, 1) #    optimizer.step() 


рдЪреВрдВрдХрд┐ рдореЙрдбрд▓ рдХреЗрд╡рд▓ рдХреНрдпреВ-рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рддрдп рдХрд░реЗрдЧрд╛ рдХрд┐ рдПрдЬреЗрдВрдЯ рдХреМрди рд╕реЗ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд▓реЗрддреЗ рд╣реИрдВ  varepsilon-рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬрдиреАрддрд┐ред рдЙрдирдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдПрдЬреЗрдВрдЯ рдЖрдорддреМрд░ рдкрд░ рд▓рд╛рд▓рдЪ рд╕реЗ рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреВ-рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде  varepsilonрд╡рд╣ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдЧрд╛ред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд▓рд╛рд▓рдЪреА рдиреАрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

 def select_action(state, epsilon, model): if random.random() < epsilon: return random.randint(0, 2) return model(torch.tensor(state).to(device).float().unsqueeze(0))[0].max(0)[1].view(1, 1).item() 

рдЪреВрдВрдХрд┐ рд╣рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдЪреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рдмрдлрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЬрд╣рд╛рдВ рд╕реЗ рд╣рдо рдмреИрдЪреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗ:

 class Memory: def __init__(self, capacity): self.capacity = capacity self.memory = [] self.position = 0 def push(self, element): """    """ if len(self.memory) < self.capacity: self.memory.append(None) self.memory[self.position] = element self.position = (self.position + 1) % self.capacity def sample(self, batch_size): """    """ return list(zip(*random.sample(self.memory, batch_size))) def __len__(self): return len(self.memory) 

рдЕрдЪреНрдЫрд╛ рдирд┐рд░реНрдгрдп


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдерд┐рд░рд╛рдВрдХ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдПрдВрдЧреЗ:

 #  model   target model target_update = 1000 #  ,      batch_size = 128 #   max_steps = 100001 #  exploration max_epsilon = 0.5 min_epsilon = 0.1 #    memory = Memory(5000) model, target_model, optimizer = create_new_model() 

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдмрд╛рддрдЪреАрдд рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рдмрд╛рдж рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рд╡рдВрд╢ рдХрд╛ рдПрдХ рдХрджрдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдЗрдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реЗрдВ рдХрд┐ рд╕реАрдЦрдиреЗ рдХрд╛ рдПрдХ рдЪрд░рдг рдпрд╣рд╛рдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рдо рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рд╣рдо рдХрджрдо-рджрд░-рдХрджрдо рдХрджрдо рдмрдврд╝рд╛ рд░рд╣реЗ рд╣реИрдВред рдлрд┐рд░ рд╕рд╛рде рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛  varepsilonрд▓рд╛рд▓рдЪреА рдиреАрддрд┐рдпрд╛рдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреА:

 epsilon = max_epsilon - (max_epsilon - min_epsilon)* step / max_steps action = select_action(state, epsilon, model) new_state, reward, done, _ = env.step(action) 

рддреБрд░рдВрдд рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрднрд╡ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рддреЛ рдПрдХ рдирдпрд╛ рдПрдкрд┐рд╕реЛрдб рд╢реБрд░реВ рдХрд░реЗрдВ:

 memory.push((state, action, reward, new_state, done)) if done: state = env.reset() done = False else: state = new_state 

рдФрд░ рд╣рдо рдврд╛рд▓ рд╡рдВрд╢ рдХрд╛ рдХрджрдо рдЙрдард╛рдПрдВрдЧреЗ (рдпрджрд┐, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмреИрдЪ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ):

 if step > batch_size: fit(memory.sample(batch_size), model, target_model, optimizer) 

рдЕрдм рдпрд╣ target_model рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:

 if step % target_update == 0: target_model = copy.deepcopy(model) 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рднреА рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо epsilon = 0 рдХреЗ рд╕рд╛рде target_model рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдкрд┐рд╕реЛрдб рдЦреЗрд▓реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдкреБрд░рд╕реНрдХрд╛рд░ рдореЗрдВ рдХреБрд▓ рдкреБрд░рд╕реНрдХрд╛рд░_рдмреАрдЬ_рдЯрд╛рд░реНрдЧреЗрдЯ_рдЕрдкрдбреЗрдЯреНрд╕ рдмрдлрд░ рдЬрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

 if step % target_update == 0: target_model = copy.deepcopy(model) state = env.reset() total_reward = 0 while not done: action = select_action(state, 0, target_model) state, reward, done, _ = env.step(action) total_reward += reward done = False state = env.reset() rewards_by_target_updates.append(total_reward) 

рд╕рдм рдПрдХ рд╕рд╛рде
 #  model   target model target_update = 1000 #  ,      batch_size = 128 #   max_steps = 100001 #  exploration max_epsilon = 0.5 min_epsilon = 0.1 def fit(): #    memory = Memory(5000) model, target_model, optimizer = create_new_model() for step in range(max_steps): #    epsilon = max_epsilon - (max_epsilon - min_epsilon)* step / max_steps action = select_action(state, epsilon, model) new_state, reward, done, _ = env.step(action) #  ,  ,   memory.push((state, action, reward, new_state, done)) if done: state = env.reset() done = False else: state = new_state #  if step > batch_size: fit(memory.sample(batch_size), model, target_model, optimizer) if step % target_update == 0: target_model = copy.deepcopy(model) #Exploitation state = env.reset() total_reward = 0 while not done: action = select_action(state, 0, target_model) state, reward, done, _ = env.step(action) total_reward += reward done = False state = env.reset() rewards_by_target_updates.append(total_reward) return rewards_by_target_updates 


рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕ рдЧреНрд░рд╛рдлрд╝ рдХреА рддрд░рд╣ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ y = -200 рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╕рд▓рд╛рдЗрди рдЧреНрд░рд╛рдлрд╝

рдХреНрдпрд╛ рдЧрд▓рдд рд╣реБрдЖ?


рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИ? рдХреНрдпрд╛ рдпреЗ рдЦрд░рд╛рдм рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХрд╛рд░реНрдп рдореЗрдВ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдЗрдирд╛рдо рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВред рдЖрдЗрдП рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦреЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЛ -1 рдХрд╛ рдЗрдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рддрдм рддрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдПрдкрд┐рд╕реЛрдб рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЗрдирд╛рдо рдПрдЬреЗрдВрдЯ рдХреЛ рдПрдкрд┐рд╕реЛрдб рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдЙрд╕реЗ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдПрдХ рдПрдЬреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рд╣рд▓ рдХрд░рдирд╛ рд╣реИред

рдмреЗрд╢рдХ, рдХреЛрдИ рд╣рдорд╛рд░реЗ рдмрдЬрд╛рдп рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ  varepsilon-рднреВрд▓рдХрд░ рдиреАрддрд┐рдпрд╛рдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдХрд╛рд░рдг, рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдмрдЪрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд╣реАрдВ рдХрд┐ рд╡реЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдЗрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдХрд░, рдЕрд░реНрдерд╛рддред рдЬрд┐рд╕реЗ рд▓рдЧрд╛рдиреЗ рдХреЛ рд░рд┐рд╡реЙрд░реНрдб рд╢реЗрдкрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреЗрдЬреА рд╕реЗ рдЕрднрд┐рд╕рд░рдг


рд╣рдорд╛рд░рд╛ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд╛рдбрд╝реА рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдЪреНрдЪ рдЧрддрд┐, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬреЗрдВрдЯ рдХреЗ рдХрд░реАрдмред рдЖрдк рдЙрд╕реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЧрддрд┐ рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝рдХрд░:
  рд╕рдВрд╢реЛрдзрд┐рдд_рд░реВрдк = рдЗрдирд╛рдо + 10 * рдПрдмреНрд╕ (new_state [1]) 


рддрджрдиреБрд╕рд╛рд░, рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИ
  рдореЗрдореЛрд░реАред рдкрд╢ (рд░рд╛рдЬреНрдп, рдХреНрд░рд┐рдпрд╛, рдЗрдирд╛рдо, new_state, рдХрд┐рдпрд╛ рд╣реБрдЖ)) 
рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  рдореЗрдореЛрд░реАред рдкрдк (рд░рд╛рдЬреНрдп, рдХреНрд░рд┐рдпрд╛, рд╕рдВрд╢реЛрдзрд┐рдд_рдЖрдЧ, new_state, рдХрд┐рдпрд╛)) 
рдЕрдм рдирдП рдЪрд╛рд░реНрдЯ рдХреЛ рджреЗрдЦреЗрдВ (рдпрд╣ рдмрд┐рдирд╛ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рдореВрд▓ рдкреБрд░рд╕реНрдХрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ):

рдмреЗрд╕рд▓рд╛рдЗрди рдмрдирд╛рдо рдЖрд░рдПрд╕ рдЧреНрд░рд╛рдл
рдпрд╣рд╛рдВ рдЖрд░рдПрд╕ рд░рд┐рд╡реЙрд░реНрдб рд╢реЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╣реИред

рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ?


рдкреНрд░рдЧрддрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯ рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╣рд╛рдбрд╝реА рдХреЛ рдЪрд▓рд╛рдирд╛ рд╕реАрдЦрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреБрд░рд╕реНрдХрд╛рд░ -200 рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реБрдЖред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреНрд░рд╢реНрди рд╢реЗрд╖ рд╣реИ: рдпрджрд┐ рдЗрдирд╛рдо рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕реНрд╡рдпрдВ рднреА рдмрджрд▓ рджрд┐рдпрд╛, рддреЛ рдХреНрдпрд╛ рдирдИ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣рдореЗрдВ рдкреБрд░рд╛рдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛?

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ "рдЕрдЪреНрдЫрд╛рдИ" рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╖реНрдЯрддрдо рдиреАрддрд┐ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдПрдХ рдЬреЛ рдПрдкрд┐рд╕реЛрдб рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдЗрдирд╛рдо рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╢рдмреНрдж "рдЕрдЪреНрдЫрд╛" рдХреЛ "рдЗрд╖реНрдЯрддрдо" рд╢рдмреНрдж рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЖрд╢рд╛рд╡рд╛рджреА рд░реВрдк рд╕реЗ рдпрд╣ рднреА рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╣рдорд╛рд░рд╛ DQN рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдвреВрдВрдвреЗрдЧрд╛, рдФрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЕрдзрд┐рдХрддрдо рдкрд░ рдЕрдЯрдХ рди рдЬрд╛рдПред рддреЛ, рдЗрд╕ рдкреНрд░рд╢реНрди рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрджрд┐ рдЗрдирд╛рдо рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП, рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рднреА рдмрджрд▓ рджрд┐рдпрд╛, рддреЛ рдХреНрдпрд╛ рдирдИ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рд╣рдореЗрдВ рдкреБрд░рд╛рдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рд╣реЛрдЧрд╛?

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕реА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред рдЙрддреНрддрд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЗрдирд╛рдо рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓рд╛, рдпрд╣ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрд╡рдпрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд▓реЗрдЦ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЬрд╛рдВрдЪ рдХреА рдХрд┐ рдЗрдирд╛рдо рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреА рдЗрд╖реНрдЯрддрдорддрд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдиреНрд╣реЗрдВ "рд╕реБрд░рдХреНрд╖рд┐рдд" рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рдХрдХреНрд╖рд╛ рдорд┐рд▓реА рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ: RтА▓=R+( gamma cdot Phi(new state)тИТ Phi(рд░рд╛рдЬреНрдп))рдЬрд╣рд╛рдБ  Phi- рдХреНрд╖рдорддрд╛, рдЬреЛ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦрдХ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ рдХрд┐ рдпрджрд┐ рдирдИ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЗрд╖реНрдЯрддрдо рд╣реИ, рддреЛ рдкреБрд░рд╛рдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣ рдЗрд╖реНрдЯрддрдо рд╣реИред

рджреВрд╕рд░реЗ, рд▓реЗрдЦрдХреЛрдВ рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП RтА▓=R+F(s)рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЖрд░ рд░рд┐рд╡рд╛рд░реНрдб рдлрдВрдХреНрд╢рди рдФрд░ рдмрджрд▓реА рд╣реБрдИ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди, рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореВрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдЕрдЪреНрдЫрд╛рдИ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рдкрджреНрдзрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрднрд┐рд╕рд░рдг рджрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЕрднрд┐рд╕рд░рдг рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЧрддрд┐ рджреЗрдВ


рдЕрдм рдЬрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирд╛рдо рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ, рддреЛ рдЖрдЗрдП, рднреЛрд▓реЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХрд╛рд░реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
  рд╕рдВрд╢реЛрдзрд┐рдд_рд░реВрдк = рдЗрдирд╛рдо + 300 * (рдЧрд╛рдорд╛ * рдПрдмреНрд╕ (new_state [1]) - рдПрдмреНрд╕ (рд░рд╛рдЬреНрдп [1])) 

рдЖрдЗрдП рдореВрд▓ рдкреБрд░рд╕реНрдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреЗрдЦреЗрдВ:

рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдмреЗрд╕рд▓рд╛рдЗрди, рдЖрд░рдПрд╕ рдФрд░ рдЖрд░рдПрд╕ рдХреА рддреБрд▓рдирд╛ рдЧреНрд░рд╛рдл

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЧрд╛рд░рдВрдЯреА рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдорджрдж рд╕реЗ рдЗрдирд╛рдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рднреА рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖ, рдЦрд╛рд╕рдХрд░ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВред рдмреЗрд╢рдХ, рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдПрдЬреЗрдВрдЯ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рд╣рд╛рдЗрдкрд░рдкрд░рдореЗрдЯрд░реНрд╕ (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ, рдЧрд╛рдорд╛, рдФрд░ рдЕрдиреНрдп рдЧреБрдгрд╛рдВрдХ) рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЖрдХрд╛рд░ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдЗрдирд╛рдо рдореЗрдВ рдореЙрдбрд▓ рдЕрднрд┐рд╕рд░рдг рдХреА рджрд░ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИред

рдЕрдВрддрднрд╛рд╖рдг


рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдЙрдиреНрдореБрдЦ рднреНрд░рдордг рдХреЛ рдкреНрд░рдмрд▓рд┐рдд рд╢рд┐рдХреНрд╖рд╛ рдореЗрдВ рдЖрдирдВрдж рд▓рд┐рдпрд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдорд╛рдЙрдВрдЯреЗрди рдХрд╛рд░ рдПрдХ "рдЦрд┐рд▓реМрдирд╛" рдХрд╛рд░реНрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдзреНрдпрд╛рди рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рдПрдХ рдПрдЬреЗрдВрдЯ рдХреЛ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╡ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рднреА рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi444428/


All Articles