Under the hood — for technical reviewers
GRIP — the decision engine
Synlogica's proprietary probabilistic engine. Combines hard SOP/GxP rules with Monte Carlo simulation and Bayesian inference. Returns distributions of outcomes with confidence intervals — not single point estimates. Powers the Transport and Negotiation modules. The Quality module ships with a separate dedicated Arrhenius probabilistic engine (see the Arrhenius shelf-life whitepaper for the math).
Why probabilistic, not deterministic
Pharma operational decisions are not exact: a tender outcome is not "yes" or "no" but a probability conditioned on demand, carrier capacity, lane history and competitor pricing. A supplier's reaction to a counter-offer is not certain but a distribution over Accept / Counter / Walk. A batch's remaining shelf-life after a temperature excursion is not a single number but a confidence interval driven by Arrhenius kinetics and historical stability data.
GRIP returns the full distribution — and recommends an action against it with the operator's risk tolerance applied. This means:
- You can budget against the 80th-percentile worst case, not the mean.
- You can explain to auditors why a borderline batch was released or held — with the math, not "the model said so".
- You can A/B compare two negotiation strategies with quantified outcome variance.
The three pillars
1. Hard rules layer
Your SOPs, GxP thresholds, GDP requirements, tenant-specific business logic. Deterministic gates that must be passed before any probabilistic reasoning happens. Auditable as code — versioned, signed.
2. Probabilistic models
Monte Carlo for tender outcomes and lane risk. Bayesian inference for supplier price-elasticity updates from each negotiation round. Note: shelf-life impact (Quality module) runs on a separate dedicated Arrhenius engine — same general primitive, independent codebase + validation pack.
3. Decision policy layer
Translates distribution → recommended action under your risk tolerance. Configurable (conservative / balanced / opportunistic). Every recommendation is logged with the policy version that produced it.
Sibling: the Quality module's Arrhenius engine
The Quality module ships with a separate, dedicated probabilistic engine — not GRIP — built around Arrhenius kinetics for shelf-life impact assessment after temperature excursions. The math is the same general primitive (k(T) = A · exp(−Ea / RT) integrated over the actual sensor profile, with Monte Carlo uncertainty propagation), but the engine, the parameter library and the validation pack are independent. We split them deliberately: Quality runs on the QP's desk and is validated GAMP 5 Cat 4 against IQ/OQ scripts focused on excursion review, while GRIP runs on the operational data hub for Transport + Negotiation decisions with different acceptance criteria.
Full mathematical walkthrough lives in the Arrhenius shelf-life modelling whitepaper — activation-energy sourcing, sensor calibration error propagation, spatial inhomogeneity adjustments, when peak-temperature dominates vs cumulative exposure, and a worked 6-hour excursion at 14°C with full distribution output.
Example 1 — Bayesian price-elasticity in the Negotiation module
Each supplier has a latent price-elasticity distribution that GRIP estimates and updates after every interaction. Prior comes from category benchmarks (Fastmarkets, ICIS, LME, Argus); posterior is updated via Bayes' rule after each round of price exchange:
Prior: log-normal(μ = category benchmark, σ = market volatility)
Likelihood: function of supplier's counter-response to your last offer
Posterior: updated distribution used to recommend next BATNA / target / ceiling
This is why the Negotiation module's "recommended counter-offer" comes with a calibrated expected acceptance probability — not a gut guess. After 3-5 rounds with a supplier, the posterior converges and recommendations become tighter.
Example 2 — Monte Carlo for tender coverage in the Transport module
Given the production plan and active tender lanes, what's the probability that you cover 95% of your transport demand over the next quarter without spot freight exposure?
GRIP runs 10,000 Monte Carlo simulations sampling from internal distributions:
- Production plan stochasticity (slip probability per SKU)
- Lane-level award acceptance from each carrier (historical, ML-trained on your tender outcomes)
- Demand volatility per temperature class (cold-chain vs ambient)
- Spot rate inflation distribution (carrier × month)
External signal layer
The Monte Carlo sampler also pulls live external feeds into the input distributions, so every recommendation reflects the actual current operating environment, not a stale baseline:
- Fuel-price indices — Brent / ULSD / diesel by lane region, hedging-window timing for fuel-surcharge exposure.
- Commodity benchmarks — ICIS, Fastmarkets, LME, Argus for accessorial and surcharge baselines.
- Geopolitical disruption events — port congestion (Rotterdam, Antwerp, Hamburg), Red Sea / Suez transit times, sanctions impact on specific trade routes, customs strike duration.
- Capacity-tightness signals — spot-vs-contract spread, carrier on-time-pickup rates, seasonal volume curves.
- Weather / mode-shift — North-Atlantic storm season effects, air-freight overflow when ocean lanes congest.
Output: distribution of "coverage rate × spot exposure cost × landed cost" outcomes, conditioned on the current external state. Transport then surfaces the lanes contributing most to the tail risk (worst-case 5%) and recommends a mini-tender for them before invoices reconcile. Every recommendation carries the input-data lineage hash, so the auditor can replay the exact decision with the exact external snapshot that informed it.
Auditability — model versions in every decision
Every decision package output by Terminus includes:
- GRIP engine version (semver)
- Model parameter set version (per-tenant)
- Rule set version (your SOPs)
- Policy layer version (your risk tolerance config)
- Input data lineage hash
- SHA-256 hash of the full PDF + JSON output
When an auditor asks "why did the model recommend X two years ago?" — we replay the exact GRIP version with the exact same inputs and get the exact same output. Bit-for-bit reproducibility is the operational requirement, not a nice-to-have.
What GRIP is NOT
- Not a large-language-model. No LLM is in the decision loop. LLMs are used elsewhere (e.g., parsing free-text excursion notes into structured fields) but their output never feeds the decision recommendation.
- Not a black box. Every probability distribution can be inspected, every rule is human-readable code, every recommendation traces back to its inputs.
- Not a replacement for QA / QP / procurement judgment. GRIP recommends; humans approve. The approval is part of the decision package.
- Not magic. Quality of recommendations is bounded by quality of inputs. Garbage in → calibrated-garbage out. We help you fix the inputs.
Want the deep technical brief?
30-minute call with Adam Karpiński — engineering specifics, model parameters, validation approach for your category.
Book a call →