рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкрд╛рдЗрдЯреЛрд░ рдФрд░ рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рднрд░ рдореЗрдВ рдЕрдВрдХ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

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



рдХрд╛рд░реНрдп рдХрд╣рд╛рдВ рд╕реЗ рд╣реИ


рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ (рд╕реА) рдмреЗрдирд╛рдореА рдбреЗрдЯрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ

рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдХреЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, "рд░реЗрдХ рдирдВрдмрд░ 6" рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ, рд╣рдордиреЗ DSSM рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬреЛ рдЖрдкрдХреЛ рдкрд╛рда рдХреЛ рд╡реИрдХреНрдЯрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд░реИрдЦрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЧреБрдгрд╛рдВрдХреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЬрдЯрд┐рд▓ рдЬрдЯрд┐рд▓ рдиреБрдХрд╕рд╛рди рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдореЙрдбрд▓ рдХреЛ рд╕реАрдЦрдирд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдордЭрдирд╛ рд╡реИрдХреНрдЯрд░ рдХреА рдмрдбрд╝реА рдЖрдпрд╛рдореАрддрд╛ рдХреЗ рдХрд╛рд░рдг рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдПрдХ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрдкрдХреЛ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐ рдЪреБрдирдиреЗ рдФрд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рд╡реИрдХреНрдЯрд░ рд╣рдорд╛рд░реЗ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╣реИрдВ, рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЦреАрдВрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдФрд░ рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдиреЗ рдФрд░ рдЗрдХрд╛рдИ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЖрдХрд░реНрд╖рдг рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрд╖реЗрддреНрд░ рдкрд░ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рд╣реЛрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдЖрдВрдЦ рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред


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


рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдПрди рдХрд╛рд░реНрдп рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ n=8 , рд╣рдо рдШрди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдХреЛрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗред рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рднреА рд╣реИрдВ рдЕрдЧрд░ рдПрди icosahedron, dodecahedron, рдпрд╛ рдЕрдиреНрдп рдкреНрд▓реЗрдЯреЛрдирд┐рдХ рдареЛрд╕ рдХреЗ рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдХрд╛рд░реНрдп рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред


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


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


рдпрд╣ рдХрд╛рд░реНрдп рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ (рдПрдордПрд▓) рдореЙрдбрд▓ рдХреА рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХрд╛рдлреА рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдбреЗрдЯрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЖрдорддреМрд░ рдкрд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдПрдХрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреИрд╕реЗ рдШрдЯрддреА рд╣реИ, рдФрд░ рд╣рдо рддрд╕реНрд╡реАрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХреНрдпреВрдм рдХреЗ рдЕрдВрджрд░ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рд╕рд╛рдЗрдб 1 рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЧреЛрд▓рд╛рдХрд╛рд░ рдХреА рд╕рддрд╣ рдХреЗ рд╕рд╛рде рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:



рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреАрди-рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдерд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ X ред рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдПрд▓ рдХрд╛ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп, рдЧреЛрд▓реЗ рдХреЗ рдКрдкрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдПрдХ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред pytorch рдФрд░ tensorflow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ X рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреНрдпреВрдирддрдо рдкрд░ рдЬрд╛рдПрдВ: SGD, ADAM, ADAGRAD, рдЖрджрд┐ред



рд╣рдо рдХреНрд╖рдорддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ


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


рд╣рдо 1 рдХреЗ рд╕рд╛рде рдШрди рдореЗрдВ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рддрд┐рддрд░ рдмрд┐рддрд░ рдЕрдВрдХред рд╣рдореЗрдВ 500 рдЕрдВрдХ рд╣реИ, рдФрд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрд╕реНрдЯреИрдЯрд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓реЛрдЪрджрд╛рд░ рдмрд╛рддрдЪреАрдд 1000 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:


 import numpy as np n = 500 k = 1000 X = np.random.rand(n, 3) 

рдЗрд╕ рдХреЛрдб рдиреЗ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ X рдЖрдХрд╛рд░ 3 nn 0 рд╕реЗ 1 рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рднрд░рд╛:



рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдФрд░ рддреАрди рдХреЙрд▓рдо рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ x,y,z рд╣рдорд╛рд░реЗ рд╕рднреА рдмрд┐рдВрджреБред


