Manual do SCAE

De LCAD
Revisão de 08h38min de 25 de março de 2008 por Flibio (discussão | contribs)
Ir para: navegação, pesquisa

Adicionando um CORE ao SCAE

A tarefa de adicionar um novo CORE ao SCAE foi bastante simplificada e é resumida nos passos abaixo:

1) Edite o seu arquivo .bashrc

  • Insira as seguintes linhas ao seu .bashrc a fim de que a compilação seja possível compilar o novo CORE:
# SHARED 
export SHAREDHOME=$HOME/code/CORES/shared;
  • Execute o comando abaixo:
source .bashrc

2) Configure a porta de escuta do seu CORE

  • Abra o arquivo ports.cfg existente no diretório config (code/CORES/config/);
  • Adicione a seguinte linha ao arquivo:
NEW_CORE_NAME = 127.0.0.1 PORT_NUMBER
  • Assegure que a palavra NEW_CORE_NAME e o número PORT_NUMBER não estejam em uso por outros CORES;

3) Adicionando o novo CORE

  • A inclusão de um novo CORE será mais rápida se ela partir de um já existente;
  • Copie o VS_CORE (code/CORE/VS_CORE), o qual é o CORE mais simples, para o CORE que deseja incluir;
cp -r VS_CORE NEW_CORE_NAME_CORE
  • Dentro do diretório NEW_CORE_NAME_CORE, execute os seguintes procedimentos:
    • remova os arquivos vector_space.c, vector_space.h, vs_core.out e vs_core.ok;
    • renomeie o diretório VECTORS_SPACES (neste diretório ficarão armazenadas as memórias deste novo CORE);
    • Copie para o diretóro NEW_CORE_NAME_CORE os arquvos e/ou diretórios pertencentes ao novo CORE;
    • Modifique o módulo specific_core_rpcs_handling_functions.c de acordo com o seu CORE (declare variáveis globais e defines no início do módulo). Neste arquivo existem 9 (nove) funções:

      • begin_training
        • input: um inteiro espcificando o número de tabelas, um array de strings com os nomes das tabelas, um vetor de inteiros espcificando os mínimos dos ranges e um vetor de inteiros espcificando os máximos.
        • int: "N_TABLES"
        • char **: "TABLES_NAMES"
        • int *: "MIN_LINES_VEC"
        • int *: "MAX_LINES_VEC"
        • output: nenhum.

      • train_line
        • input: um vetor de floats a ser utilizado como padrão de treino (e o seu respectivo tamanho) e um vetor de targets (e o seu respectivo tamanho).
        • float : "TTV_VECTOR"
        • int : "TTV_LENGTH"
        • int *: "CNAE_CODES_VECTOR"
        • int : "CNAE_CODES_LENGTH"
        • output: nenhum.

      • end_training
        • input: nenhum.
        • output: nenhum.

      • reload
        • input: o nome da memória a ser carregada.
        • char *: "NAME"
        • output: Inteiro especificando se a chamada transcorreu com sucesso (SUCCESS = 0) ou se houve alguma falha (FAIL = 1).
        • int: 0 ou 1

      • save
        • input: o nome da memória a ser salva.
        • char *: "NAME"
        • output: Inteiro especificando se a chamada transcorreu com sucesso (SUCCESS = 0) ou se houve alguma falha (FAIL = 1).
        • int: 0 ou 1

      • classify
        • input: um vetor de floats representando o texto do usuária a ser classificado (e o seu respectivo tamanho)
        • float : "USER_VECTOR"
        • int : "VEC_LENGTH"
        • output: um vetor de inteiros contendo códigos sequenciais da tabela CNAE, um vetor de floats contendo as respectivas probabilidades e um inteiro contendo o tamanho deste vetores:
        • int : "SEQ_CODE_VEC"
        • float : "PROBABILITIES_VEC"
        • int : "VEC_SIZE"

      • begin_test
        • input: um inteiro espcificando o número de tabelas, um array de strings com os nomes das tabelas, um vetor de inteiros espcificando os mínimos dos ranges e um vetor de inteiros espcificando os máximos.
        • int: "N_TABLES"
        • char **: "TABLES_NAMES"
        • int *: "MIN_LINES_VEC"
        • int *: "MAX_LINES_VEC"
        • output: nenhum.

      • test_line
        • input: o nível da tabela CNAE em que o teste será realizado, um vetor de floats a ser utiluizado como padrão de teste (e o seu respectivo tamanho), um vetor de targets (e o seu respectivo tamanho) e o tamanho do vetor de beliefs (igual a quantidade de códigos existente no nível de teste).
        • int : level
        • float : "TTV_VECTOR"
        • int : "TTV_LENGTH"
        • int *: "CNAE_CODES_VECTOR"
        • int : "CNAE_CODES_LENGTH"
        • int : "PREDICTED_CLASSES_AND_BELIEFS_size"
        • output: um vetor de estruturas a ser preenchido. Cada estrutura contém três campos, mas o CORE deverá preencher apenas 2: classe e belief.
        • PREDICTED_CLASS_AND_BELIEF *: "PREDICTED_CLASSES_AND_BELIEFS"

      • end_test
        • input: nenhum.
        • output: nenhum.

    • O novo CORE deverá fazer uma chamada de função que inicializará o servidor (a partir desta chamada, o CORE entrará em um estado de espera por requisições). A função que inicializa o servidor é a initialize_core_server (NEW_CORE_NAME), em que NEW_CORE_NAME é a mesma string que foi inserida no arquivo ports.cfg. Atenção: a função initialize_core_server(NEW_CORE_NAME) só deverá ser chamada após o CORE ter inicializado suas variáves, estruturas ... veja o exemplo a seguir:

