Чемпионат Алгоритмов Оптимизации. - страница 5

 
Andrey Dik:

Простой пример. Алгоритм оптимизации висит где то на чарте. И запущена оптимизация советника в штатном тестере путем полного перебора. Так можно использовать свой алгоритм оптимизации вместо штатного.

Другой пример. Советник работает на чарте, торгует. Скидывает результаты торговли через какое то время в алгоритм (может быть внутри советника или снаружи. ризницы нет) вместе со своими параметрами а назад получает новые параметры и потом продолжает торговать (в твоём случае потребовалось бы запускать прогон по истории, а в моём - можно оптится "вживую").

И т.д. То есть в этих примерах алгоритм полностью отвязан от задачи.

Примеры привел умышленно применительно к трейдингу. Мыж трейдеры. 

Что-то вообще запредельное. 

Оптимизация советника уже запущена в тестере, а причем тут свой алгоритм оптимизации? 

Второй случай немного понятней.  Да, если обеспечить одиночные независимые вызовы, то можно между делом по разу вызывать. А можно отдельным процессом все сразу. Понятно, но это же усложнение алгоритма и уход от целей чемпионата. Цель чемпионата - алгоритм оптимизации, а не его применение. Тут и так сколько народа прошло, кому было непонятно, а тут еще такое усложнение.

 
Andrey Dik:

в общем, примерно так, и конечно будет счетчик учета затраченного времени. набросок:

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

1. Что-то вообще запредельное. Оптимизация советника уже запущена в тестере, а причем тут свой алгоритм оптимизации? 

2. Второй случай немного понятней.  Да, если обеспечить одиночные независимые вызовы, то можно между делом по разу вызывать. А можно отдельным процессом все сразу. Понятно, но это же усложнение алгоритма и уход от целей чемпионата. Цель чемпионата - алгоритм оптимизации, а не его применение. Тут и так сколько народа прошло, кому было непонятно, а тут еще такое усложнение.

1. Ничего запредельного, жизненные ситуации. Штатный тестер делает прогоны один за другим (перебирается один параметр - счетчик) а мы контролируем оптимизацию всех параметров и в неограниченном количестве.  

2. Решили же использовать 2 варианта работы с ФФ. Так что всё хорошо, проблем никаких нет, кто как хочет, так и будет использовать оптимизацию.

Участники вольны выбрать с каким тестовым скриптом работать, первым или вторым.

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

Где ж там навязывание? Спрашивается у алгоритма, сколько раз и чего считать, алгоритм участника сам решает такие вещи. Алгоритмы ведь могут сильно отличаться по архитектуре от того же ГА, а пример позволяет использовать алго на любом принципе работы.

Я там показал сервисные функции - они могут быть пустышками если не нужны участнику. 

 
Andrey Dik:

Где ж там навязывание? Спрашивается у алгоритма, сколько раз и чего считать, алгоритм участника сам решает такие вещи. Алгоритмы ведь могут сильно отличаться по архитектуре от того же ГА, а пример позволяет использовать алго на любом принципе работы.

Я там показал сервисные функции - они могут быть пустышками если не нужны участнику. 

Просто дайте участникам указатель на функцию или на объект с методом. На дворе третье тысячелетие.
 
Еще передавать в функцию участника допустимое количество вызовов фф, чтобы можно было распределить количество эпох и количество особей.
 
Dmitry Fedoseev:
Еще передавать в функцию участника допустимое количество вызовов фф, чтобы можно было распределить количество эпох и количество особей.

Например, алгоритму сказали, что максимум можно 100 запусков ФФ.. Ага! - подумал он (алгоритм), всех обхитрю и назову музыку за 50 нот вызову ФФ только 50 раз. :)

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

 
Andrey Dik:

Например, алгоритму сказали, что максимум можно 100 запусков ФФ.. Ага! - подумал он (алгоритм), всех обхитрю и назову музыку за 50 нот вызову ФФ только 50 раз. :)

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

Какой смысл так хитрить и вызывать меньше раз? Меньше можно, больше нельзя. В чем проблема?

Функция фф считает вызовы. Если больше допустимого - дисквалификация. 

 

Примерно такой вот шаблончик библиотеки участника: 

#property library
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

class CFF{
   public:
   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}
   virtual double value(){return(0);}
   virtual string note(){return("");}
};

здесь участник пишет свои классы, если надо 

void function(CFF * aff,int n,double & params[],double & value) export{

    Здесь участник пишет свой код и вызывает функцию так - aff.value(x); // x - это массив double

//по окончанию поиска вернуть params (параметры соответствующие лучшему результату), value (лучший результат)

}

здесь участник создает свои вспомогательные функции
 
Dmitry Fedoseev:

Какой смысл так хитрить и вызывать меньше раз? Меньше можно, больше нельзя. В чем проблема?

Функция фф считает вызовы. Если больше допустимого - дисквалификация. 

Меньше запусков ФФ - лучше, в этом и соль. В этом можно схитрить.

Не нужно ограничить алгоритм, пусть себе считает. Либо он сам решит что нужно остановится, либо его остановят принудительно. Сколько запусков потолок - алгоритму знать не положено Никто не будет знать потолок. Дисквалификаций никаких не будет. Как смог алгоритм, так и будет решена задача.

Единственный повод дисквалификации - попытка сохранять результаты и использовать их при последующих запусках проверочного скрипта. 

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