# zoujiahuibin/admm-subsampling architecture

> Architecture diagram of the GitHub repository zoujiahuibin/admm-subsampling, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/zoujiahuibin/admm-subsampling
- Repository: https://github.com/zoujiahuibin/admm-subsampling

## Overview

This repository implements distributed ADMM estimation with subsampling, parameterized for least-squares, cross-entropy, and Poisson losses. The principal workflow is to configure a loss, create a central and multiple noncentral nodes from data, select subsamples, iterate distributed coefficient updates, and record estimates and metrics. The excerpts show the coordinator/node update mechanics and some output handling; several simulation and reporting routines are only partially shown, so uncertain wiring is omitted.

Main entry points: [`ADMMSubsampling.py`](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py) (ADMM coordinator), [`ADMM_Simulation_ls.v2.py`](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_ls.v2.py) (Least-squares setup), [`ADMM_Simulation_crossentropy.v2.py`](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_crossentropy.v2.py) (Cross-entropy setup), [`ADMM_Simulation_poi.v2.py`](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_poi.v2.py) (Poisson setup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_losses["Loss configurations"]
  node_ls["Least-squares setup"]
  node_crossentropy["Cross-entropy setup"]
  node_poisson["Poisson setup"]
end

subgraph group_sampling["Sampling workflow"]
  node_sampling["Subsample selection<br/>[ADMMSubsampling.py]"]
  node_stage1["Stage one<br/>[ADMMSubsampling.py]"]
  node_stage2["Stage two<br/>[ADMMSubsampling.py]"]
  node_methods["Sampling methods<br/>[ADMMSubsampling.py]"]
end

subgraph group_admm["Distributed ADMM"]
  node_model["ADMM coordinator<br/>[ADMMSubsampling.py]"]
  node_center["Center node<br/>[ADMMSubsampling.py]"]
  node_noncenter["Worker nodes<br/>[ADMMSubsampling.py]"]
end

subgraph group_results["Results"]
  node_estimates["Coefficient estimates"]
  node_metrics["Run metrics<br/>[ADMMSubsampling.py]"]
  node_csv["CSV outputs"]
end

node_user(("Researcher"))
node_data["Input data"]

node_user -->|"configures"| node_ls
node_user -->|"configures"| node_crossentropy
node_user -->|"configures"| node_poisson
node_data -->|"initializes nodes"| node_model
node_ls -->|"sets loss derivatives"| node_model
node_crossentropy -->|"sets loss derivatives"| node_model
node_poisson -->|"sets loss derivatives"| node_model
node_model -->|"runs"| node_stage1
node_model -->|"runs"| node_stage2
node_stage1 -->|"selects indices"| node_sampling
node_stage2 -->|"selects indices"| node_sampling
node_sampling -->|"chooses method"| node_methods
node_stage1 -->|"sets sample"| node_center
node_stage1 -->|"sets sample"| node_noncenter
node_stage2 -->|"sets sample"| node_center
node_stage2 -->|"sets sample"| node_noncenter
node_model -->|"coordinates updates"| node_center
node_model -->|"dispatches updates"| node_noncenter
node_center -->|"sends update data"| node_noncenter
node_noncenter -->|"returns products"| node_center
node_model -->|"records coefficients"| node_estimates
node_model -->|"tracks runtime and cost"| node_metrics
node_model -->|"writes estimates"| node_csv
node_metrics -->|"writes summaries"| node_csv

click node_ls "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_ls.v2.py"
click node_crossentropy "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_crossentropy.v2.py"
click node_poisson "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_poi.v2.py"
click node_model "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py"
click node_sampling "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py"
click node_stage1 "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py"
click node_stage2 "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py"
click node_methods "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py"
click node_center "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py"
click node_noncenter "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py"
click node_metrics "https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_ls,node_crossentropy,node_poisson toneBlue
class node_sampling,node_stage1,node_stage2,node_methods toneAmber
class node_model,node_center,node_noncenter toneMint
class node_estimates,node_metrics,node_csv toneRose
class node_user,node_data toneIndigo
```

## Components

### Loss configurations

- [Least-squares setup](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_ls.v2.py): `ADMM_Simulation_ls.v2.py`
- [Cross-entropy setup](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_crossentropy.v2.py): `ADMM_Simulation_crossentropy.v2.py`
- [Poisson setup](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMM_Simulation_poi.v2.py): `ADMM_Simulation_poi.v2.py`

### Sampling workflow

- [Subsample selection](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py): `ADMMSubsampling.py`
- [Stage one](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py): `ADMMSubsampling.py`
- [Stage two](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py): `ADMMSubsampling.py`
- [Sampling methods](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py): `ADMMSubsampling.py`

### Distributed ADMM

- [ADMM coordinator](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py): `ADMMSubsampling.py`
- [Center node](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py): `ADMMSubsampling.py`
- [Worker nodes](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py): `ADMMSubsampling.py`

### Results

- **Coefficient estimates**
- [Run metrics](https://github.com/zoujiahuibin/admm-subsampling/blob/main/ADMMSubsampling.py): `ADMMSubsampling.py`
- **CSV outputs**

### Other components

- **Researcher**
- **Input data**

## Connections

- Researcher → Least-squares setup: configures
- Researcher → Cross-entropy setup: configures
- Researcher → Poisson setup: configures
- Input data → ADMM coordinator: initializes nodes
- Least-squares setup → ADMM coordinator: sets loss derivatives
- Cross-entropy setup → ADMM coordinator: sets loss derivatives
- Poisson setup → ADMM coordinator: sets loss derivatives
- ADMM coordinator → Stage one: runs
- ADMM coordinator → Stage two: runs
- Stage one → Subsample selection: selects indices
- Stage two → Subsample selection: selects indices
- Subsample selection → Sampling methods: chooses method
- Stage one → Center node: sets sample
- Stage one → Worker nodes: sets sample
- Stage two → Center node: sets sample
- Stage two → Worker nodes: sets sample
- ADMM coordinator → Center node: coordinates updates
- ADMM coordinator → Worker nodes: dispatches updates
- Center node → Worker nodes: sends update data
- Worker nodes → Center node: returns products
- ADMM coordinator → Coefficient estimates: records coefficients
- ADMM coordinator → Run metrics: tracks runtime and cost
- ADMM coordinator → CSV outputs: writes estimates
- Run metrics → CSV outputs: writes summaries
