You can create such playlists with my scripts (Playlist Tools) and probably with random pools component too.
But you can also create semi-random queries with other TF expressions, like:
(%rating% IS 3) AND ("$mod($crc32(%TITLE%),256)" GREATER 128)
Which would always give the same output, but it's a random playlist. Substitute title with a tag changed after playback, like %last_played%, and the query will also change everytime you play the track.
(%rating% IS 3) AND ("$mod($crc32(%last_played%),256)" GREATER 128)
Apply the same for every rating and you have your playlist.
You can also filter it even more, to directly exclude any track played recently
((%RATING% IS 3 AND "$mod($crc32(%LAST_PLAYED%),256)" GREATER 128) OR (%RATING% IS 4 AND "$mod($crc32(%LAST_PLAYED%),256)" GREATER 64) OR (%RATING% IS 5)) AND NOT %LAST_PLAYED% DURING LAST 2 WEEKS