{"id":416053,"date":"2024-06-30T00:43:20","date_gmt":"2024-06-30T00:43:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=416053"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-30T00:43:20","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=416053","title":{"rendered":"<span>\u0421\u0430\u043c\u043e\u043f\u0430\u0440\u043a\u0443\u044e\u0449\u0430\u044f\u0441\u044f \u0442\u0430\u0447\u043a\u0430 \u0432 500 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c \u0442\u0430\u0447\u043a\u0443 \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/blockquote>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/2d1\/cba\/4ab\/2d1cba4abc477b314b1428f66d468dba.jpeg\" width=\"1500\" height=\"629\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d1\/cba\/4ab\/2d1cba4abc477b314b1428f66d468dba.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b &#171;\u043d\u0430\u0443\u0447\u0438\u043c&#187; \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Genetic_algorithm\" rel=\"noopener noreferrer nofollow\"><strong>\u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/strong><\/a>.<\/p>\n<p><strong>\u0412 1-\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0438<\/strong>\u00a0\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0433\u0435\u043d\u043e\u043c \u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u043e, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dd8\/817\/684\/dd8817684615ef8b30e1ac149f4b4443.gif\" width=\"960\" height=\"350\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dd8\/817\/684\/dd8817684615ef8b30e1ac149f4b4443.gif\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>\u0412 \u224840-\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0438<\/strong>\u00a0\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u043f\u043e\u043d\u0435\u043c\u043d\u043e\u0433\u0443 \u043d\u0430\u0447\u043d\u0443\u0442 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435 \u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0435 \u0431\u043b\u0438\u0436\u0435 \u0438 \u0431\u043b\u0438\u0436\u0435 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443,<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ea1\/967\/9c6\/ea19679c63c90288cc755b5267ec571c.gif\" width=\"960\" height=\"350\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ea1\/967\/9c6\/ea19679c63c90288cc755b5267ec571c.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50b\/30c\/694\/50b30c69498e068ffaade89644fdb6e1.gif\" width=\"960\" height=\"337\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50b\/30c\/694\/50b30c69498e068ffaade89644fdb6e1.gif\"\/><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u0414\u0430-\u0434\u0430, \u043c\u0430\u0448\u0438\u043d\u044b \u0432\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u043f\u043e \u043f\u0443\u0442\u0438, \u0438 \u043d\u0435\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u043d\u043e \u0434\u043b\u044f \u043d\u0438\u0445 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e-\u043b\u0438\u0448\u044c 40-\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u0440\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u043d\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b \u0438 \u0434\u0430\u0439\u0442\u0435 \u043c\u0430\u0448\u0438\u043d\u0430\u043c \u043f\u043e\u0434\u0440\u0430\u0441\u0442\u0438 \ud83d\ude00<\/p>\n<\/blockquote>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ?\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0421\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=evolution#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u0430\u0448\u0438\u043d \u0441 \u043d\u0443\u043b\u044f<\/strong><\/a>\u00a0\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=automatic#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u043f\u0430\u0440\u043a\u0443\u044e\u0442\u0441\u044f \u0443\u0436\u0435 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e<\/strong><\/a><\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=manual#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/strong><\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0430 TypeScript. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043d\u043e \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u0432\u00a0<a href=\"https:\/\/github.com\/trekhleb\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430<\/strong><\/a>.<\/p>\n<blockquote>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0448\u0438\u043d \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u043d\u0438 \u0432 \u043a\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u043a \u043d\u0435\u043c\u0443.<\/p>\n<\/blockquote>\n<p>\u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0434\u0435\u0442\u0430\u043b\u044f\u043c&#8230;<\/p>\n<h3>\u041f\u043b\u0430\u043d<\/h3>\n<p>\u0428\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043c\u044b \u0441\u0432\u0435\u0434\u0435\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 180-\u0438 \u043d\u0443\u043b\u0435\u0439 \u0438 \u0435\u0434\u0438\u043d\u0438\u0446 (\u043a \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u043e\u043c\u0430).<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<ol>\n<li>\n<p>?? \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435\u00a0<strong>\u043c\u044b\u0448\u0446\u044b<\/strong>\u00a0(\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c, \u0440\u0443\u043b\u044c), \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>? \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435\u00a0<strong>\u0433\u043b\u0430\u0437\u0430<\/strong>\u00a0(\u0441\u0435\u043d\u0441\u043e\u0440\u044b), \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0448\u0438\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u043e\u043a\u0440\u0443\u0433.<\/p>\n<\/li>\n<li>\n<p>? \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435\u00a0<strong>\u043c\u043e\u0437\u0433<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0448\u0438\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u044b\u0448\u0446\u044b (\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u0430\u0448\u0438\u043d\u0430 \u0432\u0438\u0434\u0438\u0442 (\u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u043d\u0441\u043e\u0440\u044b). \u041c\u043e\u0437\u0433 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439\u00a0<code>movements = f(sensors)<\/code>.<\/p>\n<\/li>\n<li>\n<p>?\u00a0<strong>\u0420\u0430\u0437\u043e\u0432\u044c\u0435\u043c \u043c\u043e\u0437\u0433<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u041f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u0437\u0430 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0437\u0433\u0430\u00a0<code>movements = f(sensors)<\/code>\u00a0\u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0442\u044c \u0430\u0432\u0442\u043e \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0414\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u044b\u0448\u0446\u044b<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f, \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u00ab\u043c\u0443\u0441\u043a\u0443\u043b\u044b\u00bb. \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043c\u044b\u0448\u0446:<\/p>\n<ol>\n<li>\n<p><strong>\u041c\u044b\u0448\u0446\u0430-\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c<\/strong>\u00a0&#8212; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0435 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f\u00a0<em>\u2193 \u043d\u0430\u0437\u0430\u0434<\/em>,\u00a0<em>\u2191 \u0432\u043f\u0435\u0440\u0435\u0434<\/em>\u00a0\u0438\u043b\u0438\u00a0<em>\u25ce \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435<\/em>\u00a0(\u043d\u0435\u0439\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430)<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u044b\u0448\u0446\u0430-\u0440\u0443\u043b\u044c<\/strong>\u00a0&#8212; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0435 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u00a0<em>\u2190 \u0432\u043b\u0435\u0432\u043e<\/em>,\u00a0<em>\u2192 \u0432\u043f\u0440\u0430\u0432\u043e<\/em>\u00a0\u0438\u043b\u0438\u00a0<em>\u25ce \u0435\u0445\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043c\u044b\u0448\u0446 \u043c\u0430\u0448\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/94e\/488\/e3e\/94e488e3e0599949d843b4b1f22aae3c.gif\" width=\"960\" height=\"328\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/94e\/488\/e3e\/94e488e3e0599949d843b4b1f22aae3c.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b\u0448\u0446\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u043c\u043e\u0437\u0433\u0430 \u043a\u0430\u0436\u0434\u044b\u0435 100 \u043c\u0441 (\u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434). \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043c\u043e\u0437\u0433\u0430 \u043c\u044b\u0448\u0446\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u00ab\u043c\u043e\u0437\u0433\u043e\u0432\u0443\u044e\u00bb \u0447\u0430\u0441\u0442\u044c \u043d\u0438\u0436\u0435, \u0430 \u043f\u043e\u043a\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448 \u043c\u043e\u0437\u0433 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 3 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u044b\u0448\u0446\u0435:\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>+1<\/code>.<\/p>\n<pre><code class=\"javascript\">type MuscleSignal = -1 | 0 | 1;<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0437\u0433 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c\u00a0<code>+1<\/code>\u00a0\u0432 \u043c\u044b\u0448\u0446\u0443 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f, \u0438 \u043e\u043d \u043d\u0430\u0447\u043d\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434. \u0421\u0438\u0433\u043d\u0430\u043b\u00a0<code>-1<\/code>\u00a0\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0430\u0437\u0430\u0434. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0435\u0441\u043b\u0438 \u043c\u043e\u0437\u0433 \u043f\u043e\u0448\u043b\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u00a0<code>-1<\/code>\u00a0\u0432 \u043c\u044b\u0448\u0446\u0443 \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u043d \u043f\u043e\u0432\u0435\u0440\u043d\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0443 \u0432\u043b\u0435\u0432\u043e \u0438 \u0442.\u0434.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043c\u043e\u0437\u0433\u0430 \u0441\u043e\u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u043c\u044b\u0448\u0446:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/62d\/cd1\/5bc\/62dcd15bce49dd45cc5e813d539221d1.png\" width=\"1500\" height=\"204\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/62d\/cd1\/5bc\/62dcd15bce49dd45cc5e813d539221d1.png\"\/><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=manual#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>\u00a0\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043c\u0443\u0441\u043a\u0443\u043b\u044b \u043c\u0430\u0448\u0438\u043d\u044b. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u0442\u0435 \u043e\u0434\u043d\u0443 \u0438\u0437 \u043a\u043b\u0430\u0432\u0438\u0448 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b\u00a0<code>WASD<\/code>\u00a0(\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a), \u0432\u044b \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0435 \u044d\u0442\u0438\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>+1<\/code>\u00a0\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044e \u0438 \u043c\u044b\u0448\u0446\u0430\u043c \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/blockquote>\n<h3>\u0414\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u0435 \u0433\u043b\u0430\u0437\u0430<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0432\u043e\u0438 \u043c\u044b\u0448\u0446\u044b, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u00ab\u0432\u0438\u0434\u0435\u0442\u044c\u00bb \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0443\u044e \u0441\u0440\u0435\u0434\u0443. \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435\u00a0<code>8<\/code>\u00a0\u0433\u043b\u0430\u0437 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u0442\u00a0<code>0<\/code>\u00a0\u0434\u043e\u00a0<code>4<\/code>\u00a0\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u00ab\u0432\u0438\u0434\u0438\u0442\u00bb \u0432 \u00ab\u043c\u043e\u0437\u0433\u00bb \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u043a\u0430\u0436\u0434\u044b\u0435\u00a0<code>100 \u043c\u0441<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0434\u0430\u0442\u0447\u0438\u043a \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439, \u043e\u043d \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0<code>0<\/code>. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043d\u043e \u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>0.01 \u043c<\/code>), \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435 \u0431\u043b\u0438\u0437\u043a\u043e.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/642\/001\/62c\/64200162cb12aa2da4efab16d7daeeb5.jpeg\" width=\"1500\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/642\/001\/62c\/64200162cb12aa2da4efab16d7daeeb5.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=manual#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>\u00a0\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0446\u0432\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435.<\/p>\n<\/blockquote>\n<pre><code class=\"javascript\">type Sensors = number[];<\/code><\/pre>\n<h3>\u0414\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u043e\u0437\u0433<\/h3>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u00ab\u0432\u0438\u0434\u0435\u0442\u044c\u00bb \u0438 \u00ab\u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f\u00bb, \u043d\u043e \u0443 \u043d\u0435\u0435 \u043d\u0435\u0442 \u00ab\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u043b \u0431\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043e\u0442 \u00ab\u0433\u043b\u0430\u0437\u00bb \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u00ab\u043c\u0443\u0441\u043a\u0443\u043b\u043e\u0432\u00bb. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0435 \u00ab\u043c\u043e\u0437\u0433\u00bb.<\/p>\n<h4>\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0437\u0433\u0430<\/h4>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043c\u043e\u0437\u0433 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c\u00a0<code>8<\/code>\u00a0\u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0435\u00a0<code>100ms<\/code>, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435\u00a0<code>[0...4]<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code>const sensors: Sensors = [s0, s1, s2, s3, s4, s5, s6, s7]; \/\/ i.e. ? \u2190 [0, 0.5, 4, 0.002, 0, 3.76, 0, 1.245]<\/code><\/pre>\n<h4>\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0437\u0433\u0430<\/h4>\n<p>\u041a\u0430\u0436\u0434\u044b\u0435\u00a0<code>100ms<\/code>\u00a0\u043c\u043e\u0437\u0433 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0434\u0432\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u043b\u0430:<\/p>\n<ol>\n<li>\n<p>\u041e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e &#8212; \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f\u00a0<code>engineSignal<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e &#8212; \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f \u0440\u0443\u043b\u044f\u00a0<code>wheelSignal<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u0438\u043f\u00a0<code>MuscleSignal<\/code>\u00a0\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0442\u0440\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>, \u0438\u043b\u0438\u00a0<code>+1<\/code>.<\/p>\n<h4>\u041c\u043e\u0437\u0433\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/h4>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432\u044b\u0448\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0437\u0433\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u043e\u0437\u0433 &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code>const { engineSignal, wheelSignal } = brainToMuscleSignal(   brainFunction(sensors) ); \/\/ i.e. { engineSignal: 0, wheelSignal: -1 } \u2190 ? \u2190 [0, 0.5, 4, 0.002, 0, 3.76, 0, 1.245]<\/code><\/pre>\n<p>\u0413\u0434\u0435\u00a0<code>brainToMuscleSignal()<\/code>\u00a0&#8212; \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0437\u0433\u0430 (\u043b\u044e\u0431\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439) \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u044b\u0448\u0446 (\u0432 \u043e\u0434\u043d\u043e \u0438\u0437 \u0447\u0438\u0441\u0435\u043b\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>, \u0438\u043b\u0438\u00a0<code>+1<\/code>), \u0447\u0442\u043e\u0431\u044b \u043c\u044b\u0448\u0446\u044b \u043c\u043e\u0433\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c. \u041c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c\u00a0<code>brainFunction()<\/code>?<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 &#171;\u0443\u043c\u043d\u0435\u0435&#187;, \u0430 \u0435\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f &#8212; \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438, \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Multilayer_perceptron\" rel=\"noopener noreferrer nofollow\"><strong>\u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0439 \u043f\u0435\u0440\u0446\u0435\u043f\u0442\u0440\u043e\u043d<\/strong><\/a>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0443\u0433\u0430\u044e\u0449\u0435\u0435, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 (\u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u0435\u0435 \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432\/\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432).<\/p>\n<blockquote>\n<p>\u042f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u0442\u0435\u043c\u044b \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0445 \u043f\u0435\u0440\u0446\u0435\u043f\u0442\u0440\u043e\u043d\u043e\u0432 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445\u00a0<a href=\"https:\/\/github.com\/trekhleb\/homemade-machine-learning#-multilayer-perceptron-mlp\" rel=\"noopener noreferrer nofollow\"><strong>homemade-machine-learning<\/strong><\/a>,\u00a0<a href=\"https:\/\/github.com\/trekhleb\/machine-learning-experiments#multilayer-perceptron-mlp-or-simple-neural-network-nn\" rel=\"noopener noreferrer nofollow\"><strong>machine-learning-experiments<\/strong><\/a>\u00a0\u0438\u00a0<a href=\"https:\/\/github.com\/trekhleb\/nano-neuron\" rel=\"noopener noreferrer nofollow\"><strong>nano-neuron<\/strong><\/a>\u00a0projects. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0443\u044e \u0441\u0435\u0442\u044c\u00a0<a href=\"https:\/\/trekhleb.dev\/machine-learning-experiments\/#\/experiments\/DigitsRecognitionMLP\" rel=\"noopener noreferrer nofollow\"><strong>\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0430\u043c\u0438 \u0446\u0438\u0444\u0440\u044b<\/strong><\/a>.<\/p>\n<\/blockquote>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0430\u00a0<strong>\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u0430<\/strong>\u00a0\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 (\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u044b\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u043e\u0432\u043d\u043e\u00a0<code>8<\/code>\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c\u00a0<code>8<\/code>\u00a0\u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code>engineSignal = brainToMuscleSignal(   (e0 * s0) + (e1 * s1) + ... + (e7 * s7) + e8 \/\/ &lt;- brainFunction )  wheelSignal = brainToMuscleSignal(   (w0 * s0) + (w1 * s1) + ... + (w7 * s7) + w8 \/\/ &lt;- brainFunction )<\/code><\/pre>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>[s0, s1, ..., s7]<\/code>\u00a0&#8212;\u00a0<code>8<\/code>\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f\u00a0<code>8<\/code>\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><code>[e0, e1, ..., e8]<\/code>\u00a0&#8212;\u00a0<code>9<\/code>\u00a0\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f. \u042d\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u044b\u0441\u043a\u0430\u0442\u044c\/\u0432\u044b\u0443\u0447\u0438\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><code>[w0, w1, ..., w8]<\/code>\u00a0&#8212;\u00a0<code>9<\/code>\u00a0\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u044b\u0441\u043a\u0430\u0442\u044c\/\u0432\u044b\u0443\u0447\u0438\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0426\u0435\u043d\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043c\u043e\u0437\u0433\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0431\u043e\u0431\u0449\u0430\u0442\u044c \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044e. \u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0442\u043e\u044f\u043d\u043a\u0438 \u0438 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442\u044c.<\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">type Coefficients = number[]; \/\/ Calculates the value of a linear polynomial based on the coefficients and variables. const linearPolynomial = (coefficients: Coefficients, variables: number[]): number => {   if (coefficients.length !== (variables.length + 1)) {     throw new Error('Incompatible number of polynomial coefficients and variables');   }   let result = 0;   coefficients.forEach((coefficient: number, coefficientIndex: number) => {     if (coefficientIndex &lt; variables.length) {       result += coefficient * variables[coefficientIndex];     } else {       \/\/ The last coefficient needs to be added up without multiplication.       result += coefficient     }   });   return result; };<\/code><\/pre>\n<p>\u041c\u043e\u0437\u0433 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u043e\u0432 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">const engineSignal: MuscleSignal = brainToMuscleSignal(   linearPolynomial(engineCoefficients, sensors) ); const wheelSignal: MuscleSignal = brainToMuscleSignal(   linearPolynomial(wheelCoefficients, sensors) );<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0<code>linearPolynomial()<\/code>\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u0424\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>brainToMuscleSignal()<\/code>\u00a0\u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0442\u0440\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u043b\u0430, \u0438 \u043e\u043d\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0448\u0438\u0440\u043e\u043a\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>0.456<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>3673.45<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>-280<\/code>) \u0432 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u00a0<code>(0...1)<\/code>\u00a0(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>0.05<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>0.86<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0439\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435\u00a0<code>(0...1)<\/code>\u00a0\u0432 \u043e\u0434\u043d\u043e \u0438\u0437 \u0442\u0440\u0435\u0445 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>, \u0438\u043b\u0438\u00a0<code>+1<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a\u00a0<code>0<\/code>, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u00a0<code>-1<\/code>, \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a\u00a0<code>0.5<\/code>, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u00a0<code>0<\/code>, \u0430 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a\u00a0<code>+1<\/code>, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u00a0<code>+1<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Sigmoid_function\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u0433\u043c\u043e\u0438\u0434\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9da\/def\/7ee\/9dadef7ee0dede59b1c36e4011c3918b.png\" width=\"960\" height=\"104\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9da\/def\/7ee\/9dadef7ee0dede59b1c36e4011c3918b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0438\u0433\u043c\u043e\u0438\u0434 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u043e\u0441\u044c\u00a0<code>x<\/code>) \u0432 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c\u00a0<code>(0...1)<\/code>\u00a0(\u043e\u0441\u044c\u00a0<code>y<\/code>). \u042d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/216\/0ec\/e8a\/2160ece8a18a798f34581ad0dc47c45d.png\" width=\"1500\" height=\"744\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/216\/0ec\/e8a\/2160ece8a18a798f34581ad0dc47c45d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0448\u0430\u0433\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0441\u0438\u0433\u043c\u043e\u0438\u0434\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cfb\/ab8\/279\/cfbab827910457ea2732ab5f1008144a.png\" width=\"1500\" height=\"754\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cfb\/ab8\/279\/cfbab827910457ea2732ab5f1008144a.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0432\u0443\u0445 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u044b\u0448\u0435 \u0448\u0430\u0433\u043e\u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">\/\/ Calculates the sigmoid value for a given number. const sigmoid = (x: number): number => {   return 1 \/ (1 + Math.E ** -x); }; \/\/ Converts sigmoid value (0...1) to the muscle signals (-1, 0, +1) \/\/ The margin parameter is a value between 0 and 0.5: \/\/ [0 ... (0.5 - margin) ... 0.5 ... (0.5 + margin) ... 1] const sigmoidToMuscleSignal = (sigmoidValue: number, margin: number = 0.4): MuscleSignal => {   if (sigmoidValue &lt; (0.5 - margin)) {     return -1;   }   if (sigmoidValue > (0.5 + margin)) {     return 1;   }   return 0; }; \/\/ Converts raw brain signal to the muscle signal. const brainToMuscleSignal = (rawBrainSignal: number): MuscleSignal => {   const normalizedBrainSignal = sigmoid(rawBrainSignal);   return sigmoidToMuscleSignal(normalizedBrainSignal); }<\/code><\/pre>\n<h3>\u0413\u0435\u043d\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f (\u0414\u041d\u041a)<\/h3>\n<blockquote>\n<p>\u261d? \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u00ab\u0413\u043b\u0430\u0437\u0430\u00bb, \u00ab\u041c\u044b\u0448\u0446\u044b\u00bb \u0438 \u00ab\u041c\u043e\u0437\u0433\u00bb \u0432\u044b\u0448\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 &#8212; \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b\u00a0<code>[e0, e1, ..., e8]<\/code>\u00a0\u0438\u00a0<code>[w0, w1, ..., w8]<\/code>\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b. \u042d\u0442\u0438\u00a0<code>18<\/code>\u00a0\u0447\u0438\u0441\u0435\u043b \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u043d\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f (\u0438\u043b\u0438 \u0414\u041d\u041a \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f).<\/p>\n<\/blockquote>\n<h4>\u0413\u0435\u043d\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435<\/h4>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043c\u043e\u0437\u0433\u0430\u00a0<code>[e0, e1, ..., e8]<\/code>\u00a0\u0438\u00a0<code>[w0, w1, ..., w8]<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435:<\/p>\n<pre><code class=\"javascript\">\/\/ Car genome as a list of decimal numbers (coefficients). const carGenomeBase10 = [e0, e1, ..., e8, w0, w1, ..., w8]; \/\/ i.e. carGenomeBase10 = [17.5, 0.059, -46, 25, 156, -0.085, -0.207, -0.546, 0.071, -58, 41, 0.011, 252, -3.5, -0.017, 1.532, -360, 0.157]<\/code><\/pre>\n<h4>\u0413\u0435\u043d\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435<\/h4>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0439\u0434\u0435\u043c \u043d\u0430 \u0448\u0430\u0433 \u0433\u043b\u0443\u0431\u0436\u0435 (\u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0433\u0435\u043d\u043e\u0432) \u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043c \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0433\u0435\u043d\u043e\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (\u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438 \u043d\u0443\u043b\u0438).<\/p>\n<blockquote>\n<p>\u042f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/blog\/2021\/binary-floating-point\/\" rel=\"noopener noreferrer nofollow\"><strong>Binary representation of the floating-point numbers<\/strong><\/a>. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u043d\u0435\u0439, \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u0435\u043d.<\/p>\n<\/blockquote>\n<p>\u0412\u043e\u0442 \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u00a0<code>16-\u0431\u0438\u0442\u043d\u043e\u0435<\/code>\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (\u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/blog\/2021\/binary-floating-point\/\" rel=\"noopener noreferrer nofollow\"><strong>\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/strong><\/a>, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u0435\u043d):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dbd\/743\/6e8\/dbd7436e8a5781e88ae8566709cc3abb.png\" width=\"2000\" height=\"1411\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dbd\/743\/6e8\/dbd7436e8a5781e88ae8566709cc3abb.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0433\u0435\u043d\u043e\u043c\u0430, \u043c\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0432 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435\u00a0<code>10-\u0431\u0438\u0442\u043d\u043e\u0435<\/code>\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (<code>1<\/code>\u00a0\u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0431\u0438\u0442,\u00a0<code>4<\/code>\u00a0\u0431\u0438\u0442\u0430 \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442\u044b,\u00a0<code>5<\/code>\u00a0\u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432).<\/p>\n<p>\u0412\u0441\u0435\u0433\u043e \u0443 \u043d\u0430\u0441\u00a0<code>18<\/code>\u00a0\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432\u00a0<code>10-\u0431\u0438\u0442\u043d\u043e\u0435<\/code>\u00a0\u0447\u0438\u0441\u043b\u043e. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0433\u0435\u043d\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0443\u043b\u0435\u0439 \u0438 \u0435\u0434\u0438\u043d\u0438\u0446 \u0434\u043b\u0438\u043d\u043e\u0439\u00a0<code>18 * 10 = 180 \u0431\u0438\u0442<\/code>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0433\u0435\u043d\u043e\u043c\u0430 \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u0435\u0433\u043e \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">type Gene = 0 | 1; type Genome = Gene[]; const genome: Genome = [   \/\/ Engine coefficients.   0, 1, 0, 1, 1, 0, 0, 0, 1, 1, \/\/ &lt;- 17.5   0, 0, 0, 1, 0, 1, 1, 1, 0, 0, \/\/ &lt;- 0.059   1, 1, 1, 0, 0, 0, 1, 1, 1, 0, \/\/ &lt;- -46   0, 1, 0, 1, 1, 1, 0, 0, 1, 0, \/\/ &lt;- 25   0, 1, 1, 1, 0, 0, 0, 1, 1, 1, \/\/ &lt;- 156   1, 0, 0, 1, 1, 0, 1, 1, 0, 0, \/\/ &lt;- -0.085   1, 0, 1, 0, 0, 1, 0, 1, 0, 1, \/\/ &lt;- -0.207   1, 0, 1, 1, 0, 0, 0, 0, 1, 1, \/\/ &lt;- -0.546   0, 0, 0, 1, 1, 0, 0, 1, 0, 0, \/\/ &lt;- 0.071   \/\/ Wheels coefficients.   1, 1, 1, 0, 0, 1, 1, 0, 1, 0, \/\/ &lt;- -58   0, 1, 1, 0, 0, 0, 1, 0, 0, 1, \/\/ &lt;- 41   0, 0, 0, 0, 0, 0, 1, 0, 1, 0, \/\/ &lt;- 0.011   0, 1, 1, 1, 0, 1, 1, 1, 1, 1, \/\/ &lt;- 252   1, 1, 0, 0, 0, 1, 1, 0, 0, 0, \/\/ &lt;- -3.5   1, 0, 0, 0, 1, 0, 0, 1, 0, 0, \/\/ &lt;- -0.017   0, 0, 1, 1, 1, 1, 0, 0, 0, 1, \/\/ &lt;- 1.532   1, 1, 1, 1, 1, 0, 1, 1, 0, 1, \/\/ &lt;- -360   0, 0, 1, 0, 0, 0, 1, 0, 0, 0, \/\/ &lt;- 0.157 ];<\/code><\/pre>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435! \u0411\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0433\u0435\u043d\u043e\u043c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u041d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0435\u0431\u0435, \u0447\u0442\u043e \u044d\u0442\u0438\u00a0<code>180<\/code>\u00a0\u043d\u0443\u043b\u0435\u0439 \u0438 \u0435\u0434\u0438\u043d\u0438\u0446 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442, \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043d\u0430 \u0441\u0442\u043e\u044f\u043d\u043a\u0435! \u042d\u0442\u043e \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u0432\u044b \u0432\u0437\u043b\u043e\u043c\u0430\u043b\u0438 \u0447\u044c\u044e-\u0442\u043e \u0414\u041d\u041a \u0438 \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0433\u0435\u043d. \u0421\u0438\u043b\u044c\u043d\u043e!<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u0435\u043d\u043e\u043c\u043e\u0432 \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 &#171;\u0443\u043c\u043d\u043e\u0433\u043e&#187; \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u043f\u0430\u043d\u0435\u043b\u0438\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=evolution#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430<\/strong><\/a><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/829\/c7e\/156\/829c7e15641fa0abdd55109766e86872.png\" width=\"1500\" height=\"606\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/829\/c7e\/156\/829c7e15641fa0abdd55109766e86872.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u043c\u043e\u0437\u0433\u0443 \u043e\u043d \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0435\u043d\u043e\u043c\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u044b\u0448\u0435\u0447\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u0435\u043d\u043e\u043c\u0430):<\/p>\n<pre><code class=\"javascript\">type Bit = 0 | 1; type Bits = Bit[]; type PrecisionConfig = {   signBitsCount: number,   exponentBitsCount: number,   fractionBitsCount: number,   totalBitsCount: number, }; type PrecisionConfigs = {   custom: PrecisionConfig, }; const precisionConfigs: PrecisionConfigs = {   \/\/ Custom-made 10-bits precision for faster evolution progress.   custom: {     signBitsCount: 1,     exponentBitsCount: 4,     fractionBitsCount: 5,     totalBitsCount: 10,   }, }; \/\/ Converts the binary representation of the floating-point number to decimal float number. function bitsToFloat(bits: Bits, precisionConfig: PrecisionConfig): number {   const { signBitsCount, exponentBitsCount } = precisionConfig;   \/\/ Figuring out the sign.   const sign = (-1) ** bits[0]; \/\/ -1^1 = -1, -1^0 = 1   \/\/ Calculating the exponent value.   const exponentBias = 2 ** (exponentBitsCount - 1) - 1;   const exponentBits = bits.slice(signBitsCount, signBitsCount + exponentBitsCount);   const exponentUnbiased = exponentBits.reduce(     (exponentSoFar: number, currentBit: Bit, bitIndex: number) => {       const bitPowerOfTwo = 2 ** (exponentBitsCount - bitIndex - 1);       return exponentSoFar + currentBit * bitPowerOfTwo;     },     0,   );   const exponent = exponentUnbiased - exponentBias;   \/\/ Calculating the fraction value.   const fractionBits = bits.slice(signBitsCount + exponentBitsCount);   const fraction = fractionBits.reduce(     (fractionSoFar: number, currentBit: Bit, bitIndex: number) => {       const bitPowerOfTwo = 2 ** -(bitIndex + 1);       return fractionSoFar + currentBit * bitPowerOfTwo;     },     0,   );   \/\/ Putting all parts together to calculate the final number.   return sign * (2 ** exponent) * (1 + fraction); } \/\/ Converts the 8-bit binary representation of the floating-point number to decimal float number. function bitsToFloat10(bits: Bits): number {   return bitsToFloat(bits, precisionConfigs.custom); }<\/code><\/pre>\n<h4>\u041c\u043e\u0437\u0433\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0433\u0435\u043d\u043e\u043c\u043e\u043c<\/h4>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u0437\u0433\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432\u00a0<code>engineCoefficients<\/code>\u00a0\u0438\u00a0<code>wheelCoefficients<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0433\u0435\u043d\u043e\u043c\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0<code>decodeGenome()<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0438\u0437 \u0433\u0435\u043d\u043e\u043c\u0430, \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u043c\u043e\u0437\u0433\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">\/\/ Car has 16 distance sensors. const CAR_SENSORS_NUM = 8; \/\/ Additional formula coefficient that is not connected to a sensor. const BIAS_UNITS = 1; \/\/ How many genes do we need to encode each numeric parameter for the formulas. const GENES_PER_NUMBER = precisionConfigs.custom.totalBitsCount; \/\/ Based on 8 distance sensors we need to provide two formulas that would define car's behavior: \/\/ 1. Engine formula (input: 8 sensors; output: -1 (backward), 0 (neutral), +1 (forward)) \/\/ 2. Wheels formula (input: 8 sensors; output: -1 (left), 0 (straight), +1 (right)) const ENGINE_FORMULA_GENES_NUM = (CAR_SENSORS_NUM + BIAS_UNITS) * GENES_PER_NUMBER; const WHEELS_FORMULA_GENES_NUM = (CAR_SENSORS_NUM + BIAS_UNITS) * GENES_PER_NUMBER; \/\/ The length of the binary genome of the car. const GENOME_LENGTH = ENGINE_FORMULA_GENES_NUM + WHEELS_FORMULA_GENES_NUM; type DecodedGenome = {   engineFormulaCoefficients: Coefficients,   wheelsFormulaCoefficients: Coefficients, } \/\/ Converts the genome from a binary form to the decimal form. const genomeToNumbers = (genome: Genome, genesPerNumber: number): number[] => {   if (genome.length % genesPerNumber !== 0) {     throw new Error('Wrong number of genes in the numbers genome');   }   const numbers: number[] = [];   for (let numberIndex = 0; numberIndex &lt; genome.length; numberIndex += genesPerNumber) {     const number: number = bitsToFloat10(genome.slice(numberIndex, numberIndex + genesPerNumber));     numbers.push(number);   }   return numbers; }; \/\/ Converts the genome from a binary form to the decimal form \/\/ and splits the genome into two sets of coefficients (one set for each muscle). const decodeGenome = (genome: Genome): DecodedGenome => {   const engineGenes: Gene[] = genome.slice(0, ENGINE_FORMULA_GENES_NUM);   const wheelsGenes: Gene[] = genome.slice(     ENGINE_FORMULA_GENES_NUM,     ENGINE_FORMULA_GENES_NUM + WHEELS_FORMULA_GENES_NUM,   );   const engineFormulaCoefficients: Coefficients = genomeToNumbers(engineGenes, GENES_PER_NUMBER);   const wheelsFormulaCoefficients: Coefficients = genomeToNumbers(wheelsGenes, GENES_PER_NUMBER);   return {     engineFormulaCoefficients,     wheelsFormulaCoefficients,   }; }; \/\/ Update brain function for the engine muscle. export const getEngineMuscleSignal = (genome: Genome, sensors: Sensors): MuscleSignal => {   const {engineFormulaCoefficients: coefficients} = decodeGenome(genome);   const rawBrainSignal = linearPolynomial(coefficients, sensors);   return brainToMuscleSignal(rawBrainSignal); }; \/\/ Update brain function for the wheels muscle. export const getWheelsMuscleSignal = (genome: Genome, sensors: Sensors): MuscleSignal => {   const {wheelsFormulaCoefficients: coefficients} = decodeGenome(genome);   const rawBrainSignal = linearPolynomial(coefficients, sensors);   return brainToMuscleSignal(rawBrainSignal); };<\/code><\/pre>\n<h3>\u0424\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f<\/h3>\n<blockquote>\n<p>\u261d? \u0418\u0442\u0430\u043a, \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e, \u043c\u044b \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u043c\u043e\u043c\u0435\u043d\u0442\u0443, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438\u00a0<code>180<\/code>\u00a0\u0435\u0434\u0438\u043d\u0438\u0446 \u0438 \u043d\u0443\u043b\u0435\u0439 (\u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 &#171;\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e&#187; \u0433\u0435\u043d\u043e\u043c\u0430 \u043c\u0430\u0448\u0438\u043d\u044b). \u0417\u0432\u0443\u0447\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438?<\/p>\n<\/blockquote>\n<h4>\u041d\u0430\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/h4>\n<p>\u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u00ab\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e\u00bb \u0433\u0435\u043d\u043e\u043c\u0430 \u043d\u0430\u0438\u0432\u043d\u043e \u0438 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0433\u0435\u043d\u043e\u0432:<\/p>\n<ol>\n<li>\n<p><code>[0, ..., 0, 0]<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c &#8230;<\/p>\n<\/li>\n<li>\n<p><code>[0, ..., 0, 1]<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c &#8230;<\/p>\n<\/li>\n<li>\n<p><code>[0, ..., 1, 0]<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c &#8230;<\/p>\n<\/li>\n<li>\n<p><code>[0, ..., 1, 1]<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c &#8230;<\/p>\n<\/li>\n<li>\n<p>&#8230;<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0435\u043c. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c\u00a0<code>180<\/code>\u00a0\u0431\u0438\u0442 \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u0442 \u0440\u0430\u0432\u0435\u043d \u043b\u0438\u0431\u043e\u00a0<code>0<\/code>\u00a0\u043b\u0438\u0431\u043e\u00a0<code>1<\/code>, \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442\u00a0<code>2^180<\/code>\u00a0(\u0438\u043b\u0438\u00a0<code>1.53 * 10^54<\/code>) \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u0430\u0442\u044c\u00a0<code>15<\/code>\u00a0\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u043d\u0430 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u0443\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u043d\u0435\u0442. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0442\u0430\u043a\u0436\u0435, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0434\u043b\u044f\u00a0<code>10<\/code>\u00a0\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0422\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f\u00a0<code>15 * (1.53 * 10^54) \/ 10 = 2.29 * 10^54 [\u0441\u0435\u043a\u0443\u043d\u0434]<\/code>, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u00a0<code>7.36 * 10^46 [\u043b\u0435\u0442]<\/code>. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0436\u0434\u0430\u0442\u044c. \u0422\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0441\u043e \u0434\u043d\u044f \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0418\u0438\u0441\u0443\u0441\u0430 \u0425\u0440\u0438\u0441\u0442\u0430 \u043f\u0440\u043e\u0448\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e\u00a0<code>2.021 * 10^3 [\u043b\u0435\u0442]<\/code>.<\/p>\n<h4>\u0413\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/h4>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0433\u0435\u043d\u043e\u043c\u0430. \u0417\u0434\u0435\u0441\u044c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u044b \u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043c \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u0435\u043d\u043e\u043c\u0430, \u043d\u043e \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441, \u0447\u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0418, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a \u0434\u043e\u043b\u0433\u043e \u0436\u0434\u0430\u0442\u044c. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>\u00a0\u044f \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0433\u0435\u043d\u043e\u043c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u00a0<code>24 [\u0447\u0430\u0441\u043e\u0432]<\/code>.<\/p>\n<h3>\u041e\u0441\u043d\u043e\u0432\u044b \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h3>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Genetic_algorithm\" rel=\"noopener noreferrer nofollow\"><strong>\u0413\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b<\/strong><\/a>\u00a0\u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u0431\u043e\u0440\u0430, \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041e\u043d\u0438 \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u0438\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043a\u0440\u043e\u0441\u0441\u043e\u0432\u0435\u0440, \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u0438 \u043e\u0442\u0431\u043e\u0440.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u00ab\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0439\u00bb \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0433\u0435\u043d\u043e\u0432 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0432 \u044d\u0442\u043e\u043c.<\/p>\n<p>\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u0432\u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0448\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<ol>\n<li>\n<p><strong>\u0421\u041e\u0417\u0414\u0410\u041d\u0418\u0415<\/strong>\u00a0&#8212; \u0441\u0430\u043c\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Laws_of_thermodynamics\" rel=\"noopener noreferrer nofollow\"><strong>\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0438\u0437 \u043d\u0438\u0447\u0435\u0433\u043e<\/strong><\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0433\u0435\u043d\u043e\u043c\u043e\u0432 (\u043d\u0430\u0431\u043e\u0440 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0434\u043b\u0438\u043d\u043e\u0439\u00a0<code>180<\/code>). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c\u00a0<code>1000<\/code>\u00a0\u043c\u0430\u0448\u0438\u043d. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0430\u0448\u0438\u043d (\u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435), \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u0448\u0430\u043d\u0441\u044b \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 (\u0438 \u043d\u0430\u0439\u0442\u0438 \u0435\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435).<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0415\u041b\u0415\u041a\u0426\u0418\u042f<\/strong>\u00a0&#8212; \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u0439 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f (\u0441\u043c. \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433). \u041f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0443\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u043b\u0441\u044f \u043a \u0446\u0435\u043b\u0435\u0432\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438. \u0427\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u0430 \u043a \u043c\u0435\u0441\u0442\u0443 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438, \u0442\u0435\u043c \u043e\u043d\u0430 &#171;\u043b\u0443\u0447\u0448\u0435&#187;.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u041f\u0410\u0420\u0418\u0412\u0410\u041d\u0418\u0415<\/strong>\u00a0&#8212; \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u00ab\u2642 \u043e\u0442\u0446\u0430\u043c- \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f\u043c\u00bb \u00ab\u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u043a\u0441\u043e\u043c\u00bb \u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u00ab\u2640 \u043c\u0430\u0442\u0435\u0440\u044f\u043c\u0438-\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f\u043c\u0438\u00bb, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0433\u0435\u043d\u043e\u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u00a0<code>50\/50<\/code>\u00a0\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u00ab\u2642\u2640 \u0434\u0435\u0442\u0435\u0439-\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439\u00bb. \u0418\u0434\u0435\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e &#171;\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u0435&#187; \u0434\u0435\u0442\u0438-\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0442\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435 (\u0438\u043b\u0438 \u0445\u0443\u0436\u0435) \u0432 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435, \u0435\u0441\u043b\u0438 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u043b\u0443\u0447\u0448\u0435\u0435 (\u0438\u043b\u0438 \u0445\u0443\u0434\u0448\u0435\u0435) \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0423\u0422\u0410\u0426\u0418\u042f<\/strong>\u00a0&#8212; \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0435\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u0443\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438 \u043d\u0443\u043b\u0438 \u0432 \u0433\u0435\u043d\u043e\u043c\u0435 \u0440\u0435\u0431\u0435\u043d\u043a\u0430 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f). \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u043e\u043c\u0443 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044e \u0433\u0435\u043d\u043e\u043c\u043e\u0432 \u0434\u0435\u0442\u0435\u0439 \u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u043e\u043c\u0443 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u0435\u0442\u0435\u0439-\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e 1-\u0439 \u0431\u0438\u0442 \u0431\u044b\u043b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432\u00a0<code>0<\/code>\u00a0\u0434\u043b\u044f \u0432\u0441\u0435\u0445\u00a0<code>~1000<\/code>\u00a0\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 \u0441 1-\u043c \u0431\u0438\u0442\u043e\u043c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0432\u00a0<code>1<\/code>, &#8212; \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043c\u0443\u0442\u0430\u0446\u0438\u0438. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u0442\u044c \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u0435 \u0433\u0435\u043d\u043e\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u00ab\u0428\u0430\u0433\u0443 \u21162\u00bb, \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0439 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u00a0<code>100<\/code>\u00a0\u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0439) \u0438\u043b\u0438 \u043f\u043e\u043a\u0430 \u0441\u0430\u043c\u044b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0435 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0443\u043c\u044b \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043b\u0443\u0447\u0448\u0438\u0439 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0435\u0449\u0435 \u043d\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u043b\u0441\u044f \u043a \u043c\u0435\u0441\u0442\u0443 \u0441\u0442\u043e\u044f\u043d\u043a\u0438 \u0431\u043b\u0438\u0436\u0435, \u0447\u0435\u043c \u043d\u0430\u00a0<code>1 \u043c\u0435\u0442\u0440<\/code>). \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c10\/c71\/021\/c10c71021098cb9bf7c9f91a81d046cb.png\" width=\"2630\" height=\"536\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c10\/c71\/021\/c10c71021098cb9bf7c9f91a81d046cb.png\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043c\u043e\u0437\u0433\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u044d\u0442\u0430\u043f\u043e\u0432 \u00ab\u0421\u041e\u0417\u0414\u0410\u041d\u0418\u042f\u00bb, \u00ab\u0421\u0415\u041b\u0415\u041a\u0426\u0418\u0418\u00bb, \u00ab\u0421\u041f\u0410\u0420\u0418\u0412\u0410\u041d\u0418\u042f\u00bb \u0438 \u00ab\u041c\u0423\u0422\u0410\u0426\u0418\u0418\u00bb.<\/p>\n<h4>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0448\u0430\u0433\u0430 \u00ab\u0421\u041e\u0417\u0414\u0410\u041d\u0418\u0415\u00bb<\/h4>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>createGeneration()<\/code>\u00a0\u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0433\u0435\u043d\u043e\u043c\u043e\u0432 ( \u043f\u043e\u043f\u0443\u043b\u044f\u0446\u0438\u044e \u0438\u043b\u0438 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435) \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><code>generationSize<\/code>\u00a0&#8212; \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p><code>genomeLength<\/code>\u00a0&#8212; \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0433\u0435\u043d\u043e\u043c\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0443\u043c\u0430 \u0432 \u043f\u043e\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u0438\u043d\u0430 \u0433\u0435\u043d\u043e\u043c\u0430 \u0431\u0443\u0434\u0435\u0442\u00a0<code>180<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0433\u0435\u043d \u0433\u0435\u043d\u043e\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d\u00a0<code>0<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>1<\/code>, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u00a0<code>50\/50<\/code>.<\/p>\n<pre><code class=\"javascript\">type Generation = Genome[]; type GenerationParams = {   generationSize: number,   genomeLength: number, }; function createGenome(length: number): Genome {   return new Array(length)     .fill(null)     .map(() => (Math.random() &lt; 0.5 ? 0 : 1)); } function createGeneration(params: GenerationParams): Generation {   const { generationSize, genomeLength } = params;   return new Array(generationSize)     .fill(null)     .map(() => createGenome(genomeLength)); }<\/code><\/pre>\n<h4>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0448\u0430\u0433\u0430 \u00ab\u041c\u0423\u0422\u0410\u0426\u0418\u042f\u00bb<\/h4>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>mutate()<\/code>\u00a0\u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0435\u043d\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u00a0<code>mutationProbability<\/code>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438\u00a0<code>mutationProbability = 0.1<\/code>, \u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0435\u043d\u043e\u043c\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u00a0<code>10%<\/code>\u00a0. \u0421\u043a\u0430\u0436\u0435\u043c, \u0435\u0441\u043b\u0438 \u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0433\u0435\u043d\u043e\u043c \u0434\u043b\u0438\u043d\u043e\u0439\u00a0<code>10<\/code>\u00a0\u0433\u0435\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u0431\u044b \u043a\u0430\u043a\u00a0<code>[0, 0, 0, 0, 0, 0 ,0 ,0 ,0 ,0]<\/code>, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e 1 \u0433\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0443\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u0435\u043d\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a\u00a0<code>[0, 0, 0, 1, 0, 0 ,0 ,0 ,0 ,0]<\/code>.<\/p>\n<pre><code class=\"javascript\">\/\/ The number between 0 and 1. type Probability = number; \/\/ @see: https:\/\/en.wikipedia.org\/wiki\/Mutation_(genetic_algorithm) function mutate(genome: Genome, mutationProbability: Probability): Genome {   for (let geneIndex = 0; geneIndex &lt; genome.length; geneIndex += 1) {     const gene: Gene = genome[geneIndex];     const mutatedGene: Gene = gene === 0 ? 1 : 0;     genome[geneIndex] = Math.random() &lt; mutationProbability ? mutatedGene : gene;   }   return genome; }<\/code><\/pre>\n<h4>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0448\u0430\u0433\u0430 \u00ab\u0421\u041f\u0410\u0420\u0418\u0412\u0410\u041d\u0418\u0415\u00bb<\/h4>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>mate()<\/code>\u00a0\u043f\u0440\u0438\u043c\u0435\u0442 \u0433\u0435\u043d\u043e\u043c\u044b\u00a0<code>father<\/code>\u00a0\u0438\u00a0<code>mother<\/code>\u00a0\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u0442 \u0434\u0432\u0443\u0445 \u0434\u0435\u0442\u0435\u0439. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043c \u043c\u0443\u0442\u0430\u0446\u0438\u044e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u0442 \u0434\u0435\u0442\u0441\u043a\u043e\u0433\u043e \u0433\u0435\u043d\u043e\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u0438\u0442\u0430 \u0433\u0435\u043d\u043e\u043c\u0430 \u043e\u0442\u0446\u0430 \u0438\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0435\u0431\u0435\u043d\u043e\u043a \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0431\u0438\u0442 \u043e\u0442\u0446\u0430 \u0438\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u00a0<code>50\/50%<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u0435\u043d\u043e\u043c\u044b \u0434\u043b\u0438\u043d\u043e\u0439\u00a0<code>4<\/code>\u00a0\u0433\u0435\u043d\u0430:<\/p>\n<pre><code>Father's genome: [0, 0, 1, 1] Mother's genome: [0, 1, 0, 1]                   \u2193  \u2193  \u2193  \u2193 Possible kid #1: [0, 1, 1, 1] Possible kid #2: [0, 0, 1, 1]<\/code><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">\/\/ Performs Uniform Crossover: each bit is chosen from either parent with equal probability. \/\/ @see: https:\/\/en.wikipedia.org\/wiki\/Crossover_(genetic_algorithm) function mate(   father: Genome,   mother: Genome,   mutationProbability: Probability, ): [Genome, Genome] {   if (father.length !== mother.length) {     throw new Error('Cannot mate different species');   }   const firstChild: Genome = [];   const secondChild: Genome = [];   \/\/ Conceive children.   for (let geneIndex = 0; geneIndex &lt; father.length; geneIndex += 1) {     firstChild.push(       Math.random() &lt; 0.5 ? father[geneIndex] : mother[geneIndex]     );     secondChild.push(       Math.random() &lt; 0.5 ? father[geneIndex] : mother[geneIndex]     );   }   return [     mutate(firstChild, mutationProbability),     mutate(secondChild, mutationProbability),   ]; }<\/code><\/pre>\n<h4>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0448\u0430\u0433\u0430 \u00ab\u0421\u0415\u041b\u0415\u041a\u0426\u0418\u042f\u00bb<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u0439 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0435\u043d\u043e\u043c\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0438\u0442\u043d\u0435\u0441-\u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0435\u0448\u0438\u0442\u044c, \u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u0438\u0442\u043d\u0435\u0441-\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u043c \u0438 \u043c\u0435\u0441\u0442\u043e\u043c \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438. \u0427\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u0430 \u043a \u043c\u0435\u0441\u0442\u0443 \u0441\u0442\u043e\u044f\u043d\u043a\u0438, \u0442\u0435\u043c \u043e\u043d\u0430 &#171;\u043b\u0443\u0447\u0448\u0435&#187; (\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u0430). \u041c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0444\u0438\u0442\u043d\u0435\u0441-\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u0430 \u043f\u043e\u043a\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u043f\u0438\u0448\u0435\u043c \u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n<pre><code class=\"javascript\">type FitnessFunction = (genome: Genome) => number;<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0443\u043c\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0446\u0438\u0438. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0442\u0430\u043a\u0436\u0435, \u0447\u0442\u043e \u043c\u044b \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432\u0441\u0435\u0445 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0443\u043c\u043e\u0432 \u043f\u043e \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u0441\u043e\u0431\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c\u0438 \u0441\u0438\u043b\u044c\u043d\u044b\u043c\u0438. \u041a\u0430\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0446\u043e\u0432 \u0438 \u043c\u0430\u0442\u0435\u0440\u0435\u0439 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430? \u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043e\u0442\u0431\u043e\u0440 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0447\u0435\u043c \u0432\u044b\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0443\u043c\u0430, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u0448\u0430\u043d\u0441\u044b, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0443\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d \u0434\u043b\u044f \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f. \u0412 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>weightedRandom()<\/code>.<\/p>\n<pre><code class=\"javascript\">\/\/ Picks the random item based on its weight. \/\/ The items with a higher weight will be picked more often. const weightedRandom = &lt;T>(items: T[], weights: number[]): { item: T, index: number } => {   if (items.length !== weights.length) {     throw new Error('Items and weights must be of the same size');   }   \/\/ Preparing the cumulative weights array.   \/\/ For example:   \/\/ - weights = [1, 4, 3]   \/\/ - cumulativeWeights = [1, 5, 8]   const cumulativeWeights: number[] = [];   for (let i = 0; i &lt; weights.length; i += 1) {     cumulativeWeights[i] = weights[i] + (cumulativeWeights[i - 1] || 0);   }   \/\/ Getting the random number in a range [0...sum(weights)]   \/\/ For example:   \/\/ - weights = [1, 4, 3]   \/\/ - maxCumulativeWeight = 8   \/\/ - range for the random number is [0...8]   const maxCumulativeWeight = cumulativeWeights[cumulativeWeights.length - 1];   const randomNumber = maxCumulativeWeight * Math.random();   \/\/ Picking the random item based on its weight.   \/\/ The items with higher weight will be picked more often.   for (let i = 0; i &lt; items.length; i += 1) {     if (cumulativeWeights[i] >= randomNumber) {       return {         item: items[i],         index: i,       };     }   }   return {     item: items[items.length - 1],     index: items.length - 1,   }; };<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u0438\u0442\u0435 \u0431\u0430\u043d\u0430\u043d\u044b \u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0435\u0441\u0442\u044c \u0438\u0445 \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u043a\u043b\u0443\u0431\u043d\u0438\u043a\u0443. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0<code>const fruit = weightedRandom(['banana', 'strawberry'], [9, 1])<\/code>, \u0438 \u0432\u00a0<code>\u22489<\/code>\u00a0\u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0437\u00a0<code>10<\/code>\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f\u00a0<code>fruit<\/code>\u00a0\u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430\u00a0<code>banana<\/code>, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0<code>\u22481<\/code>\u00a0\u0438\u0437\u00a0<code>10<\/code>\u00a0\u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430\u00a0<code>strawberry<\/code>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0442\u0435\u0440\u0438 \u043b\u0443\u0447\u0448\u0438\u0445 \u043e\u0441\u043e\u0431\u0435\u0439 (\u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u043c\u0438) \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u00a0<code>longLivingChampionsPercentage<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438\u00a0<code>longLivingChampionsPercentage = 10<\/code>, \u0442\u043e\u00a0<code>10%<\/code>\u00a0\u043b\u0443\u0447\u0448\u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0442\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0436\u0438\u0442\u044c \u0434\u043e\u043b\u0433\u0443\u044e \u0436\u0438\u0437\u043d\u044c \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u0434\u0435\u0442\u0435\u0439 \u0438 \u0434\u0430\u0436\u0435 \u0432\u043d\u0443\u043a\u043e\u0432.<\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0<code>select()<\/code>\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">\/\/ The number between 0 and 100. type Percentage = number; type SelectionOptions = {   mutationProbability: Probability,   longLivingChampionsPercentage: Percentage, }; \/\/ @see: https:\/\/en.wikipedia.org\/wiki\/Selection_(genetic_algorithm) function select(   generation: Generation,   fitness: FitnessFunction,   options: SelectionOptions, ) {   const {     mutationProbability,     longLivingChampionsPercentage,   } = options;   const newGeneration: Generation = [];   const oldGeneration = [...generation];   \/\/ First one - the fittest one.   oldGeneration.sort((genomeA: Genome, genomeB: Genome): number => {     const fitnessA = fitness(genomeA);     const fitnessB = fitness(genomeB);     if (fitnessA &lt; fitnessB) {       return 1;     }     if (fitnessA > fitnessB) {       return -1;     }     return 0;   });   \/\/ Let long-liver champions continue living in the new generation.   const longLiversCount = Math.floor(longLivingChampionsPercentage * oldGeneration.length \/ 100);   if (longLiversCount) {     oldGeneration.slice(0, longLiversCount).forEach((longLivingGenome: Genome) => {       newGeneration.push(longLivingGenome);     });   }   \/\/ Get the data about he fitness of each individuum.   const fitnessPerOldGenome: number[] = oldGeneration.map((genome: Genome) => fitness(genome));   \/\/ Populate the next generation until it becomes the same size as a old generation.   while (newGeneration.length &lt; generation.length) {     \/\/ Select random father and mother from the population.     \/\/ The fittest individuums have higher chances to be selected.     let father: Genome | null = null;     let fatherGenomeIndex: number | null = null;     let mother: Genome | null = null;     let matherGenomeIndex: number | null = null; \/\/ To produce children the father and mother need each other. \/\/ It must be two different individuums. while (!father || !mother || fatherGenomeIndex === matherGenomeIndex) {   const {     item: randomFather,     index: randomFatherGenomeIndex,   } = weightedRandom&amp;lt;Genome&amp;gt;(generation, fitnessPerOldGenome);    const {     item: randomMother,     index: randomMotherGenomeIndex,   } = weightedRandom&amp;lt;Genome&amp;gt;(generation, fitnessPerOldGenome);    father = randomFather;   fatherGenomeIndex = randomFatherGenomeIndex;    mother = randomMother;   matherGenomeIndex = randomMotherGenomeIndex; }  \/\/ Let father and mother produce two children. const [firstChild, secondChild] = mate(father, mother, mutationProbability);  newGeneration.push(firstChild);  \/\/ Depending on the number of long-living champions it is possible that \/\/ there will be the place for only one child, sorry. if (newGeneration.length &amp;lt; generation.length) {   newGeneration.push(secondChild); }    }   return newGeneration; }<\/code><\/pre>\n<h4>\u0424\u0438\u0442\u043d\u0435\u0441\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f (\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438)<\/h4>\n<p>\u041f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043e\u0442 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0434\u043e \u043c\u0435\u0441\u0442\u0430 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438. \u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f, \u0442\u0435\u043c \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442\u00a0<code>4<\/code>\u00a0\u043a\u043e\u043b\u0435\u0441 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0434\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445\u00a0<code>4<\/code>\u00a0\u0443\u0433\u043b\u043e\u0432 \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u042d\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u0435\u0440\u0435\u0439 (\u0443\u0440\u043e\u043d\u043e\u043c), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/073\/12b\/897\/07312b897068c25d5f4754fb150c316e.png\" width=\"1456\" height=\"754\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/073\/12b\/897\/07312b897068c25d5f4754fb150c316e.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0436\u0434\u044b\u043c \u043a\u043e\u043b\u0435\u0441\u043e\u043c \u0438 \u043a\u0430\u0436\u0434\u044b\u043c \u0443\u0433\u043b\u043e\u043c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0434\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430) \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<p>\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Pythagorean_theorem\" rel=\"noopener noreferrer nofollow\"><strong>\u0442\u0435\u043e\u0440\u0435\u043c\u044b \u041f\u0438\u0444\u0430\u0433\u043e\u0440\u0430<\/strong><\/a>\u00a0(\u0443\u0440\u0430! \u043e\u043d\u0430 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u0448\u043a\u043e\u043b\u044b!) \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">type NumVec3 = [number, number, number]; \/\/ Calculates the XZ distance between two points in space. \/\/ The vertical Y distance is not being taken into account. const euclideanDistance = (from: NumVec3, to: NumVec3) => {   const fromX = from[0];   const fromZ = from[2];   const toX = to[0];   const toZ = to[2];   return Math.sqrt((fromX - toX) ** 2 + (fromZ - toZ) ** 2); };<\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u043c \u0438 \u043c\u0435\u0441\u0442\u043e\u043c \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438 (\u0443\u0440\u043e\u043d) \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">type RectanglePoints = {   fl: NumVec3, \/\/ Front-left   fr: NumVec3, \/\/ Front-right   bl: NumVec3, \/\/ Back-left   br: NumVec3, \/\/ Back-right }; type GeometricParams = {   wheelsPosition: RectanglePoints,   parkingLotCorners: RectanglePoints, }; const carLoss = (params: GeometricParams): number => {   const { wheelsPosition, parkingLotCorners } = params;   const {     fl: flWheel,     fr: frWheel,     br: brWheel,     bl: blWheel,   } = wheelsPosition;   const {     fl: flCorner,     fr: frCorner,     br: brCorner,     bl: blCorner,   } = parkingLotCorners;   const flDistance = euclideanDistance(flWheel, flCorner);   const frDistance = euclideanDistance(frWheel, frCorner);   const brDistance = euclideanDistance(brWheel, brCorner);   const blDistance = euclideanDistance(blWheel, blCorner);   return (flDistance + frDistance + brDistance + blDistance) \/ 4; };<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u044c (<code>fitness<\/code>) \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430 \u0443\u0440\u043e\u043d\u0443 (<code>loss<\/code>), \u043c\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">const carFitness = (params: GeometricParams): number => {   const loss = carLoss(params);   \/\/ Adding +1 to avoid a division by zero.   return 1 \/ (loss + 1); };<\/code><\/pre>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u00a0<code>fitness<\/code>\u00a0\u0438\u00a0<code>loss<\/code>\u00a0\u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u043e\u043c\u0430 \u0438 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=evolution#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430<\/strong><\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ec0\/b09\/d65\/ec0b09d653acf506a9c1ce1d595f32e5.png\" width=\"1500\" height=\"671\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ec0\/b09\/d65\/ec0b09d653acf506a9c1ce1d595f32e5.png\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u044e<\/h3>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438. \u041c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u00ab\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0438\u0440\u00bb, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438, \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0438\u0434\u0442\u0438, \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 &#8212; \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 &#8212; \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u0430\u0448\u0438\u043d \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0442\u0440\u0435\u0445\u043c\u0435\u0440\u043d\u043e\u043c \u043c\u0438\u0440\u0435.\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>\u0421\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e &#8212; \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435 \u043a\u043e\u0434 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435,\u00a0<a href=\"https:\/\/github.com\/trekhleb\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Three.js<\/strong><\/a>:<\/p>\n<pre><code class=\"javascript\">\/\/ Evolution setup example. \/\/ Configurable via the Evolution Simulator. const GENERATION_SIZE = 1000; const LONG_LIVING_CHAMPIONS_PERCENTAGE = 6; const MUTATION_PROBABILITY = 0.04; const MAX_GENERATIONS_NUM = 40; \/\/ Fitness function. \/\/ It is like an annual doctor's checkup for the cars. const carFitnessFunction = (genome: Genome): number => {   \/\/ The evolution simulator calculates and stores the fitness values for each car in the fitnessValues map.   \/\/ Here we will just fetch the pre-calculated fitness value for the car in current generation.   const genomeKey = genome.join('');   return fitnessValues[genomeKey]; }; \/\/ Creating the \"world\" with the very first cars generation. let generationIndex = 0; let generation: Generation = createGeneration({   generationSize: GENERATION_SIZE,   genomeLength: GENOME_LENGTH, \/\/ &lt;- 180 genes }); \/\/ Starting the \"time\". while(generationIndex &lt; MAX_GENERATIONS_NUM) {   \/\/ SIMULATION IS NEEDED HERE to pre-calculate the fitness values.   \/\/ Selecting, mating, and mutating the current generation.   generation = select(     generation,     carFitnessFunction,     {       mutationProbability: MUTATION_PROBABILITY,       longLivingChampionsPercentage: LONG_LIVING_CHAMPIONS_PERCENTAGE,     },   );   \/\/ Make the \"time\" go by.   generationIndex += 1; } \/\/ Here we may check the fittest individuum of the latest generation. const fittestCar = generation[0];<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0<code>select()<\/code>\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u00a0<code>generation<\/code>\u00a0\u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435.<\/p>\n<p><strong>\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 1-\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f<\/strong>\u00a0\u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0433\u0435\u043d\u043e\u043c\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/770\/641\/d46\/770641d465d7e3ba4142bc4b36a3a481.gif\" width=\"960\" height=\"350\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/770\/641\/d46\/770641d465d7e3ba4142bc4b36a3a481.gif\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u224840-\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f<\/strong>\u00a0\u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0432\u0441\u0435 \u0431\u043b\u0438\u0436\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u044e\u0442\u0441\u044f \u043a \u043c\u0435\u0441\u0442\u0443 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5bc\/50c\/37d\/5bc50c37d5d6b6bfa863cec8e00399b9.gif\" width=\"960\" height=\"350\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5bc\/50c\/37d\/5bc50c37d5d6b6bfa863cec8e00399b9.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/131\/9d5\/8e7\/1319d58e74b391b3088476e7f6e72136.gif\" width=\"960\" height=\"337\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/131\/9d5\/8e7\/1319d58e74b391b3088476e7f6e72136.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e \u043f\u0443\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e-\u043b\u0438\u0448\u044c 40-\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u0440\u0430 \u0434\u043b\u044f \u043d\u0438\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0430\u043c \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0418\u0437 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u0443\u0440\u043e\u043d \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f (\u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0442\u0443\u0442).\u00a0<code>P50 Avg Loss<\/code>\u00a0\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0440\u043e\u043d\u0430 (\u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 \u0434\u043e \u043c\u0435\u0441\u0442\u0430 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438) \u0434\u043b\u044f\u00a0<code>50%<\/code>\u00a0\u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439.\u00a0<code>Min Loss<\/code>\u00a0\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0443\u0440\u043e\u043d \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/da7\/66c\/847\/da766c84778a50ba67515bed0a9ab67b.png\" width=\"1564\" height=\"664\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da7\/66c\/847\/da766c84778a50ba67515bed0a9ab67b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u00a0<code>50%<\/code>\u00a0\u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 \u0443\u0447\u0430\u0442\u0441\u044f \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0442\u044c\u0441\u044f \u043a \u043c\u0435\u0441\u0442\u0443 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438 (\u043e\u0442\u00a0<code>5,5\u043c<\/code>\u00a0\u043e\u0442 \u043c\u0435\u0441\u0442\u0430 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438 \u0434\u043e\u00a0<code>3,5\u043c<\/code>\u00a0\u0437\u0430\u00a0<code>35<\/code>\u00a0\u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0439). \u0422\u0440\u0435\u043d\u0434 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\u00a0<code>Min Loss<\/code>\u00a0\u043c\u0435\u043d\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d (\u043e\u0442\u00a0<code>1\u043c<\/code>\u00a0\u0434\u043e\u00a0<code>0,5\u043c<\/code>\u00a0\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0448\u0443\u043c\u043e\u043c), \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u0437 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0432\u044b\u0448\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u043c.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0441\u0432\u0435\u043b\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0438\u0437\u00a0<code>180<\/code>\u00a0\u0435\u0434\u0438\u043d\u0438\u0446 \u0438 \u043d\u0443\u043b\u0435\u0439 (\u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u043e\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f).<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b\u0438 \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u043d\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043d\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u0438\u0445 \u043b\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430).<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ?\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>\u0421\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0421\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=evolution#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u0430\u0448\u0438\u043d \u0441 \u043d\u0443\u043b\u044f<\/strong><\/a>\u00a0\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=automatic#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u043f\u0430\u0440\u043a\u0443\u044e\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e<\/strong><\/a><\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=manual#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/strong><\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438\u00a0<a href=\"https:\/\/github.com\/trekhleb\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>Evolution Simulator repository<\/strong><\/a>. \u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0435\u0445, \u043a\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u0445 \u043c\u0435\u043d\u044c\u0448\u0435 500 (\u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u0442\u0435\u0441\u0442\u043e\u0432), \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u043e\u0434\u00a0<a href=\"https:\/\/github.com\/trekhleb\/self-parking-car-evolution\/tree\/master\/src\/libs\" rel=\"noopener noreferrer nofollow\"><strong>\u0437\u0434\u0435\u0441\u044c<\/strong><\/a>\u00a0?.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u0441\u044f \u0435\u0449\u0435 \u0440\u044f\u0434\u00a0<strong>\u043d\u0435\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c<\/strong>\u00a0\u0441 \u043a\u043e\u0434\u043e\u043c \u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0437\u0433 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u043f\u0440\u043e\u0449\u0435\u043d \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e, \u0441\u043a\u0430\u0436\u0435\u043c, \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u043d\u0435\u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u044b\u043c \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044e \u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u043c \u0442\u0438\u043f\u0430\u043c \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u041c\u044b \u043d\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u043d\u0430\u0435\u0437\u0436\u0430\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u043d\u0435 \u00ab\u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442\u00bb \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0432\u0438\u043d\u044b \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0414\u0422\u041f.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u043d\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u044e \u043c\u0435\u043d\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u043e\u0447\u0435\u043d\u044c &#171;\u0442\u044f\u0436\u0435\u043b\u044b\u0439&#187; \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0443\u0447\u0438\u0442\u044c, \u0441\u043a\u0430\u0436\u0435\u043c, 1000 \u043c\u0430\u0448\u0438\u043d \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u0430\u0434\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0431\u044b\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0438\u00a0<a href=\"https:\/\/github.com\/trekhleb\/self-parking-car-evolution\/issues\" rel=\"noopener noreferrer nofollow\"><strong>\u043f\u0440.<\/strong><\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0446\u0435\u043b\u044c\u044e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u044b\u043b\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u043f\u0430\u0440\u043a\u0443\u044e\u0449\u0435\u0439\u0441\u044f Tesla. \u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u0432\u0440\u0435\u043c\u044f, \u0447\u0438\u0442\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044e, \u0434\u0430\u0436\u0435 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u044b\u0448\u0435 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c72\/633\/681\/c72633681dc8edfcb8333c0ec4d48f22.png\" width=\"1500\" height=\"516\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c72\/633\/681\/c72633681dc8edfcb8333c0ec4d48f22.png\"\/><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/580812\/\"> https:\/\/habr.com\/ru\/articles\/580812\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c \u0442\u0430\u0447\u043a\u0443 \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/blockquote>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b &#171;\u043d\u0430\u0443\u0447\u0438\u043c&#187; \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Genetic_algorithm\" rel=\"noopener noreferrer nofollow\"><strong>\u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/strong><\/a>.<\/p>\n<p><strong>\u0412 1-\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0438<\/strong>\u00a0\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0433\u0435\u043d\u043e\u043c \u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u043e, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>\u0412 \u224840-\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0438<\/strong>\u00a0\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u043f\u043e\u043d\u0435\u043c\u043d\u043e\u0433\u0443 \u043d\u0430\u0447\u043d\u0443\u0442 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435 \u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0435 \u0431\u043b\u0438\u0436\u0435 \u0438 \u0431\u043b\u0438\u0436\u0435 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443,<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u0414\u0430-\u0434\u0430, \u043c\u0430\u0448\u0438\u043d\u044b \u0432\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u043f\u043e \u043f\u0443\u0442\u0438, \u0438 \u043d\u0435\u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u043d\u043e \u0434\u043b\u044f \u043d\u0438\u0445 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e-\u043b\u0438\u0448\u044c 40-\u0435 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0438\u0440\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u043d\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b \u0438 \u0434\u0430\u0439\u0442\u0435 \u043c\u0430\u0448\u0438\u043d\u0430\u043c \u043f\u043e\u0434\u0440\u0430\u0441\u0442\u0438 \ud83d\ude00<\/p>\n<\/blockquote>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ?\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u044f\u043c\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0421\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438:<\/p>\n<ul>\n<li>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=evolution#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u0430\u0448\u0438\u043d \u0441 \u043d\u0443\u043b\u044f<\/strong><\/a>\u00a0\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=automatic#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u043f\u0430\u0440\u043a\u0443\u044e\u0442\u0441\u044f \u0443\u0436\u0435 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e<\/strong><\/a><\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=manual#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/strong><\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0413\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0430 TypeScript. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043d\u043e \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u0432\u00a0<a href=\"https:\/\/github.com\/trekhleb\/self-parking-car-evolution\" rel=\"noopener noreferrer nofollow\"><strong>\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430<\/strong><\/a>.<\/p>\n<blockquote>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0448\u0438\u043d \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u043d\u0438 \u0432 \u043a\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u043a \u043d\u0435\u043c\u0443.<\/p>\n<\/blockquote>\n<p>\u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0434\u0435\u0442\u0430\u043b\u044f\u043c&#8230;<\/p>\n<h3>\u041f\u043b\u0430\u043d<\/h3>\n<p>\u0428\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043c\u044b \u0441\u0432\u0435\u0434\u0435\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 180-\u0438 \u043d\u0443\u043b\u0435\u0439 \u0438 \u0435\u0434\u0438\u043d\u0438\u0446 (\u043a \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u043e\u043c\u0430).<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<ol>\n<li>\n<p>?? \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435\u00a0<strong>\u043c\u044b\u0448\u0446\u044b<\/strong>\u00a0(\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c, \u0440\u0443\u043b\u044c), \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>? \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435\u00a0<strong>\u0433\u043b\u0430\u0437\u0430<\/strong>\u00a0(\u0441\u0435\u043d\u0441\u043e\u0440\u044b), \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0448\u0438\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u043e\u043a\u0440\u0443\u0433.<\/p>\n<\/li>\n<li>\n<p>? \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435\u00a0<strong>\u043c\u043e\u0437\u0433<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0448\u0438\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u044b\u0448\u0446\u044b (\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u0430\u0448\u0438\u043d\u0430 \u0432\u0438\u0434\u0438\u0442 (\u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u043d\u0441\u043e\u0440\u044b). \u041c\u043e\u0437\u0433 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439\u00a0<code>movements = f(sensors)<\/code>.<\/p>\n<\/li>\n<li>\n<p>?\u00a0<strong>\u0420\u0430\u0437\u043e\u0432\u044c\u0435\u043c \u043c\u043e\u0437\u0433<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u041f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u0437\u0430 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0437\u0433\u0430\u00a0<code>movements = f(sensors)<\/code>\u00a0\u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0442\u044c \u0430\u0432\u0442\u043e \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0414\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u044b\u0448\u0446\u044b<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f, \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u00ab\u043c\u0443\u0441\u043a\u0443\u043b\u044b\u00bb. \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043c\u044b\u0448\u0446:<\/p>\n<ol>\n<li>\n<p><strong>\u041c\u044b\u0448\u0446\u0430-\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c<\/strong>\u00a0&#8212; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0435 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f\u00a0<em>\u2193 \u043d\u0430\u0437\u0430\u0434<\/em>,\u00a0<em>\u2191 \u0432\u043f\u0435\u0440\u0435\u0434<\/em>\u00a0\u0438\u043b\u0438\u00a0<em>\u25ce \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435<\/em>\u00a0(\u043d\u0435\u0439\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430)<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u044b\u0448\u0446\u0430-\u0440\u0443\u043b\u044c<\/strong>\u00a0&#8212; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0435 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u00a0<em>\u2190 \u0432\u043b\u0435\u0432\u043e<\/em>,\u00a0<em>\u2192 \u0432\u043f\u0440\u0430\u0432\u043e<\/em>\u00a0\u0438\u043b\u0438\u00a0<em>\u25ce \u0435\u0445\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e<\/em>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043c\u044b\u0448\u0446 \u043c\u0430\u0448\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b\u0448\u0446\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u043c\u043e\u0437\u0433\u0430 \u043a\u0430\u0436\u0434\u044b\u0435 100 \u043c\u0441 (\u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434). \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043c\u043e\u0437\u0433\u0430 \u043c\u044b\u0448\u0446\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u00ab\u043c\u043e\u0437\u0433\u043e\u0432\u0443\u044e\u00bb \u0447\u0430\u0441\u0442\u044c \u043d\u0438\u0436\u0435, \u0430 \u043f\u043e\u043a\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0448 \u043c\u043e\u0437\u0433 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 3 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u044b\u0448\u0446\u0435:\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>+1<\/code>.<\/p>\n<pre><code class=\"javascript\">type MuscleSignal = -1 | 0 | 1;<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0437\u0433 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c\u00a0<code>+1<\/code>\u00a0\u0432 \u043c\u044b\u0448\u0446\u0443 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f, \u0438 \u043e\u043d \u043d\u0430\u0447\u043d\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432\u043f\u0435\u0440\u0435\u0434. \u0421\u0438\u0433\u043d\u0430\u043b\u00a0<code>-1<\/code>\u00a0\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0430\u0437\u0430\u0434. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0435\u0441\u043b\u0438 \u043c\u043e\u0437\u0433 \u043f\u043e\u0448\u043b\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u00a0<code>-1<\/code>\u00a0\u0432 \u043c\u044b\u0448\u0446\u0443 \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043e\u043d \u043f\u043e\u0432\u0435\u0440\u043d\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0443 \u0432\u043b\u0435\u0432\u043e \u0438 \u0442.\u0434.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043c\u043e\u0437\u0433\u0430 \u0441\u043e\u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u043c\u044b\u0448\u0446:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=manual#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>\u00a0\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043c\u0443\u0441\u043a\u0443\u043b\u044b \u043c\u0430\u0448\u0438\u043d\u044b. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u0442\u0435 \u043e\u0434\u043d\u0443 \u0438\u0437 \u043a\u043b\u0430\u0432\u0438\u0448 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b\u00a0<code>WASD<\/code>\u00a0(\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a), \u0432\u044b \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0435 \u044d\u0442\u0438\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>+1<\/code>\u00a0\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044e \u0438 \u043c\u044b\u0448\u0446\u0430\u043c \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/blockquote>\n<h3>\u0414\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u0435 \u0433\u043b\u0430\u0437\u0430<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0432\u043e\u0438 \u043c\u044b\u0448\u0446\u044b, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u00ab\u0432\u0438\u0434\u0435\u0442\u044c\u00bb \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0443\u044e \u0441\u0440\u0435\u0434\u0443. \u0414\u0430\u0434\u0438\u043c \u043c\u0430\u0448\u0438\u043d\u0435\u00a0<code>8<\/code>\u00a0\u0433\u043b\u0430\u0437 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u0442\u00a0<code>0<\/code>\u00a0\u0434\u043e\u00a0<code>4<\/code>\u00a0\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u00ab\u0432\u0438\u0434\u0438\u0442\u00bb \u0432 \u00ab\u043c\u043e\u0437\u0433\u00bb \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u043a\u0430\u0436\u0434\u044b\u0435\u00a0<code>100 \u043c\u0441<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0434\u0430\u0442\u0447\u0438\u043a \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439, \u043e\u043d \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0<code>0<\/code>. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043d\u043e \u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>0.01 \u043c<\/code>), \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435 \u0431\u043b\u0438\u0437\u043a\u043e.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f\u00a0<a href=\"https:\/\/trekhleb.dev\/self-parking-car-evolution?parking=manual#\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438<\/strong><\/a>\u00a0\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0446\u0432\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435.<\/p>\n<\/blockquote>\n<pre><code class=\"javascript\">type Sensors = number[];<\/code><\/pre>\n<h3>\u0414\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u043e\u0437\u0433<\/h3>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u00ab\u0432\u0438\u0434\u0435\u0442\u044c\u00bb \u0438 \u00ab\u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f\u00bb, \u043d\u043e \u0443 \u043d\u0435\u0435 \u043d\u0435\u0442 \u00ab\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0440\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u043b \u0431\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043e\u0442 \u00ab\u0433\u043b\u0430\u0437\u00bb \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u00ab\u043c\u0443\u0441\u043a\u0443\u043b\u043e\u0432\u00bb. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0435 \u00ab\u043c\u043e\u0437\u0433\u00bb.<\/p>\n<h4>\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0437\u0433\u0430<\/h4>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043c\u043e\u0437\u0433 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c\u00a0<code>8<\/code>\u00a0\u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0435\u00a0<code>100ms<\/code>, \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435\u00a0<code>[0...4]<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0442 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code>const sensors: Sensors = [s0, s1, s2, s3, s4, s5, s6, s7]; \/\/ i.e. ? \u2190 [0, 0.5, 4, 0.002, 0, 3.76, 0, 1.245]<\/code><\/pre>\n<h4>\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0437\u0433\u0430<\/h4>\n<p>\u041a\u0430\u0436\u0434\u044b\u0435\u00a0<code>100ms<\/code>\u00a0\u043c\u043e\u0437\u0433 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0434\u0432\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u043b\u0430:<\/p>\n<ol>\n<li>\n<p>\u041e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e &#8212; \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f\u00a0<code>engineSignal<\/code><\/p>\n<\/li>\n<li>\n<p>\u0414\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e &#8212; \u0441\u0438\u0433\u043d\u0430\u043b \u0434\u043b\u044f \u0440\u0443\u043b\u044f\u00a0<code>wheelSignal<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u0438\u043f\u00a0<code>MuscleSignal<\/code>\u00a0\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0442\u0440\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>, \u0438\u043b\u0438\u00a0<code>+1<\/code>.<\/p>\n<h4>\u041c\u043e\u0437\u0433\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/h4>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u0432\u044b\u0448\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0437\u0433\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u043e\u0437\u0433 &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code>const { engineSignal, wheelSignal } = brainToMuscleSignal(   brainFunction(sensors) ); \/\/ i.e. { engineSignal: 0, wheelSignal: -1 } \u2190 ? \u2190 [0, 0.5, 4, 0.002, 0, 3.76, 0, 1.245]<\/code><\/pre>\n<p>\u0413\u0434\u0435\u00a0<code>brainToMuscleSignal()<\/code>\u00a0&#8212; \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u043e\u0437\u0433\u0430 (\u043b\u044e\u0431\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439) \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043c\u044b\u0448\u0446 (\u0432 \u043e\u0434\u043d\u043e \u0438\u0437 \u0447\u0438\u0441\u0435\u043b\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>, \u0438\u043b\u0438\u00a0<code>+1<\/code>), \u0447\u0442\u043e\u0431\u044b \u043c\u044b\u0448\u0446\u044b \u043c\u043e\u0433\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c. \u041c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c\u00a0<code>brainFunction()<\/code>?<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 &#171;\u0443\u043c\u043d\u0435\u0435&#187;, \u0430 \u0435\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f &#8212; \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438, \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Multilayer_perceptron\" rel=\"noopener noreferrer nofollow\"><strong>\u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0439 \u043f\u0435\u0440\u0446\u0435\u043f\u0442\u0440\u043e\u043d<\/strong><\/a>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0443\u0433\u0430\u044e\u0449\u0435\u0435, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 (\u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u0435\u0435 \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432\/\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432).<\/p>\n<blockquote>\n<p>\u042f \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u0441\u043d\u0443\u043b\u0441\u044f \u0442\u0435\u043c\u044b \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0445 \u043f\u0435\u0440\u0446\u0435\u043f\u0442\u0440\u043e\u043d\u043e\u0432 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445\u00a0<a href=\"https:\/\/github.com\/trekhleb\/homemade-machine-learning#-multilayer-perceptron-mlp\" rel=\"noopener noreferrer nofollow\"><strong>homemade-machine-learning<\/strong><\/a>,\u00a0<a href=\"https:\/\/github.com\/trekhleb\/machine-learning-experiments#multilayer-perceptron-mlp-or-simple-neural-network-nn\" rel=\"noopener noreferrer nofollow\"><strong>machine-learning-experiments<\/strong><\/a>\u00a0\u0438\u00a0<a href=\"https:\/\/github.com\/trekhleb\/nano-neuron\" rel=\"noopener noreferrer nofollow\"><strong>nano-neuron<\/strong><\/a>\u00a0projects. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0443\u044e \u0441\u0435\u0442\u044c\u00a0<a href=\"https:\/\/trekhleb.dev\/machine-learning-experiments\/#\/experiments\/DigitsRecognitionMLP\" rel=\"noopener noreferrer nofollow\"><strong>\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0430\u043c\u0438 \u0446\u0438\u0444\u0440\u044b<\/strong><\/a>.<\/p>\n<\/blockquote>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0430\u00a0<strong>\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u0430<\/strong>\u00a0\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 (\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u044b\u043c, \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u043e\u0432\u043d\u043e\u00a0<code>8<\/code>\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c\u00a0<code>8<\/code>\u00a0\u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code>engineSignal = brainToMuscleSignal(   (e0 * s0) + (e1 * s1) + ... + (e7 * s7) + e8 \/\/ &lt;- brainFunction )  wheelSignal = brainToMuscleSignal(   (w0 * s0) + (w1 * s1) + ... + (w7 * s7) + w8 \/\/ &lt;- brainFunction )<\/code><\/pre>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>[s0, s1, ..., s7]<\/code>\u00a0&#8212;\u00a0<code>8<\/code>\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f\u00a0<code>8<\/code>\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><code>[e0, e1, ..., e8]<\/code>\u00a0&#8212;\u00a0<code>9<\/code>\u00a0\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f. \u042d\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u044b\u0441\u043a\u0430\u0442\u044c\/\u0432\u044b\u0443\u0447\u0438\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><code>[w0, w1, ..., w8]<\/code>\u00a0&#8212;\u00a0<code>9<\/code>\u00a0\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u044b\u0441\u043a\u0430\u0442\u044c\/\u0432\u044b\u0443\u0447\u0438\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0426\u0435\u043d\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043c\u043e\u0437\u0433\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0431\u043e\u0431\u0449\u0430\u0442\u044c \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044e. \u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0442\u043e\u044f\u043d\u043a\u0438 \u0438 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442\u044c.<\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\">type Coefficients = number[]; \/\/ Calculates the value of a linear polynomial based on the coefficients and variables. const linearPolynomial = (coefficients: Coefficients, variables: number[]): number => {   if (coefficients.length !== (variables.length + 1)) {     throw new Error('Incompatible number of polynomial coefficients and variables');   }   let result = 0;   coefficients.forEach((coefficient: number, coefficientIndex: number) => {     if (coefficientIndex &lt; variables.length) {       result += coefficient * variables[coefficientIndex];     } else {       \/\/ The last coefficient needs to be added up without multiplication.       result += coefficient     }   });   return result; };<\/code><\/pre>\n<p>\u041c\u043e\u0437\u0433 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u043e\u0432 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">const engineSignal: MuscleSignal = brainToMuscleSignal(   linearPolynomial(engineCoefficients, sensors) ); const wheelSignal: MuscleSignal = brainToMuscleSignal(   linearPolynomial(wheelCoefficients, sensors) );<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0<code>linearPolynomial()<\/code>\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u0424\u0443\u043d\u043a\u0446\u0438\u044f\u00a0<code>brainToMuscleSignal()<\/code>\u00a0\u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0442\u0440\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u043b\u0430, \u0438 \u043e\u043d\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0448\u0438\u0440\u043e\u043a\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>0.456<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>3673.45<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>-280<\/code>) \u0432 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430\u00a0<code>(0...1)<\/code>\u00a0(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440,\u00a0<code>0.05<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>0.86<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0439\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435\u00a0<code>(0...1)<\/code>\u00a0\u0432 \u043e\u0434\u043d\u043e \u0438\u0437 \u0442\u0440\u0435\u0445 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\u00a0<code>-1<\/code>,\u00a0<code>0<\/code>, \u0438\u043b\u0438\u00a0<code>+1<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a\u00a0<code>0<\/code>, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u00a0<code>-1<\/code>, \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a\u00a0<code>0.5<\/code>, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u00a0<code>0<\/code>, \u0430 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a\u00a0<code>+1<\/code>, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u00a0<code>+1<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Sigmoid_function\" rel=\"noopener noreferrer nofollow\"><strong>\u0441\u0438\u0433\u043c\u043e\u0438\u0434\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0443:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0438\u0433\u043c\u043e\u0438\u0434 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u043e\u0441\u044c\u00a0<code>x<\/code>) \u0432 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c\u00a0<code>(0...1)<\/code>\u00a0(\u043e\u0441\u044c\u00a0<code>y<\/code>). \u042d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0448\u0430\u0433\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0441\u0438\u0433\u043c\u043e\u0438\u0434\u044b.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0432\u0443\u0445 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u044b\u0448\u0435 \u0448\u0430\u0433\u043e\u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">\/\/ Calculates the sigmoid value for a given number. const sigmoid = (x: number): number => {   return 1 \/ (1 +<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-416053","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/416053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=416053"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/416053\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=416053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=416053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=416053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}