Кошка пытается прыгнуть с исходной платформы на красную цель. Геном управляет моторами
суставов лап, корпуса и хвоста; лучшие попытки попадают в пул отбора и дают потомков.
Генетический алгоритм Прыжки Кошки онлайн - это интерактивный симулятор, в котором виртуальная кошка учится прыгать по платформам. Инструмент подходит для демонстрации эволюционных алгоритмов, подбора параметров движения, обучения через отбор и визуального изучения того, как случайные мутации постепенно могут приводить к более удачному поведению.
Возможности инструмента:
запуск физической симуляции прыжка кошки прямо в браузере;
сохранение контуров тела кошки из исходной модели: голова, шея, верхний и нижний корпус, передние и задние лапы, пальцы и хвост;
расчет движения через встроенную физику: гравитация, инерция, трение, столкновения с платформами и ограничения суставов;
управление суставами через геном: каждый активный сустав получает параметры периодического моторного движения;
генерация бесконечной цепочки целевых платформ: когда кошка достигает текущей цели, создается следующая платформа;
таблица лучших попыток с оценкой, дальностью, высотой и количеством достигнутых целей;
настройка вероятности мутации, силы мутации, размера пула лучших решений, длины попытки и скорости симуляции;
пауза, ручной переход к следующей кошке и полный сброс обучения.
В данном инструменте генетический алгоритм улучшает не сами прижки кошки, а параметры движения суставов.
Конкретно меняются параметры для каждого активного сустава:
- time_factor - частота/темп движения сустава.
- time_shift - фазовый сдвиг, то есть в какой момент цикла сустав начинает движение.
- cos_factor - сила и направление моторного движения.
- forward_push - насколько сильно лапа толкает тело вперед при контакте пальца с платформой.
- lift_push - насколько сильно лапа поднимает корпус вверх при отталкивании.
- target_sense - насколько сустав усиливает движение, когда кошка приближается к текущей цели.
- target_window - расстояние до цели, на котором включается это усиление.
Это создаётся в randomChromosome() и потом хранится в геноме:
Движение считается так:
speed = gene.cos_factor * targetBoost * Math.cos(gene.time_factor * frame + gene.time_shift)
impulse = clamp(speed / 700, -0.075, 0.075)
То есть каждый ген задаёт периодическое моторное усилие для конкретного сустава, а targetBoost делает движение сильнее рядом с целевой платформой. Это применяется в applyMotors():
Что “улучшается” от поколения к поколению:
- Координация лап: какие суставы сгибаются/разгибаются, с какой фазой и силой.
- Момент толчка пальцами лап от платформы.
- Подъём корпуса вверх при контакте пальца с землёй.
- Продвижение upper_torso вперёд.
- Высота прыжка.
- Способ попадания на целевую платформу.
Оценка считается в updateScore():
Формула примерно такая:
score = sqrt(maxX^2 + maxY^2) + proximityBonus + targetsReached * 12 - stabilityPenalty - fallPenalty
То есть алгоритм предпочитает кошек, которые:
- ушли дальше вправо (maxX);
- прыгнули выше (maxY);
- приблизились к текущей целевой платформе, даже если еще не долетели до нее;
- достигли больше целевых платформ (targetsReached, большой бонус * 12);
- меньше кувыркаются корпусом и не проваливаются вниз.
После попытки геном сохраняется в genePool, пул сортируется по score, и остаются лучшие. Пул лучших попыток также сохраняется в localStorage браузера, поэтому обучение можно продолжить после перезагрузки страницы. При нажатии "Сбросить обучение" очищается и текущий пул, и сохранение в localStorage.
Новый геном делается так:
- выбираются 2 родителя из лучших попыток;
- для каждого гена случайно берётся версия от одного из родителей;
- отдельные параметры мутируют умножением на случайный коэффициент;
- значения ограничиваются диапазонами.
Это в makeGenome() и copulate().
Итог: алгоритм “учит” кошку не напрямую прыгать, а подбирает ритм, фазу и силу моторных импульсов в суставах. Лучшие комбинации дают больше продвижения, высоты и
попаданий на платформы, поэтому они чаще наследуются.
Краткая теория генетического алгоритма:
Генетический алгоритм - это метод поиска решения, вдохновленный естественным отбором. Сначала создаются случайные варианты решения. В этой модели один вариант решения - это геном кошки, то есть набор числовых параметров для моторных суставов. После попытки симулятор считает качество результата: насколько далеко и высоко смогла продвинуться кошка, сколько целевых платформ она достигла. Лучшие геномы попадают в пул отбора. Новая кошка создается скрещиванием двух родительских геномов: часть параметров берется от одного родителя, часть - от другого. Затем применяется мутация, которая немного меняет отдельные параметры. Благодаря этому алгоритм не просто повторяет старые движения, а исследует новые варианты прыжка.
Как работает физическая модель:
Тело кошки состоит из отдельных полигональных частей. Между ними заданы суставы с допустимыми углами. На каждом шаге симуляции на тела действует гравитация, сохраняется инерция, обрабатывается контакт с платформами и корректируются суставные ограничения. Пальцы лап имеют повышенное сцепление с поверхностью, поэтому удачное положение лап может дать толчок. Это не видео и не заранее записанная анимация: форма прыжка появляется из взаимодействия генома, физики и платформ.
Подробно о настройках:
Вероятность мутации - шанс, что отдельный параметр гена будет изменен при создании новой кошки. Низкие значения делают обучение стабильнее, но медленнее. Высокие значения дают больше экспериментов, но чаще ломают уже найденные удачные движения.
Сила мутации - насколько сильно изменяется выбранный параметр. Маленькая сила подходит для тонкой настройки прыжка. Большая сила полезна, если популяция застряла и кошки повторяют похожие неудачные движения.
Размер пула лучших - сколько лучших попыток хранится для отбора родителей. Малый пул быстрее закрепляет сильные решения, но повышает риск однообразия. Большой пул сохраняет разнообразие генов и помогает находить неожиданные стратегии.
Время на перепрыгивание - сколько кадров(времени) длится одна попытка перед оценкой и переходом к следующей кошке. Короткая попытка ускоряет обучение, но может не дать времени на сложный прыжок. Длинная попытка полезна для прохождения нескольких платформ подряд.
Скорость симуляции - количество физических шагов в секунду. Большая скорость быстрее перебирает поколения, но сильнее нагружает процессор. Значение "Пауза" останавливает расчет, сохраняя текущее состояние.
Пауза / Продолжить - временно останавливает или возобновляет эволюцию без сброса текущей кошки.
Следующая кошка - завершает текущую попытку вручную, сохраняет ее результат в пул и запускает новую кошку.
Сбросить обучение - очищает пул лучших генов и начинает обучение заново со случайной кошки.
Как читать результаты:
Показатель "Счет" учитывает дальность, высоту прыжка, приближение к текущей платформе, штраф за нестабильный переворот и бонусы за достигнутые целевые платформы. "Целей" показывает, сколько платформ кошка успешно прошла за попытку. "Дальность" показывает максимальное продвижение вперед, а "Высота" - максимальный подъем относительно начального положения. В таблице лучших попыток колонка "ДНК - Параметры суставов" показывает полный набор параметров каждого активного сустава. По умолчанию видна только верхняя часть списка, чтобы таблица не перегружалась; кнопка "Показать все" раскрывает весь геном, а "Копировать" копирует JSON с параметрами суставов и исходным массивом генома для переноса результата. Если кошка научилась стабильно попадать на цель, следующая платформа появляется дальше, поэтому задача постепенно становится похожей на бесконечный платформер.
Комментарии