I think you can't really say what is the "best" method. That all depends on your objectives. Moreover, the type of the tasks that you are dealing with are important too. I mean if the tasks are data intensive, that means you have to consider QoS metrics. On the other hand, if you have compute optimized or memory optimized tasks, then the story will be different. In the meantime, cost plays the key role here too, the users are always looking for the lowest monetary cost for executing their tasks while the service providers are willing to have the profit to be maximized.
Hence, based on the objectives you define, you may improve the algorithms in terms of QoS metrics consideration like delay, efficiency, reliability and so on, or u may focus on SLA systems or bidding models, but I think we can't strongly say e.g SLA based systems are better than agent based systems or bidding models are better than dynamic resource allocation models.