וואלהלפחות 16 בני אדם נהרגו בפיצוץ מכונית תופת בפקיסטןRTP DesportoLiga das Nações. Jesus anuncia primeira lista de convocados à frente da seleçãoInquirerCatholic bishops hope Mindanao moves forward together after BARMM pollsThe Jerusalem PostThousands of Christians rally for Israel in Amsterdam as anti-Zionist protesters clash with policeBollywood HungamaIIFA 2027 set for January 22-23 in Abu Dhabi; Karan Johar and Varun Dhawan to hostDaily MaverickThe Monday Cane — performative justice that prioritises retribution over protectionESPNAnthony Edwards calls out Sixers' James, Brown and more in Adidas adХабрЛучшие игры про зомби: от психологических драм до безумных кооперативовLa PresseTokyo | Des poubelles robotisées mobiles à la rescousse d’une gareMyJoyOnlineSeveral options being considered by government to cushion consumers from fuel price hikes – NPA BossZDF heuteForderung vor Wahl: Schwesig für SpritpreisdeckelOnetEric Zemmour znów chce walczyć o Pałac Elizejski. Le Pen zyskuje rywala na prawicy
The Daily Newsstand · Free, Always
Friday, September 18, 2026

Симулятор жизни на Python + TypeScript + HTML5 Canvas. Введение. Проектирование среды и базовой механики агентов

Translate

Недавно увлекся чтением книг о нашей психологии, привычках и теории игр. Но мне всегда было интересно посмотреть, как эти законы работают на практике.

Помимо книг о психологии, я попутно изучаю линейную алгебру и искусственный интеллект. И чтобы не учиться «в стол», я начал пет‑проект — мультиагентную песочницу эволюции. Я создаю цифровой мир на TypeScript и Python, где маленькие агенты будут управляться простейшими нейросетями и выживать по законам жесткого отбора.

Честно скажу: я не знаю, что из этого выйдет, доведу ли я проект до конца и каким он получится. Возможно, мои агенты научатся ходить, возможно — сойдут с ума от переизбытка нейронов, а возможно — сразу вымрут от голода. Но я хочу отпустить контроль и просто разделить с вами это путешествие. Добро пожаловать в дневник Творца‑недоучки.

Идея написать приложение пришла мне полторы недели назад. Я уже несколько месяцев изучаю линейную алгебру и чуть меньше — нейросети. Решил, что для закрепления знаний лучше всего выбрать практический проект.

Наверное, в 90% подобных случаев возникает мысль написать приложение для анализа и предсказания цен на финансовых рынках или чего‑то в этом роде. И хотя тема в этом плане хорошая, я не хотел заниматься тем, к чему душа не лежит. Немного подумав, я решил, что симуляция жизни будет неплохим проектом. Пусть это не самое полезное, что можно придумать, но именно этим лично мне интересно заниматься.

Я набросал простенькую страничку на React и базовый прототип программы. Ну как... «прототип» — сильно сказано. По сути, просто сделал так, чтобы по экрану бегал «агент» и натыкался на «кустик». Это служило скорее проверкой работоспособности.

Я довольно быстро понял, что для нормальной симуляции JavaScript не подойдет, поэтому выбор пал на написание бэкенда на Python. Я выбрал этот язык, потому что в учебнике, по которому я изучаю нейросети, используется именно он. Не стал долго размышлять, правильно это или нет: в любом случае для меня это новый инструмент, и освоить его — отличный навык.

С помощью нейронки я набросал простенький сервер. Для справки: нейросетью я пользуюсь часто, но не для того, чтобы бездумно копировать выдаваемый код. К тому же такой подход довольно быстро заводит в тупик. Время от времени, общаясь с ИИ, я замечал, что если диалог разрастается до огромных масштабов, он начинает путаться в контексте, забывать вещи, и чат приходится обновлять. А в новом чате нужно объяснять контекст заново. И если я буду просто копировать код, то в будущем, только чтобы ввести ИИ в курс дела, придется тратить кучу времени и сил, которые, скорее всего, не окупятся. Я знаю, что есть более продвинутые системы, но, как я уже говорил, я хочу сам разобраться в том, что делаю, а не просто получить готовый результат. Поэтому с нейронкой я общаюсь скорее для того, чтобы лучше обрисовать концепцию, дальнейшие шаги, подсветить слепые пятна и так далее.

В общем, я набросал простенький сервер, создал классы агента и куста с едой и столкнулся с первой проблемой. Сделал так, чтобы сервер отправлял данные на фронтенд с частотой 2 Гц (два раза в секунду). Проблема — синхронизация положения агента на бэке и на фронте. Сначала я просто передавал данные с бэкенда. Ожидаемо, агент дважды в секунду просто скакал по полю. Меня этот вариант не устраивал.

Тогда я подумал добавить интерполяцию: чтобы фронтенд на основе данных о положении и скорости агента предсказывал и дорисовывал траекторию точки. Я долго бился с коэффициентами, но дерганность никуда не уходила. Тут я впервые малодушно подумал забросить проект. Честно говоря, мне довольно стыдно за первую реакцию, тем более что столкнулся я с этой проблемой ночью.

Но утром, проснувшись, я задался вопросом: «А как в ММО обеспечивают плавное движение персонажей по экрану?» Немного покопавшись, я наткнулся на такую штуку, как LERP — линейная интерполяция. Суть примерно та же, что я использовал в первый раз для сглаживания, но чуть более продвинутая. В принципе, совсем со скачками справиться еще не получилось, но сами по себе они стали плавнее — как будто агент передвигается вприпрыжку. Сейчас я прочитал про Snapshot Interpolation (интерполяцию снимков состояния). Дальше попробую реализовать передвижение через нее. Посмотрим, что получится.

Это первая часть моего дневника разработки. До этого я никогда не занимался написанием статей, так что это мой первый публичный опыт ведения блога и где‑то скорее всего будет хромать стиль или оформление. Если вам интересно следить за развитием проекта, то буду очень рад услышать ваше мнение и конструктивную критику в комментариях. На основе вашей обратной связи я пойму, в каком направлении двигаться дальше и как часто выпускать продолжение. Спасибо за внимание!

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.