Distributed Constraint Satisfaction: Foundations of Cooperation in Multi - Agent Systems