MCPcopy Index your code
hub / github.com/Tong89/smartNode / SimulationEngine

Class SimulationEngine

backend/core.py:389–2379  ·  view source on GitHub ↗

仿真引擎核心 - 管理卫星、地面站、传输任务

Source from the content-addressed store, hash-verified

387# 5. 仿真引擎
388# ==========================================
389class SimulationEngine:
390 """仿真引擎核心 - 管理卫星、地面站、传输任务"""
391
392 @property
393 def resource_usage(self):
394 return self._resources.usage
395
396 @property
397 def resource_time_pool(self):
398 return self._resources.time_pool
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())

Callers 5

scenario_engineFunction · 0.90
_make_engineFunction · 0.90
make_engineFunction · 0.90
_make_seeded_engineFunction · 0.90
create_engineFunction · 0.85

Calls

no outgoing calls

Tested by 3

scenario_engineFunction · 0.72
_make_engineFunction · 0.72
make_engineFunction · 0.72