Использование MQL5 Cloud Network в массовых расчетах

 
Мы ищем идеи для показа возможностей сети MQL5 Cloud Network в научных расчетах.

Пусть у нас есть некая функция от нескольких переменныx F(x1,x2,....xN). Эта функция вычисляет некое значение или некий массив данных. Нам необходимо получить все значения данной функции на некоем пространстве значений переменных Xi, где

Xi min < Xi < Xi max

с интервалом Xi step.

Задачи такого рода легко распараллеливаются на несколько вычислительных потоков, где каждый поток получает и решает свою порцию из входных параметров. Итого, сколько у вас потоков, во столько раз можно ускорить вычисления. Правда, если есть готовая инфраструктура и нет больших накладных расходов по распараллеливанию. Сейчас есть способ быстро и легко прогонять подобные задачи на сети распределенных  вычислений MQL5 Cloud Network.

Язык программирования MQL5 является максимально приближенным к языку C++, поэтому больших проблем с портированием готовых кодов быть не должно. Вычисления производятся в специальном модуле - тестере стратегий, который содержит режим математических вычислений. Кроме того, в тестере есть режим 3D визуалиции полученных результатов,  а также можно использовать не только прямой перебор параметров, но и генетические алгоритмы (статья с пояснением принципа работы здесь - Генетические алгоритмы - это просто!).

Более детальное представление можно получить в статье MQL5 Cloud Network ускоряет расчеты.  О самом проекте можно почитать на официальном сайте - https://cloud.mql5.com/ru/about

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

Может кто-то из ваших знакомых как раз занимается такими расчетами, пожалуйста, покажите им эту тему на форуме.

 
Аналог в Матлабе
 

Есть проблема с научными расчетами - ограничения на пространство поиска в тестере.

ЗЫ Существуют opensourse-проекты по расчету фермовых конструкций. Легко переписать с C++ на MQL5. Можно приспособить под поиск оптимальной конструкции по массе с учетом требований по прочности (в 3D пространстве алгоритмом оптимизации расставляются точки между которыми располагаются балки). Ограничения тестера не дадут рассчитывать подобные задачи.

 
joo:
Есть проблема с научными расчетами - ограничения на пространство поиска в тестере.

Однозначно.  Шестьдесят четыре бита это грустно.   // Один регистр современного процессора.
 
MetaDriver:
Однозначно.  Шестьдесят четыре бита это грустно.   // Один регистр современного процессора.

Для начала пространство поиска уместить в массивчик ulong [64]. чтоб не курочать наружный интерфейс.

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

Основные проблемы при построении БГА будут как передать огроменную хромосому в клауд, как задать пространство поиска. А вот проблемы как переделать сам алгоритм будут решены ещё на предыдущем этапе.

 
Urain:

Для начала пространство поиска уместить в массивчик ulong [64]. чтоб не курочать наружный интерфейс.

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

Основные проблемы при построении БГА будут как передать огроменную хромосому в клауд, как задать пространство поиска. А вот проблемы как переделать сам алгоритм будут решены ещё на предыдущем этапе.

И зачем делать статический массив для хромосомы?  Чтоб потом из пушки по воробъям, героически решая сопутствующие проблемы? 

Пусть будет динамическая хромосома, отрастающая по необходимости до нужного размера. 

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 

Давайте для начала рассмотрим конкретный алгоритм, а там уже будет видно - есть ограничения или нет. Сейчас в 64 битной системе ограничение стоит в  100 000 000 (сто миллионов) вариантов (https://www.metatrader5.com/ru/terminal/help/algotrading/optimization_types):

Если общее количество шагов оптимизации превышает 1 000 000 в 32-х битной системе или 100 000 000 в 64-х битной системе, то автоматически включается режим быстрой оптимизации.

Не думаю, что кто-то реально хочет получить по сетке 100 миллионов значений. А потом еще как-то их увидеть в 3-мерном изображении.

 
denkir:

Аналог в Матлабе
Спасибо за отличную ссылку!
 
MetaDriver:

И зачем делать статический массив для хромосомы?  Чтоб потом из пушки по воробъям, героически решая сопутствующие проблемы? 

Пусть будет динамическая хромосома, отрастающая по необходимости до нужного размера.  

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

Rosh:

Давайте для начала рассмотрим конкретный алгоритм, а там уже будет видно - есть ограничения или нет. Сейчас в 64 битной системе ограничение стоит в  100 000 000 (сто миллионов) вариантов (https://www.metatrader5.com/ru/terminal/help/algotrading/optimization_types):

Не думаю, что кто-то реально хочет получить по сетке 100 миллионов значений. А потом еще как-то их увидеть в 3-мерном изображении.

В том то и заковыка ГА, что его можно использовать на задачах которые изначально запредельные, одна из таких задач является оптимизация весов НС.

Никто ведь не предполагает что веса будут перебираться все (это как пример). Те я хочу сказать что есть ряд задач изначально заточенных под ГА и не предполагающих полного перебора (как нерешаемые таким способом).

 
Renat:
Спасибо за отличную ссылку!

Да завсегда пож-ста! И Вам спасибо, что много нового делаете!

Кстати, в Матлабе есть такой оператор, как parfor - parallel for loop.

Делает к примеру такое:

parfor i=1:3, 
   c(:,i) = eig(rand(1000)); 
end

Из справки, это:

Perform three large eigenvalue computations using three workers or cores with Parallel Computing Toolbox software.

В будущем MQL5 может выглядеть примерно так:

parfor(int i=0;i<3;i++)
   c[:,i] = eig(rand(1000)); 
 
denkir:

Да завсегда пож-ста! И Вам спасибо, что много нового делаете!

Кстати, в Матлабе есть такой оператор, как parfor - parallel for loop.

Делает к примеру такое:

Из справки, это:

Perform three large eigenvalue computations using three workers or cores with Parallel Computing Toolbox software.

В будущем MQL5 может выглядеть примерно так:

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

Хотя самые лучшие образцы можно будет зашить и в сам MQL

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