Array out of range

 

Alguem pode por favor me explicar pq quando eu chamo a função InitializeNeuralNetwork no onTick o o codigo de função AddLayer da out of range


quando eu coloco 0 nao da problema, entao o problema é no i, mas eu nao tenho ideia do pq

bool InitializeNeuralNetwork(int nsize,int &y_size_array[]){
   
   ArrayResize(layer,nsize+1);
   
   neural_system_size = nsize;

   for(int i = 0; i<nsize; i++){
   
   AddLayer(y_size_array[i],i);
   
   }
   
   return true;
}



int AddLayer(int l_size,int layer_index){
   
   layer[layer_index].network_size = neural_system_size;

   layer[layer_index].position = layer_index;

   layer[layer_index].CreateLayer(l_size);

return layer_index;

}
 
pedro de:

Alguem pode por favor me explicar pq quando eu chamo a função InitializeNeuralNetwork no onTick o o codigo de função AddLayer da out of range


quando eu coloco 0 nao da problema, entao o problema é no i, mas eu nao tenho ideia do pq

Olá  pedro de, você está realmente chamando essas funções em OnTick()?
Se sim, o primeiro passo que recomendo é você testar apenas em OnInit(), defindo bem a inicialização e profundidade de sua rede, deixando para OnTick() apenas o que estiver relacionado a funções de saída, como previsão/generalização/etc.
Sds.,
Rogério Figurelli

 
vlw Rogerio, eu digitei errado ali ja estava no oninit, acho (acho pq mudei umas variaveis de lugar sem prestar muita atençao, mas tenho quase ctz q era so esse o problema mesmo [por enquando rsrs] ) q o problema era que o tamanho da rede era diferente do tamanho do array pra definir o tamanho das layers, botei uma checagem pra isso e arrumei
#include "NeuralLayers.mqh"

class NeuralNetwork : NeuralLayers
  {
private:

public:
 
NeuralLayers layer[];

int neural_system_size;

bool InitializeNeuralNetwork(int nsize,int &y_size_array[]){
   
   ArrayResize(layer,nsize);
   
   if (nsize != ArraySize(y_size_array)){Print("ysize array dont has the same size of xsize int");}
   
   neural_system_size = nsize;

   for(int i = 0; i<nsize; i++){
      
   AddLayer(y_size_array[i],i);
   
   }
   
   return true;
}



int AddLayer(int l_size,int layer_index){
   
   layer[layer_index].network_size = neural_system_size;

   layer[layer_index].position = layer_index;

   layer[layer_index].CreateLayer(l_size);
   
   Print("layer   ",layer[layer_index].position,"  size  ",l_size,"  ", layer[layer_index].type);

return layer_index;

}
 
pedro de:
vlw Rogerio, eu digitei errado ali ja estava no oninit, acho q o problema era que o tamanho da rede era diferente do tamanho do array pra definir o tamanho das layers, botei uma checagem pra isso e arrumei
int OnInit()
  {
//---

int size = 6;

int ysize[] = {10,7,5,3,5,4};

network.InitializeNeuralNetwork(size,ysize);
   
//---
   return(INIT_SUCCEEDED);
  }

esse é oninit onde realmete estava o erro eu acabei n mandando aqui, vou arrumar isso e tornar o size dependente do tamanho do ysize logo pra nao ter mais esse problema, obrigado por responder

Razão: