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;
}