Example #1
0
  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

  }
Example #2
0
  /**
   * 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);
  }