idea165-commonsgrid-communi.../idea165_commonsgrid_communi.../simulator.py

26 lines
1012 B
Python

from typing import Dict, Any
from .models import LocalProblem
from .adapters import BaseAdapter
from .privacy import PrivacyBudget, laplace_noise
class Simulator:
def __init__(self, adapter: BaseAdapter, privacy_budget: PrivacyBudget = None):
self.adapter = adapter
self.privacy_budget = privacy_budget or PrivacyBudget(1.0)
def simple_dispatch(self, lp: LocalProblem, plan_delta: Dict[str, Any]) -> Dict[str, Any]:
# Very small toy solver: use delta to adjust demand vs pv with noise if budget allows
raw = {
"neighborhood": lp.neighborhood_id,
"base_demand_kw": lp.demand_kw,
"base_pv_kw": lp.pv_kw,
"delta": plan_delta,
}
# If privacy budget allows, add Laplace noise to simulate DP signal
if self.privacy_budget and self.privacy_budget.remaining() > 0:
noise = laplace_noise(scale=0.1)
self.privacy_budget.spend(0.1)
raw["noise"] = noise
return raw