#![allow(clippy::too_many_arguments)]
#![allow(dead_code)]
use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct MultiRobotMetrics {
pub formation_control: FormationControlMetrics,
pub task_allocation: TaskAllocationMetrics,
pub network_performance: NetworkPerformanceMetrics,
pub collective_behavior: CollectiveBehaviorMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FormationControlMetrics {
pub formation_accuracy: f64,
pub convergence_time: Duration,
pub stability: f64,
pub coordination_quality: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskAllocationMetrics {
pub allocation_optimality: f64,
pub load_balancing: f64,
pub failure_adaptation: f64,
pub communication_overhead: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkPerformanceMetrics {
pub latency: Duration,
pub message_loss_rate: f64,
pub bandwidth_utilization: f64,
pub network_reliability: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollectiveBehaviorMetrics {
pub swarm_cohesion: f64,
pub emergent_behavior: f64,
pub scalability: f64,
pub fault_tolerance: f64,
}
impl MultiRobotMetrics {
pub fn new() -> Self {
Self {
formation_control: FormationControlMetrics::default(),
task_allocation: TaskAllocationMetrics::default(),
network_performance: NetworkPerformanceMetrics::default(),
collective_behavior: CollectiveBehaviorMetrics::default(),
}
}
}
impl Default for FormationControlMetrics {
fn default() -> Self {
Self {
formation_accuracy: 1.0,
convergence_time: Duration::from_secs(0),
stability: 1.0,
coordination_quality: 1.0,
}
}
}
impl Default for TaskAllocationMetrics {
fn default() -> Self {
Self {
allocation_optimality: 1.0,
load_balancing: 1.0,
failure_adaptation: 1.0,
communication_overhead: 0.0,
}
}
}
impl Default for NetworkPerformanceMetrics {
fn default() -> Self {
Self {
latency: Duration::from_millis(0),
message_loss_rate: 0.0,
bandwidth_utilization: 0.5,
network_reliability: 1.0,
}
}
}
impl Default for CollectiveBehaviorMetrics {
fn default() -> Self {
Self {
swarm_cohesion: 1.0,
emergent_behavior: 1.0,
scalability: 1.0,
fault_tolerance: 1.0,
}
}
}