Campeonato de Otimização de Algoritmos.

 

O Campeonato de Otimização de Algoritmos é concebido como uma competição para pessoas que são buscadoras, inquisitivas, para quem ficar parado significa retroceder.

O Campeonato é uma grande oportunidade para testar seus algoritmos sob duras condições competitivas, que são mais difíceis e exigentes do que aqueles encontrados na vida cotidiana. É uma chance de garantir que seu algoritmo não possa melhorar, o que significa confiança para resolver os desafios da vida futura, ou para garantir que seu algoritmo precise ou possa ser ainda mais refinado e melhorado.

Regras:

1. Algoritmos de otimização baseados em quaisquer princípios e teorias de busca são admitidos ao campeonato, absolutamente quaisquer.

2. Cada participante poderia representar apenas um algoritmo em código fonte ou na forma compilada de *.ex5 biblioteca.

3. Ao final do campeonato, os participantes serão classificados de acordo com os seguintes critérios: velocidade do algoritmo, número de corridas da função de aptidão, precisão na busca de soluções.

Termos:

1. o organizador se reserva o direito de recusar a participação de qualquer pessoa sem explicar as razões.

2. O organizador tem o direito de participar do campeonato.

3. o organizador recusará os prêmios em favor dos participantes no caso de disponibilidade do fundo de prêmios de patrocinadores potenciais no momento do anúncio dos prêmios.

Organizador do Campeonato de Algoritmos de Otimização: Joo.

Seja corajoso, participe e ganhe. Pode muito bem acontecer que seu algoritmo seja usado no futuro no otimizador interno da MT, por que não?

 

O registro agora está aberto.

Todos aqueles que desejam participar, por favor, inscrevam-se aqui. Em 20 de junho de 2016, serão apresentados os códigos de exemplos de scripts executáveis com interfaces para conexão de algoritmos. Em outras 3 semanas, em 11 de julho de 2016, o campeonato em si terá início.

 
Em geral. Favor discutir somente sobre o tópico "Algoritmos de otimização". Um passo para a direita, um passo para a esquerda - pelotão de fuzilamento :)
 
Andrey Dik:

O registro agora está aberto.

Todos aqueles que desejam participar, por favor, inscrevam-se aqui. Em 20 de junho de 2016, serão apresentados os códigos dos scripts executáveis de exemplo com interfaces para conexão de algoritmos. E em 3 semanas começará o campeonato em si.

E em geral, há idéias, ou tudo no processo de pensar sobre isso. Se algo me permite compartilhar meus pensamentos.
 

Fórum sobre comércio, sistemas comerciais automatizados e estratégias comerciais de teste

Andrey Dik, 2016.06.10 17:24

Andrey Dik
Tag Konow
Igor Volodin
Dmitry Fedoseev
Sergey Chalyshev
Ghenadie Tumco
Igor Volodin

 
Devemos adiar por um tempo? Escreva um artigo. Colocar um modelo de classe na base de código. Eu acho que tenho um modelo muito bom:)
 
São sete pessoas suficientes para um campeonato? (Do ponto de vista da MQ)
 
Dmitry Fedoseev:
E em geral, há idéias, ou tudo está em processo de reflexão. Se algo me permite compartilhar meus pensamentos.

É claro que há idéias.

Um artigo é muito bom. Em que direção você quer escrever o artigo?

É possível adiar o campeonato, se houver uma real necessidade dele. Mas ainda há muito tempo antes do seu início, o campeonato começa em 11 de julho de 2016.

 
Andrey Dik:

É claro que sim.

Desembucha. Condenaremos.

O artigo é muito bom. Mas não se pode esperar mais. As pessoas têm uma memória curta como regra e rapidamente esquecem onde tudo começa....

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

class CFF1:public CFF{
   public:
   double fun(double & x[]){
      int c=ArraySize(x);
      double s=0;
      for(int i=0;i<c;i++){
         s+=MathPow(x[i],2);
      }
      return(s);   
   }
   virtual string type(){
      return("min");
   }
   virtual double value(){
      return(0);
   }
   virtual string note(){
      return("");
   }   
};

class CFF2:public CFF{
   public:
   double fun(double & x[]){
      int c=ArraySize(x);
      double s=0;
      double p=0;
      for(int i=0;i<c;i++){
         s+=MathAbs(x[i]);
         p*=MathAbs(x[i]);
      }
      return(s+p); 
   }
   virtual string type(){
      return("min");
   }
   virtual double value(){
      return(0);
   }
   virtual string note(){
      return("");
   }   
};

Aqui está uma construção para a seleção de uma função a ser investigada (ff). Uma classe base com métodos virtuais e classes infantis com diferentes funções.

Declaro-o assim:

CFF * ff=new CFF1();

Ou assim, dependendo de qual função é necessária:

CFF * ff=new CFF2();

Na função de otimização, temos um parâmetro do tipo CFF para passar um ponteiro para a classe com o ff selecionado.

***

Métodos da classe base:

   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}   

divertido - função em si, os parâmetros são passados em uma matriz de tipo duplo.

tipo - tipo de função: mínimo ou máximo - o que procurar na função mínimo ou máximo.

O resto não é necessário, eu estava fazendo para mim mesmo... Para a memória: valor - valor no extremo, nota - alguma descrição. Eles não são necessários para o Campeonato, especialmente em termos de valor.

***

Agora eu não tenho uma função, mas uma classe e nela um método para definir o ff:

   
      void SetFF(CFF * aff){
         this.ff=aff;
      }  
Então eu uso isto.ff.fun(...) em todos os lugares;
 

A classe precisará ser colocada em uma biblioteca para o campeonato. Faça uma função na biblioteca, que será chamada de fora, esta função fará tudo: criar uma instância da classe, definir todos os parâmetros passados para a função, etc.

O nome da função é padrão para todos. Todos têm seus próprios nomes de arquivos de biblioteca.

O verificador tem um roteiro. O verificador muda o nome da biblioteca importada, a compila e a executa.

É isso aí:

CFF * ff=new CFF1();

No roteiro do verificador.

 
Dmitry Fedoseev:

A classe precisará ser colocada em uma biblioteca para o campeonato. Faça uma função na biblioteca, que será chamada de fora, esta função fará tudo: criar uma instância da classe, definir todos os parâmetros passados para a função, etc.

O nome da função é padrão para todos. Todos têm seus próprios nomes de arquivos de biblioteca.

O verificador tem um roteiro. O Checker muda o nome da biblioteca importada, compila, executa.

Você acha que podemos fazer sem o OOP para resolver a tarefa que nos foi atribuída? Estou acostumado a resolver tudo com meu próprio método. (Bem, eu não gosto do OOP). :)
Razão: