Source code for pytwinnet.optimization.simple_greedy
from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Dict, Tuple, List
from ..core.digital_twin import DigitalTwin
from ..core.node import WirelessNode
from .objective import Objective
from .optimizer import Optimizer
[docs]
@dataclass
class SimpleGreedyOptimizer(Optimizer):
step_db: float = 1.0
max_power_dbm: float = 30.0
iterations: int = 10
[docs]
def optimize(self, twin: DigitalTwin, objective: Objective) -> Dict[str, Any]:
best_score = objective.evaluate(twin)
history: List[Tuple[str, float]] = []
for _ in range(self.iterations):
candidates = list(twin.network)
if not candidates: break
def proxy(n: WirelessNode) -> float:
return float(n.metadata.get("received_traffic_mbps", 0.0))
worst = min(candidates, key=proxy)
props = worst.transceiver_properties
new_pw = min(props.transmit_power_dbm + self.step_db, self.max_power_dbm)
props.transmit_power_dbm = new_pw
score = objective.evaluate(twin)
history.append((worst.node_id, score))
if score > best_score:
best_score = score
return {"best_score": best_score, "iterations": len(history), "metadata": {"history": history}}