A model-driven approach to multi-agent system design