(self, ground_station_count=DEFAULT_GROUND_STATION_COUNT, leo_satellite_count=DEFAULT_LEO_SATELLITE_COUNT, rng=None, autostart=True)
| 399 | |
| 400 | |
| 401 | def __init__(self, ground_station_count=DEFAULT_GROUND_STATION_COUNT, leo_satellite_count=DEFAULT_LEO_SATELLITE_COUNT, rng=None, autostart=True): |
| 402 | self.current_time = 0.0 |
| 403 | self.running = False |
| 404 | # 可注入随机源以保证可复现(未注入则用独立 Random 实例,不污染全局 random) |
| 405 | self.rng = rng if rng is not None else random.Random() |
| 406 | # ⭐ 使用 RLock(可重入锁)减少死锁风险 |
| 407 | self.lock = threading.RLock() |
| 408 | |
| 409 | # ⭐ LEO卫星列表 (从预定义轨道中选择指定数量) |
| 410 | self.all_leo_satellites = LEO_SATELLITES # 所有可用的LEO卫星(轨道预先已知) |
| 411 | self.leo_satellite_count = max(MIN_LEO_SATELLITE_COUNT, leo_satellite_count) |
| 412 | self.leo_satellites = self.all_leo_satellites[:self.leo_satellite_count] # 选择前N颗 |
| 413 | |
| 414 | self.meo_satellites = MEO_SATELLITES |
| 415 | self.geo_relays = GEO_RELAY_SATELLITES |
| 416 | |
| 417 | # ⭐ 波束指向约束管理器(BeamPointing) |
| 418 | # 每个 GEO 中继星与随遇接入站各持有一个 BeamPointing 实例, |
| 419 | # 用于扫描范围校验、偏轴增益损耗计算与 max_beams 并发约束。 |
| 420 | self._beam_managers: dict = {} |
| 421 | for geo in self.geo_relays: |
| 422 | self._beam_managers[geo["id"]] = from_geo_satellite(geo) |
| 423 | for opp in OPPORTUNISTIC_STATIONS: |
| 424 | self._beam_managers[opp["id"]] = from_opportunistic_station(opp) |
| 425 | |
| 426 | # 地面站列表 (从50个中随机选择指定数量) |
| 427 | self.all_ground_stations = CHINA_GROUND_STATIONS |
| 428 | self.ground_station_count = max(MIN_GROUND_STATION_COUNT, |
| 429 | min(ground_station_count, MAX_GROUND_STATION_COUNT)) |
| 430 | self.ground_stations = self.rng.sample(self.all_ground_stations, self.ground_station_count) |
| 431 | |
| 432 | # 传输请求队列 |
| 433 | self.transmission_requests = [] |
| 434 | self.request_history = [] |
| 435 | |
| 436 | # 资源占用与时间槽统一由 ResourceManager 管理 |
| 437 | self._resources = ResourceManager() |
| 438 | self._resources.init_pools(self.leo_satellites, self.all_ground_stations, self.geo_relays) |
| 439 | |
| 440 | # 链路切换控制器(迟滞 + 最小驻留 + 冷却,统一约束所有切换) |
| 441 | self.handover = HandoverController( |
| 442 | HANDOVER_RATE_RATIO, HANDOVER_MIN_DWELL, HANDOVER_COOLDOWN, HANDOVER_MIN_ELEVATION |
| 443 | ) |
| 444 | # 链路选路与重调度集中于 Scheduler(使用 QoS 感知策略) |
| 445 | from backend.scheduling.qos import QosAwareStrategy |
| 446 | self.scheduler = Scheduler(self, strategy=QosAwareStrategy()) |
| 447 | |
| 448 | # 调度决策轨迹环形缓冲(上限 500 条,不会无限增长) |
| 449 | self.decision_trace_buffer = DecisionTraceBuffer() |
| 450 | |
| 451 | # 背景任务生成器配置(降低频率以提高性能) |
| 452 | self.background_task_enabled = False # ⭐ 关闭背景任务,便于调试 |
| 453 | self.background_task_interval = 30.0 # 每30秒生成一个背景任务(原10秒) |
| 454 | self.last_background_task_time = 0.0 |
| 455 | |
| 456 | # 统计数据 |
| 457 | self.stats = { |
| 458 | "total_requests": 0, |
nothing calls this directly
no test coverage detected