Constraint-based protocols for distributed problem solving