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

 

Alexey Burnakov:

Очевидно для этого случая...

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

MetaTrader 5 Strategy Tester!

Alexey Burnakov, 2016.11.21 21:19

Возьмем вашу изначальную задачку с символами. Алфавит длиной 41. Цель длиной 49. Если тупо - жадно - перебирать на каждой из 49 позиций 41 элемент алфавита и замерять наткаждом ходе целевку, это всего лишь 41*49 ходов. Не кажется, что задачка будет решена так просто? Здесь же нет взаимодействий... Угадали символ под номером n получили +1 к целевке. Все линейно суммируется. Даже если 41*705=28905. Банально решается...

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

 
fxsaber:

По окончании работы ГА восстановить полученный текст очень просто. Напишу взаимный конвертер.

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

Что касается мар. режима ГА штатного оптимизатора - требуются там существенные изменения. Ну не должен он по количеству итераций уступать R с открытым исходным кодом. По скорости - допускается из-за агентской модели.

Но, как выяснили, ГА-синхронизация сводит полностью на нет смысл мультиагентного подхода. Для ГА нужен только один агент. Для полного перебора - Облако.

Какие требуются изменения? Есть же советник для решения задачи с текстом, он оперирует числами, а не текстом. Текст внутри ФФ и советник не должен видеть что внутри ФФ. 
 
fxsaber:

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

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

Вот именно!
 
Andrey Dik:
Какие требуются изменения? Есть же советник для решения задачи с текстом, он оперирует числами, а не текстом. Текст внутри ФФ и советник не должен видеть что внутри ФФ. 
Речь идет об алгоритме ГА от разработчиков. Он объективно по количеству итераций уступает Вашему. Ваш советник для проверки штатного оптимизатора корректен как раз таки. Дорабатывать нужно не Ваш советник, а сам штатный ГА.
 
fxsaber:
Речь идет об алгоритме ГА от разработчиков. Он объективно по количеству итераций уступает Вашему. Ваш советник для проверки штатного оптимизатора корректен как раз таки. Дорабатывать нужно не Ваш советник, а сам штатный ГА.

А, ну там всего лишь один параметр в штатный оптимизатор добавить бы надо - количество вызовов ФФ.

0 - на выбор оптимизатора

N - указанное пользователем.

Больше в принципе ничего не нужно, а то сейчас оптимизатор сам по себе считает сколько ему кажется целесообразным, а может быть пользователь хочет 50000 раз посчитать, или 100000 раз, ли 500 раз. 

 
Andrey Dik:

А, ну там всего лишь один параметр в штатный оптимизатор добавить бы надо - количество вызовов ФФ.

0 - на выбор оптимизатора

N - указанное пользователем.

Больше в принципе ничего не нужно, а то сейчас оптимизатор сам по себе считает сколько ему кажется целесообразным, а может быть пользователь хочет 50000 раз посчитать, или 100000 раз, ли 500 раз. 

Да, это безусловно нужно!

Однако, уже сейчас мы можем построить вышеупомянутый график для штатного ГА, Вашего ГА и R. И совершенно объективно сравнить. Чей график будет ниже/выше всех, того алгоритм совершенней.

Оптимизационных алгоритмов много. По-хорошему, должен быть выбор.

Доступ к штатному алгоритму ГА надо делать через MQL! Тогда не надо будет изобретать велосипеды, а сразу можно будет реализовывать автооптимизации.

Т.е. доступ не к оптимизатору ТС через ГА, а только к алгоритму. 

 
fxsaber:

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

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

я говорю еще раз очевидное. это задача имеет жадное решение, которое опередит по скорости все остальные. Задача не обладает NP-полнотой. Полный бред, вообще-то.

Вот код решения на медленном и тупом R. Словарь размером 41. целевая последовательность длиной 705.

rm(list=ls());gc()


alphabet <- 41

target <- 705


letters_s <- 1:alphabet # alphabet

print(letters_s)


strings <- round(runif(target, 1, alphabet)) # target sequence

print(strings)


par_arr <- round(runif(target, 1, alphabet)) #set first index set


run_strings <- letters_s[par_arr] #first sequence


print(sum(strings == run_strings)) #first ff_value


found_sequence <- integer()

run_indexes <- data.frame()


start <- Sys.time()


for (i in 1:target){

for (j in 1:alphabet){

run_strings[i] <- letters_s[j]

run_indexes[i, j] <- sum(strings == run_strings)

}

}


par_arr <- apply(run_indexes, 1, which.max)


print(sum(strings == letters_s[par_arr]))


Sys.time() - start


print(strings)

print(letters_s[par_arr])

 

> print(sum(strings == letters_s[par_arr]))

[1] 705

> Sys.time() - start

Time difference of 2.08812 secs

