Bygga ut CSharpNumerics med de återanvändbara numeriska byggstenarna (filter, state-estimation, TCN-lager, loss-funktioner, wavelets) som krävs för ett ML-drivet flödesdekompositionssystem — utan externa Python-bibliotek.
Själva systemet RAST.Decomp byggs i RAST-repot, inte här. RAST står för all orkestrering och konsumerar byggstenarna från denna roadmap. Systemet separerar totalflöde
Arkitekturen är hybrid: deterministisk spillextrahering → statistisk WW-baseline → ML-separation av residual (FRC + SRC). Denna roadmap omfattar enbart byggstenarna i Phase 1–5; pipelinen som binder samman dem (Phase 6–7) hör till RAST.
All orkestrering sköts från RAST. Denna roadmap omfattar enbart de återanvändbara byggstenarna (filter, state-estimation, TCN-lager, loss-funktioner, wavelets) som ska implementeras i
CSharpNumericssom ett generellt numeriskt bibliotek.Den applikationsspecifika dekompositionspipelinen (allt under namespacet
CSharpNumerics.ML.FlowDecomposition—FlowDecomposer,WWBaselineExtractor,DecompositionTrainer, m.fl.) byggs INTE i denna kodbas. Den hör hemma i RAST-repot och konsumerar CSharpNumerics-byggstenarna. Phase 6 och Phase 7 nedan är därför markerade 🚫 RAST och behålls endast som referens.Dokumentation: varje fas som levererar byggstenar (Phase 1–5) ska även uppdatera modulens README (
Numerics,Statistics,ML) — se### Dokumentation-listan per fas.
| Komponent | Status | Plats | Relevans |
|---|---|---|---|
Conv1DLayer |
✅ | ML/Sequence/Layers/Conv1DLayer.cs |
Bas för TCN — saknar causal padding & dilation |
LSTMLayer / BiLSTMLayer |
✅ | ML/Sequence/Layers/ |
Alternativ sekvensmodell |
MaxPool1DLayer / GlobalAvgPool1DLayer |
✅ | ML/Sequence/Layers/ |
Pooling-infrastruktur |
SequentialModel / ILayer |
✅ | ML/NeuralNetwork/ |
Lagerstackning, forward/backward |
Adam / AdamW / GradientDescent |
✅ | Numerics/Optimization/ |
Träningsoptimerare |
FourierSeries |
✅ | Numerics/SignalProcessing/ |
WW diurnal-modellering |
TimeSeries / Series |
✅ | Statistics/Data/ |
In/ut-datahantering |
TimeSeriesDetrending |
✅ | Statistics/TimeSeriesAnalysis/ |
Stationaritetsförberedelse |
SlidingWindowStatistics |
✅ | Statistics/ |
Rullande features |
PeakFitting |
✅ | Statistics/ |
Händelsedetektering |
NonlinearLeastSquaresFitter |
✅ | Statistics/ |
Recessionskurvpassning |
RobustFitter (IRLS) |
✅ | Statistics/ |
Outlier-resistent WW-estimering |
RollingCrossValidator |
✅ | ML/CrossValidators/ |
Tidsseriekorsvalidering |
MLPRegressor |
✅ | ML/ |
Baseline-nätverksmodell |
RandomForest |
✅ | ML/ |
Feature importance |
KMeans / DBSCAN |
✅ | ML/ |
Händelsekluster |
PCA |
✅ | ML/ |
Dimensionsreduktion |
LombScarglePeriodogram |
✅ | Statistics/ |
Periodicitetsdetektion |
StandardScaler / MinMaxScaler |
✅ | ML/ |
Feature-normalisering |
ODE Solvers (RK4, Adaptive) |
✅ | Numerics/ |
Reservoirmodeller |
Integration (Simpson/Trapezoidal) |
✅ | Numerics/ |
Volymberäkning |
| Saknas | Syfte i RAST.Decomp | Prioritet |
|---|---|---|
| Causal padding i Conv1D | TCN kräver kausal faltning | P1 |
| Dilated convolutions | TCN receptive field utan djupa nät | P1 |
| TCN-block (residual + dilation stack) | Primär FRC/SRC-separator | P1 |
| Dropout-lager | Regularisering under träning | P1 |
| Batch Normalization | Stabilisera djupa nätverksträning | P1 |
| Constrained Loss-funktioner | Icke-negativitet, bevarandelag | P1 |
| Kalman Filter | Spåra WW-baseline med brus | P1 |
| Savitzky-Golay Filter | SRC-utjämning med peak-bevarande | P1 |
| Butterworth IIR-filter | Låg/högpassfiltrering (SRC/FRC) | P1 |
| FIR-filter | Generalfiltrering | P2 |
| Holt-Winters (Triple Exp. Smoothing) | Lättvikts WW-modellering | P2 |
| Wavelet Transform (DWT) | Multi-resolution dekomposition | P2 |
| Attention Mechanism | Långdistansberoenden i flödeshändelser | P3 |
| GRU-cell | Lättviktsalternativ till LSTM | P3 |
| Constrained Optimization (QP) | Strikt |
P3 |
Grundläggande DSP-infrastruktur som krävs för pre-processing och feature engineering.
Namespace: CSharpNumerics.Numerics.SignalProcessing
-
SavitzkyGolayFilter— polynomutjämning med konfigurerbar ordning och fönsterbredd, bevarar peak-form -
ButterworthFilter— IIR lågpass/högpass/bandpass design (ordning N, brytfrekvens),Apply(double[] signal)via biquad-kaskad -
FIRFilter— finit impulsrespons-filter med godtyckliga koefficienter,Apply(double[] signal) -
FilterDesign— statisk klass:DesignLowpass(order, cutoff, sampleRate),DesignHighpass(...),DesignBandpass(...) -
ZeroPhaseFiltFilt— nollfasfiltrering (framåt + bakåt) för offline-analys
- Savitzky-Golay med ordning 0 motsvarar glidande medelvärde
- Butterworth lågpass dämpar signal vid 2× brytfrekvens med > 12 dB/oktav
- FiltFilt ger nollfasförskjutning (peak-position bevarad)
- Butterworth högpass + lågpass på samma signal → rekonstruktion inom tolerans
Uppdatera Numerics/Numerics/Numerics/README.md (sektionen Signal Processing):
- Lägg till sektion
FilteringmedSavitzkyGolayFilter,ButterworthFilter,FIRFilter(kodexempel:Apply(double[])) - Dokumentera
FilterDesign(DesignLowpass/Highpass/Bandpass) ochZeroPhaseFiltFiltmed ett before/after-exempel
State-space-modeller för adaptiv WW-baselinespårning.
Namespace: CSharpNumerics.Statistics.StateEstimation
-
KalmanFilter— linjärt state-space: Predict(F, Q) → Update(H, R, z), accessors för statex̂och kovariansP -
ExtendedKalmanFilter— icke-linjär variant med Jacobian-funktionerf(x),h(x),F(x),H(x) -
KalmanSmoother— Rauch-Tung-Striebel bakåtpass för offline-utjämning -
HoltWintersSmoothing— triple exponential smoothing: level + trend + säsongskomponent (additiv/multiplikativ), auto-initiering
- KalmanFilter på konstant signal med brus → konvergerar till sann nivå
- KalmanFilter spårar linjär ramp med korrekt hastighet
- ExtendedKalmanFilter estimerar sinusformad signal med känd modell
- HoltWinters fångar 24h-säsong i syntetisk WW-serie, prediktionsfel < 5%
- KalmanSmoother ger lägre varians än forward-only Kalman
Uppdatera Numerics/Numerics/Statistics/README.md:
- Ny sektion
State Estimation(CSharpNumerics.Statistics.StateEstimation) medKalmanFilter,ExtendedKalmanFilter,KalmanSmoother— Predict/Update-exempel - Lägg
HoltWintersSmoothingunder sektionen Time Series Analysis (additiv/multiplikativ, säsong)
Utöka befintlig Conv1DLayer med stöd för TCN-arkitekturen.
Namespace: CSharpNumerics.ML.Sequence
- Utöka
Conv1DLayermedPaddingMode.Causal— left-padding = (kernelSize - 1) × dilation - Utöka
Conv1DLayermeddilation-parameter — dilated faltning i forward/backward -
DropoutLayer— stokastiskt nollställer element under träning (rate), passthrough vid inferens -
BatchNorm1DLayer— kanal-vis normalisering för sekvensdata, running mean/var vid inferens -
ResidualBlock— wrapper: Conv1D(causal, dilated) → BatchNorm → ReLU → Dropout → Conv1D → residual add (med 1×1 conv om kanaler ändras) -
TCNBlock— stack avResidualBlockmed exponentiellt ökande dilation [1, 2, 4, 8, 16, ...] -
TCNRegressor— TCN → Global pooling → Dense → output; implementerarISequenceModel -
TCNClassifier— TCN → Global pooling → Dense → Softmax; implementerarISequenceModel
- Causal Conv1D: output beror inte på framtida tidssteg (strixt kausal)
- Dilated conv med dilation=4, kernel=3 har receptive field = 9
- TCNBlock med 8 lager (dilation 1→128) har receptive field ≥ 512 tidssteg
- Dropout sätter ~rate-andel av element till noll under träning
- BatchNorm normaliserar per kanal, running stats konvergerar
- TCNRegressor tränar och konvergerar på syntetisk sinusvåg
- ResidualBlock: gradient flödar genom skip-connection (ej vanishing)
- TCNRegressor: full forward+backward pass med dilation-stack utan krasch
Uppdatera Numerics/Numerics/ML/README.md (sektionerna Sequence Models / Neural Network Building Blocks):
- Dokumentera
Conv1DLayer-utökningarna (PaddingMode.Causal,dilation) - Lägg till
DropoutLayer,BatchNorm1DLayer,ResidualBlock,TCNBlocki layer-listan - Ny sektion
TCN ArchitecturemedTCNRegressor/TCNClassifier(hyperparametrar +SupervisedExperiment-exempel)
Fysik-informerad träning med bevarandelagar.
Namespace: CSharpNumerics.ML.Training
-
NonNegativityLoss—$\lambda \sum \max(-y_i, 0)^2$ , differentiabel penalty -
ConservationLoss—$\lambda |Q_{total} - \sum y_i|^2$ , säkerställer dekomposition summerar -
SmoothnessLoss—$\lambda |\nabla^2 y|^2$ , penaliserar icke-smooth SRC -
CompositeLoss— kombinerar multipla förlustfunktioner med vikter:Add(ILoss, weight) -
ConstrainedTrainer— träningsloop som applicerarCompositeLossoch stödjer curriculum learning (successivt ökande constraint-vikter) -
SoftmaxConstraintHead— output-lager som ger ratio ∈ [0,1] med summavillkor via softmax
- NonNegativityLoss = 0 om alla predictions ≥ 0
- ConservationLoss = 0 om summan av komponenter == total
- CompositeLoss gradient = summa av viktade delgradienter
- ConstrainedTrainer med conservation → slutmodell ger summa inom 1% av total
- SoftmaxConstraintHead producerar output ∈ [0,1] och summa ≤ 1.0
Uppdatera Numerics/Numerics/ML/README.md:
- Ny sektion
Constrained Training(CSharpNumerics.ML.Training) medNonNegativityLoss,ConservationLoss,SmoothnessLoss,CompositeLoss - Dokumentera
ConstrainedTrainer(curriculum learning) ochSoftmaxConstraintHead
Multi-resolution tidsfrekvens-dekomposition.
Namespace: CSharpNumerics.Numerics.SignalProcessing.Wavelets
-
DiscreteWaveletTransform— DWT med konfigurerbara wavelet-familjer, N-nivå dekomposition → approximation + detail-koefficienter -
WaveletFamily— enum/klass:Haar,Daubechies4,Daubechies8,Symlet4med filterkoefficienter -
InverseWaveletTransform— rekonstruktion från koefficienter -
WaveletDenoising— soft/hard thresholding på detail-koefficienter (VisuShrink/BayesShrink) -
MaximalOverlapDWT(MODWT) — shift-invariant variant för tidsserieanalys
- DWT → IDWT round-trip: rekonstruktionsfel < 1e-10 (maskinprecisionsgolv för 8-taps-filter via transponat-invers; Haar/db2 ligger < 1e-12)
- Haar-wavelet på stegfunktion ger förväntat detail-mönster
- Daubechies-4 på sinusvåg: energi koncentrerad i rätt nivå (approximationsbandet)
- WaveletDenoising minskar RMSE på brusig signal med > 50%
- MODWT-koefficienter är tidsinvariant (shiftad input → shiftad output)
Uppdatera Numerics/Numerics/Numerics/README.md (sektionen Signal Processing):
- Ny undersektion
Wavelets(CSharpNumerics.Numerics.SignalProcessing.Wavelets) medDiscreteWaveletTransform,WaveletFamily,InverseWaveletTransform - Dokumentera
WaveletDenoising(soft/hard thresholding) ochMaximalOverlapDWT(MODWT) — DWT→IDWT round-trip-exempel
Sammanfoga alla delar till en komplett dekompositionsmodell.
🚫 Byggs i RAST, inte i CSharpNumerics. Hela detta namespace (
CSharpNumerics.ML.FlowDecomposition) är applikationsspecifik orkestrering och implementeras i RAST-repot, som konsumerar byggstenarna från Phase 1–5. Listan nedan behålls endast som referens för RAST-arbetet. Inga README-tasks för CSharpNumerics.
Namespace: RAST.Decomp (tidigare planerat som CSharpNumerics.ML.FlowDecomposition)
- 🚫
FlowDecomposer— orkestreringsklass: konfigurerar pipeline (spill → WW → residual → ML → output) - 🚫
WWBaselineExtractor— Fourier-harmonisk modell (N harmonics) + Kalman-spårning av drift - 🚫
ResidualComputer— beräknar$Q_{res} = Q_{total} - Q_{spill} - Q_{WW}$ - 🚫
TCNDecompositionModel— tränad TCN som ger FRC/SRC-ratio givet residual + features - 🚫
DecompositionResult— struct: WW, FRC, SRC, Spill somdouble[], med kvalitetsmetrik - 🚫
DecompositionMetrics— konserveringsfel, icke-negativitetscount, SRC-smoothness, recessionpassning - 🚫
RecessionAnalyzer— identifiera och anpassa exponentiell recession$Q_0 e^{-t/\tau}$ på FRC/SRC - 🚫
FeatureEngineering— extrahera temporal features:$dQ/dt$ , rullande stats, hour_sin/cos, DOW-encoding
- 🚫 FlowDecomposer på syntetisk data (känt WW + FRC + SRC) → rekonstruktion inom 2%
- 🚫 Conservation:
$|Q_{total} - (WW + FRC + SRC + Spill)| < 0.01$ vid varje tidssteg - 🚫 Alla komponenter icke-negativa
- 🚫 FRC-recession matchar exponentiell profil med
$R^2 > 0.95$ - 🚫 SRC har bounded second derivative (smoothness-villkor)
- 🚫 DecompositionMetrics korrekt beräknade på kända testvektorer
Fullständig träningspipeline med DHI Sewdec som svag supervision.
🚫 Byggs i RAST, inte i CSharpNumerics. Träningsorkestreringen lever i RAST-repot.
HyperparameterSearchåteranvänder dock CSharpNumerics-primitiv (PipelineGrid,RollingCrossValidator) som redan finns. Listan nedan behålls endast som referens.
Namespace: RAST.Decomp (tidigare planerat som CSharpNumerics.ML.FlowDecomposition)
- 🚫
DecompositionTrainer— curriculum learning: Fas A (Sewdec-labels) → Fas B (+ fysik-constraints) → Fas C (self-supervised refinement) - 🚫
TrainingDataLoader— läser parad data (totalflöde + Sewdec-output) från CSV, tidsjusterar, normaliserar - 🚫
CurriculumSchedule— schema för constraint-vikter$\lambda_i(epoch)$ : lineär/exponentiell upptrappning - 🚫
ModelSerializer— spara/ladda TCN-vikter till binärfil (egna format, inga externa beroenden) - 🚫
HyperparameterSearch— integrera medPipelineGrid+RollingCrossValidatorför optimal TCN-arkitektur - 🚫
AblationRunner— jämför TCN vs LSTM vs matematisk baseline vs Sewdec på samma data
- 🚫 ModelSerializer save → load round-trip: identisk inferens
- 🚫 CurriculumSchedule producerar monotont ökande vikter
- 🚫 Tränad modell överpresterar naive baseline (all residual → FRC) på hållet-out-data
- 🚫 RollingCrossValidator undviker dataläckage (test alltid efter train i tid)
╔════════════════════════════════╗
║ RAST-repot (orkestrering) ║
║ Phase 7 (Träning) ║
║ ↓ ║
║ Phase 6 (Pipeline) ║
╚════════════════════════════════╝
↑ konsumerar byggstenar
─────────────────────────────────────
CSharpNumerics (byggstenar — denna roadmap)
Phase 4 Phase 5
(Constraints) (Wavelets)
↓
Phase 3 (TCN)
↓
Phase 1 ← Phase 2
(DSP) (Kalman)
Phase 1 och 2 kan köras parallellt. Phase 3 kräver Phase 1 (filterinfrastruktur). Phase 4 och 5 kan köras parallellt efter Phase 3. Phase 6 och 7 byggs i RAST och kräver att Phase 1–5 är levererade som byggstenar i CSharpNumerics.
| Komponent | Namespace | Motivering |
|---|---|---|
| SavitzkyGolayFilter, Butterworth, FIR | Numerics.SignalProcessing |
Ren signalbehandling |
| FilterDesign, ZeroPhaseFiltFilt | Numerics.SignalProcessing |
DSP-verktyg |
| KalmanFilter, EKF, Smoother | Statistics.StateEstimation |
Stokastisk estimering |
| HoltWintersSmoothing | Statistics.TimeSeriesAnalysis |
Tidsseriestatistik |
| DropoutLayer, BatchNorm1DLayer | ML.Sequence.Layers |
Nätverkslager |
| ResidualBlock, TCNBlock | ML.Sequence.Layers |
TCN-arkitekturblock |
| TCNRegressor, TCNClassifier | ML.Sequence.Models |
Sekvensmodeller |
| NonNegativityLoss, CompositeLoss | ML.Training |
Träningsinfrastruktur |
| ConstrainedTrainer | ML.Training |
Träningsloop |
| DiscreteWaveletTransform, MODWT | Numerics.SignalProcessing.Wavelets |
Wavelet-matematik |
🚫 RAST.Decomp |
Applikationsspecifik pipeline — byggs i RAST | |
🚫 RAST.Decomp |
Kvalitetsmätning — byggs i RAST |