Source code for pytwinnet.optimization.random_search


from __future__ import annotations
from dataclasses import dataclass
from typing import Dict, Tuple, Any, List
import random
from ..core.digital_twin import DigitalTwin
from .objective import Objective
from .optimizer import Optimizer

[docs] @dataclass class RandomSearchOptimizer(Optimizer): ranges_dbm: Dict[str, Tuple[float, float]] samples: int = 32 seed: int = 0 copy_twin: bool = True
[docs] def optimize(self, twin: DigitalTwin, objective: Objective) -> Dict[str, Any]: rng = random.Random(self.seed) node_ids = list(self.ranges_dbm.keys()) best_score = float("-inf") best_params: List[Tuple[str, float]] = [] for _ in range(self.samples): sim_twin = twin.snapshot() if self.copy_twin else twin draw = [] for nid in node_ids: mn, mx = self.ranges_dbm[nid] val = rng.uniform(float(mn), float(mx)) node = sim_twin.network.get_node_by_id(nid) if node: node.transceiver_properties.transmit_power_dbm = float(val) draw.append((nid, float(val))) score = objective.evaluate(sim_twin) if score > best_score: best_score = score best_params = draw return {"best_score": best_score, "best_params": best_params, "evaluations": self.samples}