Negotiation as a metaphor for distributed problem solving