Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Дневник разработчика биржевого робота (пл. разд.) arrow Дневник разработчика торговой стратегии. Шаг 25. Генетический алгоритм.
18.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Дневник разработчика торговой стратегии. Шаг 25. Генетический алгоритм. Печать E-mail
Автор 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 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги