Bibliotecas: ALGLIB - Biblioteca de análisis numérico - página 2

 
Cuando escribí mi artículo, utilicé ALGLIB. Incluso llegué a preguntar al autor de la biblioteca en el foro algo que no entendía en ese momento. El autor fue muy amable y me respondió en detalle. Por lo que a él un respeto especial y respeto. Me alegro de que el trabajo de Bochkanov S.A. fue notado por MQ Co....
 
Muy ilusionado con la llegada de esta biblioteca. Muchas gracias.
 
¡Bellezas MQ! Un trabajo serio!

Un ejemplo de uso de la biblioteca es enseñar a la red neuronal MLP la tabla de multiplicar.

#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;
   // preparación de datos
   patterns.Resize(100,3);
   int m=0;     // primer patrón
   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);  // objetivo
         m++; //siguiente patrón
      }
   // crear una red con una capa oculta (5 neuronas)
   CMLPBase::MLPCreate1(2,5,1,net);
   // formación de redes
   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)); 
   // comprobar la red en datos enteros
   string s="Prueba 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);
   // comprobar la red en datos fraccionados
   s="Prueba 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) // 

:( Me da miedo pensar qué pasará con la nube cuando los usuarios empiecen a usar activamente la biblioteca en sus expertos.
Este sencillo script pesa menos de un megabyte.
Archivos adjuntos:
 
Yurich: Un ejemplo de uso de la biblioteca es enseñar a la red neuronal MLP la tabla de multiplicar.

¿de dónde has sacado este ejemplo? ))))))))))))))

gracias, iba a estudiar el mismo ejemplo para mí, pero ¿puedes averiguar de quién es más rápido el código para enseñar la tabla de multiplicar, el tuyo https://www.mql5.com/es/code/596 o el portado de ALGLIB ?

 
Gracias por la novedad.
El gran avance será la implementación mediante OpenCL.

Excepto que Metaquotes morirá joven al implementar este proyecto.

¿Está previsto el soporte completo de esta biblioteca?

En caso afirmativo, ¿se puede suministrar en forma binaria?

Si se entrega en forma binaria, es hora de añadir una marca en la configuración de Terminal "Permitir la llamada a MetaQuotes DLL" :0)

 
Sólo se cargan 11 archivos mqh a través del MetaEditor
 

Hola,

Necesito encontrar los valores propios de la siguiente matriz:


2 3 2

10 3 4

3 6 1


¿cómo puedo aplicar esta biblioteca en esta matriz? (matriz no simétrica)

 

¡Muchas, muchas gracias por este gran artículo y el código adjunto! Esto seguramente será la herramienta principal para mis códigos MQL5 previstas, y me impide ir por el camino de C ++-a-DLL-a-MQL5.

En cuanto a la pregunta anterior: hay una función llamada"NonSymmetricEVD" en el archivo linalg.mqh, que no se hace referencia en el texto. Simplemente usa esta rutina.

Saludos, David

 

Tengo otra pregunta: la versión más reciente de alglib parece ser la 3.8.2., mientras que según el texto la versión portada es la 3.5.0.

¿Hay planes para actualizar el código portado?

Gracias de antemano,

David

 
La fuente podría actualizarse a la última versión 3.8.2.