adaptive charging algorithms