Machine learning algorithm for ranking
Your problem sounds like the classical top-N personal recommendation to me. There're lots of possibilities in the literature, for example:


User-based collaborative filtering
Content-based collaborative filtering
Matrix factorisation


You'll need to read the literature and figure out which one is better for you.