public boolean setInput()

in samoa-api/src/main/java/org/apache/samoa/moa/classifiers/core/driftdetection/ADWIN.java [456:539]


  public boolean setInput(double intEntrada, double delta) {
    boolean blnChange = false;
    boolean blnExit;
    ListItem cursor;
    mintTime++;

    // 1,2)Increment window in one element
    insertElement(intEntrada);
    blnBucketDeleted = false;
    // 3)Reduce window
    if (mintTime % mintClock == 0 && getWidth() > mintMinimLongitudWindow) {
      boolean blnReduceWidth = true; // Diference

      while (blnReduceWidth) // Diference
      {
        blnReduceWidth = false; // Diference
        blnExit = false;
        int n0 = 0;
        int n1 = WIDTH;
        double u0 = 0;
        double u1 = getTotal();
        double v0 = 0;
        double v1 = VARIANCE;
        double n2;
        double u2;

        cursor = listRowBuckets.tail();
        int i = lastBucketRow;
        do {
          for (int k = 0; k <= (cursor.bucketSizeRow - 1); k++) {
            n2 = bucketSize(i);
            u2 = cursor.Total(k);
            if (n0 > 0) {
              v0 += cursor.Variance(k) + (double) n0 * n2 * (u0 / n0 - u2 / n2) * (u0 / n0 - u2 / n2) / (n0 + n2);
            }
            if (n1 > 0) {
              v1 -= cursor.Variance(k) + (double) n1 * n2 * (u1 / n1 - u2 / n2) * (u1 / n1 - u2 / n2) / (n1 + n2);
            }

            n0 += bucketSize(i);
            n1 -= bucketSize(i);
            u0 += cursor.Total(k);
            u1 -= cursor.Total(k);

            if (i == 0 && k == cursor.bucketSizeRow - 1) {
              blnExit = true;
              break;
            }
            double absvalue = (u0 / n0) - (u1 / n1); // n1<WIDTH-mintMinWinLength-1
            if ((n1 > mintMinWinLength + 1 && n0 > mintMinWinLength + 1) && // Diference NEGATIVE if(
                blnCutexpression(n0, n1, u0, u1, v0, v1, absvalue, delta)) {
              blnBucketDeleted = true;
              Detect = mintTime;

              if (Detect == 0) {
                Detect = mintTime;
                // blnFirst=true;
                // blnWarning=true;
              } else if (DetectTwice == 0) {
                DetectTwice = mintTime;
                // blnDetect=true;
              }
              blnReduceWidth = true; // Diference
              blnChange = true;
              if (getWidth() > 0) { // Reduce width of the window
                // while (n0>0) // Diference NEGATIVE
                n0 -= deleteElement();
                blnExit = true;
                break;
              }
            } // End if
          }// Next k
          cursor = cursor.previous();
          i--;
        } while (((!blnExit && cursor != null)));
      }// End While // Diference
    }// End if

    mdblWidth += getWidth();
    if (blnChange) {
      numberDetections++;
    }
    return blnChange;
  }