# mehdibp/agenet architecture

> Architecture diagram of the GitHub repository mehdibp/agenet, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mehdibp/agenet
- Repository: https://github.com/mehdibp/agenet

## Overview

AgeNet is a decentralized reinforcement-learning framework for transmission-power control in vehicular ad-hoc networks. The main workflow advances a traffic/network simulation, forms vehicle observations and neighbor connectivity, lets each agent choose a transmission-radius action, then evaluates connectivity, power, and learning outcomes. The repository also supports handcrafted and SUMO environments, alternative action policies, and OMNeT++ integration. Edges follow shown imports, calls, or README descriptions; some unsampled subsystem links are omitted rather than inferred.

Main entry points: [`AgeNet/core/agent.py`](https://github.com/mehdibp/agenet/blob/main/AgeNet/core/agent.py) (Vehicle agent), [`omnetpp/src/coordination/AgeNetCoordinator.cc`](https://github.com/mehdibp/agenet/blob/main/omnetpp/src/coordination/AgeNetCoordinator.cc) (Cycle coordinator), [`omnet_bridge/core.py`](https://github.com/mehdibp/agenet/blob/main/omnet_bridge/core.py) (Python bridge client), [`AgeNet/experiments/exporters.py`](https://github.com/mehdibp/agenet/blob/main/AgeNet/experiments/exporters.py) (Result exporter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_simulation["Simulation environments"]
  node_simulator["Agent simulator<br/>[simulation.py]"]
  node_environment["Environment interface<br/>[base.py]"]
  node_simple_env["Simple environment<br/>[simple.py]"]
  node_sumo_env["SUMO environment<br/>[sumo.py]"]
  node_omnet_env["OMNeT environment<br/>[omnetpp.py]"]
  node_mobility["Mobility dynamics<br/>[mobility.py]"]
end

subgraph group_agents["Agent control"]
  node_agent["Vehicle agent<br/>[agent.py]"]
  node_neighbors["Neighbor discovery<br/>[neighbor_finder.py]"]
  node_action_policies["Action policies<br/>[base.py]"]
  node_brain["DQN brains<br/>[base_brain.py]"]
  node_state["State extraction<br/>[state.py]"]
  node_hamiltonian["Hamiltonian reward<br/>[hamiltonian.py]"]
  node_radius["Radius control"]
end

subgraph group_bridge["OMNeT integration"]
  node_bridge_core["Python bridge client<br/>[core.py]"]
  node_connection["Socket connection<br/>[connection.py]"]
  node_domains["Cached state domains<br/>[domains.py]"]
  node_protocol["Wire protocol<br/>[protocol.py]"]
  node_coordinator["Cycle coordinator"]
  node_app["Vehicle application<br/>[AgeNetApp.h]"]
  node_vehicle_state["Vehicle state<br/>[VehicleState.h]"]
  node_agent_protocol["C++ protocol<br/>[AgentProtocol.h]"]
  node_status_message["Status message"]
  node_tx_model["Transmit power model<br/>[TxPowerModel.h]"]
  node_console_log["Console logging<br/>[ConsoleLog.h]"]
end

subgraph group_evaluation["Evaluation and results"]
  node_topology["Network topology<br/>[topology.py]"]
  node_metrics["Network metrics<br/>[metrics.py]"]
  node_visualizer["Network visualizer<br/>[visualization.py]"]
  node_exporter["Result exporter<br/>[exporters.py]"]
end

node_researcher(("Experiment operator"))
node_sumo_service(("SUMO traffic simulator"))
node_omnet_service(("OMNeT++ simulator"))

node_researcher -.->|"runs episodes"| node_simulator
node_simulator -->|"advances agents"| node_agent
node_simulator -->|"steps environment"| node_environment
node_simple_env -->|"extends"| node_environment
node_simple_env -->|"moves entities"| node_mobility
node_sumo_env -.->|"uses traffic"| node_sumo_service
node_omnet_env -->|"uses bridge"| node_bridge_core
node_omnet_env -.->|"connects simulator"| node_omnet_service
node_agent -->|"finds neighbors"| node_neighbors
node_agent -->|"selects policy"| node_action_policies
node_agent -->|"creates brain"| node_brain
node_agent -->|"extracts state"| node_state
node_agent -->|"computes reward"| node_hamiltonian
node_agent -->|"updates radius"| node_radius
node_bridge_core -->|"exchanges data"| node_connection
node_bridge_core -->|"exposes snapshots"| node_domains
node_bridge_core -->|"encodes messages"| node_protocol
node_connection -->|"uses framing"| node_protocol
node_coordinator -->|"collects vehicle data"| node_app
node_coordinator -->|"builds observations"| node_agent_protocol
node_coordinator -->|"converts radius"| node_tx_model
node_coordinator -.->|"runs cycles"| node_omnet_service
node_coordinator -.->|"exchanges decisions"| node_bridge_core
node_app -->|"uses state"| node_vehicle_state
node_app -->|"uses messages"| node_status_message
node_app -.->|"logs activity"| node_console_log
node_agent_protocol -->|"encodes state"| node_vehicle_state
node_exporter -->|"builds adjacency"| node_topology
node_exporter -->|"computes metrics"| node_metrics
node_exporter -->|"collects outcomes"| node_agent
node_visualizer -->|"draws network"| node_topology
node_exporter -.->|"exports results"| node_researcher

click node_simulator "https://github.com/mehdibp/agenet/blob/main/AgeNet/core/simulation.py"
click node_environment "https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/base.py"
click node_simple_env "https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/simple.py"
click node_sumo_env "https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/sumo.py"
click node_omnet_env "https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/omnetpp.py"
click node_mobility "https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/physics/mobility.py"
click node_agent "https://github.com/mehdibp/agenet/blob/main/AgeNet/core/agent.py"
click node_neighbors "https://github.com/mehdibp/agenet/blob/main/AgeNet/communication/neighbor_finder.py"
click node_action_policies "https://github.com/mehdibp/agenet/blob/main/AgeNet/core/action_policies/base.py"
click node_brain "https://github.com/mehdibp/agenet/blob/main/AgeNet/learning/brains/base_brain.py"
click node_state "https://github.com/mehdibp/agenet/blob/main/AgeNet/learning/state.py"
click node_hamiltonian "https://github.com/mehdibp/agenet/blob/main/AgeNet/learning/hamiltonian.py"
click node_radius "https://github.com/mehdibp/agenet/blob/main/AgeNet/learning/radius_controller.py"
click node_bridge_core "https://github.com/mehdibp/agenet/blob/main/omnet_bridge/core.py"
click node_connection "https://github.com/mehdibp/agenet/blob/main/omnet_bridge/connection.py"
click node_domains "https://github.com/mehdibp/agenet/blob/main/omnet_bridge/domains.py"
click node_protocol "https://github.com/mehdibp/agenet/blob/main/omnet_bridge/protocol.py"
click node_coordinator "https://github.com/mehdibp/agenet/blob/main/omnetpp/src/coordination/AgeNetCoordinator.cc"
click node_app "https://github.com/mehdibp/agenet/blob/main/omnetpp/src/applications/AgeNetApp.h"
click node_vehicle_state "https://github.com/mehdibp/agenet/blob/main/omnetpp/src/applications/VehicleState.h"
click node_agent_protocol "https://github.com/mehdibp/agenet/blob/main/omnetpp/src/bridge/AgentProtocol.h"
click node_status_message "https://github.com/mehdibp/agenet/blob/main/omnetpp/src/messages/VehicleStatusMessage_m.h"
click node_tx_model "https://github.com/mehdibp/agenet/blob/main/omnetpp/src/radio/TxPowerModel.h"
click node_topology "https://github.com/mehdibp/agenet/blob/main/AgeNet/analyses/topology.py"
click node_metrics "https://github.com/mehdibp/agenet/blob/main/AgeNet/analyses/metrics.py"
click node_visualizer "https://github.com/mehdibp/agenet/blob/main/AgeNet/analyses/visualization.py"
click node_exporter "https://github.com/mehdibp/agenet/blob/main/AgeNet/experiments/exporters.py"
click node_console_log "https://github.com/mehdibp/agenet/blob/main/omnetpp/src/logging/ConsoleLog.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_simulator,node_environment,node_simple_env,node_sumo_env,node_omnet_env,node_mobility toneBlue
class node_agent,node_neighbors,node_action_policies,node_brain,node_state,node_hamiltonian,node_radius toneAmber
class node_bridge_core,node_connection,node_domains,node_protocol,node_coordinator,node_app,node_vehicle_state,node_agent_protocol,node_status_message,node_tx_model,node_console_log toneMint
class node_topology,node_metrics,node_visualizer,node_exporter toneRose
class node_researcher,node_sumo_service,node_omnet_service toneIndigo
```

## Components

### Simulation environments

- [Agent simulator](https://github.com/mehdibp/agenet/blob/main/AgeNet/core/simulation.py): `AgeNet/core/simulation.py`
- [Environment interface](https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/base.py): `AgeNet/environments/base.py`
- [Simple environment](https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/simple.py): `AgeNet/environments/simple.py`
- [SUMO environment](https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/sumo.py): `AgeNet/environments/sumo.py`
- [OMNeT environment](https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/omnetpp.py): `AgeNet/environments/omnetpp.py`
- [Mobility dynamics](https://github.com/mehdibp/agenet/blob/main/AgeNet/environments/physics/mobility.py): `AgeNet/environments/physics/mobility.py`

### Agent control

- [Vehicle agent](https://github.com/mehdibp/agenet/blob/main/AgeNet/core/agent.py): `AgeNet/core/agent.py`
- [Neighbor discovery](https://github.com/mehdibp/agenet/blob/main/AgeNet/communication/neighbor_finder.py): `AgeNet/communication/neighbor_finder.py`
- [Action policies](https://github.com/mehdibp/agenet/blob/main/AgeNet/core/action_policies/base.py): `AgeNet/core/action_policies/base.py`
- [DQN brains](https://github.com/mehdibp/agenet/blob/main/AgeNet/learning/brains/base_brain.py): `AgeNet/learning/brains/base_brain.py`
- [State extraction](https://github.com/mehdibp/agenet/blob/main/AgeNet/learning/state.py): `AgeNet/learning/state.py`
- [Hamiltonian reward](https://github.com/mehdibp/agenet/blob/main/AgeNet/learning/hamiltonian.py): `AgeNet/learning/hamiltonian.py`
- [Radius control](https://github.com/mehdibp/agenet/blob/main/AgeNet/learning/radius_controller.py): `AgeNet/learning/radius_controller.py`

### OMNeT integration

- [Python bridge client](https://github.com/mehdibp/agenet/blob/main/omnet_bridge/core.py): `omnet_bridge/core.py`
- [Socket connection](https://github.com/mehdibp/agenet/blob/main/omnet_bridge/connection.py): `omnet_bridge/connection.py`
- [Cached state domains](https://github.com/mehdibp/agenet/blob/main/omnet_bridge/domains.py): `omnet_bridge/domains.py`
- [Wire protocol](https://github.com/mehdibp/agenet/blob/main/omnet_bridge/protocol.py): `omnet_bridge/protocol.py`
- [Cycle coordinator](https://github.com/mehdibp/agenet/blob/main/omnetpp/src/coordination/AgeNetCoordinator.cc): `omnetpp/src/coordination/AgeNetCoordinator.cc`
- [Vehicle application](https://github.com/mehdibp/agenet/blob/main/omnetpp/src/applications/AgeNetApp.h): `omnetpp/src/applications/AgeNetApp.h`
- [Vehicle state](https://github.com/mehdibp/agenet/blob/main/omnetpp/src/applications/VehicleState.h): `omnetpp/src/applications/VehicleState.h`
- [C++ protocol](https://github.com/mehdibp/agenet/blob/main/omnetpp/src/bridge/AgentProtocol.h): `omnetpp/src/bridge/AgentProtocol.h`
- [Status message](https://github.com/mehdibp/agenet/blob/main/omnetpp/src/messages/VehicleStatusMessage_m.h): `omnetpp/src/messages/VehicleStatusMessage_m.h`
- [Transmit power model](https://github.com/mehdibp/agenet/blob/main/omnetpp/src/radio/TxPowerModel.h): `omnetpp/src/radio/TxPowerModel.h`
- [Console logging](https://github.com/mehdibp/agenet/blob/main/omnetpp/src/logging/ConsoleLog.h): `omnetpp/src/logging/ConsoleLog.h`

### Evaluation and results

- [Network topology](https://github.com/mehdibp/agenet/blob/main/AgeNet/analyses/topology.py): `AgeNet/analyses/topology.py`
- [Network metrics](https://github.com/mehdibp/agenet/blob/main/AgeNet/analyses/metrics.py): `AgeNet/analyses/metrics.py`
- [Network visualizer](https://github.com/mehdibp/agenet/blob/main/AgeNet/analyses/visualization.py): `AgeNet/analyses/visualization.py`
- [Result exporter](https://github.com/mehdibp/agenet/blob/main/AgeNet/experiments/exporters.py): `AgeNet/experiments/exporters.py`

### Other components

- **Experiment operator**
- **SUMO traffic simulator**
- **OMNeT++ simulator**

## Connections

- Experiment operator → Agent simulator: runs episodes
- Agent simulator → Vehicle agent: advances agents (evidence: `AgeNet/core/simulation.py`)
- Agent simulator → Environment interface: steps environment (evidence: `AgeNet/core/simulation.py`)
- Simple environment → Environment interface: extends (evidence: `AgeNet/environments/simple.py`)
- Simple environment → Mobility dynamics: moves entities (evidence: `AgeNet/environments/simple.py`)
- SUMO environment → SUMO traffic simulator: uses traffic
- OMNeT environment → Python bridge client: uses bridge (evidence: `AgeNet/environments/omnetpp.py`)
- OMNeT environment → OMNeT++ simulator: connects simulator
- Vehicle agent → Neighbor discovery: finds neighbors (evidence: `AgeNet/core/agent.py`)
- Vehicle agent → Action policies: selects policy (evidence: `AgeNet/core/agent.py`)
- Vehicle agent → DQN brains: creates brain (evidence: `AgeNet/core/agent.py`)
- Vehicle agent → State extraction: extracts state (evidence: `AgeNet/core/agent.py`)
- Vehicle agent → Hamiltonian reward: computes reward (evidence: `AgeNet/core/agent.py`)
- Vehicle agent → Radius control: updates radius (evidence: `AgeNet/core/agent.py`)
- Python bridge client → Socket connection: exchanges data (evidence: `omnet_bridge/core.py`)
- Python bridge client → Cached state domains: exposes snapshots (evidence: `omnet_bridge/core.py`)
- Python bridge client → Wire protocol: encodes messages (evidence: `omnet_bridge/core.py`)
- Socket connection → Wire protocol: uses framing (evidence: `omnet_bridge/connection.py`)
- Cycle coordinator → Vehicle application: collects vehicle data (evidence: `omnetpp/src/coordination/AgeNetCoordinator.cc`)
- Cycle coordinator → C++ protocol: builds observations (evidence: `omnetpp/src/coordination/AgeNetCoordinator.cc`)
- Cycle coordinator → Transmit power model: converts radius (evidence: `omnetpp/src/coordination/AgeNetCoordinator.cc`)
- Cycle coordinator → OMNeT++ simulator: runs cycles
- Cycle coordinator → Python bridge client: exchanges decisions
- Vehicle application → Vehicle state: uses state (evidence: `omnetpp/src/applications/AgeNetApp.h`)
- Vehicle application → Status message: uses messages (evidence: `omnetpp/src/applications/AgeNetApp.cc`)
- Vehicle application → Console logging: logs activity (evidence: `omnetpp/src/applications/AgeNetApp.cc`)
- C++ protocol → Vehicle state: encodes state (evidence: `omnetpp/src/bridge/AgentProtocol.h`)
- Result exporter → Network topology: builds adjacency (evidence: `AgeNet/experiments/exporters.py`)
- Result exporter → Network metrics: computes metrics (evidence: `AgeNet/experiments/exporters.py`)
- Result exporter → Vehicle agent: collects outcomes (evidence: `AgeNet/experiments/exporters.py`)
- Network visualizer → Network topology: draws network (evidence: `AgeNet/analyses/visualization.py`)
- Result exporter → Experiment operator: exports results