рдПрдХ рдЗрдХрд╛рдИ рдХреА рд╕рддрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓реЛрдЪрджрд╛рд░ рд╕рдВрдкрд░реНрдХ рдХреА рдХреНрд╖рдорддрд╛ u1=k cdot(1тИТr)2/2 ред рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрд╕реНрдЯреИрдЯрд┐рдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдХреНрд╖рдорддрд╛ рдкреА рдФрд░ q - u2=1/|rpтИТrq| ред рдкреВрд░реА рдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрд╕реНрдЯреИрдЯрд┐рдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓реЛрдЪрджрд╛рд░ рд╕рдВрдкрд░реНрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рддрд╣ рдХреЗ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВ:


U (x_1, ..., x_n) = \ рдпреЛрдЧ \ рд╕реАрдорд╛рдПрдВ _ {p = 1} ^ {n - 1} \ рдпреЛрдЧ \ рд╕реАрдорд╛рдПрдВ _ {q = p + 1} ^ {n} \ frac 1 {\ рдмрд╛рдИрдВ рдУрд░ | \ vec {x_p} - \ vec {x_q} \ right | } + k \ cdot \ рдпреЛрдЧ \ рд╕реАрдорд╛рдПрдБ _ {p = 1} ^ n \ left (1 - | \ vec {__p} | \ right) ^ 2 \ rightarrow \ min


рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:


 L_for = 0 L_for_inv = 0 L_for_sq = 0 for p in range(n): p_distance = 0 for i in range(3): p_distance += x[p, i]**2 p_distance = math.sqrt(p_distance) L_for_sq += k * (1 - p_distance)**2 #     ,     for q in range(p + 1, n): if q != p: pq_distance = 0 for i in range(3): pq_distance += (x[p, i] - x[q, i]) ** 2 pq_distance = math.sqrt(pq_distance) L_for_inv += 1 / pq_distance #      L_for = (L_for_inv + L_for_sq) / n print('loss =', L_for) 

рд▓реЗрдХрд┐рди рдереЛрдбрд╝реА рдкрд░реЗрд╢рд╛рдиреА рд╣реИред рдПрдХ рджрдпрдиреАрдп 2000 рдЕрдВрдХ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо 2 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЪрд▓реЗрдЧрд╛ред рдпрджрд┐ рд╣рдо рдЗрд╕ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рд╡реЗрдХреНрдЯрд░рдХреГрдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реЗрдВрдЧреЗ рддреЛ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ред рддреНрд╡рд░рдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛрдиреЛрдВ "рдлрд╛рд╕реНрдЯ" рднрд╛рд╖рд╛рдУрдВ рдлреЛрд░рдЯреНрд░рд╛рди рдФрд░ рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗрдХреНрдЯрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛ рдПрдХ рдШрдбрд╝реА рдЪрдХреНрд░ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдЖрдЗрдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреЗрдЦреЗрдВ S=X cdotXT ред рдЗрд╕рдореЗрдВ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдЧреБрдг рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рдпрд╣ рдПрдордПрд▓ рдореЗрдВ рд░реИрдЦрд┐рдХ рдХреНрд▓рд╛рд╕рдлрд╛рдпрд░ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧрдгрдирд╛рдУрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ, рдЕрдЧрд░ рд╣рдо рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдкрдВрдХреНрддрд┐ рдореЗрдВ X рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреА рдФрд░ q рддреАрди рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рд╡реИрдХреНрдЯрд░ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ  vecrp, vecrq рдлрд┐рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрд╕ рдЗрди рд╡реИрдХреНрдЯрд░ рдХреЗ рдЕрджрд┐рд╢ рдЙрддреНрдкрд╛рджреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдиреЗрдЧрд╛ред рдРрд╕реЗ рд╡реИрдХреНрдЯрд░ рдПрди рдЯреБрдХрдбрд╝реЗ, рдлрд┐рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЖрдпрд╛рдо рдПрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ n nn ред



рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╡рд┐рдХрд░реНрдг рдкрд░ рдПрд╕ рд╡реИрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╡рд░реНрдЧ рдЦрдбрд╝реЗ рд╣реЛ рдЬрд╛рдУ  vecrp:spp=r2p ред рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП, рдЪрд▓реЛ рдмрд╛рддрдЪреАрдд рдХреА рдкреВрд░реА рдХреНрд╖рдорддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╣рдо рджреЛ рд╕рд╣рд╛рдпрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рдХрд░реНрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдПрд╕ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рджреВрд╕рд░реЗ рдореЗрдВ - рдХреЙрд▓рдо рдореЗрдВред



рдЕрдм рдЖрдЗрдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ p_roll + q_roll - 2 * S



