Exemplo n.º 1
0
  /**
   * Perform an update to the set.
   *
   * @param matchSet the match set used for the update
   * @param correctSet the correct set used for the update
   */
  @Override
  public void performUpdate(final ClassifierSet matchSet, final ClassifierSet correctSet) {
    double strengthSum = 0;
    final int matchSetMacroclassifiers = matchSet.getNumberOfMacroclassifiers();
    final int correctSetSize = correctSet.getTotalNumerosity();
    for (int i = 0; i < matchSetMacroclassifiers; i++) {
      final Classifier cl = matchSet.getClassifier(i);
      UCSClassifierData data = ((UCSClassifierData) cl.getUpdateDataObject());
      cl.experience++;
      data.msa += 1;

      if (correctSet.getClassifierNumerosity(cl) > 0) {
        data.cs = data.cs + (b * (correctSetSize - data.cs));
        data.tp += 1;
        final double accuracy = ((double) data.tp) / ((double) data.msa);
        if (accuracy > accuracy0) {
          data.fitness0 = 1;

          // Check subsumption
          if (cl.experience >= this.subsumptionExperienceThreshold) cl.setSubsumptionAbility(true);

        } else {
          data.fitness0 = a * Math.pow(accuracy / accuracy0, n);
          cl.setSubsumptionAbility(false);
        }

        strengthSum += data.fitness0 * matchSet.getClassifierNumerosity(i);
      } else {
        data.fp += 1;
        data.fitness0 = 0;
      }
    }

    // Fix for avoiding problems...
    if (strengthSum == 0) strengthSum = 1;

    // double fitnessSum = 0;
    final int msSize = matchSet.getNumberOfMacroclassifiers();
    for (int i = 0; i < msSize; i++) {
      Classifier cl = matchSet.getClassifier(i);
      UCSClassifierData data = ((UCSClassifierData) cl.getUpdateDataObject());
      data.fitness += b * ((data.fitness0 / strengthSum) - data.fitness); // TODO:
      // Something
      // else?
      // fitnessSum += data.fitness * matchSet.getClassifierNumerosity(i);
    }
  }
Exemplo n.º 2
0
 @Override
 public void setComparisonValue(
     final Classifier aClassifier, final int mode, final double comparisonValue) {
   final UCSClassifierData data = ((UCSClassifierData) aClassifier.getUpdateDataObject());
   data.fitness = comparisonValue;
 }