Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""
Pydantic models for simulation results.
"""
from typing import List, Dict, Optional
from pydantic import BaseModel, Field
class QueueStatisticsModel(BaseModel):
"""Statistics for a single queue."""
queue_id: str = Field(..., description="Queue identifier")
service_rate: float = Field(..., description="Service rate μ")
total_arrivals: int = Field(..., description="Total arrivals to this queue")
total_departures: int = Field(..., description="Total departures from this queue")
average_wait_time: float = Field(..., description="Average waiting time in queue")
average_service_time: float = Field(..., description="Average service time")
average_system_time: float = Field(..., description="Average total time in queue (wait + service)")
utilization: float = Field(..., description="Server utilization (ρ = busy time / total time)")
class TimeSeriesDataModel(BaseModel):
"""Time series data showing evolution over time."""
timestamps: List[float] = Field(default_factory=list, description="Time points")
customers_in_system: List[int] = Field(default_factory=list, description="Total customers in system at each time")
customers_per_queue: Dict[str, List[int]] = Field(default_factory=dict, description="Customers per queue over time")
class HistogramDataModel(BaseModel):
"""Histogram data for processing time distribution."""
bins: List[float] = Field(default_factory=list, description="Bin edges")
frequencies: List[int] = Field(default_factory=list, description="Frequency in each bin")
min_value: float = Field(0.0, description="Minimum value")
max_value: float = Field(0.0, description="Maximum value")
mean: float = Field(0.0, description="Mean value")
std_dev: float = Field(0.0, description="Standard deviation")
class SimulationResultsModel(BaseModel):
"""Complete results from a simulation run."""
# Configuration echo
config: Dict = Field(..., description="Configuration used for this simulation")
# Request tracking
total_requests_arrived: int = Field(..., description="Total requests that entered the system")
total_requests_completed: int = Field(..., description="Requests completed after warmup period")
# System-wide metrics
average_system_time: float = Field(..., description="Average time requests spend in system (W)")
average_customers_in_system: float = Field(0.0, description="Average number of customers in system (L)")
# Per-queue statistics
coordinator_stats: QueueStatisticsModel = Field(..., description="Coordinator queue statistics")
server_stats: Dict[str, QueueStatisticsModel] = Field(..., description="Server queue statistics by ID")
# Time series (optional)
time_series: Optional[TimeSeriesDataModel] = Field(None, description="Time series data if collected")
# Histograms (optional)
processing_time_histogram: Optional[HistogramDataModel] = Field(None, description="Processing time distribution")
# Stability analysis
is_stable: bool = Field(True, description="Whether system appears stable")
stability_notes: Optional[str] = Field(None, description="Notes about stability")
model_config = {
"json_schema_extra": {
"example": {
"config": {},
"total_requests_arrived": 800,
"total_requests_completed": 320,
"average_system_time": 1250.5,
"average_customers_in_system": 10.2,
"coordinator_stats": {
"queue_id": "coordinator",
"service_rate": 0.1,
"total_arrivals": 640,
"total_departures": 640,
"average_wait_time": 2.5,
"average_service_time": 10.1,
"average_system_time": 12.6,
"utilization": 0.81
},
"server_stats": {},
"is_stable": True
}
}
}