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

 
Andrey Dik:

*.ex библиотека участника должна быть по сути унифицированным способом обратится к его алгоритму. Алгоритм может быть вшит в эту библиотеку стандартную, или же волен вызывать из этой библиотеки свой алгоритм через свои функции.

И какую функцию отдавать участнику? Участник отдаст или ему что то передать? Игра слов, тут я не совсем тебя понял. 

Участнику отдавать исследуемую функцию (фф). Ту, у которой он будет искать максимум или минимум. Его алгоритм поиска, естественно, будет находиться в его библиотеке.

В смысле, отдавать не саму функцию (присылать код), а как-то передавать ее в код участника в процессе чемпионата. 

 

а ФФ алгоритму давать не нужно.

скрипт запрашивает массив оптимизируемых параметров из библы через импорт 

скрипт передает этот массив в библу ФФ, которая возвращает результат

скрипт передает результат в библу участника

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

пишу с мобилы, сори 

 
Andrey Dik:

а ФФ алгоритму давать не нужно.

скрипт запрашивает массив оптимизируемых параметров из библы через импорт 

скрипт передает этот массив в библу ФФ, которая возвращает результат

скрипт передает результат в библу участника

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

пишу с мобилы, сори 

Не понятно. Будем ждать примера в коде.
 

Хотя, частично понятно, но конкретно понятно, что через жо)).

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

Два варианта:

1. Класс с фф, описано выше мной.

2. Участник в соей библиотеке импортирует библиотеку с фф. Проверяющий будет подменять ее на свою. 

Других вариантов не существует. Разве что передавать указатель на функцию, если это возможно (но пока никт не подсказал, где смотреть в справке). У участника должна быть полноценная возможность вызывать функцию фф. 

 

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

#import "oa.ex5" // алгоритм оптимизации участника
void   ServiceFunc1 (); 
int    GetReplaysCount (); // запрос количества запусков ФФ (у участника может быть свой размер колонии или нечто подобное если это не ГА 
void   GetOptParam (double &param []); 
void   ServiceFunc2 (); 
bool   StopAlgo ();        // этой функцией участник по желанию может остановить оптимизацию
int    GetEpochCount ();   // если участник желает использовать своё фиксированное значение "эпох"
void   SendFFvolue (double &volue); 
double GetMaxFF (); 
#import

#import "ff.ex5" // тестовая фитнес функция чемпионата, не известна участникам 
double GetFFvolue (double &param []); // передаём в ФФ оптимизируемые параметры, получаем результат ФФ 
#import

void OnStart () 
{ 
  bool   stopAlgo = false; 
  int    epoch = GetEpochCount (); 
  int    maxEpochPossible = 1000; 
  double param []; 
  double volue; 
  int    epochCNT = 0; 
  int    ffCNT = 0; 
  
  double FFvolue = -DBL_MAX; 
  
  ServiceFunc1 (); 
  while(!stopAlgo) 
  {
    for(int i = 0; i < GetReplaysCount (); i++) 
    {
      GetOptParam (param); 
      volue = GetFFvolue (param); 
      ffCNT++; 
      SendFFvolue (volue);
    }
    ServiceFunc2 (); 
    
    epochCNT++; 
    
    if(epochCNT >= epoch) 
      stopAlgo = true; 
    
    if(epochCNT >= maxEpochPossible) 
      stopAlgo = true;
  }
  
  Print ("Epoch: " + (string)epochCNT + " ; FF starts: " + (string)ffCNT + " ; MaxFF: " + (string)GetMaxFF ());
} 
 
Dmitry Fedoseev:

У участника должна быть полноценная возможность вызывать функцию фф. 

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

В моей статье как раз показан пример, где ФФ вызывается из алгоритма. Это сужает область применения. Если кто то возьмет алгоритм из статьи (что не запрещается правилами), то ему понадобится применить смекалку, что бы избавится от такого внутреннего вызова ФФ. 

 
Andrey Dik:

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

Не, не канает)) такой подход. У участника должна быть возможность крутить циклы, т.е. его единичное действие предполагает несколько вызовов фф.
 
Andrey Dik:
Не, не должна. А не должна она потому, что если она будет не должна, то можно будет использовать в советниках оптимизацию внутреннюю в штатном тестере, а если будет должна, то практического применения для трейдеров получится очень мало.
Посмотрите, выше разложил универсальный метод. А если разовый вызов через посредника, это потребует очень серьезной адаптации функции поиска, вот это точно никто не будет делать, ибо надо будет мозги вытащить и вставить на место через зп. 
 
Dmitry Fedoseev:
Не, не канает)) такой подход. У участника должна быть возможность крутить циклы, т.е. его единичное действие предполагает несколько вызовов фф.
Извините, циклы будем контролировать извне. Всё по чесноку. :)
 
Andrey Dik:
Извините, циклы будем контролировать извне. Всё по чесноку. :)
Нет. Функция фф должна считать вызовы.