MetaTrader 5 Strategy Tester! - страница 58

 
Renat Fatkhullin:

Реально смешно наблюдать как люди своей предобработкой и человеческой эвристикой на порядки снижают сложность задач, а потом пытаются сравнивать упрощенную донельзя функцию с универсальным решателем ;)))


Поправлю! Выясняют реальную сложность задачи а не снижают ее. Как ее можно снизить, если она априорно низкая?... Нормальная практика попробовать на задаче n подходов, от самого просто (жадного) до самого сложного (вставьте свой).
 
Renat Fatkhullin:

Я опираюсь на свой практический опыт написания га оптимизаторов. Первый написали еще в 2006 году.

Вы не теорию читайте про "успешный обмен генами", а подумайте об стоимости. ГА снижает затраты. И сейчас он может грубо за 8000-10000 проходов выдать приемлемый результат. Вы же предлагаете параллельно основной ветке расчетов стрелять в молоко(ибо еще нет скрещивания текущей популяции) по сторонам, увеличивая стоимость расчетов(проходов) вплоть до 1.5-2.0 раз при слабом (мое мнение, что близком к нулю) влиянии на конечный результат.

Практика без теории слепа, к сожалению.  Я ставлю вопросы математической эффективности (а без неё не может быть и финансовой эффективности очевидно), а у вас всё сводится к какой-то демагогии. Мол в гробу я видел вашу математику, я с 2006 года пишу оптимизаторы и сам лучше знаю.  Так мы вряд ли придём к какому-то конструктиву... 

Что такое "стрелять в молоко"?  Надо бы яснее выражаться. Видимо вы не поняли идею о которой я говорю.  Поясню ещё раз.  Основа системы, как мы знаем, это скрещивание и мутации особей с хорошими генами, ожидая получить от них потомка с лучшими генами.  Только у вас эти скрещивания происходит для всей популяции одномоментно. Зачем нужно это ограничение?  Чем плох вариант постепенного скрещивания особей по мере их появления (независимо от поколения)? Повторюсь, скрещиваются только особи с хорошими генами (высокой целевой функцией), а не кто попало.  Главное соблюдать тот же баланс по количеству скрестившихся особей, количеству мутировавших, и количеству умерших.

Я этот алгоритм не высасываю из пальца, а беру на примере живой природы.  А вы, не имея никаких конкретных доказательств и расчётов, голословно критикуете его.  Мол он там увеличит какую-то стоимость и т.д.  Просто потому, что вам так хочется думать.

 Все таки вы совершенно на теоретическом уровне в этом вопросе. Ошибаетесь и даже не понимаете реальной механики генетического алгоритма, раз делаете такие заявления.

Например, у вас область решений 1 млрд вариантов, вы сделали целевую ГА пристрелку в 5 000 проходов с приемлемым результатом, а потом должны доказать себе, что дальше лучшего результата нет. Для этого вы обязаны продолжить генетику и еще с десяток генераций порыскать вокруг.

Скорее это вы не очень понимаете математического обоснования данного механизма, пытаясь подменить их какими-то домыслами, основанными на наблюдении за работой программы.

Эти частные случаи реализации (рысканье или ещё что-то) в данном случае не имеют значения.  Ибо выходы бывают разные, например по достижении требуемой точности - там незачем рыскать, если требуемая точность уже достигнута.  И т.д.  Речь шла о том, что все лучшие результаты могут оказаться уже в первом поколении (и рыскай не рыскай - их не улучшишь).  Т.е. смысл такой, что для попадания особи в топ она необязательно должна была выведена путём кучи скрещиваний.

 
Andrey Dik:

Таким образом, задача состоит из 705 символов, каждый из символов может иметь 60 вариантов (строка 705 символов, ключ 60 символов). 

Соответственно максимально возможное число ФФ может выдать: 705, что означает 100% совпадение.

Прошу учесть, что это только мы знаем, какое максимальное число может выдать ФФ, поэтому ориентирование на число 705 в алгоритме недопустимо. Алгоритм должен считать, что максимальное число в ФФ ничем не ограничено и может быть любым. 

ps. шибко сомневаюсь, что какой бы то ни было алгоритм сможет набрать больше 200 совпадений, это унриал... тем более будет интересно. 

В общем, мой результат таков:

на максимум 20 000 обращений к фф, на 100 прогонах (я сделал 100 вместо 20 для более точной статистики) получилось:

> ######### analyze

> results_all <- -as.integer(lapply(descent_path, min))

> hist(results_all, breaks = 'fd')

> print(mean(results_all))

[1] 24.54 #среднее

> print(median(results_all))

[1] 24 #медиана

это гистограмма значений фф 

 

 

Но я заметил, что алгоритм стабильно начинает спускаться после 20 000 итераций. Было бы интересно еще сравнить сколько итераций нужно до полного решения.

Как здесь:

 

 
Alexey Navoykov:

