You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
294 lines
8.8 KiB
294 lines
8.8 KiB
# Agent Map Simulation 🗺️🤖
|
|
|
|
An interactive simulation system where AI agents move around a 2D map and automatically engage in conversations when they come into close proximity with each other. Built on top of the **Swarms** framework, this simulation demonstrates multi-agent interactions with real-time visualization.
|
|
|
|
## 🎯 Features
|
|
|
|
- **Spatial Agent Movement**: Agents move randomly across a 2D map with configurable movement speeds
|
|
- **Proximity-Based Conversations**: When agents get close enough, they automatically start debating topics
|
|
- **Multi-threaded Conversations**: Multiple conversations can happen simultaneously across the map
|
|
- **Live Visualization**: Real-time matplotlib visualization showing agent positions and active conversations
|
|
- **Conversation Management**: Complete tracking and logging of all agent interactions
|
|
- **Specialized Agent Types**: Pre-configured agents with different financial expertise
|
|
- **Export Capabilities**: Save detailed conversation summaries and simulation results
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
Make sure you have the required dependencies:
|
|
|
|
```bash
|
|
pip install matplotlib numpy swarms
|
|
```
|
|
|
|
### Basic Usage
|
|
|
|
1. **Run the full demo with 6 specialized agents:**
|
|
```bash
|
|
python demo_simulation.py
|
|
```
|
|
|
|
2. **Run a quick demo with just 2 agents:**
|
|
```bash
|
|
python demo_simulation.py --quick
|
|
```
|
|
|
|
3. **Use the simulation in your own code:**
|
|
```python
|
|
from swarms import Agent
|
|
from agent_map_simulation import AgentMapSimulation
|
|
|
|
# Create simulation
|
|
sim = AgentMapSimulation(map_width=50, map_height=50)
|
|
|
|
# Add agents
|
|
agent = Agent(agent_name="TestAgent", model_name="gemini-2.5-flash")
|
|
sim.add_agent(agent)
|
|
|
|
# Start simulation
|
|
sim.start_simulation()
|
|
sim.setup_visualization()
|
|
sim.start_live_visualization()
|
|
```
|
|
|
|
## 🏗️ Architecture
|
|
|
|
### Core Components
|
|
|
|
#### 1. `Position`
|
|
Simple dataclass representing 2D coordinates with distance calculation.
|
|
|
|
#### 2. `AgentState`
|
|
Tracks the complete state of an agent in the simulation:
|
|
- Current position and target position
|
|
- Conversation status and partner
|
|
- Movement speed and conversation radius
|
|
- Conversation history
|
|
|
|
#### 3. `ConversationManager`
|
|
Handles all conversation logic:
|
|
- Manages active conversations with threading
|
|
- Uses the existing `one_on_one_debate` function from Swarms
|
|
- Tracks conversation history and status
|
|
- Thread-safe conversation state management
|
|
|
|
#### 4. `AgentMapSimulation`
|
|
The main simulation controller:
|
|
- Manages agent movement and positioning
|
|
- Detects proximity for conversation triggers
|
|
- Provides visualization and monitoring
|
|
- Handles simulation lifecycle
|
|
|
|
### Conversation Flow
|
|
|
|
```mermaid
|
|
graph TD
|
|
A[Agents Moving] --> B{Proximity Check}
|
|
B -->|Within Threshold| C[Start Conversation]
|
|
B -->|Too Far| A
|
|
C --> D[Thread Pool Executor]
|
|
D --> E[one_on_one_debate]
|
|
E --> F[Update Agent History]
|
|
F --> G[Free Agents]
|
|
G --> A
|
|
```
|
|
|
|
## 🎮 Simulation Controls
|
|
|
|
### Map Configuration
|
|
```python
|
|
simulation = AgentMapSimulation(
|
|
map_width=100.0, # Map width in units
|
|
map_height=100.0, # Map height in units
|
|
proximity_threshold=8.0, # Distance for conversation trigger
|
|
update_interval=2.0 # Simulation update frequency
|
|
)
|
|
```
|
|
|
|
### Agent Configuration
|
|
```python
|
|
simulation.add_agent(
|
|
agent=my_agent,
|
|
position=Position(x=10, y=10), # Optional starting position
|
|
movement_speed=2.0, # Units per second
|
|
conversation_radius=8.0 # Conversation detection radius
|
|
)
|
|
```
|
|
|
|
## 👥 Pre-built Agent Types
|
|
|
|
The demo includes 6 specialized financial agents:
|
|
|
|
1. **QuantTrader-Alpha**: Quantitative trading and algorithmic analysis
|
|
2. **MarketAnalyst-Beta**: Market research and fundamental analysis
|
|
3. **RiskManager-Gamma**: Enterprise risk management and compliance
|
|
4. **CryptoExpert-Delta**: Cryptocurrency and DeFi specialist
|
|
5. **PolicyEconomist-Epsilon**: Macroeconomic policy expert
|
|
6. **BehaviorAnalyst-Zeta**: Behavioral finance and market psychology
|
|
|
|
Each agent has specialized knowledge and will engage in debates related to their expertise.
|
|
|
|
## 📊 Visualization
|
|
|
|
### Live Visualization Features
|
|
- **Blue circles**: Available agents (not in conversation)
|
|
- **Red circles**: Agents currently in conversation
|
|
- **Purple lines**: Active conversation links
|
|
- **Dashed circles**: Conversation detection radius
|
|
- **Topic labels**: Current conversation topics displayed
|
|
- **Real-time updates**: Automatic refresh showing movement and status
|
|
|
|
### Visualization Controls
|
|
```python
|
|
# Set up visualization
|
|
sim.setup_visualization(figsize=(14, 10))
|
|
|
|
# Start live updating visualization
|
|
sim.start_live_visualization(update_interval=3.0)
|
|
|
|
# Manual updates
|
|
sim.update_visualization()
|
|
```
|
|
|
|
## 📈 Monitoring & Export
|
|
|
|
### Real-time Status
|
|
```python
|
|
# Print current simulation state
|
|
sim.print_status()
|
|
|
|
# Get detailed state data
|
|
state = sim.get_simulation_state()
|
|
```
|
|
|
|
### Conversation Export
|
|
```python
|
|
# Save detailed conversation summary
|
|
filename = sim.save_conversation_summary()
|
|
|
|
# Custom filename
|
|
sim.save_conversation_summary("my_simulation_results.txt")
|
|
```
|
|
|
|
## 🔧 Advanced Usage
|
|
|
|
### Custom Agent Creation
|
|
|
|
```python
|
|
def create_custom_agent(name: str, expertise: str) -> Agent:
|
|
"""Create a specialized agent with custom system prompt."""
|
|
return Agent(
|
|
agent_name=name,
|
|
agent_description=f"Expert in {expertise}",
|
|
system_prompt=f"""You are an expert in {expertise}.
|
|
Engage in thoughtful discussions while staying true to your expertise.
|
|
Be collaborative but maintain your professional perspective.""",
|
|
model_name="gemini-2.5-flash",
|
|
dynamic_temperature_enabled=True,
|
|
output_type="str-all-except-first",
|
|
max_loops="auto"
|
|
)
|
|
```
|
|
|
|
### Simulation Events
|
|
|
|
```python
|
|
# Add agents during simulation
|
|
new_agent = create_custom_agent("NewExpert", "blockchain technology")
|
|
sim.add_agent(new_agent)
|
|
|
|
# Remove agents
|
|
sim.remove_agent("AgentName")
|
|
|
|
# Check active conversations
|
|
active_convs = sim.conversation_manager.get_active_conversations()
|
|
```
|
|
|
|
### Custom Movement Patterns
|
|
|
|
The simulation uses random movement by default, but you can extend it:
|
|
|
|
```python
|
|
class CustomSimulation(AgentMapSimulation):
|
|
def _generate_random_target(self, agent_state):
|
|
# Custom movement logic
|
|
# Example: agents prefer certain areas
|
|
if "Crypto" in agent_state.agent.agent_name:
|
|
# Crypto agents gravitate toward center
|
|
return Position(
|
|
x=self.map_width * 0.5 + random.uniform(-10, 10),
|
|
y=self.map_height * 0.5 + random.uniform(-10, 10)
|
|
)
|
|
return super()._generate_random_target(agent_state)
|
|
```
|
|
|
|
## 🎯 Example Use Cases
|
|
|
|
### 1. Financial Trading Simulation
|
|
- Multiple trading agents with different strategies
|
|
- Market condition changes trigger different behaviors
|
|
- Risk management agents monitor and intervene
|
|
|
|
### 2. Research Collaboration
|
|
- Academic agents with different specializations
|
|
- Collaborative knowledge building through proximity conversations
|
|
- Track cross-disciplinary insights
|
|
|
|
### 3. Educational Scenarios
|
|
- Student agents learning from expert agents
|
|
- Knowledge transfer through spatial interactions
|
|
- Monitor learning progress and topic coverage
|
|
|
|
### 4. Product Development
|
|
- Agents representing different stakeholders (engineering, marketing, design)
|
|
- Cross-functional collaboration through spatial meetings
|
|
- Track decision-making processes
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Matplotlib Backend Issues**
|
|
```python
|
|
import matplotlib
|
|
matplotlib.use('TkAgg') # or 'Qt5Agg'
|
|
```
|
|
|
|
2. **Threading Conflicts**
|
|
- Ensure proper cleanup with `sim.stop_simulation()`
|
|
- Use try/finally blocks for cleanup
|
|
|
|
3. **Memory Usage**
|
|
- Limit conversation history depth
|
|
- Reduce visualization update frequency
|
|
- Use fewer agents for long-running simulations
|
|
|
|
### Performance Tips
|
|
|
|
- **Reduce Update Frequency**: Increase `update_interval` for better performance
|
|
- **Limit Conversation Loops**: Set `max_loops` in `one_on_one_debate` to smaller values
|
|
- **Optimize Visualization**: Reduce `update_interval` in live visualization
|
|
- **Memory Management**: Periodically clear old conversation histories
|
|
|
|
## 🤝 Contributing
|
|
|
|
This simulation system is built on the Swarms framework and can be extended in many ways:
|
|
|
|
- Add new agent behaviors and movement patterns
|
|
- Implement different conversation triggers (topic-based, time-based)
|
|
- Create new visualization modes (3D, network graphs)
|
|
- Add more sophisticated agent interactions
|
|
- Implement learning and adaptation mechanisms
|
|
|
|
## 📄 License
|
|
|
|
This project follows the same license as the Swarms framework.
|
|
|
|
---
|
|
|
|
## 🎉 Have Fun!
|
|
|
|
Watch your agents come to life as they move around the map and engage in fascinating conversations! The simulation demonstrates the power of autonomous agents working together in a spatial environment.
|
|
|
|
For questions or issues, please refer to the Swarms documentation or community forums. |