int 
main(int argc, char *argv[])
{	
	/* Inicializações pertinentes ao seu CORE */

	initialize_core_server ("NEW_CORE_NAME");

	return (0);
}
    • Alterar o arquivo Makefile.
      • Altere o nome do executável;
      • Remova o arquivo .objeto vector_space.o e adicione outros (caso existam);
      • Atualize as linhas de dependências do Makefile:
vector_space.o	: vector_space.h $(INCPATH)/specific_core_rpcs_handling_functions.h
specific_core_rpcs_handling_functions.o	: $(INCPATH)/specific_core_rpcs_handling_functions.h vector_space.h

4) Criação de scripts para realização de experimentos

  • Caso queira realizar experimentos com o novo CORE, será necessário criar scripts de treino e teste. Para isto:
    • Entre no diretório USER_INTERFACE (code/CORES/USER_INTERFACE);
    • Copie os arquivos experiment_1.a.x.b.train.bat experiment_N.a.x.b.train.bat, onde a varia de 1 a 8 (até o momento) e b de 1 a 8 (número de experimentos existentes em um tabela). N representá o N-ésimo CORE inserido no scae;
    • Copie os arquivos experiment_1.a.x.b.test.bat experiment_N.a.x.b.test.bat, onde a varia de 1 a 8 (até o momento) e b de 1 a 8 (número de experimentos existentes em um tabela). N representá o N-ésimo CORE inserido no scae;
    • Abra todos os arquivo criados:
kdevelop experiment_N*&

e altere o nome do CORE (troque VS por NEW_CORE_NAME).

5) Subindo o novo CORE para svn

  • Antes de adicionar o novo CORE ao svn, assegure que não existem arquivos .svn nos diretório NEW_CORE_NAME_CORE e nos seus subdiretórios;
  • Agora, no diretório code, execute os seguintes comandos:
svn add NEW_CORE_NAME_CORE
svn ci NEW_CORE_NAME_CORE -m "Adicionado o CORE NEW_CORE_NAME ao repositório do SCAE. Este CORE ..."
  • Pronto, você acabou de inserir um novo CORE!