Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
18 секунд на 8-ми ядрах
Вот этот ужас (полный перебор)
double Sphere(const double &vec[])
{
int dim = ArraySize(vec);
double sum = 0;
for(int i = 0; i < dim; i++) sum += pow(vec[i], 2);
return -sum;
}
void OnStart()
{
double Vector[3];
double Max = -DBL_MAX;
const ulong StartTime = GetMicrosecondCount();
for (double x = -100; x < 100; x += Step)
for (double y = -100; y < 100; y += Step)
for (double z = -100; z < 100; z += Step)
{
Vector[0] = x;
Vector[1] = y;
Vector[2] = z;
const double Tmp = Sphere(Vector);
if (Tmp > Max)
Max = Tmp;
}
Print(Max);
Print(GetMicrosecondCount() - StartTime);
}
2016.11.21 16:15:48.316 testGA: optimization finished in 0:00:00, 5744 cache records were used, 5572 cache records rejected
2016.11.21 16:15:47.823 testGA: optimization started
0 секунд. Но только не смог найти минимум сферы!
Что творится с оптимизаторами?!
Неужели синхронизация агентов так тормозит?
Из восьми ядер (агентов) оставил работать только один. Результат - 20 секунд.
Как так получается, что 8 ядер - 18 секунд, а 1 - 20? ГА-синхронизация сказывается? Если так, то какой смысл тогда в ГА-облаке? Особенно при мат. вычислениях, когда рачет целевой функции на многие порядки быстрее, чем агентская ГА-синхронизация. Собственное пакетирование вычислений - не вариант совсем.
А предложенная реализация Метода Роя Частиц на одном ядре справилась с тем же самым за 850 мкс!
Что я делаю не так?!
Сколько делает запусков FF Рой?
При этом какой лучший результат у оптимизатора МТ и Роя?
Сколько делает запусков FF Рой?
При этом какой лучший результат у оптимизатора МТ и Роя?
МРЧ: 1490 проходов на интервале [-100, +100] для всех трех координат. При этом могу регулировать заранее количество циклов (Pass), если нужна иная точность или есть ограничения по времени выполнения.
PSO[3] created: 15/3
PSO Processing...
Pass 0 done, skipped 1 of 15 / -1216.844782161339
Pass 1 done, skipped 2 of 15 / -1216.844782161339
Pass 2 done, skipped 3 of 15 / -1216.844782161339
Pass 3 done, skipped 2 of 15 / -1216.844782161339
Pass 4 done, skipped 1 of 15 / -1216.844782161339
Pass 5 done, skipped 1 of 15 / -1216.844782161339
Pass 6 done, skipped 0 of 15 / -1216.844782161339
Pass 7 done, skipped 0 of 15 / -106.8281345867898
Pass 8 done, skipped 0 of 15 / -106.8281345867898
Pass 9 done, skipped 0 of 15 / -106.8281345867898
Pass 10 done, skipped 0 of 15 / -106.8281345867898
Pass 11 done, skipped 0 of 15 / -106.8281345867898
Pass 12 done, skipped 0 of 15 / -41.75511633195617
Pass 13 done, skipped 0 of 15 / -41.75511633195617
Pass 14 done, skipped 0 of 15 / -41.75511633195617
Pass 15 done, skipped 0 of 15 / -41.75511633195617
Pass 16 done, skipped 0 of 15 / -41.75511633195617
Pass 17 done, skipped 0 of 15 / -41.75511633195617
Pass 18 done, skipped 0 of 15 / -15.37882329165843
Pass 19 done, skipped 0 of 15 / -10.85481435989758
Pass 20 done, skipped 0 of 15 / -10.85481435989758
Pass 21 done, skipped 0 of 15 / -8.561527165496884
Pass 22 done, skipped 0 of 15 / -8.561527165496884
Pass 23 done, skipped 0 of 15 / -8.561527165496884
Pass 24 done, skipped 0 of 15 / -8.561527165496884
Pass 25 done, skipped 0 of 15 / -4.159581158356343
Pass 26 done, skipped 0 of 15 / -3.840244651138437
Pass 27 done, skipped 0 of 15 / -0.5882362559695152
Pass 28 done, skipped 0 of 15 / -0.5882362559695152
Pass 29 done, skipped 0 of 15 / -0.5882362559695152
Pass 30 done, skipped 0 of 15 / -0.5882362559695152
Pass 31 done, skipped 0 of 15 / -0.4905653897259477
Pass 32 done, skipped 0 of 15 / -0.4905653897259477
Pass 33 done, skipped 0 of 15 / -0.4905653897259477
Pass 34 done, skipped 0 of 15 / -0.4224744719165405
Pass 35 done, skipped 0 of 15 / -0.3039683971107092
Pass 36 done, skipped 0 of 15 / -0.3039683971107092
Pass 37 done, skipped 0 of 15 / -0.3039683971107092
Pass 38 done, skipped 0 of 15 / -0.3039683971107092
Pass 39 done, skipped 0 of 15 / -0.04776535589703353
Pass 40 done, skipped 0 of 15 / -0.04776535589703353
Pass 41 done, skipped 0 of 15 / -0.04776535589703353
Pass 42 done, skipped 0 of 15 / -0.04776535589703353
Pass 43 done, skipped 0 of 15 / -0.02848088623334127
Pass 44 done, skipped 0 of 15 / -0.02848088623334127
Pass 45 done, skipped 0 of 15 / -0.02840297552625775
Pass 46 done, skipped 0 of 15 / -0.02840297552625775
Pass 47 done, skipped 0 of 15 / -0.02840297552625775
Pass 48 done, skipped 0 of 15 / -0.02840297552625775
Pass 49 done, skipped 0 of 15 / -0.02306123966974868
Pass 50 done, skipped 0 of 15 / -0.001477531483704371
Pass 51 done, skipped 0 of 15 / -0.001477531483704371
Pass 52 done, skipped 0 of 15 / -0.001477531483704371
Pass 53 done, skipped 0 of 15 / -0.001477531483704371
Pass 54 done, skipped 0 of 15 / -0.001477531483704371
Pass 55 done, skipped 0 of 15 / -0.001477531483704371
Pass 56 done, skipped 0 of 15 / -0.001477531483704371
Pass 57 done, skipped 0 of 15 / -0.001477531483704371
Pass 58 done, skipped 0 of 15 / -0.001477531483704371
Pass 59 done, skipped 0 of 15 / -0.001477531483704371
Pass 60 done, skipped 0 of 15 / -0.00099292815066179
Pass 61 done, skipped 0 of 15 / -0.00099292815066179
Pass 62 done, skipped 0 of 15 / -0.0001923168828579579
Pass 63 done, skipped 0 of 15 / -0.0001923168828579579
Pass 64 done, skipped 0 of 15 / -0.0001923168828579579
Pass 65 done, skipped 0 of 15 / -0.0001923168828579579
Pass 66 done, skipped 0 of 15 / -0.0001923168828579579
Pass 67 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 68 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 69 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 70 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 71 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 72 done, skipped 0 of 15 / -9.825525069632908e-05
Pass 73 done, skipped 0 of 15 / -7.740086234270854e-05
Pass 74 done, skipped 0 of 15 / -7.740086234270854e-05
Pass 75 done, skipped 0 of 15 / -7.740086234270854e-05
Pass 76 done, skipped 0 of 15 / -7.740086234270854e-05
Pass 77 done, skipped 0 of 15 / -5.417787160485262e-05
Pass 78 done, skipped 0 of 15 / -5.417787160485262e-05
Pass 79 done, skipped 0 of 15 / -4.124380700366694e-05
Pass 80 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 81 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 82 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 83 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 84 done, skipped 0 of 15 / -4.076858134773858e-06
Pass 85 done, skipped 0 of 15 / -2.638869084576161e-06
Pass 86 done, skipped 0 of 15 / -1.775176791252307e-06
Pass 87 done, skipped 0 of 15 / -1.775176791252307e-06
Pass 88 done, skipped 0 of 15 / -1.775176791252307e-06
Pass 89 done, skipped 0 of 15 / -1.735891693984063e-06
Pass 90 done, skipped 0 of 15 / -1.588914600224903e-06
Pass 91 done, skipped 0 of 15 / -1.200137850784682e-06
Pass 92 done, skipped 0 of 15 / -2.60906478723283e-07
Pass 93 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 94 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 95 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 96 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 97 done, skipped 0 of 15 / -7.946167689742999e-08
Pass 98 done, skipped 0 of 15 / -3.005678719884437e-08
Pass 99 done, skipped 0 of 15 / -3.005678719884437e-08
PSO Finished 1490 of 1500 planned passes: true
0 1.368379064359672e-06
1 -0.0001682938833832739
2 -4.161830791079343e-05
1568 mcs.
Находит истинный минимум Sphere(0, 0, 0) = 0.
MT5 находит (выше есть пост с логами) тот же минимум, но только в ~10 000 раз медленней.
Находит истинный минимум Sphere(0, 0, 0) = 0.
MT5 находит (выше есть пост с логами) тот же минимум, но только в ~10 000 раз медленней.
Нет, четко нужно ответить:
Рой - столько то запусков ФФ, лучший результат такой то.
МТ - столько то запусков ФФ, лучший результат такой то.
То есть так, что бы в двух рядом строчках были цифры которые можно было бы сравнить, что бы не пришлось шарить по длинным портянкам (они интересны разве что сотрудникам СД).
Только так можно сравнивать время - по запускам ФФ.
На данный момент я вижу, что МТ делает гораздо больше запусков, 9472 против 99 у Роя, то есть в 100 раз больше, плюс накладные расходы по общению с агентами.
Эта задача - просто фантик невесомый, поэтому МТ её выполняет не эффективно быстро. Если же тестировать на более серьёзных задачах, таких как оптимизация советников с десятками параметров, то МТ порвет Рой"я в клочья как тузик грелку.
Нет, четко нужно ответить:
Вы увидели цифры.
Эта задача - просто фантик невесомый, поэтому МТ её выполняет не эффективно быстро. Если же тестировать на более серьёзных задачах, таких как оптимизация советников с десятками параметров, то МТ порвет Рой"я в клочья как тузик грелку.
MT4 не справился даже с "фантиком".
Приведите целевую мат. функцию, с которой великолепно справляется MT5 (и результат). Покажу результат МРЧ на ней.
А предложенная реализация Метода Роя Частиц на одном ядре справилась с тем же самым за 850 мкс!
Что я делаю не так?!
Вы наступаете на грабли "частное решение vs универсальный решатель" и делаете вид, что не понимаете.
Требования к решателю много лет назад поднялись выше "счас напишу цикл for и порву всех", чем на наших форумах не один программист хвастался.
Поднимите сложность и объем вычислений выше системного оверхеда в десяток миллисекунд и сразу увидите, кто победитель. А пока вы предлагаете задачи ниже горизонта системного оверхеда на запуск процессов и синхронизации, это никому не интересно.
По сути вы читер, делающий вид, что не понимаете читинга.
Вы увидели цифры.
MT4 не справился даже с "фантиком".
Приведите целевую мат. функцию, с которой великолепно справляется MT5 (и результат). Покажу результат МРЧ на ней.
Возможно - в МТ4 баг какой то...
Задача:
#property strict
int countRuns = 0;
//+------------------------------------------------------------------+
int GetParamCount () export
{
textLen = StringLen(Code);
return (textLen);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void GetParamProperties (double &min, double &max, double &step) export
{
min = 0.0;
max = 40.0;
step = 1.0;
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
double FF (double ¶m []) export
{
countRuns++;
int sizeArray = ArraySize (param);
if(sizeArray != textLen)
return (0.0);
int ffVolue = 0;
for (int i=0; i< textLen; i++)
{
if(GetCode(param [i]) == StringSubstr(Code, i, 1))
ffVolue++;
}
return (double(ffVolue));
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int GetCountRunsFF () export
{
return (countRuns);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void PrintCodeToFile (double ¶m []) export
{
int sizeArray = ArraySize (param);
if(sizeArray != textLen)
{
Print ("Неверное количество параметров, печать в файл производится не будет!");
return;
}
string code = "";
for(int i=0; i<textLen; i++)
{
code+=GetCode (param[i]);
}
int handle = FileOpen ("decodeFF.csv", FILE_READ|FILE_WRITE|FILE_ANSI|FILE_CSV);
if(handle==INVALID_HANDLE)
{
Print ("Ошибка записи в файл востановленного текста ФФ. Ошибка: "+ (string)GetLastError());
return;
}
FileWriteString(handle, code);
FileClose (handle);
}
//+------------------------------------------------------------------+
string GetCode (double param)
{
int p = (int) MathRound (param);
if(p <0)
p = 0;
if(p > 40)
p = 40;
return (Key [p]);
}
string Key [41] = {"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я", ";", ":", ".", ",", "-", "?", "!", " "};
int textLen = 0;
string Code = "редко научная статья сочетает в себе эти два типа";
Результаты моего алгоритма и МТ.
По поводу споров "мой ГА делает в десятки раз меньше запусков" - все это обсуждалось тут.
И кастомные ГА для TradeStation обсуждали тут, где лично мне доказывали, что можно в 200 запусков ГА найти приемлемое решение. Конечно, это было просто смешно - автор вручную и в грязную подстраивал/подкручивал свой собственный случай, чтобы показать "у МТ делает 10 000 проходов, а я ~200".
У нас универсальный решатель, который без 5-10 подкруточных параметров может автоматически и более-менее полно просканить область поиска и найти достаточно приемлемые результаты.
Когда задача с областью решений в триллионы проходов, никакими 100-200-1000 проходами даже близко не подойти к решению. Дай бог за 10 000 нащупать, потом сузить границы и еще раз пройтись ГА. Потом, может еще.