Files
EVOLV/wiki/Archive/architecture-group-optimization.md
znetsixe b8cb889d87 wiki: audit + archive stale pages; refresh Home for 2026-05-11 wave
- Archived 20 pre-refactor pages to wiki/Archive/ with standard banners:
  - All 6 architecture/ pages (old _loadConfig/_setupSpecificClass internals,
    pre-refactor S88 hierarchy, deployment blueprint)
  - All 3 sessions/ logs (Apr-07 + Apr-13 session summaries)
  - findings/open-issues-2026-03.md (issues 1-5 all resolved by refactor)
  - concepts/generalfunctions-api.md (missing BaseDomain/BaseNodeAdapter)
  - concepts/sources-readme.md (empty PDF placeholder, never populated)
  - manuals/nodes/rotatingMachine.md + measurement.md (superseded by per-repo wikis)
  - Top-level SCHEMA.md, index.md, log.md, metrics.md, overview.md,
    knowledge-graph.yaml (all Apr-07 snapshot, pre-refactor)
- Kept wiki/concepts/ domain pages (ASM, PID, pump-affinity, settling, etc.)
- Kept wiki/findings/ proven results (BEP, NCog, curve-non-convexity, stability)
- Kept wiki/manuals/node-red/* (FlowFuse + Node-RED runtime docs, still current)
- Kept wiki/tools/* (utility scripts)
- Updated wiki/Archive.md index with 20 rows
- Fixed wiki/Home.md: Tier 6 was wrongly marked done; corrected to pending;
  Tier 9 updated to reflect 2026-05-11 in-progress wave

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 21:07:48 +02:00

2.4 KiB
Raw Blame History

title, created, updated, status, tags, sources
title created updated status tags sources
Group Optimization Architecture 2026-04-07 2026-04-07 proven
machineGroupControl
optimization
BEP-Gravitation
nodes/machineGroupControl/src/specificClass.js

⚠️ ARCHIVED — pre-refactor (Tier 14, 2026-05)

This page describes the architecture before the platform refactor. The current page is the per-node wiki on gitea.wbd-rd.nl/RnD or Home.

Kept for historical reference only. Do not update.

machineGroupControl Optimization

Algorithm: BEP-Gravitation + Marginal-Cost Refinement

Step 1 — Pressure Equalization

Sets all non-operational pumps to the group's max downstream / min upstream pressure. Ensures fair curve evaluation across combinations.

Step 2 — Combination Enumeration

Generates all 2^n pump subsets (n = number of machines). Filters by:

  • Machine state (excludes off, cooling, stopping, emergency)
  • Mode compatibility (execsequence allowed in auto)
  • Flow bounds: sumMinFlow ≤ Qd ≤ sumMaxFlow
  • Optional power cap

Step 3 — BEP-Gravitation Distribution (per combination)

  1. BEP seed: estimatedBEP = minFlow + span * NCog per pump
  2. Slope estimation: samples dP/dQ at BEP ± delta (directional: slopeLeft, slopeRight)
  3. Slope redistribution: iteratively shifts flow from steep to flat curves (weight = 1/slope)
  4. Marginal-cost refinement: after slope redistribution, shifts flow from highest actual dP/dQ to lowest using real inputFlowCalcPower evaluations. Converges regardless of curve convexity. Max 50 iterations, typically 5-15.

Step 4 — Best Selection

Pick combination with lowest total power. Tiebreak by deviation from BEP.

Step 5 — Execution

Start/stop pumps as needed, send flowmovement commands in output units via _canonicalToOutputFlow().

Three Control Modes

Mode Distribution Combination Selection
optimalControl BEP-Gravitation + refinement exhaustive 2^n
priorityControl equal split, priority-ordered sequential add/remove
priorityPercentageControl percentage-based, normalized count-based

Key Design Decision

The flowmovement command sends flow in the machine's output units (m3/h), not canonical (m3/s). The _canonicalToOutputFlow() helper converts before sending. Without this conversion, every pump stays at minimum flow (the critical bug fixed on 2026-04-07).