I like most of your ideas here, but I think if you have requested an item and have not been allocated it, the next time you request it, you should get a higher priority. Your algorithm can be improved by including elements from the queuing law (Little's law) and the Nash equilibrium.