.
Дневник разработчика торговой стратегии. Шаг 25. Генетический алгоритм.
Автор megabax   
14.07.2014 г.
New Page 1

Дневник разработчика торговой стратегии. Шаг 25. Генетический алгоритм.

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


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

А вот теперь мы будем писать генетический алгоритм и для нейросети. Только давайте сначала подумаем. Нам нужно ответить на два вопроса: как роботы будут эволюционировать? Как оптимально кодировать информацию в ген?

Ну что-ж, давайте думать. Вообще, мы решили "слизать" алгоритм с природы. Как он работает в природе? Как эволюционируют живые существа? Если говорить кратко, то наследственная информация всех живых существ на нашей планете кодируется в ДНК. Молекула ДНК состоит из огромного числа однотипных субмолекул, соединенных между собой в полицепочку. Эти субмолекул всего четыре вида. Но они идут группами по три штуки - каждый такой триплет соответствует какой либо аминокислоте. Таким образом, если провести аналогию с машинным языком, то получиться, что в генетическом коде всего 64 команды. Но на самом деле это только так кажется. Дело в том, что цепочка аминокислот образует молекулу белка, и свойства этого белка зависит от того, из каких аминокислот и в какой последовательности этот бело к собран. Так что эти 64 команды на самом деле это просто набор инструкций по сборке более сложной программной команды - белковой молекулы. А комбинаций таких цепочек из аминокислот может быть очень и очень много. ...

...

Начнем с того, что возьмем геном стратегии "Свечной фильтр", который мы создали в ходе уроков из серии Тесты торговых стратегий на C#, посвященных генетическому алгоритму. Для нашего эксперимента мы возьмем файл 2014_01_08__17_12___735 из урока Тесты торговых стратегий на C#. Урок 19. Эксперименты с генетическим алгоритмом. Продолжение.:

Дневник разработчика торговой стратегии. Шаг 25. Генетический алгоритм.

Проверим ее на Газпроме на днях за период 2011 год*:

Дневник разработчика торговой стратегии. Шаг 25. Генетический алгоритм.

И так, мы видим красивый прибыльный график. Теперь проводим симуляцию на идеальной синусоиде с периодом 10, тоже за 2011 год*:

Дневник разработчика торговой стратегии. Шаг 25. Генетический алгоритм.

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

...

...Как в этом случае мутация повлияет на разворачивание всей структуры? Во первых, могут появиться новые блоки (или исчезнут существующие). Во вторых, могут измениться отдельные элементы блока, например, количество слоев в нейронной сети. Так же могут поменяется связи между блоками. Ну, и конечно, могут поменяться параметры. Но тут возникает вопрос: пусть будет удален один из блоков, на него ссылаются какие то связи. Что делать с этими связями? Или будет добавлен новый блок. У него связей нет. Кстати, тот же самый вопрос относиться и к внутренней структуре блоков, там тоже могут быть связи между отдельными элементами - например, с нейронами нейросети. Один из вариантов, это кодировать не сами связи, а правила построения этих связей. Тоесть, есть правило, например, что каждый нейрон одного слоя имеет синоптическую связь с каждым нейроном следующего слоя (структура персептрона). Это правило мы кодируем каким либо кодом. Если придумываем другой принцип, то создаем алгоритм для реализации другого правила, и присваиваем ему код. Разумеется, мы можем задать правило, которое предусматривает отдельное кодирование каждой связи. А можем вообще сделать хитрый финт ушами, например, сначала идет генетическая команда, которая создает связи согласно предопределенному алгоритму, а потом идут команды, которые добавляют или удаляют отдельные связи. Этим мы обеспечим гибкость и устойчивость стратегии при мутации - по крайней мере, будем гораздо реже получать нерабочие мутации. Но, при таком подходе мы лишимся возможности взять и конвертнуть весь объект стратегии в ген, как мы это делали со свечными фильтрами. Так что придется для каждого объекта стратегии хранить генетический материал в нем самом. Кстати, именно так устроен и природный генетический аппарат.


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  программного продукта "Microsoft Excel", авторское право на который принадлежит "Microsoft". 


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