A distributed scheduling framework based on selfish autonomous agents for federated cloud environments