public static float calcFitness(int[] particle, LinkedList<PatternList> l) throws IOException { PatternList pl1 = l.getFirst(); PatternList pl2 = l.getLast(); float fit; int[] pagesArray = pl1.getPageArray(); float f1 = 0; float f2 = 0; for (int i = 0; i < particle.length - 2 + 1; i++) { int[] duo = new int[2]; for (int j = 0; j < 2; j++) { // System.out.println("\t\t"+this.dimensions[i + j]); duo[j] = pagesArray[particle[i + j]]; } Pattern current = pl2.seek(duo); if (current != null) { f2 += (current.getFreq() * (1000 * current.getConfidence())); } else if (current == null) { // System.out.print("\t\t duo : "); // new Pattern(duo).print(); fit = (float) -6.0; return fit; } } f2 = (f2 / ((particle.length - 2 + 1) * pl2.getTotalFreq() * pl2.getDistribution())); for (int i = 0; i < particle.length; i++) { Pattern current = pl1.seek(particle[i]); if (current == null) { fit = (float) 0.0; return (float) -6.0; } else { f1 += current.getFreq(); } } f1 = (f1 / (particle.length * pl1.getTotalFreq() * pl1.getDistribution())); // System.out.println("\t\t\tf2 freq : "+ f2); return fit = 1000 * ((1 * f1 + 3 * f2) / 4); // fitness da partícula 8,8,8 é :0.468331 // fitness da partícula 1,1,1 é :0.35263315 // fitness da partícula 6,6,7 é :0.050931655 // fitness da partícula 14,13,16 é :3.627465E-4 // fitness da partícula 8,8,8 é :0.039101 // fitness da partícula 1,1,1 é :0.029390793 // fitness da partícula 6,6,7 é :0.0042792875 // fitness da partícula 14,13,16 é :1.3224661E-4 }
/** * Train this network using the supplied pattern list. * * @param patternz list of training patterns * @param qerr quadratic error * @param max_cycles maximum training cycles, -1 = no limit * @param threshold limit near zero or one to count as zero or one * @param verbose write progress messages * @return quantity of trained patterns */ public int trainNetwork( PatternList patternz, double qerr, int max_cycles, double threshold, boolean verbose) { int limit = patternz.size(); int counter = 0; int success; int max_success = 0; long tot_train = 0, tot_run = 0; long train_start, train_end, run_start, run_end; do { success = 0; _network.resetQError(); _network.resetAggOutputError(); for (int ii = 0; ii < limit; ii++) { Pattern pattern = patternz.get(ii); run_start = System.currentTimeMillis(); _network.runNetWork(pattern.getInput()); run_end = System.currentTimeMillis(); tot_run += (run_end - run_start); train_start = System.currentTimeMillis(); double[] raw_results = _network.trainNetWork(pattern.getOutput()); train_end = System.currentTimeMillis(); tot_train += (train_end - train_start); int[] truth = Mathz.thresholdArray(threshold, pattern.getOutput()); int[] results = Mathz.thresholdArray(threshold, raw_results); pattern.setTrained(true); for (int jj = 0; jj < raw_results.length; jj++) { if (results[jj] != truth[jj]) { pattern.setTrained(false); break; } } if (pattern.isTrained()) { ++success; } } // Batch mode _network.updateWeights(); if (max_success < success) { max_success = success; } if ((++counter % 100) == 0) { if (verbose) { System.out.println("Fwd time: " + tot_run); System.out.println("Bwd time: " + tot_train); System.out.println("Netw qerror: " + _network.getQError()); System.out.println(counter + " success:" + success + " best run:" + max_success); } } if (max_cycles != -1) { if (counter >= max_cycles) { break; } } } while (_network.getQError() > qerr); if (verbose) { System.out.println("Fwd time: " + tot_run); System.out.println("Bwd time: " + tot_train); System.out.println("Netw qerror: " + _network.getQError()); System.out.println("Training complete in " + counter + " cycles"); } return (success); }