Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Поставим задачу просто и чисто для проверки способностей тестера подбирать целевую функцию:
В первую очередь надо понять область просчета - это 26(сколько символов в алфавите) в степени 50(символов в тексте). Это 5.6061+e70 вариантов переборов - такое безумное число в реальности.
Генетическому алгоритму нужно умудриться в пределах 1-2 десятков тысяч попыток уложиться и найти приемлемые результаты. Я бы сказал четче - задача экстремально сложна(безнадежна) и все зависит от функции фитнеса.
1) Шаг первый, вот исходный эксперт (TestFitness.mq5) с простейшей фитнес-функцией, предложенной @Andrey Dik:
{
double ffValue=0;
//---
for(int i=0;i<ArraySize(ExtTarget);i++)
if(ExtTarget[i]==ExtOriginal[i])
ffValue++;
//--- вернем результат
return(ffValue);
}
TestFitness.set файл приложен в аттачах, его надо положить в каталог /%datafolder%/tester до запуска терминала.
Так как фитнесс функция простая и содержит ряд проблем(малый размах дискретных результатов 0-50, нет мелких приращений, постоянный обман генетического тестера за счет срыва результатов, когда 1 и 10 совпавший символ равнозначны для оптимизатора), то тестер смог достичь результатов 39 подобранных результатов из 50:
В системе с локальными 8 ядрами тест проходит за 57 секунд:
2016.11.26 01:48:19 Statistics local 14665 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2016.11.26 01:48:19 Statistics optimization done in 0 minutes 57 seconds
2016.11.26 01:48:19 Tester genetic optimization finished on pass 21760
2016.11.26 01:48:19 Tester result cache used 7095 times
2016.11.26 01:48:18 Tester 14491 records written to file cache C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\tester\cache\TestFitness.3.xml
2016.11.26 01:48:18 Tester genetic calculation is over
2016.11.26 01:48:17 Tester Best result 39 produced at generation 72. Next generation 83
оригинал: millions of residents chinas northwestern regions
жирным выделено 11 ошибок из 50 позиций, это 22%. не забывайте, что вместо пробелов поставлены x.
2) Шаг второй, пробуем исправить проблему с исходной фитнес функцией.
Как я и предложил выше на уровне теоретического рассуждения, сделаем зависимость угадывания символа зависимо от позиции символа:
{
double ffValue=0;
//---
for(int i=0;i<ArraySize(ExtTarget);i++)
if(ExtTarget[i]==ExtOriginal[i])
ffValue+= 1 + i * 0.01;
//--- вернем результат
return(ffValue);
}
Тем самым мы избавляемся от чудовищно дискретного результата и делаем результирующую кривую более гладкой. Это приводит нас к результату 86%.
Использованный коэффициент i * 0.01 хотя очень мал, но оказался очень важным - он дал слабое направление оптимизации генетическому алгоритму, а не заставил его кружиться в цикле самообмана как в исходной формуле.
2016.11.26 02:26:56 Statistics optimization done in 0 minutes 56 seconds
2016.11.26 02:26:56 Tester genetic optimization finished on pass 22272
2016.11.26 02:26:56 Tester result cache used 6246 times
2016.11.26 02:26:55 Tester 15779 records written to file cache C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\tester\cache\TestFitnessBetter.3.xml
2016.11.26 02:26:55 Tester genetic calculation is over
2016.11.26 02:26:55 Tester Best result 54.03999999999999 produced at generation 74. Next generation 85
оригинал: millions of residents chinas northwestern regions
жирным выделено 7 ошибок из 50 позиций, это 14%.
В чем проблемы и что я показал:
Я выполнил главные требования к замерам тестов:
Впечатляющая аргументация. Сначала читал тему в скользь, задом-наперед, и показалось, что Андрей прав. Но, дошел до этого поста и усомнился сильно. Не специалист в генетике, но такого профессионального уровня аргументирования у Андрея нет и в помине. Вспомнил, что мой ГА победил ГА Андрея в лоб и стало смешно, как Андрей мне доказывал, что он все равно победил. Может и победил, я не отрицаю, но по факту я тогда выиграл у него. Вот и поди, разберись, кто прав в вопросах этого ГА... Мутная тема...
Впечатляющая аргументация. Сначала читал тему в скользь, задом-наперед, и показалось, что Андрей прав. Но, дошел до этого поста и усомнился сильно. Не специалист в генетике, но такого профессионального уровня аргументирования у Андрея нет и в помине. Вспомнил, что мой ГА победил ГА Андрея в лоб и стало смешно, как Андрей мне доказывал, что он все равно победил. Может и победил, я не отрицаю, но по факту я тогда выиграл у него. Вот и поди, разберись, кто прав в вопросах этого ГА... Мутная тема...
Ты как был не в теме, так и остался там же.
Запомни одну простую вещь - нет смысла применять какие либо алгоритмы оптимизации, если известна аналитическая формулировка задачи. Вдумайся, а потом переосмысли то, что было сказано тобой и участниками этой ветки. Без понимания этих вещей даже не пробуй что либо говорить на тему оптимизации вслух рискуя выглядеть глупо.... Извини за грубость.
Кто был прав или неправ уже не важно (и не было важно изначально), важно другое - масса материала для размышлений. Примеров куча - пробуй, тестируй, изучай, думай.
Ты как был не в теме, так и остался там же.
Запомни одну простую вещь - нет смысла применять какие либо алгоритмы оптимизации, если известна аналитическая формулировка задачи. Вдумайся, а потом переосмысли то, что было сказано тобой и участниками этой ветки. Без понимания этих вещей даже не пробуй что либо говорить на тему оптимизации вслух рискуя выглядеть глупо.... Извини за грубость.
Кто был прав или неправ уже не важно (и не было важно изначально), важно другое - масса материала для размышлений. Примеров куча - пробуй, тестируй, изучай, думай.
Андрей, я не хотел задеть тебя. Возможно, выгляжу глупо. Это не площадка для самоутверждения. Просто восхитился эрудированностью и уровнем понимания и профессионализма Рената. Может, это дилетантское мнение и ошибочно, но все таки... Я тогда и выиграл, и проиграл. Так бывает... Новичкам везет.)))
Конечно ты выиграешь решая уравнение y=x^2 зная формулу, ты собственно это и сделал, зная спицифику задачи вложил фактически решение в алгоритм, это не победа в соревновании, а мухлеж, и к тому же, решение ничего общего не имеющее с оптимизацией.
Прекращай уже, всё уже в прошлом, эта ветка вообще "на грани добра и зла", зря её ворошишь.
Конечно ты выиграешь решая уравнение y=x^2 зная формулу, ты собственно это и сделал, зная спицифику задачи вложил фактически решение в алгоритм, это не победа в соревновании, а мухлеж, и к тому же, решение ничего общего не имеющее с оптимизацией.
Прекращай уже, всё уже в прошлом, эта ветка вообще "на грани добра и зла", зря её ворошишь.
Я не мухлевал. Решил задачу на уровне тогдашних моих возможностей, знаний и общего понимания темы. Результат получился двояким. С одной стороны, - технически я выиграл. С другой, - создал очень слабый алгоритм, который не обладал универсальностью, - и потому, - проиграл. Понял я это быстро, ну а ты, как специалист, мог снисходительно дать мне насладиться "победой" и потом, спокойно пояснить в чем дело. Ты объяснял, только эмоции были лишними. Что спорить с новичком, думающим что он победил профессионала?))
В твоем споре с Ренатом я не судья, а наблюдатель, спокойно перелистывающий страницы обсуждений. Читая, поверхностно оцениваю форму аргументов (не имея возможности вникнуть в суть) и невольно цепляюсь за некоторые "выпирающие" вещи. Те, что всегда следуют спорам заинтересованных людей - эмоциональные всплески. По их сигнатурам пытаюсь определить кто "правее". Ведь тот кто менее прав, сам об этом знает, а значит, в его словах, поверх технических деталей есть еще информация, которая может открыть правду. А именно: "знает ли он, что не прав?".
И вот, нашел я, что у обоих сторон есть это знание. Знание своей правоты и знание своей неправоты. Боюсь, матерый профессионализм не избавил вас от двоякости результатов тестирования ваших алгоритмов и не дал окончательно определить правого, как это было в моем соревновании с тобой. Таковы эти ГА...
И вот, нашел я, что у обоих сторон есть это знание. Знание своей правоты и знание своей неправоты. Боюсь, матерый профессионализм не избавил вас от двоякости результатов тестирования ваших алгоритмов и не дал окончательно определить правого, как это было в моем соревновании с тобой. Таковы эти ГА...
Ты меня заинтересовал. Буду соревноваться со штатным алгоритмом, как и ты. Сначала изучу тему. Это займет время.
ЗЫ. Суть в том, что в графике на МКЛ мне равных нет, и соревноваться не с кем. Скучно. А эта тема интересна и может пригодиться. Ее знать нужно.