Discussão do artigo "Mais uma vez vamos falar sobre mapas de Kohonen" - página 4

 
Vladimir Karputov:
  1. As combinações ("0", "11", "12", "21", "22") são um exemplo que acabei de lhe dar hoje. Não tenho ideia se elas funcionam ou não. É isso que estou perguntando - se eu criar todos os tipos de combinações, como a grade me ajudará? Pensei que essa grade mostraria visualmente (número?) de ocorrências de meus exemplos em determinados grupos (clusters?).
  2. Bem, se eu fizer "... por exemplo, a diferença entre Open[i]-Close[i] em uma coluna e a diferença entre Open[i+1]-Close[i+1] em outra coluna, ..." qual será o retorno? Bem, verei cores diferentes, mas qual delas é qual?


Tudo é transparente lá, há acesso de programa a cada nó, você pode obter os dados de um nó e, ao dar um exemplo de grade, obter qual nó responde ao exemplo.

Leia o artigo com mais atenção. A visualização do mapa é apenas uma saída adicional de informações; há exemplos no artigo em que não há visualização, mas a rede faz seu trabalho corretamente.

 

Olá, recebo um erro ao compilar:

  • 'SOM_Net_Base.mqh' SOM_Net_Base.mqh 1 1
  • 'SOMNode.mqh' SOMNode.mqh 1 1
  • cannot cast 'Conversion_Double' to 'Conversion_UChar' SOM_Net_Base.mqh 115 21
  • 1 erro(s), 0 aviso(s) 2 1

      for(int i=0;i<count_double;i++)
        {
         c_uchar[i]=(Conversion_UChar) c_double[i];
         for(int j=0;j<8;j++) {txtdownl[dcnt]=c_uchar[i].c[j]; dcnt++;}
        }

Por algum motivo, o tipo de dados não está sendo convertido

struct Conversion_Double { double d; };

para o tipo

struct Conversion_UChar  { uchar  c[8];};


 
Andrey Litvichenko:

Olá, ele apresenta um erro ao compilar:

#include <TypeToBytes.mqh> // https://www.mql5.com/pt/code/16280

      for(int i=0;i<count_double;i++)
        {
         _W(c_uchar[i])=c_double[i];
         for(int j=0;j<8;j++) {txtdownl[dcnt]=c_uchar[i].c[j]; dcnt++;}
        }


Você pode substituir todo o trecho do código original?

      ArrayResize(c_uchar,count_double);
      uchar txtdownl[]; ArrayResize(txtdownl,count_double*8);
      int dcnt=0;
      for(int i=0;i<count_double;i++)
        {
         c_uchar[i]=(Conversion_UChar)c_double[i];
         for(int j=0;j<8;j++) {txtdownl[dcnt]=c_uchar[i].c[j]; dcnt++;}
        }
      string txt_titles=CharArrayToString(txtdownl);  Print(txt_titles);


substitua-o por este

      string txt_titles=NULL;
      _W(txt_titles) = c_double;  Print(txt_titles);
 
Andrey Litvichenko:

Olá, recebo um erro ao compilar:

  • 'SOM_Net_Base.mqh' SOM_Net_Base.mqh 1 1
  • 'SOMNode.mqh' SOMNode.mqh 1 1
  • cannot cast 'Conversion_Double' to 'Conversion_UChar' SOM_Net_Base.mqh 115 21
  • 1 erro(s), 0 aviso(s) 2 1

Por algum motivo, o tipo de dados não está sendo convertido

para o tipo



Por definição, ele não deve ser convertido. Ele dá um aviso e não um erro, não preste atenção, deveria ser assim.

Quando você transfere dados de uma estrutura para outra sem conversão de tipo, os dados binários são transferidos, não seu mapeamento decimal, que é necessário neste exemplo.

Isso não é um bug, mas um recurso.

 
Nikolay Demko:

Não é para converter. Ele emite um aviso, não um erro, não preste atenção, é assim que deve ser.

Quando você transfere dados de uma estrutura para outra sem conversão de tipo, os dados binários são transferidos, não o mapeamento decimal, que é necessário neste exemplo.

Isso não é um bug, mas um recurso.


Esse é o ponto: ele gera um erro e se recusa a compilar:

  • 1 erro(s), 0 aviso(s) 2 1
 
As regras de conversão de tipos foram "ligeiramente" alteradas)
 
fxsaber:


Você poderia substituir todo o trecho do código original?


pode ser substituído por este.


E o operador _W funcionará para a conversão reversa, ou seja, para

_W(c_double[i])=c_uchar[i];

?

 
Andrey Litvichenko:

E o operador _W funcionará para a transformação inversa, ou seja, para

?

Sim, nos dois sentidos. Aqui estão alguns exemplos.

 
fxsaber:

Sim, nos dois sentidos. Aqui estão alguns exemplos.


Obrigado, está funcionando

 

Boa tarde,

Infelizmente, acessei o artigo tardiamente, agora há obviamente arquivos faltando no arquivo

CSOM_Net_Base,
CSOM_Net_Train

É uma falha ou restrição de acesso?