Research Tasks
Standardized simulation scenarios for 5G NR Sidelink and ISAC optimization
Symbion includes two research-oriented simulation tasks with standardized interfaces for iterative decision-making, suitable for numerical optimization methods, online learning approaches, heuristic planners, and external decision-making systems:
| Task | Description | Problem Type |
|---|---|---|
| U2U-MCS | 5G NR Sidelink MCS adaptive selection | Sequential decision-making |
| ISAC Trajectory | UAV trajectory optimization with LoS awareness | Constrained optimization |
Key Features
- Reproducibility: All simulations support seeded random number generation
- Standardized Interface: Step/reset pattern for iterative decision-making
- Rich Logging: JSONL and CSV output formats for analysis
- Multiple Baselines: Pre-implemented baseline algorithms for comparison
Installation & Setup
Prerequisites
- Node.js 18+
- TypeScript 5+
- npm or pnpm
Installation
# Clone the repository git clone https://github.com/YUJX19/Symbion.git cd Symbion # Install dependencies npm install # Build the project npm run build
Running Examples
# Run U2U-MCS simple example npx tsx benchmarksu2u-mcssimple-example.ts # Run ISAC Trajectory simple example npx tsx benchmarksisac-los-urllcsimple-example.ts
1. U2U-MCS Task
Task Description
Goal: Select the optimal Modulation and Coding Scheme (MCS) index (0-22) in a dynamic UAV-to-UAV communication scenario to maximize throughput while maintaining Block Error Rate (BLER) below target. This is formulated as a sequence prediction task.
- Scenario: Two UAVs communicate via 5G NR Sidelink
- Challenge: Channel quality varies due to mobility and fading
- Decision Frequency: MCS selection at each TTI (1ms)
- Trade-off: Higher MCS = higher throughput but higher BLER risk
Quick Start
import { u2uMcs } from 'symbion/tasks'; import { createRng } from 'symbion/core'; const env = u2uMcs.createEnvironment(u2uMcs.PAPER_SCENARIO_CONFIG); const policy = new u2uMcs.GreedyMcsPolicy(u2uMcs.PAPER_SCENARIO_CONFIG); const rng = createRng(42); // Reset environment and policy const { input, info } = await env.reset(42); policy.reset(); // Run simulation loop let currentInput = input; let done = false; while (!done) { // Convert vector input to structured input if needed // (Greedy policy often handles raw input or specialized conversion) // Make decision const output = policy.decide(currentInput, rng); // Step environment const result = await env.step(output); console.log(`Step ${result.info.step}: Throughput=${result.info.throughput} BLER=${result.info.bler}`); currentInput = result.input; done = (result.info.step >= 1000); // Check termination condition }
Input & Output Spaces
Input Space
Shape: [7] (Normalized)
- SINR (dB/30)
- Distance (d/200m)
- Relative Speed (v/30 m/s)
- Recent ACK Rate [0, 1]
- Recent BLER [0, 1]
- Last MCS (idx/22)
- Normalized Step [0, 1]
Output Space
Discrete: 23 options (MCS 0-22)
- 0: QPSK (SE=0.23)
- 5: QPSK (SE=0.89)
- 10: 64QAM (SE=2.41)
- 15: 64QAM (SE=3.90)
- 20: 256QAM (SE=5.12)
- 22: 256QAM (SE=5.89)
Reward Function
R = w_thr * (throughput max_throughput) - w_bler * max(0, BLER - BLER_target) - w_switch * I(MCS_changed) // Where: // - w_thr: Throughput reward weight (default: 1.0) // - w_bler: BLER penalty weight (default: 100.0) // - w_switch: MCS switch penalty (default: 0.1)
Baseline Policies
1. Fixed MCS
Always select MCS=N (conservative or aggressive)
2. Random
Random MCS selection (baseline)
3. Greedy
Select highest MCS meeting BLER target (SINR-based heuristic)
4. BLER-Adaptive
Adjust MCS based on recent BLER (reactive approach)
5. OLLA
Outer Loop Link Adaptation (standard 3GPP algorithm)
2. ISAC Trajectory Task
Task Description
Goal: A constrained trajectory optimization problem that generates UAV flight paths considering Line-of-Sight (LoS) persistence, URLLC constraints, and sensing-communication trade-offs.
Key Objectives:
- Maximize throughput to all users
- Maintain LoS persistence (>70% target)
- Satisfy URLLC constraints (<5% violation rate)
- Minimize energy consumption
- Maintain sensing coverage (>50% target)
Quick Start
import { isacTrajectory } from 'symbion/tasks'; import { createRng } from 'symbion/core'; // Create configuration (using defaults for example) const config = isacTrajectory.createConfig({ startPosition: { x: 0, y: 0, z: 50 }, endPosition: { x: 500, y: 500, z: 80 } }); const env = new isacTrajectory.IsacTrajectoryEnvironment(config); const rng = createRng(123); // Reset environment const { input } = await env.reset(123); let currentInput = input; // Simple trajectory optimization loop for (let i = 0; i < 100; i++) { // Your optimization algorithm here // For example, simple hover (zero movement) const output = [0, 0, 0]; const result = await env.step(output); console.log('LoS:', result.info.losStatus); console.log('URLLC Satisfied:', result.info.urllcSatisfied); currentInput = result.input; }
Input & Output Spaces
Input Space (Variable)
Shape: [9 + 4*N] (N = num users)
- UAV State: Pos[3], Vel[3], Energy[1]
- Global State: LoS%[1], Progress[1]
- Per User [N]: LoS Status, SINR, Distance, URLLC Status
Output Space
Continuous or Discrete
- Continuous: 3D position offset [dx, dy, dz] in range [-1, 1]
- Discrete: 27 directions (3x3x3 grid including hover)
Reward Function
R = w_thr * (throughput maxThroughput) + w_los * losPercentage - w_energy * (stepEnergy maxStepEnergy) - w_urllc * (urllcViolations numUrllcUsers) - w_sensing * max(0, sensingTarget - sensingCoverage)
Baseline Policies
1. Hover
Stay at initial position (baseline energy efficiency)
2. Random
Random movement direction (exploration baseline)
3. Rate-Only
Move toward user with lowest SINR (greedy throughput)
4. Energy-Efficient
Minimize energy while maintaining coverage (energy-focused)
5. Proposed
Balance LoS, throughput, energy, and URLLC (multi-objective)
Running Benchmarks
U2U-MCS Benchmarks
# Run all baseline policies npx tsx benchmarksu2u-mcsrun-all-baselines.ts # Compare performance npx tsx benchmarksu2u-mcscompare-policies.ts # Output: resultsu2u-mcsmetrics.csv
ISAC Trajectory Benchmarks
# Run trajectory planners npx tsx benchmarksisac-trajectoryrun-planners.ts # Evaluate metrics npx tsx benchmarksisac-trajectoryevaluate.ts # Output: resultsisac-trajectoryperformance.json