.
Генетический алгоритм. Шаг 1. Постановка задачи
Автор megabax   
30.01.2011 г.
New Page 1

Генетический алгоритм. Шаг 1. Постановка задачи

Все статьи по данной теме.

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

И так, что же мы хотим получить в итоге? Биржевого робота, который бы получал максимальный профит с минимальным риском (просадкой) и с наибольшей стабильностью графика доходности. "Слижем" идею с живой природы, а именно, применим механизм естественного отбора. Будем "прогонять" наших роботов через всевозможные графики котировок, наиболее приспособленные (максимально отвечающие трем перечисленным критериям: прибыльность, стабильность и безрисковость), выживут, остальные отомрут. Еще они будут размножаться, вновь родившиеся роботы займут место вымерших. .

Размножаться роботы будут спариванием (хоть и звучит пошловато, но это не шутка!). Тут будет применен генетический алгоритм, при скрещивании двух роботов появиться третий, который случайным образом возьмет себе половину алгоритмов и параметров одного робота ("самки") и половину от другого ("самца"). У роботов, как и у всех живых существу будут два основных инстинкта: инстинкт самосохранения и инстинкт продолжения рода. Первый будет заключаться в том, что роботы будут вынуждены постоянно поддерживать такой параметр, как Health (здоровье).  Увеличивают этот параметр заработанный профит. Уменьшают просадки и нестабильность графика доходности. Если Health опуститься до критического уровня, робот умирает. У "самцов" будет такой параметр, как ранговый потенциал. Чем выше этот параметр,  тем больше вероятность, что самка позволит ему спариться с ней. А ранговый потенциал тем больше, чем больше выживаемость данной "особи". Таким образом, потомству будут передаваться преимущественно жизнеспособные алгоритмы. 

Теперь осталось описать объектную модель. И так, в нашей программе будут вот такие объекты:

  • Робот.
  • Контейнер роботов.
  • Источник котировок.

Контейнер роботов будет представлять собой некий массив живущих в системе роботов. Все они будут подключены к источнику котировок. Контейнер на каждой итерации вызывает у объектов "робот" метод, ответственный за принятие решения о сделке. Каждый роботов, при вызове этого метода анализирует котировки из источника, принимает решение и либо совершает какую то сделку, либо отказывается от нее. По истечению заданного количества итераций,  у роботов начинается "брачный период". Контейнер у всех роботов типа "самец" вызывает метод "выбрать партнеров для спаривания". Чем больше у робота Health, тем больше самок он сможет "обслужить".  Если количество "самцов" и "самок" примерно одинаковое, то при такой системе каждая "самка" получит несколько запросов на спаривания. Она проранжирует их по ранговому потенциалу и примет лишь один, запрос, от самого лучшего "самца".  После этого контейнер обрабатывает факты спаривания и рождает новых роботов. 

Еще логично предположить, что когда роботов слишком много, то самые нежизнеспособные роботы должны отмирать быстрее, что бы роботов не было слишком много и они не отжирали все ресурсы компьютера.  В природе происходит точно так же - если экологическая ниша переполнена, то особи вымирают быстрее, так как им не хватает ресурсов (пищи, места и так далее). 

И так, предварительная постановка задачи готова. Наш следующий шаг - математическая модель.

 

Последнее обновление ( 01.08.2011 г. )