adaptive learning algorithms