라이브러리: ALGLIB - 수치 분석 라이브러리 - 페이지 2

 
기사를 작성할 때 저는 ALGLIB을 사용했습니다. 그 당시에는 이해하지 못했던 것을 포럼에서 라이브러리 작성자에게 물어보기도 했습니다. 저자는 매우 친절하고 자세하게 대답했습니다. 그에게 특별한 존경과 존경을 표합니다. Bochkanov S.A.의 작업이 MQ Co에서 주목하게되어 기쁩니다....
 
이 라이브러리의 출시가 매우 기대됩니다. 감사합니다!
 
MQ 미녀들! 진지한 작업!

라이브러리 사용의 예는 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;
   // 데이터 준비
   patterns.Resize(100,3);
   int m=0;     // 첫 번째 패턴
   for(int i=1; i<=10; i++)
      for(int j=1; j<=10; j++)
      {
         patterns[m].Set(0,i/10.0);       // 입력 1
         patterns[m].Set(1,j/10.0);       // 입력 2
         patterns[m].Set(2,(i*j)/100.0);  // 대상
         m++; //다음 패턴
      }
   // 하나의 숨겨진 레이어(뉴런 5개)로 네트워크 생성하기
   CMLPBase::MLPCreate1(2,5,1,net);
   // 네트워크 교육
   CMLPTrain::MLPTrainLM(net,patterns,100,1 e-3,5,info,rep);     //레븐버그-마쿼트
   //CMLPTrain::MLPTrainLBFGS(net,paterns,100,1e-3,10,0.001,1000,info,rep);//L-BFGS
   Print("Info=",info,"  Error=",CMLPBase::MLPError(net,patterns,100)); 
   // 정수 데이터에서 네트워크 확인
   string s="테스트 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);
   // 부분 데이터에서 네트워크 확인
   s="테스트 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) // 


이 간단한 스크립트의 무게는 1메가바이트도 안 됩니다. 사용자가 전문가로 라이브러리를 적극적으로 사용하기 시작하면 클라우드에 어떤 일이 일어날지 생각만 해도 두렵습니다.
파일:
 
Yurich: 라이브러리 사용의 예는 MLP 신경망에 구구단을 가르치는 것입니다.

이 예제는 어디서 구하셨나요? ))))))))))))))

고마워요, 같은 예제를 직접 공부하려고 했는데 구구단을 가르치는 코드가 누구의 코드가 더 빠른지 알 수 있나요? https://www.mql5.com/ko/code/596 또는 포팅된 ALGLIB ?

 
참신함에 감사드립니다.
획기적인 것은 OpenCL을 사용한 구현입니다.

이 프로젝트를 구현할 때 메타쿼츠가 일찍 죽는다는 점을 제외하면요.

이 라이브러리에 대한 완전한 지원이 계획되어 있나요?

그렇다면 바이너리 형태로 제공될 수 있나요?

바이너리 형태로 제공한다면 터미널 설정에서 "허용 MetaQuotes DLL 호출" :0)에 체크 표시를 추가하면 됩니다.

 
메타에디터를 통해 업로드되는 mqh 파일은 11개뿐입니다.
 

안녕하세요,

아래 행렬의 고유값을 구해야 합니다:


2 3 2

10 3 4

3 6 1


이 행렬에 이 라이브러리를 어떻게 적용할 수 있나요? (비대칭 행렬)

 

이 훌륭한 글과 첨부된 코드에 정말 감사드립니다! 이것은 확실히 제가 계획한 MQL5 코드의 주요 도구가 될 것이며, C++-DLL-MQL5 방식으로 가는 것을 방지할 수 있습니다.

이전 질문과 관련하여: 본문에는 언급되지 않은 linalg.mqh 파일에"NonSymmetricEVD" 라는 함수가 있습니다. 이 루틴을 사용하기만 하면 됩니다.

최고, David

 

추가 질문이 있습니다. 최신 버전의 알글리브는 3.8.2인 것 같지만 텍스트에 따르면 포팅된 버전은 3.5.0입니다.

포팅된 코드를 업데이트할 계획이 있나요?

미리 감사드립니다,

David

 
소스를 최신 버전 3.8.2로 업데이트할 수 있습니다.