PyBullet рд╕реБрджреГрдвреАрдХрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг

рдЫрд╡рд┐

рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд▓реЛрдЧ 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 рдмреЙрдбреА рдмрдирд╛рдПрдВрдЧреЗ: рдмреЙрд▓, рдкреНрд▓реЗрди (рдЕрд░реНрде) рдФрд░ рдЯрд╛рд░реНрдЧреЗрдЯ рдкреЙрдЗрдВрдЯрд░ред рдЕрдВрддрд┐рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рджреГрд╢реНрдп рд░реВрдк рдФрд░ рд╢реВрдиреНрдп рджреНрд░рд╡реНрдпрдорд╛рди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рдмреАрдЪ рднреМрддрд┐рдХ рдмрд╛рддрдЪреАрдд рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрдЧрд╛:

 #  floorColShape = pb.createCollisionShape(pb.GEOM_PLANE) #   (GEOM_PLANE), visualShape -    ,   GEOM_BOX floorVisualShapeId = pb.createVisualShape(pb.GEOM_BOX,halfExtents=[100,100,0.0001], rgbaColor=[1,1,.98,1]) pb_floorId = pb.createMultiBody(0,floorColShape,floorVisualShapeId, [0,0,0], [0,0,0,1]) #  PB_BallRadius = 0.2 PB_BallMass = 1 ballPosition = [0,0,5] ballOrientation=[0,0,0,1] ballColShape = pb.createCollisionShape(pb.GEOM_SPHERE,radius=PB_BallRadius) ballVisualShapeId = pb.createVisualShape(pb.GEOM_SPHERE,radius=PB_BallRadius, rgbaColor=[1,0.27,0,1]) pb_ballId = pb.createMultiBody(PB_BallMass, ballColShape, ballVisualShapeId, ballPosition, ballOrientation) #   TARGET_Z = 8 targetPosition = [0,0,TARGET_Z] targetOrientation=[0,0,0,1] targetVisualShapeId = pb.createVisualShape(pb.GEOM_BOX,halfExtents=[1,0.025,0.025], rgbaColor=[0,0,0,1]) pb_targetId = pb.createMultiBody(0,-1, targetVisualShapeId, targetPosition, targetOrientation) 

рд╕рд┐рдореБрд▓реЗрд╢рди рдХрджрдо рдХреЗ рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рдФрд░ рд╕рдордп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред

 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), рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдорд╛рд░реА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

 #     (     Z curPos[2]) curPos, curOrient = pb.getBasePositionAndOrientation(pb_ballId) #     (      Z lin_vel[2]) lin_vel, ang_vel= pb.getBaseVelocity(self.pb_ballId) 

