26 lines
1012 B
Python
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
|