Hi, I'm

Johannes.

I control things that move —
in system theory, proven in the real world.

Vehicle systems engineer and PhD in control & cyber-physical systems. Tech lead at Volkswagen, currently on assignment in Irvine, California — writing the control software that decides where the heat goes in a car.

cars · heat pumps
batteries · control loops
a cleaner tomorrow ☺
somewhere between
research and real roads ↗
the thing I'm proudest of

The mode optimization strategy

Need to optimize a mode-dependent mixed-integer problem, in real time? Use the mode optimization strategy.

An electric car's coolant circuit has switching valves. Each valve combination creates a different operating mode: the battery can share a loop with the motor, get its own heater, or sit next to the heat pump's chiller. Pumps, heaters and the chiller are then set continuously within that mode.

Deciding both at once — which mode, and how much power — is a mixed-integer nonlinear program. Solved directly, it is far too slow for a car's control unit. The mode optimization strategy splits it instead:

  1. Fix the mode, drop the integers.

    For every operating mode the valves are known, so the model becomes a smooth, mode-specific system that a standard NLP solver handles quickly.

  2. Chain modes in a recursion tree.

    Each tree level covers a slice of the prediction horizon. The end state of one mode's solution becomes the start state of the next, so every branch is a candidate mode sequence.

  3. Pick the cheapest branch, repeat.

    The branch with the lowest energy cost wins. Its first move is applied, the horizon shifts, and the tree is rebuilt — model predictive control.

Try the three operating modes

The recursion tree — one NLP per node

𝔵 init M 1 M 2 M 3 min energy! level 1 level 2
under the hood

A problem inside a problem

The trick is nesting. An outer problem only decides which modes run in which order. For every candidate order, inner problems — one per mode — find the best continuous controls. The end state of each inner problem hands over to the next one, which is what makes the whole thing recursive.

