srecord noeq ProbabilisticBinaryMaximumSearch( IProbabilisticScheduler scheduler, IF1 scoreFunction, IVF1 action, DoubleRange startRange) { double minRadius = 1.0; // when to stop // sigmoid function (R to (0; 1)) swappable double scoreToProbability(double score) { ret arctanSigmoid_zeroToOne(score); } swappable double recursionProbability(DoubleRange r) { ret zeroOne_double(halfLength(r) <= minRadius); } run { lookAtRange(startRange); } void lookAtRange(DoubleRange r) { double x = center(r); double score = scoreFunction.get(x); double p = scoreToProbability(score); scheduler.at(p, () -> action.get(x)); double pRec = p * recursionProbability(r); scheduler.at(pRec, () -> lookAtRange(lowerHalf(r))); scheduler.at(pRec, () -> lookAtRange(upperHalf(r))); } }