рд╕рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЗрдирд╛рдо 1 рд╣реИ рдпрджрд┐ рдЧреЗрдВрдж рд▓рдХреНрд╖реНрдп рдХреЗ рдХрд░реАрдм рд╣реИ (рд▓рдХреНрд╖реНрдп рдКрдВрдЪрд╛рдИ рдкреНрд▓рд╕ / рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реЛрд▓рд┐рдВрдЧ рд╡реИрд▓реНрдпреВ TARGET_DELTA ) рдФрд░ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ 0ред
рдкреНрд░рдпреЛрдЧ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЧреЗрдВрдж рдЬрд╝реЛрди рдХреЗ рдмрд╛рд╣рд░ рдЬрд╛рддреА рд╣реИ (рдЬрдореАрди рдкрд░ рдЧрд┐рд░рддреА рд╣реИ рдпрд╛ рдКрдВрдЪреА рдЙрдбрд╝рд╛рди рднрд░рддреА рд╣реИ)ред рдпрджрд┐ рдЧреЗрдВрдж рд▓рдХреНрд╖реНрдп рддрдХ рдкрд╣реБрдБрдЪ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреНрд░рдпреЛрдЧ рднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рдмрд╛рдж ( STEPS_AFTER_TARGET рдЪрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЛ рди рдХреЗрд╡рд▓ рд▓рдХреНрд╖реНрдп рдХреА рдУрд░ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдХрд░реАрдм рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЬрдм рдЖрдк рд▓рдХреНрд╖реНрдп рдХреЗ рдХрд░реАрдм рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЗрдирд╛рдо 1 рд╣реЛрддрд╛ рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлрд▓ рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП STEPS_AFTER_TARGET рдХреЗ рдмрд░рд╛рдмрд░ рдХреБрд▓ рдЗрдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛


PyBullet рдореЗрдВ 2 рдЗрдореЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - OpenGL рдкрд░ рдЖрдзрд╛рд░рд┐рдд GPU рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ CPU TinyRenderer рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╕реАрдкреАрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрднрд╡ рд╣реИред

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

 camTargetPos = [0,0,5] #   ()  camDistance = 10 #     yaw = 0 #     pitch = 0 #     roll=0 #      upAxisIndex = 2 #    (z) fov = 60 #    nearPlane = 0.01 #      farPlane = 20 #      pixelWidth = 320 #   pixelHeight = 200 #   aspect = pixelWidth/pixelHeight; #    #   viewMatrix = pb.computeViewMatrixFromYawPitchRoll(camTargetPos, camDistance, yaw, pitch, roll, upAxisIndex) #   projectionMatrix = pb.computeProjectionMatrixFOV(fov, aspect, nearPlane, farPlane); #     img_arr = pb.getCameraImage(pixelWidth, pixelHeight, viewMatrix, projectionMatrix, shadow=0, lightDirection=[0,1,1],renderer=pb.ER_TINY_RENDERER) w=img_arr[0] #width of the image, in pixels h=img_arr[1] #height of the image, in pixels rgb=img_arr[2] #color data RGB dep=img_arr[3] #depth data 

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХрддреНрд░рд┐рдд рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 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 #     states = numpy.array([ o[0] for o in batch ]) #     states_ = numpy.array([ o[3] for o in batch ]) #     p = agent.brain.predict(states) #     p_ = agent.brain.predict(states_) #     x = numpy.zeros((batchLen, STATE_CNT)) y = numpy.zeros((batchLen, ACTION_CNT)) #   for i in range(batchLen): o = batch[i] s = o[0]; a = o[1]; r = o[2]; s_ = o[3] t = p[i] #      #      ,       t[a] = r + GAMMA * numpy.amax(p_[i]) #            #    batch x[i] = s y[i] = t #      self.brain.train(x, y) 

рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрдард┐рдд рдкреИрдХ рдкрд░ рд╣реЛрддрд╛ рд╣реИ

 self.model.fit(x, y, batch_size=32, epochs=1, verbose=0) 

рдкреНрд░рдпреЛрдЧ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рд▓рдЧрднрдЧ 95 рдкреНрд░рддрд┐рд╢рдд рдкрд░рд┐рдгрд╛рдо (рд╕рдлрд▓ рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬреЗрдВрдЯ рдХреЛ 1,200 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдФрд░ 50 рд╡реЗрдВ рдкреНрд░рдпреЛрдЧ рд╕реЗ, рдПрдЬреЗрдВрдЯ рдиреЗ рдЧреЗрдВрдж рдХреЛ рд▓рдХреНрд╖реНрдп рдкрд░ рд▓реЗ рдЬрд╛рдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рдерд╛ (рдЕрд╕рдлрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд╛рдпрдм рд╣реЛ рдЧрдП)ред

рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рддреЛрдВ (LAYER_SIZE), рдЫреВрдЯ рдХрд╛рд░рдХ (GAMMA) рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ (LAMBDA) рдХреЛ рдЪреБрдирдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдореЗрдВ рдХрдореА рдХреА рджрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реИ - DQN (рдбреАрдк рдХреНрдпреВ-рдиреЗрдЯрд╡рд░реНрдХ)ред рдРрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдкрд░, рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

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

рдЖрдк рдПрдХ рдЪрд░ рдЧреЗрдВрдж рджреНрд░рд╡реНрдпрдорд╛рди рдпрд╛ рдЗрд╕рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЗ рдЭреБрдХрд╛рд╡ рдХреЗ рдХреЛрдг рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╣рдорд╛рд░реЗ рд╕рд┐рдореБрд▓реЗрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЧрд▓реА рдмрд╛рд░ рд╣реИред

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


All Articles