echo on
clear
%    Informações sobre o arquivo de entrada
patternsNo = 1294;   % Número de padrões
columnsNo = 132;

%   Informações sobre o treinamento (Valores a serem variados em busca da
%   melhor configuração
goal = [0.02, 0.05, 0.08, 0.1];
goalCount = 4;

spread = [5, 10, 15, 20, 25];
spreadCount = 5;

% Informações sobre o experimento
inputNeurNo = 130;
outputNeurNo = 1; 
columnsQnt = inputNeurNo + outputNeurNo;

echo off

% Leitura da base
data = dlmread('trainingdata.txt');

%  Extraindo os padrões positivos (1)
label = data(:,end);

idx = (label==1);
pos_data = data(idx,:); 
row_pos = size(pos_data,1);

% Extraindo os padrões negativos (0)
neg_data = data(~idx,:);
row_neg = size(neg_data,1);
  
% Random permuation of positive and negative data points
p = randperm(row_pos);
n = randperm(row_neg);

% Criando os 10 folds
c = 1;
for i=1:round(row_pos/10):row_pos
    if(c <= 10)
        folds_pos(c,:) = p(i:round(row_pos/10)*c);
        c = c + 1;
    end
end

c = 1;
for i=1:round(row_neg/10):row_neg
    if(c<=10)
        folds_neg(c,:) = n(i:round(row_neg/10)*c);
        c = c + 1;
    end
end

tp = pos_data(folds_pos(1,:),:);
tn = neg_data(folds_neg(1,:),:);
test_data = [tp;tn];

testIndices = randperm(size(test_data, 1));
test_data = test_data(testIndices, :);

trvlp = setdiff(pos_data, tp, 'rows');
trvln =  setdiff(neg_data, tn, 'rows');
train_data = [trvlp; trvln];

trainIndices = randperm(size(train_data,1));
train_data = train_data(trainIndices, :);

%Treinamento
trainingInputs = train_data(:, 1:(inputNeurNo));
trainingOutputs = train_data(:, end);

testInputs = test_data(:, 1:(inputNeurNo));
testOutputs = test_data(:, end);

trainingInputs = trainingInputs';
trainingOutputs = trainingOutputs';

testInputs = testInputs';
testOutputs = testOutputs';

count = 1;
for ig = 1:goalCount
    g = goal(ig);

    for is = 1:spreadCount
        s = spread(is);           

        info = sprintf('%1.3f\t%d\t%s\t%d', g, s);              

        network = newrb(trainingInputs,trainingOutputs, g, s, 1000, 1);

        [testOutput] = sim(network,testInputs);

        result(:,count) = round(testOutput);

        count = count + 1;
    end
end

for i =1:count-1
    cnt = 0;
    for j=1:129
        if testOutputs(1,j) == result(j,i)
            cnt = cnt + 1;
        end
    end
    percAcertos(i,:) = (cnt/129) * 100;
end

perc_Acertos = fopen('percAcertos.txt', 'w+t');
for i = 1 : count
    fprintf(perc_Acertos, '%f ', percAcertos(i,:));
    fprintf(perc_Acertos, '\n');
end
fclose(perc_Acertos);
   
