Autonomous agents and multi-agent systems