Manual do SCAE
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.
- begin_training
- 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:
- Alterar o arquivo 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!