I have a Pandora-like piece of software where the user can thumb up a song or thumb down a song. The software, called Chavah, is Silverlight + C#, but this is a language- and platform-neutral question.
My software needs to choose a song based on the user's preferences. I need a good algorithm for this.
I want my software to choose a song to play given the following requirements:
Thumbed up songs should be favored, and played regularly.
Unrated songs (neither thumbed up nor down) should still be played; after all, the user may only have 2 total thumbed up songs.
Thumbed down songs should be played rarely.
Whatever the algorithm, songs should not repeat often.
Given these design decisions, is there some good algorithm here?
I have some code that grabs all songs, liked songs, and disliked songs:
var allSongs = ...
var likedSongs = allSongs.Where(s => s.LikedByUser(...));
var dislikedSongs = allSongs.Where(s => s.DislikedByUser(...));
Any simple ideas for picking a good song for the user?