Multi-Agent Systems: A Survey