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

 
Andrey Dik:

Um exemplo simples. O algoritmo de otimização está pendurado em algum lugar em um gráfico. O Expert Advisor é otimizado no testador incorporado através de uma busca completa. Assim, você pode usar seu próprio algoritmo de otimização em vez do algoritmo normal.

Outro exemplo. O Expert Advisor trabalha no gráfico e comercializa. Ele salva os resultados comerciais após algum tempo para o algoritmo (pode estar dentro ou fora do Expert Advisor) juntamente com seus parâmetros e recebe novos parâmetros de volta e então continua a negociação (no seu caso, precisaríamos executar uma execução histórica, enquanto no meu caso podemos usar uma otimização "ao vivo").

E assim por diante. Ou seja, nestes exemplos, o algoritmo é completamente independente da tarefa.

Eu deliberadamente apliquei estes exemplos ao comércio. Somos comerciantes.

Algo fora do comum.

O Expert Advisor já foi otimizado no testador, então o que isso tem a ver com seu próprio algoritmo de otimização?

O segundo caso é um pouco mais claro. Sim, se você fornece chamadas individuais independentes, você pode chamá-lo um a um. E você pode fazer tudo de uma só vez através de um processo separado. Entendo, mas é uma complicação do algoritmo e estamos nos afastando do objetivo do Campeonato. O objetivo do Campeonato é o algoritmo de otimização, não sua aplicação. Há muitas pessoas que não o entendem e agora está ficando ainda mais complicado.

 
Andrey Dik:

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

Neste código, não é uma chamada única, mas a parte principal do algoritmo é colocada lá fora, com um pouco de imposição de parte do algoritmo sobre o participante. Sob as condições originais, o participante tem o direito de esconder todo o algoritmo.
 
Dmitry Fedoseev:

1. Algo fora do comum. A otimização do Expert Advisor já foi executada no testador, e o que ele tem a ver com seu próprio algoritmo de otimização?

2. O segundo caso é um pouco mais claro. Sim, se você fornecer chamadas individuais independentes, você pode chamá-las uma a uma. E você pode fazer tudo de uma só vez através de um processo separado. Entendo, mas isto é uma complicação do algoritmo e um afastamento do objetivo do Campeonato. O objetivo do Campeonato é o algoritmo de otimização, não sua aplicação. Há muitas pessoas que não o entenderam, e agora está ficando mais complicado.

1. Nada fora do comum, é apenas uma situação da vida real. Um testador interno faz uma corrida atrás da outra (um parâmetro - contador é assumido) e nós controlamos a otimização de todos os parâmetros e em quantidade ilimitada.

2. Decidimos utilizar 2 variantes de trabalho com FF. Portanto, tudo está bem, não há problema, quem quiser, usará a otimização.

Os participantes são livres para escolher com qual roteiro de teste trabalhar, o primeiro ou o segundo.

 
Dmitry Fedoseev:
Neste código, não é uma chamada única, mas a parte principal do algoritmo é movida para fora, com alguma imposição de parte do algoritmo sobre o participante. De acordo com as condições iniciais, o participante tem o direito de esconder todo o algoritmo.

Onde está a imposição? Pergunte ao algoritmo quantas vezes e o que contar, o algoritmo do participante decide tais coisas. Os algoritmos podem ser muito diferentes na arquitetura de uma mesma AG, e o exemplo permite usar um algo sobre qualquer princípio de trabalho.

Mostrei as funções de serviço lá - elas podem estar vazias se não forem necessárias pelo participante.

 
Andrey Dik:

Onde está a imposição? Pergunte ao algoritmo quantas vezes e o que contar, o algoritmo do participante decide tais coisas. Os algoritmos podem ser muito diferentes na arquitetura de uma mesma AG, e o exemplo permite usar um algo sobre qualquer princípio de trabalho.

Mostrei as funções de serviço lá - elas podem estar vazias se não forem necessárias pelo participante.

Basta dar aos participantes um ponteiro para uma função ou para um objeto com um método. Este é o terceiro milênio.
 
Passe também o número permitido de chamadas ff para a função participante, de modo que o número de épocas e o número de indivíduos possam ser alocados.
 
Dmitry Fedoseev:
Além disso, passe na função participante o número permitido de chamadas FF, para que possamos distribuir o número de épocas e o número de indivíduos.

Por exemplo, o algoritmo é dito que você pode ter um máximo de 100 chamadas FF. Aha! - ele (o algoritmo) pensou, vou enganar a todos e chamara música por 50 notas, vou chamar o FF apenas 50 vezes. :)

Não, deixe-o contar tantos quantos ele precisar. E nós decidiremos quando pará-lo. Afinal, o número de chamadas FF será avaliado como um indicador da qualidade do trabalho.

 
Andrey Dik:

Por exemplo, o algoritmo é dito que você pode ter um máximo de 100 chamadas FF. Aha! - ele (o algoritmo) pensou, vou enganar a todos e chamara música por 50 notas, vou chamar o FF apenas 50 vezes. :)

Não, deixe-o contar tantos quantos ele precisar. E nós decidiremos quando pará-lo. Afinal de contas, o número de vezes que o FF é chamado será julgado como uma medida de desempenho.

De que adianta chamá-lo menos vezes? Você pode fazer menos, você não pode fazer mais. Qual é o problema?

A função FF conta as chamadas. Se mais do que é permitido, a desqualificação.

 

Este é, grosso modo, o modelo da biblioteca de um membro:

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

Para que serve ser tão astuto e chamar menos vezes? Você pode fazer menos, você não pode fazer mais. Qual é o problema?

A função ff conta as chamadas. Se for permitido mais, a desqualificação.

Menos corridas é melhor, essa é a questão. Isto pode ser um pouco complicado.

Não há necessidade de limitar o algoritmo, deixe-o contar. Ou ela decidirá parar por conta própria, ou será parada à força. O algoritmo não precisa saber quantas corridas é o teto - ninguém vai conhecer o teto. Não haverá desqualificações. O algoritmo vai resolver o problema como foi capaz de fazer.

A única desqualificação é uma tentativa de salvar os resultados e usá-los nas execuções subseqüentes do roteiro de verificação.

Razão: