Генетический алгоритм. Шаг 1. Постановка задачи |
Автор megabax | |
30.01.2011 г. | |
Генетический алгоритм. Шаг 1. Постановка задачиДавно планировал замутить что то вроде самообучающегося биржевого робота. Приходили в голову разные идеи. И нейтросеть, и отбраковка плохих алгоритмов путем естественного отбора, и так далее. Но все никак руки не доходили. Но вот наконец, после того, как прочитал обсуждение идеи генетического алгоритма, все же загорелся идеей создать такого робота и сделать из этого нечто вроде шоу "за стеклом". И так, с чего же начнем. Конечно, с постановки задачи... И так, что же мы хотим получить в итоге? Биржевого робота, который бы получал максимальный профит с минимальным риском (просадкой) и с наибольшей стабильностью графика доходности. "Слижем" идею с живой природы, а именно, применим механизм естественного отбора. Будем "прогонять" наших роботов через всевозможные графики котировок, наиболее приспособленные (максимально отвечающие трем перечисленным критериям: прибыльность, стабильность и безрисковость), выживут, остальные отомрут. Еще они будут размножаться, вновь родившиеся роботы займут место вымерших. . Размножаться роботы будут спариванием (хоть и звучит пошловато, но это не шутка!). Тут будет применен генетический алгоритм, при скрещивании двух роботов появиться третий, который случайным образом возьмет себе половину алгоритмов и параметров одного робота ("самки") и половину от другого ("самца"). У роботов, как и у всех живых существу будут два основных инстинкта: инстинкт самосохранения и инстинкт продолжения рода. Первый будет заключаться в том, что роботы будут вынуждены постоянно поддерживать такой параметр, как Health (здоровье). Увеличивают этот параметр заработанный профит. Уменьшают просадки и нестабильность графика доходности. Если Health опуститься до критического уровня, робот умирает. У "самцов" будет такой параметр, как ранговый потенциал. Чем выше этот параметр, тем больше вероятность, что самка позволит ему спариться с ней. А ранговый потенциал тем больше, чем больше выживаемость данной "особи". Таким образом, потомству будут передаваться преимущественно жизнеспособные алгоритмы. Теперь осталось описать объектную модель. И так, в нашей программе будут вот такие объекты:
Контейнер роботов будет представлять собой некий массив живущих в системе роботов. Все они будут подключены к источнику котировок. Контейнер на каждой итерации вызывает у объектов "робот" метод, ответственный за принятие решения о сделке. Каждый роботов, при вызове этого метода анализирует котировки из источника, принимает решение и либо совершает какую то сделку, либо отказывается от нее. По истечению заданного количества итераций, у роботов начинается "брачный период". Контейнер у всех роботов типа "самец" вызывает метод "выбрать партнеров для спаривания". Чем больше у робота Health, тем больше самок он сможет "обслужить". Если количество "самцов" и "самок" примерно одинаковое, то при такой системе каждая "самка" получит несколько запросов на спаривания. Она проранжирует их по ранговому потенциалу и примет лишь один, запрос, от самого лучшего "самца". После этого контейнер обрабатывает факты спаривания и рождает новых роботов. Еще логично предположить, что когда роботов слишком много, то самые нежизнеспособные роботы должны отмирать быстрее, что бы роботов не было слишком много и они не отжирали все ресурсы компьютера. В природе происходит точно так же - если экологическая ниша переполнена, то особи вымирают быстрее, так как им не хватает ресурсов (пищи, места и так далее). И так, предварительная постановка задачи готова. Наш следующий шаг - математическая модель.
|
|
Последнее обновление ( 01.08.2011 г. ) |