public void train(int maxTimes, double errLimit, boolean flag) { if (min == max && min == 0) return; int times = 0; double err, oldErr = 1; do { err = 0; for (int i = 0; i < inputData.length; i++) { bp.train(inputData[i], outputData[i]); err = Math.max(err, bp.optErrSum); } times++; if (flag) { if (err > oldErr) bp.eta *= 0.7; else if (err * 1.04 < oldErr) bp.eta *= 1.05; // bp.eta *= oldErr / err; } oldErr = err; } while (err > errLimit && times < maxTimes); }