private int eval(Pattern pattern, MultilayerPerceptron single) { double[][] retorno; int total = 0; double max = -2; int index = -1; for (int i = 0; i < pattern.getX().length; i++) { retorno = single.run(pattern, i); max = -2; index = -1; for (int j = 0; j < retorno.length; j++) { double value = retorno[j][0]; if (value > max) { max = value; index = j; } } if (index == i) { total++; log.fine("Encontrou o caracter " + i + " -> " + toString(retorno)); } } return total; }
public void run() { try { List<Pattern> patterns = new ArrayList<Pattern>(4); Pattern pCorreto = loadFile120_8( Experimento_3.class.getResourceAsStream( "/br/compnatural/atividade_3/char8_12x10.txt"), Experimento_3.class.getResourceAsStream( "/br/compnatural/atividade_3/char8_8x8_1.txt")); Pattern p5Porcento = loadFile120_8( Experimento_3.class.getResourceAsStream( "/br/compnatural/atividade_3/char8_12x10_5.txt"), Experimento_3.class.getResourceAsStream( "/br/compnatural/atividade_3/char8_8x8_1.txt")); patterns.add(p5Porcento); p5Porcento.erro = 5; Pattern p10Porcento = loadFile120_8( Experimento_3.class.getResourceAsStream( "/br/compnatural/atividade_3/char8_12x10_10.txt"), Experimento_3.class.getResourceAsStream( "/br/compnatural/atividade_3/char8_8x8_1.txt")); patterns.add(p10Porcento); p10Porcento.erro = 10; Pattern p20Porcento = loadFile120_8( Experimento_3.class.getResourceAsStream( "/br/compnatural/atividade_3/char8_12x10_20.txt"), Experimento_3.class.getResourceAsStream( "/br/compnatural/atividade_3/char8_8x8_1.txt")); patterns.add(p20Porcento); p20Porcento.erro = 20; State.x = pCorreto; double[] weights = {2, -2}; int[] hiddens = {5, 10, 25}; List<RnaResult> results = new ArrayList<RnaResult>(20); ReportUnit reportUnit = null; State bestState = null; for (int hidden : hiddens) { for (int i = 0; i < weights.length; i += 2) { List<ReportGraphInfo> graphInfo = new ArrayList<ReportGraphInfo>(GENERATIONS + 1); List<ReportUnit> ds = new ArrayList<ReportUnit>(MAX_IT); for (int k = 0; k < GENERATIONS; k++) { graphInfo.add(new ReportGraphInfo(0d, 0d, 0)); } RealSpecification specification = new RealSpecification(); EQMFunction function = new EQMFunction(Boolean.TRUE, hidden); MultilayerPerceptron perceptron = MultilayerPerceptron.getMultilayerPerceptronTangenteOneHidden( hidden, pCorreto.getD().length, pCorreto.getX()[0].length, weights[i + 1], weights[i], true); State state = EQMFunction.buildState(perceptron); for (int j = 0; j < state.getCoordinate().size(); j++) { specification.addCoordinate("x", weights[i + 1], weights[i]); } log.fine("Inicio [" + weights[i + 1] + "," + weights[i] + "] - hidden(" + hidden + ")"); for (int m = 0; i < MAX_IT; i++) { log.info("Nova iteracao " + i); reportUnit = new ReportUnit(); GeneticAlgorithm lGenetic = new GeneticAlgorithm(50, 0.75f, 0.1f, Boolean.TRUE); reportUnit.setAlgorithm(new Experiment.AlgorithmWrapper(lGenetic, null)); reportUnit.setFunction(function); long ini = System.nanoTime(); specification.pm = new Float(lGenetic.pm); state = lGenetic.optimize(GENERATIONS, function, specification, reportUnit); if (bestState != null) { if (bestState.getValue() < state.getValue()) { bestState = state; replace(graphInfo, reportUnit.getReportGraphInfos()); } } else { bestState = state; replace(graphInfo, reportUnit.getReportGraphInfos()); } reportUnit.setTime(System.nanoTime() - ini); reportUnit.setTotalIteraction((double) hidden); ds.add(reportUnit); testPatterns(pCorreto, state, results, patterns, hidden); } Map parameters = new HashMap(); parameters.put("nome", "FInal"); parameters.put("ds", ds); avg(graphInfo, MAX_IT); reportUnit.setReportGraphInfo(new JRBeanCollectionDataSource(graphInfo)); ReportManager.saveReport( "/otimizacao_grafico.jrxml", parameters, "experimento_2GA_" + hidden + ".pdf"); log.fine("Fim"); } } Collections.sort( results, new Comparator<RnaResult>() { @Override public int compare(RnaResult o1, RnaResult o2) { return o2.getMatchs() - o1.getMatchs(); } }); String result = ""; for (RnaResult rnaResult : results) { result += rnaResult.toString(); } log.info(result); } catch (FileNotFoundException e) { log.log(Level.SEVERE, "Arquivo nao encontrado", e); } catch (IOException e) { log.log(Level.SEVERE, "Erro ao ler o arquivo", e); } }