> print(strings)

  [1] 20  6 24 20 30  9 14 34 10 25  5 28 27  5  7 22 32 25 19 41  4 27 31 29 40 11 28 26 28  4 17 28 29 27 10 22 13 26 37 24 17 34 40 21 36 24 24 29 15 19 10 27

 [53] 16 29 25 22 21 17 23 27  7 11 36  7 10 17 35 35 32  3  6 39  5  8 18  3 20 13 10  4  4 18 13 38 10 38 34 26 38 37  7 18 36 27 33 23 17 31  6 11 10 10 13 31

[105] 37 27 27 23 28 25 21 40  5 35 36  2  6  8  3 31 37 14 27 17 19 31 40 18 25 13 21 11 12 22 26 30 29 41 16  7 36 10  9 17 17 30 19 35 38  9  5 27 19 20 27 36

[157] 35  4 39 12  9  8 17 31  3 26 34 20 18 28 25 10 17 19 20 23 28 19 10 28 33 30 30 18 15 37 11 11  2  7 21 33  8 32 28 26 29  9 36  9 32 27 29  4 14 27  3 25

[209] 19  1 31 26 24 15 25  7  3 12 28  2 31 16 16 23 40  4 30 24 34 27 31 30 12 32 38 26 25  3 37 10 25 18  9 36 37 15 18 11 26 11  4 28 27 34 29  3 33 10 11 19

[261]  5 32 28 34 28 30 14  7 14 26 21 41 11  6 13 30 32  6 20 24 10 31 12 18  7 27  9  5 18  4 18 35 27 37 29 31  4 29 24  9 22 37 18 30 14 36  7 35 19  5 21 32

[313] 16 25  4 33 14 23  5 15 28 17 17 31  4 35 24 26  5 19  6 23 41 27 30  7 30 20 38 20 39 38 35 10  1 16 17  2  6 28  2  9  2 35 37 39 39 22  2 12 17  1 12  3

[365] 20  9 22 36  4 15 18  7 19 33 14 36 11 34 10 24 16 39  5 22  4 13 27  6 41 28 15 12 39 32 34  3 35 38  9 40 10 26 18 36 20 37 10 12 30  4  1 39 38 19 38  2

[417]  8 31 15 19  7 27  4 11  9  8  6 40  2 41  3 20 29  5  8 14 34 24  6  4 29 31  9 26 27 10 11 19 16 19  3 37 12 17 29  6 19 11 22 28 25 25  7 18 30  6 16 22

[469] 11 35 31 34  2 14 10 17 29 38 33 41 37 23 20 30 36 11 38  4 35  6 33  1  4 28 34 29 10 41 30 30 10 17 39 36 36 33 38 33 10 10 23 11 10 24 20  2 28 35  7 11

[521]  7  6 34  1 30 26 13 21 39 26 28 32 27 12 11 13 12  5 24 31 23 26 18 25  2 21  2 27 12 32 28 17 32 14  4 38 28 11 16  7 29 21 33 32 25 27 38 30  3  6  6 20

[573] 32 23 24 19  6 40 36 17 18 38  6  7 29 15  6 31 21  1 17 30 38 14  8 28 22  3 14  7 14 37 10 37 41 36 26 29 31 12  6 41 31 36 27 12 20 18 25 13 40 34 15  5

[625] 27 40 12 29  7 15 37 38 23 36 19 34 40 15 38 25 11 15 33 34  2 15 33 37  9 34  3 35 13  8 17 19 26 34 15 13 38 19 21 15 35 39 20  4 14 13 11 20  2 20 34 24

[677] 40 29 13 20 24 30 16 29 27 15 11 29 34 16 31 15 40  3  8  8 16 32 30 14 16 31 13 41 11

> print(letters_s[par_arr])

  [1] 20  6 24 20 30  9 14 34 10 25  5 28 27  5  7 22 32 25 19 41  4 27 31 29 40 11 28 26 28  4 17 28 29 27 10 22 13 26 37 24 17 34 40 21 36 24 24 29 15 19 10 27

 [53] 16 29 25 22 21 17 23 27  7 11 36  7 10 17 35 35 32  3  6 39  5  8 18  3 20 13 10  4  4 18 13 38 10 38 34 26 38 37  7 18 36 27 33 23 17 31  6 11 10 10 13 31

[105] 37 27 27 23 28 25 21 40  5 35 36  2  6  8  3 31 37 14 27 17 19 31 40 18 25 13 21 11 12 22 26 30 29 41 16  7 36 10  9 17 17 30 19 35 38  9  5 27 19 20 27 36

[157] 35  4 39 12  9  8 17 31  3 26 34 20 18 28 25 10 17 19 20 23 28 19 10 28 33 30 30 18 15 37 11 11  2  7 21 33  8 32 28 26 29  9 36  9 32 27 29  4 14 27  3 25

[209] 19  1 31 26 24 15 25  7  3 12 28  2 31 16 16 23 40  4 30 24 34 27 31 30 12 32 38 26 25  3 37 10 25 18  9 36 37 15 18 11 26 11  4 28 27 34 29  3 33 10 11 19

[261]  5 32 28 34 28 30 14  7 14 26 21 41 11  6 13 30 32  6 20 24 10 31 12 18  7 27  9  5 18  4 18 35 27 37 29 31  4 29 24  9 22 37 18 30 14 36  7 35 19  5 21 32

[313] 16 25  4 33 14 23  5 15 28 17 17 31  4 35 24 26  5 19  6 23 41 27 30  7 30 20 38 20 39 38 35 10  1 16 17  2  6 28  2  9  2 35 37 39 39 22  2 12 17  1 12  3

[365] 20  9 22 36  4 15 18  7 19 33 14 36 11 34 10 24 16 39  5 22  4 13 27  6 41 28 15 12 39 32 34  3 35 38  9 40 10 26 18 36 20 37 10 12 30  4  1 39 38 19 38  2

[417]  8 31 15 19  7 27  4 11  9  8  6 40  2 41  3 20 29  5  8 14 34 24  6  4 29 31  9 26 27 10 11 19 16 19  3 37 12 17 29  6 19 11 22 28 25 25  7 18 30  6 16 22

[469] 11 35 31 34  2 14 10 17 29 38 33 41 37 23 20 30 36 11 38  4 35  6 33  1  4 28 34 29 10 41 30 30 10 17 39 36 36 33 38 33 10 10 23 11 10 24 20  2 28 35  7 11

[521]  7  6 34  1 30 26 13 21 39 26 28 32 27 12 11 13 12  5 24 31 23 26 18 25  2 21  2 27 12 32 28 17 32 14  4 38 28 11 16  7 29 21 33 32 25 27 38 30  3  6  6 20

[573] 32 23 24 19  6 40 36 17 18 38  6  7 29 15  6 31 21  1 17 30 38 14  8 28 22  3 14  7 14 37 10 37 41 36 26 29 31 12  6 41 31 36 27 12 20 18 25 13 40 34 15  5

[625] 27 40 12 29  7 15 37 38 23 36 19 34 40 15 38 25 11 15 33 34  2 15 33 37  9 34  3 35 13  8 17 19 26 34 15 13 38 19 21 15 35 39 20  4 14 13 11 20  2 20 34 24

[677] 40 29 13 20 24 30 16 29 27 15 11 29 34 16 31 15 40  3  8  8 16 32 30 14 16 31 13 41 11


 2 секунды.

 

Это задача вообще для школьной олимпиады по программированию. Я не сразу заметил.... Какие там сложные алгоритмы? Очнитесь! Я ее сначала решал симуляцией отжига. Но это нафиг не нужно. Все. 

 
Alexey Burnakov:

Это задача вообще для школьной олимпиады по программированию. Я не сразу заметил.... Какие там сложные алгоритмы? Очнитесь! Я ее сначала решал симуляцией отжига. Но это нафиг не нужно. Все. 

Это я виноват, что не дал полные вводные изначально. Представьте, что Вам неизвестно, что из себя представляет целевая функция. Так и было задумано. Просто я по дурости взял и выдал все нагора. Но нужно было сравнить именно оптимизационные алгоритмы, а не решить конкретно эту задачу. В общем, я виноват.

То, что сделали отжигом - самое то, что нужно. Школьный алгоритм не волнует совсем, т.к. школьник знает все о природе целевой функции. А на самом деле она неизвестна.

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

 
Alexey Burnakov:

я говорю еще раз очевидное. это задача имеет жадное решение, которое опередит по скорости все остальные. Задача не обладает NP-полнотой. Полный бред, вообще-то.

Вот код решения на медленном и тупом R. Словарь размером 41. целевая последовательность длиной 705.

 2 секунды.

Это задача вообще для школьной олимпиады по программированию. Я не сразу заметил.... Какие там сложные алгоритмы? Очнитесь! Я ее сначала решал симуляцией отжига. Но это нафиг не нужно. Все. 

Вот это - действительно клиника. Полный R мозга, извините.

Вы б почитали что ли, что Вам пишут - не имеет алгоритм к задаче доступа! - не имеет! - алгоритм может получить только ответ ФФ, и всё, а Вы про школьные олимпиады глаголите...

 
Andrey Dik:

Вот это - действительно клиника. Полный R мозга, извините.

Вы б почитали что ли, что Вам пишут - не имеет алгоритм к задаче доступа! - не имеет! - алгоритм может получить только ответ ФФ, и всё, а Вы про школьные олимпиады глаголите...

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

Ты не понял, что ты решаешь задачу 2+x= 10? найти x.