Практическое применение ГА (часть 1)

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

Если предложение выше Вам не понравилось смело закрывайте эту вкладку и идите крутить ленту 🙂 Иначе, мы поговорим о практическом применении этого алгоритма и разумеется о jevo.js, где это самое применение и появилось. Для начала, определимся с инструментами:
– у нас есть наручные часы Garmin vivoactive HR, определяющие пульс и калории
– 60 записей о трех видах тренировок (хоккей, теннис и бег) в JSON
– jevo.js – которая может писать маленькие программки

Задача: определить тип тренировки (один из трех) по входящим параметрам (дата тренировки, килокалории, продолжительность в секундах и средний пульс). То есть, на входе у нас 4 параметра (4 числа), а на выходе один – тип тренировки (от 0 до 2).

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

vivoactive-HR-tracking-prodilesGarmin activities

На правой нижней картинке видно тип “Cardio”. Именно его я использую для записи тенниса и хоккея. То есть, мне приходится каждый раз менять имя тренировки вручную c “Сardio” на “Hokkey” и т.д. По сему, эта задача имеет вполне практическое применение в моей жизни 🙂

Описание: по сути, нам нужно получить программу, которая бы распознавала тип тренировки исходя из моих личных особенностей, а именно: средний пульс, килокалории и т.д. Она сродни тем, что решают нейронные сети при определении класса объекта по его характеристикам. На момент написания статьи, алгоритм “дошел” до 68.3% точности в определении того играл ли я на этой неделе в теннис.

Ограничения:
– размер программы ограничен 50 строками
– используются: 4 переменные, условия (if), +, -, /, *, %, &, |, ^, >>, <<, >>>, <, >, ==, !=, <=, sin, cos, tan, abs, !, константа PI, внутренняя память на 64 ячейки

Выполнение 90% заданий будет считаться успехом моей затеи. На текущий момент лучшей программой стало это чудо: (41 из 60 правильных решений):

code

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

В общем ждем-с…

Advertisements