Architecture-Based Design of Multi-Agent Systems