27 lines
1.0 KiB
Python
27 lines
1.0 KiB
Python
"""ADMM-lite solver utilities for PolicyMesh (minimal MVP).
|
|
|
|
- This module provides small helpers to perform a toy ADMM-like step and
|
|
- to compute a simple synchronization delta for cross-domain coordination.
|
|
"""
|
|
|
|
from typing import Any, Dict
|
|
|
|
|
|
def admm_lite_step(z: Dict[str, float], u: Dict[str, float], rho: float = 1.0) -> Dict[str, Dict[str, float]]:
|
|
# Very small, deterministic update for demonstration purposes
|
|
new_z: Dict[str, float] = {}
|
|
new_u: Dict[str, float] = {}
|
|
for k, val in z.items():
|
|
# pretend we adjust z toward a neutral value 0.0 using rho
|
|
new_z[k] = val - rho * u.get(k, 0.0)
|
|
new_u[k] = u.get(k, 0.0) # keep dual variable in sync (no-op placeholder)
|
|
return {"z": new_z, "u": new_u}
|
|
|
|
|
|
def delta_sync(local_z: Dict[str, float], remote_z: Dict[str, float]) -> Dict[str, float]:
|
|
# simple max-merge for demonstration
|
|
merged: Dict[str, float] = dict(local_z)
|
|
for k, v in remote_z.items():
|
|
merged[k] = max(merged.get(k, float('-inf')), v)
|
|
return merged
|