Практика без теории слепа, к сожалению.  Я ставлю вопросы математической эффективности (а без неё не может быть и финансовой эффективности очевидно), а у вас всё сводится к какой-то демагогии. Мол в гробу я видел вашу математику, я с 2006 года пишу оптимизаторы и сам лучше знаю.  Так мы вряд ли придём к какому-то конструктиву... 

Что такое "стрелять в молоко"?  Надо бы яснее выражаться. Видимо вы не поняли идею о которой я говорю.  Поясню ещё раз.  Основа системы, как мы знаем, это скрещивание и мутации особей с хорошими генами, ожидая получить от них потомка с лучшими генами.  Только у вас эти скрещивания происходит для всей популяции одномоментно. Зачем нужно это ограничение?  Чем плох вариант постепенного скрещивания особей по мере их появления (независимо от поколения)? Повторюсь, скрещиваются только особи с хорошими генами (высокой целевой функцией), а не кто попало.  Главное соблюдать тот же баланс по количеству скрестившихся особей, количеству мутировавших, и количеству умерших.

Я этот алгоритм не высасываю из пальца, а беру на примере живой природы.  А вы, не имея никаких конкретных доказательств и расчётов, голословно критикуете его.  Мол он там увеличит какую-то стоимость и т.д.  Просто потому, что вам так хочется думать.

Скорее это вы не очень понимаете математического обоснования данного механизма, пытаясь подменить их какими-то домыслами, основанными на наблюдении за работой программы.

Эти частные случаи реализации (рысканье или ещё что-то) в данном случае не имеют значения.  Ибо выходы бывают разные, например по достижении требуемой точности - там незачем рыскать, если требуемая точность уже достигнута.  И т.д.  Речь шла о том, что все лучшие результаты могут оказаться уже в первом поколении (и рыскай не рыскай - их не улучшишь).  Т.е. смысл такой, что для попадания особи в топ она необязательно должна была выведена путём кучи скрещиваний.

Вы в своей жизни написали хотя бы один какой нибудь алгоритм оптимизации? Пробовали воплотить свои идеи?

В курсе вообще, для чего нужна избыточность в популяции в природе? Почему избыточность неприемлема при оптимизации?

Ваша теория ничего не стоит без практики. Попробуйте взять простейший ГА из Википедии, там всего несколько строчек кода, и реализуйте свою теорию на практике. Быстро спадут розовые очки. 

 
Alexey Burnakov:

В общем, мой результат таков:

на максимум 20 000 обращений к фф, на 100 прогонах (я сделал 100 вместо 20 для более точной статистики) получилось:

> ######### analyze

> results_all <- -as.integer(lapply(descent_path, min))

> hist(results_all, breaks = 'fd')

> print(mean(results_all))

[1] 24.54 #среднее

> print(median(results_all))

[1] 24 #медиана

это гистограмма значений фф 

Но я заметил, что алгоритм стабильно начинает спускаться после 20 000 итераций. Было бы интересно еще сравнить сколько итераций нужно до полного решения.

Как здесь:

24,5 - это что такое, проценты? или в среднем 24,5 из 705? Это даже не 200, а просто 24,5?

 
Andrey Dik:

Это даже не 200, а просто 24,5?

Да. из 705.
 
Alexey Burnakov:
Да. из 705.

Что то как то не впечатляет для "слабенькой задачи", не так ли?

Я не издеваюсь. Хотя не, издеваюсь, извини. 

Ок, в какие цифры ты оцениваешь примерно штатный алгоритм? Давай ради забавы, получится число больше или меньше?
 
Andrey Dik:
Что то как то не впечатляет для "слабенькой задачи", не так ли?
Все относительно. А у вас какой результат? У меня метрика доходит до 200 (если уж это число упомянули) за 50 000 обращений к фф. Это много или мало, я не знаю.
 
Andrey Dik:


Ок, в какие цифры ты оцениваешь примерно штатный алгоритм? Давай ради забавы, получится число больше или меньше?
Без понятия...
 
Alexey Burnakov:
Все относительно. А у вас какой результат? У меня метрика доходит до 200 (если уж это число упомянули) за 50 000 обращений к фф. Это много или мало, я не знаю.

Пока не знаю, не пробовал ещё. Я не люблю говорить голословно, да и цифра 200 была упомянута не с потолка, R его не достиг даже близко. Эта задача чудовищно быстро усложняется с каждым добавлением одного символа к тексту. Это даже хуже, чем потерять иголку на околоземной орбите а потом пытаться её отыскать.

Нужно подготовить штатный советник, пример для ALGLIB и мой алго для публикации и начала тестов.

Кстати, подготовь свой алго таким образом, что бы к нему можно было подключать любые ФФ в качестве отдельной функции или ещё как, но тесты должны иметь возможность свободно подключатся и заменяться другими. 

Причина обращения: