NeuroNetworksBook/Include/realization/positionencoder.mqh

112 lines
8.7 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:12:34 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| positionencoder.mqh |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
//+------------------------------------------------------------------+
//| >4:;NG05< 181;8>B5:8 |
//+------------------------------------------------------------------+
#include "bufferdouble.mqh"
//+------------------------------------------------------------------+
//| Class CPositionEncoder |
//| 07=0G5=85: ;0AA ?>78F8>==>3> :>48@>20=88O |
//+------------------------------------------------------------------+
class CPositionEncoder : public CBufferDouble
{
protected:
ulong m_iCount;
ulong m_iDimension;
public:
CPositionEncoder(void) {};
~CPositionEncoder(void) {};
//---
virtual bool InitEncoder(ulong count, ulong dimension); // 5B>4 8=8F80;870F88
virtual bool AddEncoder(CBufferDouble *&buffer); // 5B>4 4>102;5=85 ?>78F8>==>3> :>8@>20=8O : 8AE>4=K< 40==K<
//--- 5B>4 @01>BK A D09;0<8
virtual bool Save(const int file_handle);
virtual bool Load(const int file_handle);
};
//+------------------------------------------------------------------+
//| 5B>4 8=8F80;870F88 |
//+------------------------------------------------------------------+
bool CPositionEncoder::InitEncoder(ulong count, ulong dimension)
{
//--- !>6@0=O5< :>=AB0=BK
m_iCount = count;
m_iDimension = dimension;
//--- >43>B>2:0 1CD5@0
if(!m_mMatrix.Resize(count,dimension))
return false;
//--- 0?>;=5=85 1CD5@0 <5B:0<8 ?>78F8>==>3> :>48@>20=8O
for(int r = 0; r < (int)count; r++)
{
for(int c = 0; c < (int)dimension; c++)
{
double value = r / pow(1000, 2 * c / dimension);
switch(c % 2)
{
case 0:
m_mMatrix[r,c] = MathSin(value);
break;
case 1:
m_mMatrix[r,c] = MathCos(value);
break;
}
}
}
//--- !>740=85 1CD5@0 2 :>=B5:AB5 OpenCL
if(m_cOpenCL)
BufferCreate(m_cOpenCL);
//---
return true;
}
//+------------------------------------------------------------------+
//| 5B>4 4>102;5=85 ?>78F8>==>3> :>;8@>20=8O : 8AE>4=K< 40==K< |
//+------------------------------------------------------------------+
bool CPositionEncoder::AddEncoder(CBufferDouble *&buffer)
{
//--- ;>: :>=B@>;59
if(!buffer)
return false;
if(buffer.m_mMatrix.Rows() != m_mMatrix.Rows() ||
buffer.m_mMatrix.Cols() != m_mMatrix.Cols())
if(!InitEncoder(buffer.m_mMatrix.Rows(),buffer.m_mMatrix.Cols()))
return false;
//--- >102;O5< <5B:8 : 1CD5@C 8AE>4=KE 40==KE
buffer.m_mMatrix += m_mMatrix;
//---
return true;
}
//+------------------------------------------------------------------+
//| 5B>4 A>E@0=5=8O M;5<5=B>2 :;0AA0 2 D09; |
//+------------------------------------------------------------------+
bool CPositionEncoder::Save(const int file_handle)
{
//--- ;>: :>=B@>;59
if(file_handle == INVALID_HANDLE)
return false;
//--- !>E@0=5=85 :>=AB0=B
if(!FileWriteInteger(file_handle, (int)m_iCount) ||
!FileWriteInteger(file_handle, (int)m_iDimension))
return false;
//---
return true;
}
//+------------------------------------------------------------------+
//| 5B>4 2>AAB0=>2;5=8O :;0AA0 87 A>E@0=Q==KE 40==KE |
//+------------------------------------------------------------------+
bool CPositionEncoder::Load(const int file_handle)
{
//--- ;>: :>=B@>;59
if(file_handle == INVALID_HANDLE)
return false;
//--- !G8BK205< :>=AB0=BK
m_iCount = (uint)FileReadInteger(file_handle);
m_iDimension = (uint)FileReadInteger(file_handle);
//---
return InitEncoder(m_iCount, m_iDimension);
}
//+------------------------------------------------------------------+