50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import Any, Dict, List
|
|
|
|
|
|
@dataclass
|
|
class LocalProblem:
|
|
"""Per-asset planning objective and constraints.
|
|
|
|
- assets: mapping from asset_id to asset-specific objectives.
|
|
- variables: free-form variables used by the planner (e.g., timing, routing).
|
|
- constraints: list of simple constraint descriptors.
|
|
- risk_budget: a rough budget to limit risk (abstracted for this MVP).
|
|
"""
|
|
|
|
asset_objectives: Dict[str, Dict[str, Any]] = field(default_factory=dict)
|
|
variables: Dict[str, Any] = field(default_factory=dict)
|
|
constraints: List[str] = field(default_factory=list)
|
|
risk_budget: float = 0.0
|
|
|
|
|
|
@dataclass
|
|
class SafetyContracts:
|
|
"""Pre/post conditions and risk terms for safety proofs."""
|
|
|
|
pre_conditions: List[str] = field(default_factory=list)
|
|
post_conditions: List[str] = field(default_factory=list)
|
|
safety_budget: float = 0.0
|
|
collision_envelope: float = 0.0
|
|
cost_of_violation: float = 0.0
|
|
|
|
|
|
@dataclass
|
|
class PrivacyContracts:
|
|
"""Minimal data-exposure policies for privacy."""
|
|
|
|
allowed_publishers: List[str] = field(default_factory=list)
|
|
aggregate_signals: bool = True
|
|
per_message_privacy_budget: float = 0.0
|
|
|
|
|
|
@dataclass
|
|
class PlanDelta:
|
|
"""Compact representation of plan changes with metadata for auditability."""
|
|
|
|
delta: Dict[str, Any] = field(default_factory=dict)
|
|
version: int = 0
|
|
metadata: Dict[str, Any] = field(default_factory=dict)
|