Bibliotecas: ALGLIB - Numerical Analysis Library - página 2

 
Quando escrevi meu artigo, usei a ALGLIB. Até consegui perguntar ao autor da biblioteca no fórum algo que eu não entendia na época. O autor foi muito gentil e me respondeu em detalhes. Por isso, tenho um respeito especial por ele. Fico feliz que o trabalho de Bochkanov S.A. tenha sido notado pela MQ Co....
 
Estou muito animado com a chegada dessa biblioteca. Muito obrigado!
 
Belezas do MQ! Trabalho sério!

Um exemplo de uso da biblioteca é ensinar a tabuada à rede neural MLP.

#include <Math\Alglib\dataanalysis.mqh>
//+------------------------------------------------------------------+
#define _rand(min,max) ((rand()/(double)SHORT_MAX)*((max)-(min))+min)
//+------------------------------------------------------------------+
void OnStart()
{
   CMultilayerPerceptron net;
   CMLPReport rep;
   CMatrixDouble patterns;
   double vector[2], out[1];
   int info;
   // preparação de dados
   patterns.Resize(100,3);
   int m=0;     // primeiro padrão
   for(int i=1; i<=10; i++)
      for(int j=1; j<=10; j++)
      {
         patterns[m].Set(0,i/10.0);       // entrada 1
         patterns[m].Set(1,j/10.0);       // entrada 2
         patterns[m].Set(2,(i*j)/100.0);  // alvo
         m++; //próximo padrão
      }
   // criando uma rede com uma camada oculta (5 neurônios)
   CMLPBase::MLPCreate1(2,5,1,net);
   // treinamento de rede
   CMLPTrain::MLPTrainLM(net,patterns,100,1 e-3,5,info,rep);     //Levenberg-Marquardt
   //CMLPTrain::MLPTrainLBFGS(net,paterns,100,1e-3,10,0.001,1000,info,rep);//L-BFGS
   Print("Info=",info,"  Error=",CMLPBase::MLPError(net,patterns,100)); 
   // verificar a rede em dados inteiros
   string s="Teste 1 >> ";
   for(int i=1; i<=10; i++)
   {
      int d1=(int)_rand(1,10), d2=(int)_rand(1,10);
      vector[0]=d1/10.0;
      vector[1]=d2/10.0;
      CMLPBase::MLPProcess(net,vector,out);
      s+=(string)d1+"*"+(string)d2+"="+DoubleToString(out[0]*100,0)+" // ";
   }
   Print(s);
   // verificar a rede em dados fracionários
   s="Teste 2 >> ";
   for(int i=1; i<=5; i++)
   {
      double d1=NormalizeDouble(_rand(1,10),1), d2=NormalizeDouble(_rand(1,10),1);
      vector[0]=d1/10.0;
      vector[1]=d2/10.0;
      CMLPBase::MLPProcess(net,vector,out);
      s+=DoubleToString(d1,1)+"*"+DoubleToString(d2,1)+"="+DoubleToString(out[0]*100,2)+
         "("+DoubleToString(d1*d2,2)+") // ";
   }
   Print(s);
}
2012.10.13 12:44:31     Test_MLP(Alglib) (EURUSD,M30)   Info=2  Error=0.0005349624857861839
2012.10.13 12:44:31     Test_MLP(Alglib) (EURUSD,M30)   Тест 1 >> 3*6=18 // 1*1=0 // 7*8=56 // 1*5=5 // 4*6=24 // 7*6=42 // 8*2=16 // 1*5=5 // 3*2=6 // 6*7=42 // 
2012.10.13 12:44:31     Test_MLP(Alglib) (EURUSD,M30)   Тест 2 >> 6.3*8.2=51.83(51.66) // 7.0*8.1=57.04(56.70) // 9.0*8.1=73.36(72.90) // 4.1*9.6=39.05(39.36) // 6.3*8.8=55.63(55.44) // 

:( Tenho medo de pensar no que acontecerá com a nuvem quando os usuários começarem a usar ativamente a biblioteca em seus especialistas.
Esse script simples pesa menos de um megabyte.
Arquivos anexados:
 
Yurich: Um exemplo de uso da biblioteca é ensinar à rede neural MLP a tabuada de multiplicação.

De onde você tirou esse exemplo? ))))))))))))))

Obrigado, eu estava estudando o mesmo exemplo para mim, mas você pode descobrir qual código para ensinar a tabuada é mais rápido, o seu https://www.mql5.com/pt/code/596 ou a ALGLIB portada?

 
Obrigado pela novidade.
O grande avanço será a implementação usando OpenCL.

Exceto pelo fato de que o Metaquotes morrerá jovem ao implementar esse projeto.

O suporte completo para essa biblioteca está planejado?

Em caso afirmativo, ela pode ser fornecida em formato binário?

Se você a fornecer em formato binário, é hora de adicionar uma marca nas configurações do Terminal "Allow MetaQuotes DLL call" :0)

 
Apenas 11 arquivos mqh são carregados por meio do MetaEditor
 

Olá,

Preciso encontrar os valores próprios da matriz abaixo:


2 3 2

10 3 4

3 6 1


Como posso aplicar essa biblioteca a essa matriz? (matriz não-simétrica)

 

Muito, muito obrigado por esse excelente artigo e pelo código anexado! Essa certamente será a principal ferramenta para meus códigos MQL5 planejados e me impedirá de seguir o caminho C++-para-DLL-para-MQL5.

Com relação à pergunta anterior: há uma função chamada"NonSymmetricEVD" no arquivo linalg.mqh, que não é referenciada no texto. Basta usar essa rotina.

Atenciosamente, David

 

Tenho outra pergunta: a versão mais recente do alglib parece ser a 3.8.2, enquanto, de acordo com o texto, a versão portada é a 3.5.0.

Há planos para atualizar o código portado?

Desde já, obrigado,

David

 
A fonte pode ser atualizada para a versão 3.8.2 mais recente.