
рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд▓реЛрдЧ OpenAI рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдПрд▓реЛрди рдорд╕реНрдХ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
OpenAI рдЬрд┐рдо рдордВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЬрд┐рдо рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕рдореВрд╣ рд╣реЛрддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рднреМрддрд┐рдХ рд╕рд┐рдореБрд▓реЗрд╢рди рд╣реИрдВ: рдЬрд╛рдирд╡рд░реЛрдВ, рдордиреБрд╖реНрдпреЛрдВ,
рд░реЛрдмреЛрдЯреЛрдВ рдХреЗ рдЖрдВрджреЛрд▓рдиреЛрдВред рдпреЗ рд╕рд┐рдореБрд▓реЗрд╢рди
MuJoCo рднреМрддрд┐рдХреА рдЗрдВрдЬрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ, рдЬреЛ рд╢реИрдХреНрд╖рд┐рдХ рдФрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред
рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ, рд╣рдо OpenAI рдЬрд┐рдо рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рдорд╛рди рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╢рд╛рд░реАрд░рд┐рдХ рд╕рд┐рдореБрд▓реЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдХреНрдд рднреМрддрд┐рдХреА рдЗрдВрдЬрди рдмреБрд▓реЗрдЯ (
PyBullet ) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдФрд░ рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдЬреЗрдВрдЯ рднреА рдмрдирд╛рдПрдВред
PyBullet
рдмреБрд▓реЗрдЯ рднреМрддрд┐рдХреА рднреМрддрд┐рдХреА рдЗрдВрдЬрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рднреМрддрд┐рдХ рд╕рд┐рдореБрд▓реЗрд╢рди рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЬрдЧрд░ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдпрд╣, рдореНрдпреВрдЬреЛрдХреЛ рдХреА рддрд░рд╣, рдЕрдХреНрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рд░реЛрдмреЛрдЯреЛрдВ рдХреА рдЙрддреНрддреЗрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдмреНрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде
рдПрдХ рд▓реЗрдЦ рд╣реИ ред
PyBullet рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛
QuickStartGuide рд╣реИ рдЬрд┐рд╕рдореЗрдВ
GitHub рдХреЗ рд╕реНрд░реЛрдд рдкреГрд╖реНрда рдкрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВред
PyBullet рдЖрдкрдХреЛ URDF, SDF рдпрд╛ MJCF рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдЗрди рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ
рдореЙрдбрд▓реЛрдВ рдХрд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рд╕рд╛рде рд╣реА
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реЛрдмреЛрдЯреЛрдВ рдХреЗ рд╕рд┐рдореБрд▓реЗрдЯрд░ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рднреА рд╣реИрдВ
редрд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реНрд╡рдпрдВ PyBullet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдПрдВрдЧреЗред рдкрд░реНрдпрд╛рд╡рд░рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ OpenAI рдЬрд┐рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ
рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╣рдо рдЕрдкрдиреЗ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдкрд░рд┐рд╡реЗрд╢ рдФрд░ рдЬрд┐рдо рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рднреА рдХреЛрдб (iPython), рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╕рдВрдЪрд╛рд▓рди
Google Colaboratory рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░реНрдпрд╛рд╡рд░рдг (рдкрд░реНрдпрд╛рд╡рд░рдг)
рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рдЧреЗрдВрдж рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреА рд╣реИред рдЧреЗрдВрдж рдореЗрдВ рджреНрд░рд╡реНрдпрдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдЗрд╕ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдЬреЗрдВрдЯ рдХреЛ рдЧреЗрдВрдж рдкрд░ рд▓рд╛рдЧреВ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдмрд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕реЗ рд▓рдХреНрд╖реНрдп рддрдХ рд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреБрднрд╡ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рд╕рд╛рде рд▓рдХреНрд╖реНрдп рдКрдВрдЪрд╛рдИ рдмрджрд▓рддреА рд╣реИред

рд╕рд┐рдореБрд▓реЗрд╢рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡рдХ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 3 рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд░реАрд╕реЗрдЯ (рдкреНрд░рдпреЛрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛),
рдЪрд░рдг (рдЪрдпрдирд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рдкрд░рд┐рдгрд╛рдореА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛),
рд░реЗрдВрдбрд░ (рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рди)ред
рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдЖрд░рдВрдн рдХрд░рддреЗ рд╕рдордп, рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреЛ рднреМрддрд┐рдХ рдЕрдиреБрдХрд░рдг рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред 2 рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (GUI) рдФрд░ рдмрд┐рдирд╛ (DIRECT) рдХреЗ рд╕рд╛рдеред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ DIRECT рд╣реИред
pb.connect(pb.DIRECT)
рд░реАрд╕реЗрдЯ
рдкреНрд░рддреНрдпреЗрдХ рдирдП рдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рд╛рде, рд╣рдо
pb.resetSimulation () рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдкрд░реНрдпрд╛рд╡рд░рдг рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред
PyBullet рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ 2 рдЖрдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ: рдПрдХ рдЯрдХрд░рд╛рд╡ рдХрд╛
рдЖрдХрд╛рд░ , рдФрд░ рдПрдХ
рджреГрд╢реНрдп рдЖрдХрд╛рд░ ред рдкрд╣рд▓реЗ рднреМрддрд┐рдХ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЯрдХрд░рд╛рд╡ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреМрддрд┐рдХреА рдХреА рдЧрдгрдирд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд░реВрдк рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдлреЙрд░реНрдо рдПрдХ рд╣реА рд╡рд╕реНрддреБ (рдирд┐рдХрд╛рдп) рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ -
рдорд▓реНрдЯреАрдмреЙрдбреА ред рдПрдХ рд╢рд░реАрд░ рдПрдХ рдЖрдХреГрддрд┐ (
рдХреЛрд▓рд┐рд╢рди рд╢реЗрдк / рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╢реЗрдк рдкреЗрдпрд░) рд╕реЗ рдмрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╛ рдХрдИред
рд╢рд░реАрд░ рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд░реВрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдЗрд╕рдХреЗ рджреНрд░рд╡реНрдпрдорд╛рди, рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдмрд╣реБ-рд╡рд╕реНрддреБ рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджредрдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рд░реВрдкреЛрдВ рд╡рд╛рд▓реЗ рдирд┐рдХрд╛рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд░реАрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдЯрдХрд░рд╛рд╡реЛрдВ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдореВрд▓ рд░реВрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢рд░реАрд░ рдХреЛ рдмрд╛рд▓ рд╡рд╕реНрддреБрдУрдВ (
рд▓рд┐рдВрдХ ) рдХреЗ рд░реВрдкреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛, рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдкрд┐рдЫрд▓реА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕реНрд╡рдпрдВ (
рд╕рдВрдпреБрдХреНрдд ) рдХреЗ рдмреАрдЪ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХрдиреЗрдХреНрд╢рди (рдЬреЛрдбрд╝реЛрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рддрдп рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рд┐рдЬреНрдореАрдп (рдПрдХ рд╣реА рдЕрдХреНрд╖ рдкрд░ рдлрд┐рд╕рд▓рдиреЗ) рдпрд╛ рдШреВрд░реНрдгреА (рдПрдХ рдЕрдХреНрд╖ рдкрд░ рдШреВрдордирд╛)ред рдЕрдВрддрд┐рдо 2 рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЛрдЯрд░реНрд╕ (
JointMotor ) рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЕрднрд┐рдирдп рдмрд▓, рдЧрддрд┐ рдпрд╛ рдЯреЛрдХрд╝, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд░реЛрдмреЛрдЯ рдХреЗ "рдЬреЛрдбрд╝реЛрдВ" рдХреА рдореЛрдЯрд░реЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ред
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАред
рд╣рдо 3 рдмреЙрдбреА рдмрдирд╛рдПрдВрдЧреЗ: рдмреЙрд▓, рдкреНрд▓реЗрди (рдЕрд░реНрде) рдФрд░ рдЯрд╛рд░реНрдЧреЗрдЯ рдкреЙрдЗрдВрдЯрд░ред рдЕрдВрддрд┐рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рджреГрд╢реНрдп рд░реВрдк рдФрд░ рд╢реВрдиреНрдп рджреНрд░рд╡реНрдпрдорд╛рди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рдмреАрдЪ рднреМрддрд┐рдХ рдмрд╛рддрдЪреАрдд рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрдЧрд╛:
рд╕рд┐рдореБрд▓реЗрд╢рди рдХрджрдо рдХреЗ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдФрд░ рд╕рдордп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
pb.setGravity(0,0,-10) pb.setTimeStep(1./60)
рд╕рд┐рдореБрд▓реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЧреЗрдВрдж рдХреЛ рдЧрд┐рд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
pb_force = 10 * PB_BallMass pb.applyExternalForce(pb_ballId, -1, [0,0,pb_force], [0,0,0], pb.LINK_FRAME)
рдХрджрдо
рдПрдЬреЗрдВрдЯ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд╣
рдЪрд░рдг рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
2 рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЧреЗрдВрдж рдкрд░ рдЕрднрд┐рдирдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд▓ рдХреА рд╡реГрджреНрдзрд┐ рдФрд░ рдХрдореАред рдмрд▓ рдХреА рд╕реАрдорд╛рдПрдБ рд╕реАрдорд┐рдд рд╣реИрдВред
рдЧреЗрдВрдж рдкрд░ рдЕрднрд┐рдирдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рднреМрддрд┐рдХ рд╕рд┐рдореБрд▓реЗрд╢рди
pb.stepSimulation () рдХрд╛ рдПрдХ рдирдпрд╛ рдЪрд░рдг
рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдирд┐рдореНрди рдкреИрд░рд╛рдореАрдЯрд░ рдПрдЬреЗрдВрдЯ рдХреЛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
рдЕрд╡рд▓реЛрдХрди - рдЕрд╡рд▓реЛрдХрди (рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд┐рддрд┐)
рдЗрдирд╛рдо - рд╕рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЗрдирд╛рдо
рдХрд┐рдпрд╛ - рдЕрдиреБрднрд╡ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЭрдВрдбрд╛
рдЬрд╛рдирдХрд╛рд░реА - рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА
рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, 3 рдорд╛рди рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ: рд▓рдХреНрд╖реНрдп рддрдХ рдХреА рджреВрд░реА, рдЧреЗрдВрдж рдкрд░ рд▓рд╛рдЧреВ рд╡рд░реНрддрдорд╛рди рдмрд▓ рдФрд░ рдЧреЗрдВрдж рдХреА рдЧрддрд┐ред рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (0..1), рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдорд╛рд░реА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЗрдирд╛рдо 1 рд╣реИ рдпрджрд┐ рдЧреЗрдВрдж рд▓рдХреНрд╖реНрдп рдХреЗ рдХрд░реАрдм рд╣реИ (рд▓рдХреНрд╖реНрдп рдКрдВрдЪрд╛рдИ рдкреНрд▓рд╕ / рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реЛрд▓рд┐рдВрдЧ рд╡реИрд▓реНрдпреВ
TARGET_DELTA ) рдФрд░ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ 0ред
рдкреНрд░рдпреЛрдЧ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЧреЗрдВрдж рдЬрд╝реЛрди рдХреЗ рдмрд╛рд╣рд░ рдЬрд╛рддреА рд╣реИ (рдЬрдореАрди рдкрд░ рдЧрд┐рд░рддреА рд╣реИ рдпрд╛ рдКрдВрдЪреА рдЙрдбрд╝рд╛рди рднрд░рддреА рд╣реИ)ред рдпрджрд┐ рдЧреЗрдВрдж рд▓рдХреНрд╖реНрдп рддрдХ рдкрд╣реБрдБрдЪ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреНрд░рдпреЛрдЧ рднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рдмрд╛рдж (
STEPS_AFTER_TARGET рдЪрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЛ рди рдХреЗрд╡рд▓ рд▓рдХреНрд╖реНрдп рдХреА рдУрд░ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдХрд░реАрдм рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЬрдм рдЖрдк рд▓рдХреНрд╖реНрдп рдХреЗ рдХрд░реАрдм рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЗрдирд╛рдо 1 рд╣реЛрддрд╛ рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлрд▓ рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП
STEPS_AFTER_TARGET рдХреЗ рдмрд░рд╛рдмрд░ рдХреБрд▓ рдЗрдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░рдпреЛрдЧ рдХреЗ рднреАрддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛, рд╕рд╛рде рд╣реА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред
рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛
PyBullet рдореЗрдВ 2 рдЗрдореЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - OpenGL рдкрд░ рдЖрдзрд╛рд░рд┐рдд GPU рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ CPU TinyRenderer рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╕реАрдкреАрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрднрд╡ рд╣реИред
рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдкреНрд░рдЬрд╛рддрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░
рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреИрдорд░реЗ рд╕реЗ рджрд┐рдП рдЧрдП рдЖрдХрд╛рд░ рдХреА
рдЖрд░рдЬреАрдмреА рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
camTargetPos = [0,0,5]
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХрддреНрд░рд┐рдд рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ani = animation.ArtistAnimation(plt.gcf(), render_imgs, interval=10, blit=True,repeat_delay=1000) display(HTML(ani.to_html5_video()))
рдПрдЬреЗрдВрдЯ
GitHub
jaara рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ рдЬрд┐рдо рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕реБрджреГрдвреАрдХрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдЬреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдЬреЗрдВрдЯ рдореЗрдВ 2 рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ:
рдореЗрдореЛрд░реА - рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЧрдарди рдХреЗ рд▓рд┐рдП рдПрдХ рднрдВрдбрд╛рд░рдг рдФрд░
рдорд╕реНрддрд┐рд╖реНрдХ рд╣реА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рдкрд░ рдХреЗрд░рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЯреЗрдВрд╕реЛрд░рдлреНрд▓реЛ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ
рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдПрдХ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реИ - 3 рдкрд░рддреЗрдВ, рдЕрд░реНрдерд╛рддреНред рдХреЗрд╡рд▓ 1 рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рддред
рдкрд╣рд▓реА рдкрд░рдд рдореЗрдВ 512 рдиреНрдпреВрд░реЙрдиреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдорд╛рдзреНрдпрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдЗрдирдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ (3 рдкреИрд░рд╛рдореАрдЯрд░: рд▓рдХреНрд╖реНрдп рд╕реЗ рджреВрд░реА, рдЧреЗрдВрдж рдХреА рдЧрддрд┐ рдФрд░ рдЧрддрд┐)ред рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рдд рдХрд╛ рдЖрдпрд╛рдо рдкрд╣рд▓реА рдкрд░рдд рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ - 512 рдиреНрдпреВрд░реЙрдиреНрд╕, рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рдд рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдкрд░рдд рдХреЗ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдЬреЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ (2 рдХреНрд░рд┐рдпрд╛рдПрдВ: рдЕрднрд┐рдирдп рдмрд▓ рдореЗрдВ рдХрдореА рдФрд░ рд╡реГрджреНрдзрд┐)ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдирдкреБрдЯ рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рджреЛ рдкрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП,
ReLU (рд░реЗрдХреНрдЯрд┐рдлрд╛рдЗрдб рд▓реАрдирд┐рдпрд░ рдпреВрдирд┐рдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдХреНрд░рд┐рдпрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдВрддрд┐рдо рдХреЗ рд▓рд┐рдП - рдПрдХ
рд▓реАрдирд┐рдпрд░ рдлрд╝рдВрдХреНрд╢рди (рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХрд╛ рдпреЛрдЧ рд╕рд░рд▓ рд╣реИ)ред
рдПрдХ рдЕрдиреБрдХреВрд▓рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд░реВрдк рдореЗрдВ,
рдПрдордПрд╕рдИ (рдорд╛рдирдХ рддреНрд░реБрдЯрд┐) -
рдЖрд░рдПрдордПрд╕рдкреНрд░реЙрдк (рд░реВрдЯ рдореАрди рд╕реНрдХреНрд╡рд╛рдпрд░ рдкреНрд░рдЪрд╛рд░)ред
model = Sequential() model.add(Dense(units=512, activation='relu', input_dim=3)) model.add(Dense(units=512, activation='relu')) model.add(Dense(units=2, activation='linear')) opt = RMSprop(lr=0.00025) model.compile(loss='mse', optimizer=opt)
рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рдореБрд▓реЗрд╢рди рд╕реНрдЯреЗрдк рдХреЗ рдмрд╛рдж, рдПрдЬреЗрдВрдЯ рдЗрд╕ рдХрджрдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рд╕реВрдЪреА
(s, r, s_) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ :
s - рдкрд┐рдЫрд▓рд╛ рдЕрд╡рд▓реЛрдХрди (рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд┐рддрд┐)
рдП - рдкреВрд░реНрдг рдХрд╛рд░реНрд░рд╡рд╛рдИ
рдЖрд░ - рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЗрдирд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ
s_ - рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж рдЕрдВрддрд┐рдо рдЕрд╡рд▓реЛрдХрди
рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдЬреЗрдВрдЯ рд╕реНрдореГрддрд┐ рд╕реЗ рдкрд┐рдЫрд▓реЗ рдЕрд╡рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреИрдХреЗрдЬ (
рдмреИрдЪ ) рдмрдирд╛рддрд╛ рд╣реИред
рдореЗрдореЛрд░реА рд╕реЗ рдЪреБрдиреЗ рдЧрдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░рдгреЛрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреИрдХреЗрдЯ рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рди (
рдПрдХреНрд╕ ) рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓рд░реНрдирд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ (
Y ' ) рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ: s рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ (
Y ) рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛
Q (s) рдХреЗ рд▓рд┐рдП
Q рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рд╣реЛрдВрдЧреЗред рдЗрд╕ рд╕реЗрдЯ рд╕реЗ, рдПрдЬреЗрдВрдЯ рдиреЗ рдЙрдЪреНрдЪрддрдо рдореВрд▓реНрдп
Q (s, a) = MAX (Q (s)) рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛, рдЙрд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░
r рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдЪрдпрдирд┐рдд рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдирдпрд╛
Q рдорд╛рди
Q (s, a) = Q (s, a) + DF * r рд╣реЛрдЧрд╛ , рдЬрд╣рд╛рдВ
DF рдЫреВрдЯ рдХрд╛рд░рдХ рд╣реИред рд╢реЗрд╖ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди рд╕рдорд╛рди рд░рд╣реЗрдВрдЧреЗред
STATE_CNT = 3 ACTION_CNT = 2 batchLen = 32
рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрдард┐рдд рдкреИрдХ рдкрд░ рд╣реЛрддрд╛ рд╣реИ
self.model.fit(x, y, batch_size=32, epochs=1, verbose=0)
рдкреНрд░рдпреЛрдЧ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдФрд░ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ

рд▓рдЧрднрдЧ 95 рдкреНрд░рддрд┐рд╢рдд рдкрд░рд┐рдгрд╛рдо (рд╕рдлрд▓ рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬреЗрдВрдЯ рдХреЛ 1,200 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдФрд░ 50 рд╡реЗрдВ рдкреНрд░рдпреЛрдЧ рд╕реЗ, рдПрдЬреЗрдВрдЯ рдиреЗ рдЧреЗрдВрдж рдХреЛ рд▓рдХреНрд╖реНрдп рдкрд░ рд▓реЗ рдЬрд╛рдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рдерд╛ (рдЕрд╕рдлрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд╛рдпрдм рд╣реЛ рдЧрдП)ред
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рддреЛрдВ (LAYER_SIZE), рдЫреВрдЯ рдХрд╛рд░рдХ (GAMMA) рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ (LAMBDA) рдХреЛ рдЪреБрдирдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдореЗрдВ рдХрдореА рдХреА рджрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реИ - DQN (рдбреАрдк рдХреНрдпреВ-рдиреЗрдЯрд╡рд░реНрдХ)ред рдРрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдкрд░, рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдбреАрдХреНрдпреВрдПрди (рдбрдмрд▓ рдбреАрдХреНрдпреВрдПрди) рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдЪрд┐рдХрдирд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ RDQN рдиреЗрдЯрд╡рд░реНрдХ (рдЖрд╡рд░реНрддрдХ DQN) рд╕рдордп рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ, рдЧреЗрдВрдж рдХреА рдЧрддрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ред
рдЖрдк рдПрдХ рдЪрд░ рдЧреЗрдВрдж рджреНрд░рд╡реНрдпрдорд╛рди рдпрд╛ рдЗрд╕рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЗ рдЭреБрдХрд╛рд╡ рдХреЗ рдХреЛрдг рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╣рдорд╛рд░реЗ рд╕рд┐рдореБрд▓реЗрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЧрд▓реА рдмрд╛рд░ рд╣реИред