{"id":306376,"date":"2020-07-03T15:00:39","date_gmt":"2020-07-03T15:00:39","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=306376"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2020-07-03T15:00:39","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=306376","title":{"rendered":"Web-\u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u00ab\u0412\u041a\u0424-\u0440\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u00bb"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/509338\/\">\u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0447\u043d\u043e \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043c\u0435\u0441\u0442\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0438 \u0440\u0435\u043a\u0443\u0440\u0440\u0435\u043d\u0442\u043d\u044b\u043c\u0438, \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 GAN \u0438 LTSM-\u0441\u0435\u0442\u0435\u0439. \u041a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u043e\u043a, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u0438\u0445 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u043e\u043d\u0438 \u0435\u0449\u0435 \u0441\u0442\u0440\u0430\u0434\u0430\u044e\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0442\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c\u0443 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zk\/vs\/b9\/zkvsb9zh3kabo0u-izlokug_xkk.jpeg\"><br \/>  <a name=\"habracut\"><\/a><br \/>  \u042d\u0442\u043e \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c\u0443 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044e, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0442\u0435\u043e\u0440\u0438\u0438 \u0440\u0435\u0448\u0435\u0442\u043e\u043a. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0431\u043e\u0440 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h4>1. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430<\/h4>\n<p>  \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u0421++ \u043a\u0430\u043a \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0437\u0430\u0442\u0435\u043c \u0431\u044b\u043b\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0430 \u0441 \u0411\u0414 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0421\u0423\u0411\u0414 MariaDB (\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 mari\u0430db++), \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0430 \u0432 \u0421Python-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 (\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u0430 pybind11). <br \/>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u044b\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u041a\u0430\u043b\u0438\u0444\u043e\u0440\u043d\u0438\u0438 \u0432 \u0433. \u0418\u0440\u0432\u0430\u0439\u043d. <\/p>\n<p>  \u041d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 Mushrooms, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f 8124 \u0433\u0440\u0438\u0431\u043e\u0432 \u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0439 \u0410\u043c\u0435\u0440\u0438\u043a\u0438, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 100% \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0422\u043e\u0447\u043d\u0435\u0435, \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0443\u044e \u0432\u044b\u0431\u043e\u0440\u043a\u0443 (2088 \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u044b\u0445 \u0438 1944 \u044f\u0434\u043e\u0432\u0438\u0442\u044b\u0445 \u0433\u0440\u0438\u0431\u0430) \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0432\u044b\u0431\u043e\u0440\u043a\u0443 (2120 \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u044b\u0445 \u0438 1972 \u044f\u0434\u043e\u0432\u0438\u0442\u044b\u0445). \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u043e\u043b\u043e 100 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u0445 \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0422\u0430\u043a \u043a\u0430\u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043f\u0430\u0440\u0435\u043d\u043d\u0443\u044e \u0446\u0435\u043f\u044c \u041c\u0430\u0440\u043a\u043e\u0432\u0430, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c \u043f\u043e\u0440\u043e\u0434\u0438\u0442\u044c 50 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0433\u0438\u043f\u043e\u0442\u0435\u0437. \u0417\u0430\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u0447\u0438\u043d \u044f\u0434\u043e\u0432\u0438\u0442\u043e\u0441\u0442\u0438, \u0447\u0438\u0441\u043b\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 120, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041d\u0430 Kaggle.com \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/www.kaggle.com\/uciml\/mushroom-classification\" rel=\"nofollow\">Mushroom Classification<\/a>, \u0433\u0434\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 100% \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u2014 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041d\u0430\u0448 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0440\u0438\u0431\u043d\u0438\u043a\u0443 \u0432\u044b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u043a\u043e\u043b\u043e 50 \u043f\u0440\u0430\u0432\u0438\u043b. \u0422\u0430\u043a \u043a\u0430\u043a \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b, \u0442\u043e \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u044a\u044e\u043d\u043a\u0446\u0438\u0435\u0439 \u043c\u0430\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0445 \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u0440\u0438\u0431\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0438\u0434\u0442\u0438 \u0437\u0430 \u0433\u0440\u0438\u0431\u0430\u043c\u0438, \u043d\u0435 \u0431\u043e\u044f\u0441\u044c \u0432\u0437\u044f\u0442\u044c \u043f\u043e\u0433\u0430\u043d\u043a\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u044b\u0439 \u0433\u0440\u0438\u0431.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0433\u0438\u043f\u043e\u0442\u0435\u0437, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0433\u0440\u0438\u0431 \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u044b\u0439:<br \/>  [(&#8216;gill_attachment&#8217;, &#8216;free&#8217;), (&#8216;gill_spacing&#8217;, &#8216;close&#8217;), (&#8216;gill_size&#8217;, &#8216;broad&#8217;), (&#8216;stalk_shape&#8217;, &#8216;enlarging&#8217;), (&#8216;stalk_surface_below_ring&#8217;, &#8216;scaly&#8217;), (&#8216;veil_type&#8217;, &#8216;partial&#8217;), (&#8216;veil_color&#8217;, &#8216;white&#8217;), (&#8216;ring_number&#8217;, &#8216;one&#8217;), (&#8216;ring_type&#8217;, &#8216;pendant&#8217;)]<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0449\u0430\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e 9 \u0438\u0437 22 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c 13 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 \u0443 \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u044b\u0445 \u0433\u0440\u0438\u0431\u043e\u0432, \u043f\u043e\u0440\u043e\u0434\u0438\u0432\u0448\u0438\u0445 \u044d\u0442\u0443 \u043f\u0440\u0438\u0447\u0438\u043d\u0443, \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0431\u044b\u043b SPECT Hearts. \u0422\u0430\u043c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b\u0430 86.1%, \u0447\u0442\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 (84%) \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f CLIP3, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u041f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0438\u0437-\u0437\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u043e\u043c\u043e\u0433\u0440\u0430\u043c\u043c \u0441\u0435\u0440\u0434\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043c \u0443\u0436\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c.<\/p>\n<p>  \u0410\u0432\u0442\u043e\u0440 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b (\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b) \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u043c\u0438 (\u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438) \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u0435 \u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u0435 C4.5 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u043e \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 Wine Quality. \u042d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0445 \u0432\u0438\u043d. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0431\u043d\u0430\u0434\u0435\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435: \u0435\u0441\u043b\u0438 \u0431\u0440\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u0440\u0430\u0441\u043d\u044b\u0435 \u0432\u0438\u043d\u0430, \u0442\u043e \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0442 \u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u043e\u0446\u0435\u043d\u043a\u0438.<\/p>\n<h4>2. \u0412\u044b\u0431\u043e\u0440 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b<\/h4>\n<p>  \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0443\u0441\u0438\u043b\u0438\u044f\u043c\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0420\u0413\u0413\u0423 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0438\u044f web-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0437\u0430\u0434\u0430\u0447 (\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u044f\u0437\u043a\u0438 Nginx + Gunicorn + Django). <\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u0441\u0432\u043e\u0439 \u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 (\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u044f\u0437\u043a\u0438 aiohttp, aiojobs \u0438 aiomysql). \u041c\u043e\u0434\u0443\u043b\u044c aiomcache \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u044e\u0441\u043e\u0432 \u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:  <\/p>\n<ol>\n<li> \u043e\u043d \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0438\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f aiohttp;<\/li>\n<li> \u043e\u043d \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 Jinja2;<\/li>\n<li> \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u0443\u043b\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043a \u0411\u0414 \u0447\u0435\u0440\u0435\u0437 aiomysql;<\/li>\n<li> \u043e\u043d \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 aiojobs.aiohttp.spawn.<\/li>\n<\/ol>\n<p>  \u0423\u043a\u0430\u0436\u0435\u043c \u0438 \u043d\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441\u044b (\u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 Django):  <\/p>\n<ol>\n<li> \u043d\u0435\u0442 Object Relational Mapping (ORM);<\/li>\n<li> \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 proxy-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 Nginx;<\/li>\n<li> \u043d\u0435\u0442 Django Template Language (DTL).<\/li>\n<\/ol>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0430\u0446\u0435\u043b\u0435\u043d \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 web-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f (\u043d\u0430 Django) \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0411\u0414. \u0425\u043e\u0442\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0437\u0430\u043c\u0435\u0442\u043a\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430\u0446\u0435\u043b\u0435\u043d \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c (\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430) \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0411\u0414, \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u043e \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u0442\u043a\u0438 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432, \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0435 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438 \u0438 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0440\u043e\u0433\u043e\u0432 \u0434\u043b\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0445). \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0412\u041a\u0424-\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435, \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\/\u0438\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0447\u0435\u0442\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (vkf) \u0441 \u0434\u0432\u0443\u043c\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 (users, experiments). \u0415\u0441\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 user \u0445\u0440\u0430\u043d\u0438\u0442 login \u0438 password \u0432\u0441\u0435\u0445 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0442\u043e experiments \u043a\u0440\u043e\u043c\u0435 \u0438\u043c\u0435\u043d \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446. \u041c\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043e\u0442 aiohttp_session, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c proxy-\u0441\u0435\u0440\u0432\u0435\u0440 Nginx \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0412\u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b experiments:  <\/p>\n<ul>\n<li>id int(11) NOT NULL PRIMARY KEY<\/li>\n<li>expName varchar(255) NOT NULL<\/li>\n<li>encoder varchar(255)<\/li>\n<li>goodEncoder tinyint(1)<\/li>\n<li>lattices varchar(255)<\/li>\n<li>goodLattices tinyint(1)<\/li>\n<li>complex varchar(255)<\/li>\n<li>goodComplex tinyint(1)<\/li>\n<li>verges varchar(255)<\/li>\n<li>goodVerges tinyint(1)<\/li>\n<li>vergesTotal int(11)<\/li>\n<li>trains varchar(255) NOT NULL<\/li>\n<li>goodTrains tinyint(1)<\/li>\n<li>tests varchar(255)<\/li>\n<li>goodTests tinyint(1)<\/li>\n<li>hypotheses varchar(255) NOT NULL<\/li>\n<li>goodHypotheses tinyint(1)<\/li>\n<li>type varchar(255) NOT NULL<\/li>\n<\/ul>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0412\u041a\u0424-\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0438 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u0421\u043b\u0443\u0447\u0430\u0439 \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u043e\u0438\u0445 \u0442\u0438\u043f\u043e\u0432.<\/p>\n<p>  \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439: =&gt; goodLattices (\u043f\u043e\u043b\u0443\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<br \/>  \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439: goodLattices =&gt; goodEncoder (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<br \/>  \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439: goodEncoder =&gt; goodTrains (\u043f\u043e\u043b\u0443\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<br \/>  \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439: goodEncoder, goodTrains =&gt; goodHypotheses (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<br \/>  \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439: goodEncoder =&gt; goodTests (\u043f\u043e\u043b\u0443\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<br \/>  \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439: goodTests, goodEncoder, goodHypotheses =&gt; (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<br \/>  \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439: =&gt; goodVerges (\u0440\u0443\u0447\u043d\u043e\u0439)<br \/>  \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439: goodVerges =&gt; goodTrains (\u0440\u0443\u0447\u043d\u043e\u0439)<br \/>  \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439: goodTrains =&gt; goodComplex (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<br \/>  \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439: goodComplex, goodTrains =&gt; goodHypotheses (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<br \/>  \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439: goodVerges =&gt; goodTests (\u0440\u0443\u0447\u043d\u043e\u0439)<br \/>  \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439: goodTests, goodComplex, goodHypotheses =&gt; (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439)<\/p>\n<p>  \u0421\u0430\u043c\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0438\u043c\u044f vkf.cpython-36m-x86_64-linux-gnu.so \u043f\u043e\u0434 Linux \u0438\u043b\u0438 vkf.cpython-36.pyd \u043f\u043e\u0434 Windows. (36 \u2014 \u044d\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044f Python, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430\u0441\u044c).<\/p>\n<p>  \u0422\u0435\u0440\u043c\u0438\u043d \u00ab\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u00ab\u043f\u043e\u043b\u0443\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 vkfencoder.cpython-36m-x86_64-linux-gnu.so. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u00ab\u0440\u0443\u0447\u043d\u043e\u0439\u00bb \u0440\u0435\u0436\u0438\u043c \u2014 \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u044b\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 vkfencoder.<\/p>\n<h4>3. \u0414\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h4>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 web-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434 \u00abView\/Model\/Control\u00bb<\/p>\n<p>  \u041a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u0432 5 \u0444\u0430\u0439\u043b\u0430\u0445:  <\/p>\n<ol>\n<li> app.py \u2014 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/li>\n<li> control.py \u2014 \u0444\u0430\u0439\u043b \u0441 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0412\u041a\u0424-\u0440\u0435\u0448\u0430\u0442\u0435\u043b\u0435\u043c<\/li>\n<li> models.py \u2014 \u0444\u0430\u0439\u043b \u0441 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0411\u0414<\/li>\n<li> settings.py \u2014 \u0444\u0430\u0439\u043b \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/li>\n<li> views.py \u2014 \u0444\u0430\u0439\u043b \u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 (routes).<\/li>\n<\/ol>\n<p>  \u0424\u0430\u0439\u043b app.py \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u0438\u0434:  <\/p>\n<pre><code class=\"python\">#! \/usr\/bin\/env python import asyncio import jinja2 import aiohttp_jinja2  from settings import SITE_HOST as siteHost from settings import SITE_PORT as sitePort  from aiohttp import web from aiojobs.aiohttp import setup  from views import routes  async def init(loop):     app = web.Application(loop=loop)     # install aiojobs.aiohttp     setup(app)     # install jinja2 templates     aiohttp_jinja2.setup(app,          loader=jinja2.FileSystemLoader('.\/template'))     # add routes from api\/views.py     app.router.add_routes(routes)     return app  loop = asyncio.get_event_loop() try:     app = loop.run_until_complete(init(loop))     web.run_app(app, host=siteHost, port=sitePort) except:     loop.stop() <\/code><\/pre>\n<p>  \u041d\u0435 \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0447\u0442\u043e-\u0442\u043e \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u0445. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0444\u0430\u0439\u043b \u2014 views.py:  <\/p>\n<pre><code class=\"python\">import aiohttp_jinja2 from aiohttp import web#, WSMsgType from aiojobs.aiohttp import spawn#, get_scheduler from models import User from models import Expert from models import Experiment from models import Solver from models import Predictor  routes = web.RouteTableDef()  @routes.view(r'\/tests\/{name}', name='test-name') class Predict(web.View):     @aiohttp_jinja2.template('tests.html')     async def get(self):         return {'explanation': 'Please, confirm prediction!'}      async def post(self):         data = await self.request.post()         db_name = self.request.match_info['name']         analogy = Predictor(db_name, data)         await analogy.load_data()         job = await spawn(self.request, analogy.make_prediction())         return await job.wait()  @routes.view(r'\/vkf\/{name}', name='vkf-name') class Generate(web.View):     #@aiohttp_jinja2.template('vkf.html')     async def get(self):         db_name = self.request.match_info['name']         solver = Solver(db_name)         await solver.load_data()         context = { 'dbname': str(solver.dbname),                     'encoder': str(solver.encoder),                     'lattices': str(solver.lattices),                     'good_lattices': bool(solver.lattices),                     'verges': str(solver.verges),                     'good_verges': bool(solver.good_verges),                     'complex': str(solver.complex),                     'good_complex': bool(solver.good_complex),                     'trains': str(solver.trains),                     'good_trains': bool(solver.good_trains),                     'hypotheses': str(solver.hypotheses),                     'type': str(solver.type)             }         response = aiohttp_jinja2.render_template('vkf.html',              self.request, context)         return response                  async def post(self):         data = await self.request.post()         step = data.get('value')         db_name = self.request.match_info['name']         if step is 'init':             location = self.request.app.router['experiment-name'].url_for(                 name=db_name)             raise web.HTTPFound(location=location)         solver = Solver(db_name)         await solver.load_data()         if step is 'populate':             job = await spawn(self.request, solver.create_tables())             return await job.wait()                         if step is 'compute':             job = await spawn(self.request, solver.compute_tables())             return await job.wait()                         if step is 'generate':             hypotheses_total = data.get('hypotheses_total')             threads_total = data.get('threads_total')             job = await spawn(self.request, solver.make_induction(                 hypotheses_total, threads_total))             return await job.wait()                  @routes.view(r'\/experiment\/{name}', name='experiment-name') class Prepare(web.View):     @aiohttp_jinja2.template('expert.html')     async def get(self):         return {'explanation': 'Please, enter your data'}      async def post(self):         data = await self.request.post()         db_name = self.request.match_info['name']         experiment = Experiment(db_name, data)         job = await spawn(self.request, experiment.create_experiment())         return await job.wait() <\/code><\/pre>\n<p>  \u042f \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u0432\u044b\u043a\u0438\u043d\u0443\u0432 \u043a\u043b\u0430\u0441\u0441\u044b, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b:  <\/p>\n<ol>\n<li>\u043a\u043b\u0430\u0441\u0441 Auth \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c\u0443 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443 &#8216;\/&#8217; \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0430 SignIn, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443 &#8216;\/signin&#8217;. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u043b\u043e\u0433\u0438\u043d\u043e\u043c \u0438 \u043f\u0430\u0440\u043e\u043b\u0435\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043e\u043d \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443 &#8216;\/user\/{name}&#8217;.<\/li>\n<li>\u043a\u043b\u0430\u0441\u0441 SignIn \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 &#8216;\/signin&#8217; \u0438 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442.<\/li>\n<li>\u043a\u043b\u0430\u0441\u0441 Select \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b &#8216;\/user\/{name}&#8217; \u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0436\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0411\u0414 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 &#8216;\/vkf\/{name}&#8217; \u0438\u043b\u0438 &#8216;\/experiment\/{name}&#8217; (\u0435\u0441\u043b\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0435\u0449\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e).<\/li>\n<\/ol>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0437\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u044d\u0442\u0430\u043f\u044b \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f:  <\/p>\n<ol>\n<li>\u043a\u043b\u0430\u0441\u0441 Prepare \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b &#8216;\/experiment\/{name}&#8217; \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u0430 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434\u0430. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0411\u0414 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 &#8216;\/vkf\/{name}&#8217;.<\/li>\n<li>\u043a\u043b\u0430\u0441\u0441 Generate \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b &#8216;\/vkf\/{name}&#8217; \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0438\u043d\u0434\u0443\u043a\u0446\u0438\u0438 \u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u043c.<\/li>\n<li>\u043a\u043b\u0430\u0441\u0441 Predict \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b &#8216;\/tests\/{name}&#8217; \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438.<\/li>\n<\/ol>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0443 vkf.html \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0438\u0437 aiohttp_jinja2  <\/p>\n<pre><code class=\"python\">response = aiohttp_jinja2.render_template('vkf.html', self.request, context) return response<\/code><\/pre>\n<p>  \u041e\u0442\u043c\u0435\u0442\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 spawn \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 aiojobs.aiohttp:  <\/p>\n<pre><code class=\"python\">job = await spawn(self.request,      solver.make_induction(hypotheses_total, threads_total)) return await job.wait()<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435 models.py, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u0432 \u0411\u0414 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0421\u0423\u0411\u0414 MariaDB:  <\/p>\n<pre><code class=\"python\">import aiomysql from aiohttp import web  from settings import AUX_NAME as auxName from settings import AUTH_TABLE as authTable from settings import AUX_TABLE as auxTable from settings import SECRET_KEY as secretKey from settings import DB_HOST as dbHost  from control import createAuxTables from control import createMainTables from control import computeAuxTables from control import induction from control import prediction  class Experiment():     def __init__(self, dbName, data, **kw):         self.encoder = data.get('encoder_table')         self.lattices = data.get('lattices_table')         self.complex = data.get('complex_table')         self.verges = data.get('verges_table')         self.verges_total = data.get('verges_total')         self.trains = data.get('training_table')         self.tests = data.get('tests_table')         self.hypotheses = data.get('hypotheses_table')         self.type = data.get('type')         self.auxname = auxName         self.auxtable = auxTable         self.dbhost = dbHost         self.secret = secretKey         self.dbname = dbName      async def create_db(self, pool):         async with pool.acquire() as conn:             async with conn.cursor() as cur:                 await cur.execute(&quot;CREATE DATABASE IF NOT EXISTS &quot; +                     str(self.dbname))                  await conn.commit()          await createAuxTables(self)       async def register_experiment(self, pool):         async with pool.acquire() as conn:             async with conn.cursor() as cur:                 sql = &quot;INSERT INTO &quot; + str(self.auxname) + &quot;.&quot; +                      str(self.auxtable)                 sql += &quot; VALUES(NULL, '&quot;                  sql += str(self.dbname)                  sql += &quot;', '&quot;                  sql += str(self.encoder)                  sql += &quot;', 0, '&quot; #goodEncoder                 sql += str(self.lattices)                  sql += &quot;', 0, '&quot; #goodLattices                 sql += str(self.complex)                  sql += &quot;', 0, '&quot; #goodComplex                  sql += str(self.verges_total)                  sql += &quot;', 0, &quot; #goodVerges                 sql += str(self.verges_total)                  sql += &quot;, '&quot;                  sql += str(self.trains)                  sql += &quot;', 0, '&quot; #goodTrains                  sql += str(self.tests)                  sql += &quot;', 0, '&quot; #goodTests                  sql += str(self.hypotheses)                  sql += &quot;', 0, '&quot; #goodHypotheses                  sql += str(self.type)                 sql += &quot;')&quot;                 await cur.execute(sql)                 await conn.commit()       async def create_experiment(self, **kw):         pool = await aiomysql.create_pool(host=self.dbhost,              user='root', password=self.secret)         task1 = self.create_db(pool=pool)         task2 = self.register_experiment(pool=pool)         tasks = [asyncio.ensure_future(task1),              asyncio.ensure_future(task2)]         await asyncio.gather(*tasks)         pool.close()         await pool.wait_closed()         raise web.HTTPFound(location='\/vkf\/' + self.dbname)          class Solver():     def __init__(self, dbName, **kw):         self.auxname = auxName         self.auxtable = auxTable         self.dbhost = dbHost         self.dbname = dbName         self.secret = secretKey      async def load_data(self, **kw):             pool = await aiomysql.create_pool(host=dbHost,              user='root', password=secretKey, db=auxName)         async with pool.acquire() as conn:             async with conn.cursor() as cur:                 sql = &quot;SELECT * FROM &quot;                 sql += str(auxTable)                 sql += &quot; WHERE  expName='&quot;                 sql += str(self.dbname)                 sql += &quot;'&quot;                 await cur.execute(sql)                 row = cur.fetchone()                 await cur.close()         pool.close()         await pool.wait_closed()         self.encoder = str(row.result()[2])         self.good_encoder = bool(row.result()[3])         self.lattices = str(row.result()[4])         self.good_lattices = bool(row.result()[5])         self.complex = str(row.result()[6])         self.good_complex = bool(row.result()[7])         self.verges = str(row.result()[8])         self.good_verges = bool(row.result()[9])         self.verges_total = int(row.result()[10])         self.trains = str(row.result()[11])         self.good_trains = bool(row.result()[12])         self.hypotheses = str(row.result()[15])         self.good_hypotheses = bool(row.result()[16])         self.type = str(row.result()[17])      async def create_tables(self, **kw):         await createMainTables(self)         pool = await aiomysql.create_pool(host=self.dbhost, user='root',              password=self.secret, db=self.auxname)         async with pool.acquire() as conn:             async with conn.cursor() as cur:                 sql = &quot;UPDATE &quot;                 sql += str(self.auxtable)                 sql += &quot; SET encoderStatus=1 WHERE dbname='&quot;                 sql += str(self.dbname)                 sql += &quot;'&quot;                 await cur.execute(sql)                  await conn.commit()                  await cur.close()         pool.close()         await pool.wait_closed()         raise web.HTTPFound(location='\/vkf\/' + self.dbname)              async def compute_tables(self, **kw):         await computeAuxTables(self)         pool = await aiomysql.create_pool(host=self.dbhost, user='root',              password=self.secret, db=self.auxname)         async with pool.acquire() as conn:             async with conn.cursor() as cur:                 sql = &quot;UPDATE &quot;                 sql += str(self.auxtable)                 sql += &quot; SET complexStatus=1 WHERE dbname='&quot;                 sql += str(self.dbname)                 sql += &quot;'&quot;                 await cur.execute(sql)                  await conn.commit()                  await cur.close()         pool.close()         await pool.wait_closed()         raise web.HTTPFound(location='\/vkf\/' + self.dbname)              async def make_induction(self, hypotheses_total, threads_total, **kw):         await induction(self, hypotheses_total, threads_total)         pool = await aiomysql.create_pool(host=self.dbhost, user='root',              password=self.secret, db=self.auxname)         async with pool.acquire() as conn:             async with conn.cursor() as cur:                 sql = &quot;UPDATE &quot;                 sql += str(self.auxtable)                 sql += &quot; SET hypothesesStatus=1 WHERE dbname='&quot;                 sql += str(self.dbname)                 sql += &quot;'&quot;                 await cur.execute(sql)                  await conn.commit()                  await cur.close()         pool.close()         await pool.wait_closed()         raise web.HTTPFound(location='\/tests\/' + self.dbname)          class Predictor():     def __init__(self, dbName, data, **kw):         self.auxname = auxName         self.auxtable = auxTable         self.dbhost = dbHost         self.dbname = dbName         self.secret = secretKey         self.plus = 0         self.minus = 0      async def load_data(self, **kw):             pool = await aiomysql.create_pool(host=dbHost, user='root',              password=secretKey, db=auxName)         async with pool.acquire() as conn:             async with conn.cursor() as cur:                 sql = &quot;SELECT * FROM &quot;                 sql += str(auxTable)                 sql += &quot; WHERE dbname='&quot;                 sql += str(self.dbname)                 sql += &quot;'&quot;                 await cur.execute(sql)                  row = cur.fetchone()                 await cur.close()         pool.close()         await pool.wait_closed()         self.encoder = str(row.result()[2])         self.good_encoder = bool(row.result()[3])         self.complex = str(row.result()[6])         self.good_complex = bool(row.result()[7])         self.verges = str(row.result()[8])         self.trains = str(row.result()[11])         self.tests = str(row.result()[13])         self.good_tests = bool(row.result()[14])         self.hypotheses = str(row.result()[15])         self.good_hypotheses = bool(row.result()[16])         self.type = str(row.result()[17])      async def make_prediction(self, **kw):         if self.good_tests and self.good_hypotheses:             await induction(self, 0, 1)             await prediction(self)             message_body = str(self.plus)             message_body += &quot; correct positive cases. &quot;             message_body += str(self.minus)             message_body += &quot; correct negative cases.&quot;             raise web.HTTPException(body=message_body)         else:             raise web.HTTPFound(location='\/vkf\/' + self.dbname) <\/code><\/pre>\n<p>  \u041e\u043f\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0441\u043a\u0440\u044b\u0442\u044b:  <\/p>\n<ol>\n<li>\u041a\u043b\u0430\u0441\u0441 User \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044e \u0441\u0430\u0439\u0442\u0430. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u0439\u0442\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u0430\u043a \u044d\u043a\u0441\u043f\u0435\u0440\u0442.<\/li>\n<li>\u041a\u043b\u0430\u0441\u0441 Expert \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432.<\/li>\n<\/ol>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c:  <\/p>\n<ol>\n<li>\u041a\u043b\u0430\u0441\u0441 Experiment \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u041a\u0424-\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432.<\/li>\n<li>\u041a\u043b\u0430\u0441\u0441 Solver \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0438\u043d\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434\u0435.<\/li>\n<li>\u041a\u043b\u0430\u0441\u0441 Predictor \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0432 \u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434\u0435.<\/li>\n<\/ol>\n<p>  \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 create_pool() \u043f\u0430\u043a\u0435\u0442\u0430 aiomysql. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0411\u0414 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b ensure_future() \u0438 gather() \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f asyncio.  <\/p>\n<pre><code class=\"python\">pool = await aiomysql.create_pool(host=self.dbhost,      user='root', password=self.secret) task1 = self.create_db(pool=pool) task2 = self.register_experiment(pool=pool) tasks = [asyncio.ensure_future(task1),      asyncio.ensure_future(task2)] await asyncio.gather(*tasks) pool.close() await pool.wait_closed() <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f row = cur.fetchone() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 future, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 row.result() \u0432\u044b\u0434\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0411\u0414, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, str(row.result()[2]) \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u043c\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432.<\/p>\n<pre><code class=\"python\"> pool = await aiomysql.create_pool(host=dbHost, user='root',      password=secretKey, db=auxName) async with pool.acquire() as conn:     async with conn.cursor() as cur:         await cur.execute(sql)          row = cur.fetchone()         await cur.close() pool.close() await pool.wait_closed() self.encoder = str(row.result()[2]) <\/code><\/pre>\n<p>  \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 .env \u0438\u043b\u0438 (\u043f\u0440\u0438 \u0435\u0433\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438) \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 settings.py.  <\/p>\n<pre><code class=\"python\">from os.path import isfile from envparse import env  if isfile('.env'):     env.read_envfile('.env')  AUX_NAME = env.str('AUX_NAME', default='vkf') AUTH_TABLE = env.str('AUTH_TABLE', default='users') AUX_TABLE = env.str('AUX_TABLE', default='experiments') DB_HOST = env.str('DB_HOST', default='127.0.0.1') DB_HOST = env.str('DB_PORT', default=3306) DEBUG = env.bool('DEBUG', default=False) SECRET_KEY = env.str('SECRET_KEY', default='toor') SITE_HOST = env.str('HOST', default='127.0.0.1') SITE_PORT = env.int('PORT', default=8080) <\/code><\/pre>\n<p>  \u0412\u0430\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e localhost \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e ip-\u0430\u0434\u0440\u0435\u0441\u0443, \u0438\u043d\u0430\u0447\u0435 aiomysql \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0441 \u0411\u0414 \u0447\u0435\u0440\u0435\u0437 Unix socket, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0434 Windows. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0444\u0430\u0439\u043b (control.py):  <\/p>\n<pre><code class=\"python\">import os import asyncio import vkf  async def createAuxTables(db_data):     if  db_data.type is not &quot;discrete&quot;:         await vkf.CAttributes(db_data.verges, db_data.dbname,              '127.0.0.1', 'root', db_data.secret)     if  db_data.type is not &quot;continuous&quot;:         await vkf.DAttributes(db_data.encoder, db_data.dbname,              '127.0.0.1', 'root', db_data.secret)         await vkf.Lattices(db_data.lattices, db_data.dbname,              '127.0.0.1', 'root', db_data.secret)   async def createMainTables(db_data):     if  db_data.type is &quot;continuous&quot;:         await vkf.CData(db_data.trains, db_data.verges,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)         await vkf.CData(db_data.tests, db_data.verges,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)     if  db_data.type is &quot;discrete&quot;:         await vkf.FCA(db_data.lattices, db_data.encoder,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)         await vkf.DData(db_data.trains, db_data.encoder,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)         await vkf.DData(db_data.tests, db_data.encoder,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)     if  db_data.type is &quot;full&quot;:         await vkf.FCA(db_data.lattices, db_data.encoder,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)         await vkf.FData(db_data.trains, db_data.encoder, db_data.verges,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)         await vkf.FData(db_data.tests, db_data.encoder, db_data.verges,              db_data.dbname,'127.0.0.1', 'root', db_data.secret)  async def computeAuxTables(db_data):     if  db_data.type is not &quot;discrete&quot;:         async with vkf.Join(db_data.trains, db_data.dbname, '127.0.0.1',              'root', db_data.secret) as join:             await join.compute_save(db_data.complex, db_data.dbname,                  '127.0.0.1', 'root', db_data.secret)         await vkf.Generator(db_data.complex, db_data.trains, db_data.verges,              db_data.dbname, db_data.dbname, db_data.verges_total, 1,              '127.0.0.1', 'root', db_data.secret)  async def induction(db_data, hypothesesNumber, threadsNumber):     if  db_data.type is not &quot;discrete&quot;:         qualifier = await vkf.Qualifier(db_data.verges,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)         beget = await vkf.Beget(db_data.complex, db_data.dbname,              '127.0.0.1', 'root', db_data.secret)     if  db_data.type is not &quot;continuous&quot;:         encoder = await vkf.Encoder(db_data.encoder, db_data.dbname,              '127.0.0.1', 'root', db_data.secret)     async with vkf.Induction() as induction:          if  db_data.type is &quot;continuous&quot;:             await induction.load_continuous_hypotheses(qualifier, beget,                  db_data.trains, db_data.hypotheses, db_data.dbname,                  '127.0.0.1', 'root', db_data.secret)         if  db_data.type is &quot;discrete&quot;:             await induction.load_discrete_hypotheses(encoder,                  db_data.trains, db_data.hypotheses, db_data.dbname,                  '127.0.0.1', 'root', db_data.secret)         if  db_data.type is &quot;full&quot;:             await induction.load_full_hypotheses(encoder, qualifier, beget,                  db_data.trains, db_data.hypotheses, db_data.dbname,                  '127.0.0.1', 'root', db_data.secret)         if hypothesesNumber &gt; 0:             await induction.add_hypotheses(hypothesesNumber, threadsNumber)             if  db_data.type is &quot;continuous&quot;:                 await induction.save_continuous_hypotheses(qualifier,                      db_data.hypotheses, db_data.dbname, '127.0.0.1', 'root',                      db_data.secret)             if  db_data.type is &quot;discrete&quot;:                 await induction.save_discrete_hypotheses(encoder,                      db_data.hypotheses, db_data.dbname, '127.0.0.1', 'root',                      db_data.secret)             if  db_data.type is &quot;full&quot;:                 await induction.save_full_hypotheses(encoder, qualifier,                      db_data.hypotheses, db_data.dbname, '127.0.0.1', 'root',                      db_data.secret)  async def prediction(db_data):     if  db_data.type is not &quot;discrete&quot;:         qualifier = await vkf.Qualifier(db_data.verges,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)         beget = await vkf.Beget(db_data.complex, db_data.dbname,              '127.0.0.1', 'root', db_data.secret)     if  db_data.type is not &quot;continuous&quot;:         encoder = await vkf.Encoder(db_data.encoder,              db_data.dbname, '127.0.0.1', 'root', db_data.secret)     async with vkf.Induction() as induction:          if  db_data.type is &quot;continuous&quot;:             await induction.load_continuous_hypotheses(qualifier, beget,                  db_data.trains, db_data.hypotheses, db_data.dbname,                  '127.0.0.1', 'root', db_data.secret)         if  db_data.type is &quot;discrete&quot;:             await induction.load_discrete_hypotheses(encoder,                  db_data.trains, db_data.hypotheses, db_data.dbname,                  '127.0.0.1', 'root', db_data.secret)         if  db_data.type is &quot;full&quot;:             await induction.load_full_hypotheses(encoder, qualifier, beget,                  db_data.trains, db_data.hypotheses, db_data.dbname,                  '127.0.0.1', 'root', db_data.secret)         if  db_data.type is &quot;continuous&quot;:             async with vkf.TestSample(qualifier, induction, beget,                  db_data.tests, db_data.dbname, '127.0.0.1', 'root',                  db_data.secret) as tests:                 #plus = await tests.correct_positive_cases()                 db_data.plus = await tests.correct_positive_cases()                 #minus = await tests.correct_negative_cases()                 db_data.minus = await tests.correct_negative_cases()         if  db_data.type is &quot;discrete&quot;:             async with vkf.TestSample(encoder, induction,                  db_data.tests, db_data.dbname, '127.0.0.1', 'root',                  db_data.secret) as tests:                 #plus = await tests.correct_positive_cases()                 db_data.plus = await tests.correct_positive_cases()                 #minus = await tests.correct_negative_cases()                 db_data.minus = await tests.correct_negative_cases()         if  db_data.type is &quot;full&quot;:             async with vkf.TestSample(encoder, qualifier, induction,                  beget, db_data.tests, db_data.dbname, '127.0.0.1',                  'root', db_data.secret) as tests:                 #plus = await tests.correct_positive_cases()                 db_data.plus = await tests.correct_positive_cases()                 #minus = await tests.correct_negative_cases()                 db_data.minus = await tests.correct_negative_cases() <\/code><\/pre>\n<p>  \u042f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u043d\u044b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 vkf.cpython-36m-x86_64-linux-gnu.so. \u0412\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u0441\u043b\u0435 dbname \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0443\u0449\u0435\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 CPython-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<h4>4. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 <\/h4>\n<p>  \u041f\u0440\u0435\u0434\u0432\u043e\u0441\u0445\u0438\u0449\u0430\u044f \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043e \u0442\u043e\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043b\u043e\u0433\u0438\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0412\u041a\u0424-\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u043c \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u043d\u0430\u0440\u0443\u0436\u0443 (\u0447\u0435\u0440\u0435\u0437 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 if), \u0430 \u043d\u0435 \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u0432 \u0442\u0438\u043f\u044b, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u0442\u0430\u043a: \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u044f\u0437\u044b\u043a\u0430 Python \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u0442\u0438\u043f\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u044d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 if. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0432\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0435\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u044b\u0439 (C-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439) \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 (\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439).<\/p>\n<p>  \u041f\u043e\u0437\u0432\u043e\u043b\u044e \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:  <\/p>\n<ol>\n<li>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0411\u0414 \u0434\u043b\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 vkfencoder.cpython-36m-x86_64-linux-gnu.so (web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u043d\u0435\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b, \u0430 \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435). \u0414\u043b\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 \u0438\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 vkfencoder.cpython-36m-x86_64-linux-gnu.so.<\/li>\n<li>\u041f\u043e\u043a\u0430\u0437 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u043f\u043e\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438-\u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 MariaDB (\u0430\u0432\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 DBeaver 7.1.1 Community, \u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432). \u0421\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 Django, \u0433\u0434\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f ORM \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u0432 \u0432\u0438\u0434\u0435.<\/li>\n<\/ol>\n<h4>5. \u041e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430<\/h4>\n<p>  \u0410\u0432\u0442\u043e\u0440 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u0435\u0435 30 \u043b\u0435\u0442. \u041f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u043e-\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u041c\u0413\u0423 \u0438\u043c \u041c.\u0412.\u00a0\u041b\u043e\u043c\u043e\u043d\u043e\u0441\u043e\u0432\u0430 \u043e\u043d \u0431\u044b\u043b \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u0434.\u0442.\u043d., \u043f\u0440\u043e\u0444. \u0412.\u041a.\u00a0\u0424\u0438\u043d\u043d\u0430 (\u0412\u0418\u041d\u0418\u0422\u0418 \u0410\u041d \u0421\u0421\u0421\u0420). \u0412\u0438\u043a\u0442\u043e\u0440 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u0432\u0438\u0447 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 80-\u0445 \u0433\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0432\u0435\u043a\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u043c\u043d\u043e\u0433\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0445 \u043b\u043e\u0433\u0438\u043a.<\/p>\n<p>  \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0438\u0434\u0435\u044f\u043c\u0438, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0412.\u041a.\u00a0\u0424\u0438\u043d\u043d\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:  <\/p>\n<ol>\n<li>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 (\u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0432 \u0411\u0443\u043b\u0435\u0432\u043e\u0439 \u0430\u043b\u0433\u0435\u0431\u0440\u0435);<\/li>\n<li>\u0438\u0434\u0435\u044f \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u0430 (\u043a\u043e\u043d\u0442\u0440-\u043f\u0440\u0438\u043c\u0435\u0440\u0430);<\/li>\n<li>\u0438\u0434\u0435\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0433\u043e (\u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e) \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043f\u0443\u0442\u0435\u043c \u0443\u0447\u0435\u0442\u0430 \u0434\u043e\u0432\u043e\u0434\u043e\u0432 \u0437\u0430 \u0438 \u043f\u0440\u043e\u0442\u0438\u0432;<\/li>\n<li>\u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0447\u0438\u043d (\u0441\u0440\u0435\u0434\u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u0445\u043e\u0434\u0441\u0442\u0432) \u0434\u043b\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u044f\/\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0443 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.<\/li>\n<\/ol>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0412.\u041a.\u00a0\u0424\u0438\u043d\u043d \u043f\u0440\u0438\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u0438\u0434\u0435\u0439 \u0437\u0430\u0440\u0443\u0431\u0435\u0436\u043d\u044b\u043c \u0430\u0432\u0442\u043e\u0440\u0430\u043c. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u043c \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0439 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0418\u0434\u0435\u044e \u0443\u0447\u0435\u0442\u0430 \u043a\u043e\u043d\u0442\u0440-\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0412.\u041a.\u00a0\u0424\u0438\u043d\u043d \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043b, \u043f\u043e \u0435\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u043c, \u0443 \u041a.\u0420.\u00a0\u041f\u043e\u043f\u043f\u0435\u0440\u0430. \u0410 \u0438\u0441\u0442\u043e\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u0438\u043d\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0438\u043c \u043a (\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0442\u0443\u043c\u0430\u043d\u043d\u044b\u043c, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434) \u0440\u0430\u0431\u043e\u0442\u0430\u043c \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u0427.\u0421.\u00a0\u041f\u0438\u0440\u0441\u0430. \u041f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437 \u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 \u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0438\u0437 \u0438\u0434\u0435\u0439 \u0431\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u043e\u0433\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0441\u0442\u0430, \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0430 \u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u0414.\u0421.\u00a0\u041c\u0438\u043b\u043b\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043c \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u0438\u0434\u0435\u0439 \u043e\u043d \u043e\u0437\u0430\u0433\u043b\u0430\u0432\u0438\u043b \u00ab\u0414\u0421\u041c-\u043c\u0435\u0442\u043e\u0434\u00bb \u0432 \u0447\u0435\u0441\u0442\u044c \u0414.\u0421.\u00a0\u041c\u0438\u043b\u043b\u044f. <\/p>\n<p>  \u0421\u0442\u0440\u0430\u043d\u043d\u043e, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0439 \u0432 \u043a\u043e\u043d\u0446\u0435 70-\u0445 \u0433\u043e\u0434\u043e\u0432 XX \u0432\u0435\u043a\u0430 \u0432 \u0442\u0440\u0443\u0434\u0430\u0445 \u043f\u0440\u043e\u0444. \u0420\u0443\u0434\u043e\u043b\u044c\u0444\u0430 \u0412\u0438\u043b\u043b\u0435 (\u0424\u0420\u0413) \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0430\u043b\u0433\u0435\u0431\u0440\u0430\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0435\u043e\u0440\u0438\u0438 \u0440\u0435\u0448\u0435\u0442\u043e\u043a \u00ab\u0410\u043d\u0430\u043b\u0438\u0437 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439\u00bb (\u0410\u0424\u041f) \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443 \u0412.\u041a.\u00a0\u0424\u0438\u043d\u043d\u0430 \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0435\u043c. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u044d\u0442\u043e\u0433\u043e \u2014 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443 \u043d\u0435\u0433\u043e, \u043a\u0430\u043a \u0443 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0432\u0448\u0435\u0433\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u0438\u0439 \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442, \u0430 \u043f\u043e\u0442\u043e\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u043e-\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0443\u043b\u044c\u0442\u0435\u0442\u0430 \u041c\u0413\u0423, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0442\u043e\u0440\u0436\u0435\u043d\u0438\u0435. <\/p>\n<p>  \u041a\u0430\u043a \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u0435\u043b\u044c \u0434\u0435\u043b\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0447\u0438\u0442\u0435\u043b\u044f, \u0430\u0432\u0442\u043e\u0440 \u0441\u0432\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043b \u0432 \u0435\u0433\u043e \u0447\u0435\u0441\u0442\u044c \u00ab\u0412\u041a\u0424-\u043c\u0435\u0442\u043e\u0434\u00bb. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u043e-\u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0442\u0435\u043e\u0440\u0438\u0438 \u0440\u0435\u0448\u0435\u0442\u043e\u043a. <\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0433\u0440\u0443\u043f\u043f\u0430 \u0412.\u041a.\u00a0\u0424\u0438\u043d\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0412\u0426 \u0438\u043c. \u0410.\u0410.\u00a0\u0414\u043e\u0440\u043e\u0434\u043d\u0438\u0446\u044b\u043d\u0430 \u0420\u0410\u041d \u0424\u0418\u0426 \u0418\u0423 \u0420\u0410\u041d \u0438 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0413\u0443\u043c\u0430\u043d\u0438\u0442\u0430\u0440\u043d\u043e\u0433\u043e \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430.<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u0412\u041a\u0424-\u0440\u0435\u0448\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u043f\u043e <a href=\"http:\/\/www.frccsc.ru\/diss-council\/00207305\/diss\/list\/vinogradov_dv\" rel=\"nofollow\">\u0434\u0438\u0441\u0441\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0430<\/a> \u0438\u043b\u0438 \u0435\u0433\u043e <a href=\"https:\/\/www.youtube.com\/watch?v=1QjUcLRaPyc\" rel=\"nofollow\">\u0432\u0438\u0434\u0435\u043e-\u043b\u0435\u043a\u0446\u0438\u044f\u043c \u0432 \u0423\u043b\u044c\u044f\u043d\u043e\u0432\u0441\u043a\u043e\u043c \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0435<\/a> (\u0437\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043b\u0435\u043a\u0446\u0438\u0439 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0430\u0432\u0442\u043e\u0440 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d \u0410.\u0411.\u00a0\u0412\u0435\u0440\u0435\u0432\u043a\u0438\u043d\u0443 \u0438 \u041d.\u0413.\u00a0\u0411\u0430\u0440\u0430\u043d\u0435\u0446).<\/p>\n<p>  \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/bitbucket.org\/KRRGuest\/vkfweb\/src\/master\/\" rel=\"nofollow\">Bitbucket<\/a><\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b (\u043d\u0430 \u0421++) \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 vkf \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430 savannah.nongnu.org. \u041f\u0440\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u044e\u0434\u0430.<\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0430\u0432\u0442\u043e\u0440 \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c Python 6 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430. \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b, \u0431\u044b\u043b C++. \u041d\u043e \u044d\u0442\u043e \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043d\u0435 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0441 \u043d\u0435\u0433\u043e \u043e\u0431\u0432\u0438\u043d\u0435\u043d\u0438\u0439 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430. <\/p>\n<p>  \u0410\u0432\u0442\u043e\u0440 \u0432\u044b\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u0435\u0440\u0434\u0435\u0447\u043d\u0443\u044e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0422\u0430\u0442\u044c\u044f\u043d\u0435 \u0410. \u0412\u043e\u043b\u043a\u043e\u0432\u043e\u0439 <a href=\"https:\/\/habr.com\/en\/users\/robofreak\/\" class=\"user_link\">robofreak<\/a> \u0437\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0432\u0448\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0438 \u0434\u0430\u0436\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043a\u043e\u0434). \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f (\u0434\u0430\u0436\u0435 \u0432\u043e\u043f\u0440\u0435\u043a\u0438 \u0435\u0435 \u0441\u043e\u0432\u0435\u0442\u0430\u043c) \u043d\u0435\u0441\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0430\u0432\u0442\u043e\u0440.<\/div>\n<p> \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\/post\/509338\/\"> https:\/\/habr.com\/ru\/post\/509338\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/509338\/\">\u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0447\u043d\u043e \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043c\u0435\u0441\u0442\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0438 \u0440\u0435\u043a\u0443\u0440\u0440\u0435\u043d\u0442\u043d\u044b\u043c\u0438, \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 GAN \u0438 LTSM-\u0441\u0435\u0442\u0435\u0439. \u041a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u043e\u0432 \u0432\u044b\u0431\u043e\u0440\u043e\u043a, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u0438\u0445 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u043e\u043d\u0438 \u0435\u0449\u0435 \u0441\u0442\u0440\u0430\u0434\u0430\u044e\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0442\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c\u0443 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zk\/vs\/b9\/zkvsb9zh3kabo0u-izlokug_xkk.jpeg\">  <\/p>\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-306376","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/306376","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=306376"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/306376\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=306376"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=306376"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=306376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}