Where we startthe full mixed-integer problem
\[ \hat{\phi}(x_{\mathrm{init}}) := \min_{u,\,\color{#E5541F}{v},\,\varepsilon}\; \sum_{k=0}^{\mathcal{N}-1} \boldsymbol{u}^{\top}u_k + \boldsymbol{y}^{\top}y_k + \varepsilon^{\top}\boldsymbol{\mathcal{E}}\,\varepsilon \] \[ \text{s.t.}\;\; x_{k+1} = f(x_k,u_k,\color{#E5541F}{v_k},p_k),\quad y_k = g(x_k,u_k,\color{#E5541F}{v_k},p_k),\quad x_k+\varepsilon_k\in X_{\mathrm s},\; u_k\in U,\; \color{#E5541F}{v_k\in V} \]

Minimise the thermal system's electric energy while respecting component limits (soft constraints via slack \(\varepsilon\)). The valve positions \(v_k\) are integers — that is what makes the problem hard, and slow.

Outer problempick the mode sequence \(\mathfrak{O} = (\mathfrak{O}_1,\dots,\mathfrak{O}_{\mathcal L})\)
\[ \hat{\Phi}(\mathfrak{x}_{\mathrm{init}}) := \min_{\mathfrak{O}}\; \sum_{\ell=1}^{\mathcal{L}} \hat{\phi}\!\left(\Psi^{\ell-1}_{\mathfrak{O}}(\mathfrak{x}_{\mathrm{init}}),\; \mathfrak{O}_\ell\right) \]

A finite choice: with three modes and \(\mathcal L\) tree levels there are \(3^{\mathcal L}\) sequences. Tap a mode below to build one.

Inner problem — one mode, no integers
\[ \hat{\phi}(x_{\mathrm{init}},\mathfrak{o}) := \min_{u,\,\varepsilon} \sum_{k=0}^{\mathcal{N}-1} \boldsymbol{u}^{\top}u_k + \boldsymbol{y}^{\top}y_k + \varepsilon^{\top}\boldsymbol{\mathcal{E}}\varepsilon \] \[ \text{s.t.}\;\; x_{k+1} = f_{\mathfrak{o}}(x_k,u_k,p_k),\;\; y_k = g_{\mathfrak{o}}(x_k,u_k,p_k) \]

With the mode \(\mathfrak o\) fixed, the valves disappear from the model. What's left is a smooth NLP that interior-point solvers handle fast.

Hand-over — the recursion
\[ \Omega(x_{\mathrm{init}},\mathfrak{o}) := \hat{x}_{\mathcal N} \] \[ \Psi^{0}_{\mathfrak O} := \mathfrak{x}_{\mathrm{init}},\qquad \Psi^{\ell}_{\mathfrak{O}}(\mathfrak{x}_{\mathrm{init}}) := \Omega\!\left(\Psi^{\ell-1}_{\mathfrak{O}}(\mathfrak{x}_{\mathrm{init}}),\, \mathfrak{O}_\ell\right) \]

\(\Omega\) returns the optimal end state of one inner problem. \(\Psi^{\ell}\) feeds it into the next level, so each level starts exactly where the previous mode left the battery and drivetrain.

9
mode sequences the outer problem compares
12
smooth NLPs in the tree (one per node)
≈2·10¹⁴
sequences if the mode could switch at every one of 30 steps
\(x, u, v\) states, continuous and discrete controls \(p\) known external inputs: speed, ambient, current \(\mathfrak o\) one operating mode, \(\mathfrak O\) a sequence of them \(\mathcal N, \mathcal L\) steps per level, number of levels

Nodes on the same level don't depend on each other, so they can be solved in parallel. The tree is rebuilt at every MPC step with fresh measurements — that's how the strategy stays real-time on a test vehicle.

why it works

What the mode strategy brings to the table

Nonlinear, non-convex — handled

The full problem is highly nonlinear and non-convex. But if it is convex within each mode, every inner NLP returns its global optimum — and comparing mode sequences returns the best sequence overall.

A way through NP-hard territory

Mixed-integer nonlinear programs are NP-hard in general. The strategy confines the combinatorial part to a small, finite tree of modes, so its size is set by you through the number of levels — not by the length of the horizon.

Each part gets its best solver

The continuous physics and the discrete mode choice are solved separately — the NLPs with interior-point methods, the integer decision with a dedicated combinatorial search. Each solver can be tuned for exactly one kind of problem.

Memoization: solve once, reuse

Identical subproblems — same mode, same start state — are solved once and looked up afterwards. Combined with warm starts from the previous MPC step, re-planning gets cheaper every cycle.

Parallel by construction

Nodes on the same tree level are independent, so they can run side by side on multi-core control hardware.

Physically exact per mode

No relaxed valve positions like "half open": every candidate the optimizer evaluates is a real, drivable configuration of the circuit, which keeps the models honest and the results easy to check.

1.7·10¹³×
fewer subproblems
12 NLPs in a two-level tree vs. 3³⁰ ≈ 2·10¹⁴ sequences when switching at each of 30 steps
0.5–2 s
per inner NLP
measured on a laptop i5 running CasADi/MATLAB in the test vehicle
150 s
MPC update interval
a full re-plan fits well within it, over a 900 s prediction horizon
−37%
fast-charging time
15 → 85 % state of charge, validated in vehicle tests

Relaxation-based methods such as combinatorial integral approximation (CIA) are a strong family of tools; in wind-tunnel tests at −7 °C both reached similar energy savings over a rule-based strategy. The mode strategy is built for the case where modes are few, physically distinct and switch rarely — which is exactly how a vehicle's coolant circuit behaves.

validated in the climatic wind tunnel & on the road
−37%

DC fast-charging time from 15 to 85 % state of charge, by preconditioning the battery at the right moment.

≈8%

Lower energy use in an efficiency test at −10 °C, with the battery kept within its limits the whole time.

~6%

Less energy than a rule-based strategy over two WLTC class 3 cycles at −7 °C, measured in a climatic wind tunnel.

the part everyone waits for

Stuff more electrons in, faster

Need to get more electrons in there, faster?
Run it right at the edge of the system limits — with optimal control.

It started at a fast charger, late at night. Everything was hot, and I just wanted to get home. I only needed a quick top-up — but at full speed. So I looked at the numbers: battery temperature, charging current. There was still headroom. The system was playing it safe where it didn't have to.

That gap is what optimal control closes: use every bit of headroom the limits allow — and not one bit more.

About 37 % less charging timefrom 15 to 85 % state of charge, with optimized battery preconditioning — validated in vehicle tests.
What surprised me: heat late, heat hardI expected a gentle, slow warm-up. The optimizer did the opposite — full heater power, just late enough to hit charging temperature before arrival. A warm battery leaks heat to the air, so keeping it warm early is wasted energy.
Precooling isn't a free lunchCooling the battery 8 °C down before a hot-weather charge lowered the peak temperature by only about 4.5 °C. Knowing when it pays off is exactly what the optimizer is for.
85% max kW right at the limit, never over it ↘
every road trip has stops

The road so far

2026 → now

Tech Lead, Vehicle Systems Engineering

Volkswagen AG · on assignment in Irvine, California

Production embedded C software for the refrigerant circuit and cabin HVAC — function design, software architecture, calibration, and verification from unit test to vehicle.

2023 → 2026

Development Engineer, Climate & Thermal Systems

Volkswagen AG · Wolfsburg

Global function responsibility for heating and cooling in the MQB Evo climate control unit across combustion, mild-hybrid, hybrid and plug-in vehicles. Led climatic field trials in Sweden, Spain, Italy, Switzerland and Austria.

Driving a Golf, T-Roc or Passat?
Chances are I'm riding along every day.

My heating and cooling functions run in the climate control unit of Volkswagen's MQB Evo platform — every cold morning, every hot parking lot.

2020 → 2025

PhD, Control and Cyber-Physical Systems

TU Darmstadt, with Volkswagen AG · defended October 2025

Developed the mode optimization strategy, built real-time models of battery, drivetrain, power electronics and heat pump, and validated it all in a prototype vehicle via rapid control prototyping, HIL and wind-tunnel tests.

2017 → 2019

Dipl.-Ing., Automotive Electronics

Westsächsische Hochschule Zwickau

Thesis: control system for an automated six-speed motorcycle gearbox.

2016 → 2017

Civilian service abroad

Nicaragua

Installed solar power systems and commissioned CNC machines.

2011 → 2016

Higher Technical Diploma, Electrical Engineering

HTL Braunau, Austria

Where it started: architecture and control design of an electric racing go-kart.

the paper trail

Publications & patents

Dissertation

Intelligentes Thermomanagement batterieelektrischer Fahrzeuge unter Berücksichtigung verschiedener Betriebsmodi

Intelligent thermal management of battery electric vehicles considering different operating modes · TU Darmstadt, 2025 (published on TUprints 2026) · in German

Manuscript

A novel approach using mixed-integer MPC to optimize thermal management systems in BEV

J. Stockhammer, J. Lünenstraß, R. Findeisen · brute force vs. combinatorial integral approximation, validated in a climatic wind tunnel

link coming soon
Manuscript

A dynamic optimization approach for thermal management systems in BEVs

J. Stockhammer, S. Giraldo Zapata, T. S. Schmidt, J. Frese, S. Twenhövel, R. Findeisen · simplified component models, battery heating, precooling for fast charging

link coming soon
Working on something similar?
Need one of my papers?
research@josto.me

Seven patent applications in vehicle thermal management, heat pumps and energy control:

the toolbox in the trunk

What I work with

Controls & algorithmsMPC, mixed-integer optimization, control strategy, modeling & simulation
Vehicle energy & E/EBattery, power electronics, drivetrain, HVAC, heat pumps, hybrid & BEV
Embedded & validationC/C++, SWC/RTE architecture, A2L/XCP calibration, unit test, SIL, HIL, vehicle testing
Systems engineeringRequirements, architecture, interfaces, ASPICE change management, integration
ToolsMATLAB/Simulink, CasADi, Python, CANape, CAN / LIN / Automotive Ethernet
AlsoEU F-gas certified incl. R290 · German native, English fluent
let's go for a ride

Want to build something that moves?

Thermal management, mode-dependent optimization, embedded controls — just say hi.