рдЕрдиреБрдХреНрд░рдорд┐рдд рд╡рд╕реНрддреБ (p,q) рдореИрдЯреНрд░рд┐рдХреНрд╕ sq_dist рдмрд░рд╛рдмрд░ рд╣реИ r2p+r2qтИТ2 cdot( vecrp, vecrq)=((vecrpтИТ vecrq)тИТ2 ред рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рджреВрд░рд┐рдпреЛрдВ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИред


рдПрдХ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд░рддрд┐рдХрд░реНрд╖рдг


dist = np.sqrt(sq_dist) - рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ред рд╣рдореЗрдВ рдЕрдкрдиреЗ рдФрд░ рдЖрдХрд░реНрд╖рдг рдХреЗ рдмреАрдЪ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдкреНрд░рддрд┐рдХрд░реНрд╖рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдХреНрд╖рдорддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рд╡рд┐рдХрд░реНрдг рдкрд░ рд░рдЦреЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдЗрд╕рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо рд╕реЗ рдмрджрд▓реЗрдВ (рдмрд╕ рдпрд╣ рдордд рд╕реЛрдЪреЛ рдХрд┐ рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ rec_dist_one = 1 / (dist + np.eye(n)) !): rec_dist_one = 1 / (dist + np.eye(n)) ред рдкрд░рд┐рдгрд╛рдо рд╡рд┐рдХрд░реНрдг рдкрд░ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрдХрд╛рдЗрдпрд╛рдВ рд╣реИрдВ, рдЕрдиреНрдп рддрддреНрд╡ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрд╕реНрдЯреИрдЯрд┐рдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдХреНрд╖рдорддрд╛ рд╣реИрдВред


рдЕрдм рд╣рдо рдЗрдХрд╛рдИ рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рддрд╣ рдкрд░ рдЖрдХрд░реНрд╖рдг рдХреА рджреНрд╡рд┐рдШрд╛рддреАрдп рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЧреЛрд▓реЗ рдХреА рд╕рддрд╣ рд╕реЗ рджреВрд░реА (1тИТr) ред рдЗрд╕реЗ рд╕реНрдХреНрд╡рд╛рдпрд░ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░реЗрдВ k , рдЬреЛ рдХрдгреЛрдВ рдХреЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд░рддрд┐рдХрд░реНрд╖рдг рдХреА рднреВрдорд┐рдХрд╛ рдФрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдХрд░реНрд╖рдг рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреБрд▓ k = 1000 , all_interactions = rec_dist_one - torch.eye(n) + (d.sqrt() - torch.ones(n))**2 ред рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди, рдЬрд┐рд╕реЗ рд╣рдо рдиреНрдпреВрдирддрдо рдХрд░реЗрдВрдЧреЗ: t = all_interactions.sum()


рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ:


 S = X.dot(XT) #    pp_sq_dist = np.diag(S) #  p_roll = pp_sq_dist.reshape(1, -1).repeat(n, axis=0) #     q_roll = pp_sq_dist.reshape(-1, 1).repeat(n, axis=1) #     pq_sq_dist = p_roll + q_roll - 2 * S #      pq_dist = np.sqrt(pq_sq_dist) #    pp_dist = np.sqrt(pp_sq_dist) #      surface_dist_sq = (pp_dist - np.ones(n)) ** 2 #       rec_pq_dist = 1 / (pq_dist + np.eye(n)) - np.eye(n) #      L_np_rec = rec_pq_dist.sum() / 2 #     L_np_surf = k * surface_dist_sq.sum() #       L_np = (L_np_rec + L_np_surf) / n #   ,     print('loss =', L_np) 

рдпрд╣рд╛рдВ 2000 рд╕реЗ 200 рдЕрдВрдХреЛрдВ рдореЗрдВ рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдмреЗрд╣рддрд░ рд╣реИрдВред


рд╣рдо pytorch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 import torch pt_x = torch.from_numpy(X) # pt_x -   tensor   pytorch pt_S = pt_x.mm(pt_x.transpose(0, 1)) # mm - matrix multiplication pt_pp_sq_dist = pt_S.diag() pt_p_roll = pt_pp_sq_dist.repeat(n, 1) pt_q_roll = pt_pp_sq_dist.reshape(-1, 1).repeat(1, n) pt_pq_sq_dist = pt_p_roll + pt_q_roll - 2 * pt_S pt_pq_dist = pt_pq_sq_dist.sqrt() pt_pp_dist = pt_pp_sq_dist.sqrt() pt_surface_dist_sq = (pt_pp_dist - torch.ones(n, dtype=torch.float64)) ** 2 pt_rec_pq_dist = 1/ (pt_pq_dist + torch.eye(n, dtype=torch.float64)) - torch.eye(n, dtype=torch.float64) L_pt = (pt_rec_pq_dist.sum() / 2 + k * pt_surface_dist_sq.sum()) / n print('loss =', float(L_pt)) 

рдФрд░ рдЕрдВрдд рдореЗрдВ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ:


 import tensorflow as tf tf_x = tf.placeholder(name='x', dtype=tf.float64) tf_S = tf.matmul(tf_x, tf.transpose(tf_x)) tf_pp_sq_dist = tf.diag_part(tf_S) tf_p_roll = tf.tile(tf.reshape(tf_pp_sq_dist, (1, -1)), (n, 1)) tf_q_roll = tf.tile(tf.reshape(tf_pp_sq_dist, (-1, 1)), (1, n)) tf_pq_sq_dist = tf_p_roll + tf_q_roll - 2 * tf_S tf_pq_dist = tf.sqrt(tf_pq_sq_dist) tf_pp_dist = tf.sqrt(tf_pp_sq_dist) tf_surface_dist_sq = (tf_pp_dist - tf.ones(n, dtype=tf.float64)) ** 2 tf_rec_pq_dist = 1 / (tf_pq_dist + tf.eye(n, dtype=tf.float64)) - tf.eye(n, dtype=tf.float64) L_tf = (tf.reduce_sum(tf_rec_pq_dist) / 2 + k * tf.reduce_sum(tf_surface_dist_sq)) / n glob_init = tf.local_variables_initializer() #     with tf.Session() as tf_s: #     glob_init.run() #   res, = tf_s.run([L_tf], feed_dict={tf_x: x}) #   print(res) 

рдЗрди рддреАрди рддрд░реАрдХреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:


рдПрдирдЕрдЬрдЧрд░numpypytorchtensorflow
20004.030.0831.110.205
10000992.822.187.9

рд╡реЗрдХреНрдЯрд░ рдХреА рдЧрдИ рдЧрдгрдирд╛ рд╢реБрджреНрдз рдЕрдЬрдЧрд░ рдХреЛрдб рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдбреЗрдврд╝ рджрд╢рдорд▓рд╡ рд╕реЗ рдЕрдзрд┐рдХ рдСрд░реНрдбрд░ рдХрд╛ рд▓рд╛рдн рджреЗрддреА рд╣реИред рдкрд╛рдЗрд░реЙрдЪ рдореЗрдВ "рдмреЙрдпрд▓рд░ рдкреНрд▓реЗрдЯ" рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ: рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрдгрдирд╛ рдХреА рдмрдврд╝рддреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рд▓рдЧрднрдЧ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред


рджреГрд╢реНрдп


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


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



рдЪрд┐рддреНрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 import vapory from PIL import Image def create_scene(moment): angle = 2 * math.pi * moment / 360 r_camera = 7 camera = vapory.Camera('location', [r_camera * math.cos(angle), 1.5, r_camera * math.sin(angle)], 'look_at', [0, 0, 0], 'angle', 30) light1 = vapory.LightSource([2, 4, -3], 'color', [1, 1, 1]) light2 = vapory.LightSource([2, 4, 3], 'color', [1, 1, 1]) plane = vapory.Plane([0, 1, 0], -1, vapory.Pigment('color', [1, 1, 1])) box = vapory.Box([0, 0, 0], [1, 1, 1], vapory.Pigment('Col_Glass_Clear'), vapory.Finish('F_Glass9'), vapory.Interior('I_Glass1')) spheres = [vapory.Sphere( [float(r[0]), float(r[1]), float(r[2])], 0.05, vapory.Texture(vapory.Pigment('color', [1, 1, 0]))) for r in x] return vapory.Scene(camera, objects=[light1, light2, plane, box] + spheres, included=['glass.inc']) for t in range(0, 360): flnm = 'out/sphere_{:03}.png'.format(t) scene = create_scene(t) scene.render(flnm, width=800, height=600, remove_temp=False) clear_output() display(Image.open(flnm)) 

рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рд╕реЗ, рдПрдирд┐рдореЗрдЯреЗрдб GIF рдХреЛ ImageMagic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 convert -delay 10 -loop 0 sphere_*.png sphere_all.gif 

рдЧрд┐рддреБрдм рдкрд░ рдЖрдк рдХрд╛рд░реНрдп рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЯреБрдХрдбрд╝реЗ рдпрд╣рд╛рдБ рджрд┐рдП рдЧрдП рд╣реИрдВред рджреВрд╕рд░реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рдХреИрд╕реЗ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЕрдВрдХ рдШрди рд╕реЗ рдмрд╛рд╣рд░ рдЖрдПрдВ рдФрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдлреИрд▓ рдЬрд╛рдПрдВред

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


All Articles