Campeonato de Otimização de Algoritmos. - página 3

 
Andrey Dik:

A biblioteca *.ex deve ser essencialmente uma forma unificada de acessar o algoritmo. O algoritmo pode ser incorporado nesta biblioteca padrão, ou ele pode chamar seu algoritmo a partir desta biblioteca com suas próprias funções.

E qual a função a ser dada ao participante? O participante lhe dará ou passará algo a ele? Brinque com as palavras, não tenho certeza do que você quer dizer.

O participante deve receber a função (ff) que está investigando. Aquele para o qual ele estará procurando o máximo ou o mínimo. Seu algoritmo de busca, é claro, estará em sua biblioteca.

Quero dizer, não dê a função em si (envie o código), mas de alguma forma passe-o para o código do concorrente durante o campeonato.

 

e o algoritmo FF não precisa ser dado.

O script solicita uma série de parâmetros otimizáveis da biblioteca via importação

o roteiro envia esta matriz para a biblioteca FF, que retorna o resultado

o roteiro envia o resultado para a biblioteca membro

o script chama a função de serviço da biblioteca de membros, se necessário, o algoritmo fará algo, ou é apenas uma função vazia dentro dele.

Estou escrevendo do meu celular, desculpe

 
Andrey Dik:

e o algoritmo FF não precisa ser dado.

O script solicita uma série de parâmetros otimizáveis da biblioteca via importação

o roteiro envia esta matriz para a biblioteca FF, que retorna o resultado

o roteiro envia o resultado para a biblioteca membro

o script chama a função de serviço da biblioteca de membros, se necessário, o algoritmo fará algo, ou é apenas uma função vazia dentro dele.

Estou escrevendo do meu celular, desculpe

Não está claro. Vamos esperar por um exemplo no código.
 

Embora seja parcialmente claro, é especificamente claro que é através do jo))).

Acontece que quando uma função de membro é chamada, essa função tem que fazer uma etapa de seu trabalho. É necessário virar tudo de cabeça para baixo. Não me apetece pensar sobre isso. Portanto, a tarefa já é complicada, e temos de acrescentar ainda mais complicações artificiais a ela.

Há duas maneiras possíveis de fazer isso:

1. Uma aula com ffs, como já descrevi acima.

2. Um participante importa uma biblioteca em sua biblioteca com ff. O verificador irá substituí-lo pelo seu próprio.

Não há outras opções. A menos que se possa passar um ponteiro para a função, se for possível (mas até agora ninguém sugeriu onde procurar na ajuda). O participante deve ter a capacidade total de chamar uma função ff.

 

em geral, assim, e é claro que haverá um contador de tempo. esquema:

#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:

Um participante deve ter a capacidade total de chamar uma função ff.

Não, não deveria. E não deve ser porque, se não for o caso, você poderá usar a otimização interna na EA no testador embutido, e se for o caso, então haverá muito pouco uso prático para os comerciantes.

Meu artigo mostra um exemplo onde o FF é chamado a partir do algoritmo. Isto restringe o campo de aplicação. Se você tirar o algoritmo do artigo (o que não é proibido pelas regras), você terá que aplicar sua perspicácia para se livrar de tal chamada interna do FF.

 
Andrey Dik:

em geral, assim, e é claro que haverá um contador de tempo. esquema:

Não, não é bom)) tal abordagem. Um participante deve ser capaz de fazer um ciclo, ou seja, sua única ação implica em várias chamadas para o ffs.
 
Andrey Dik:
Não, não deveria. E não deve ser porque se não for, então você pode usar a otimização interna na EA no testador embutido, e se for, então haverá muito pouco uso prático para os comerciantes.
Vejam o método universal exposto acima. E se uma chamada única através de um intermediário, exigirá uma adaptação muito séria da função de busca, isso é exatamente o que ninguém fará, pois teremos que arrancar o cérebro e colocá-lo no lugar através da EA.
 
Dmitry Fedoseev:
Não, não funciona)) tal abordagem. Um participante deve ser capaz de girar ciclos, ou seja, sua única ação implica em várias chamadas para ffs.
Desculpe, os ciclos serão controlados externamente. Tudo é justo. :)
 
Andrey Dik:
Desculpe, os ciclos serão controlados externamente. É tudo justo e justo. :)
Não. A função ff deve contar as chamadas.