Back to projects

MaritimeHack — Smart Fleet Selection

Robust fleet optimization under regulatory uncertainty

Python · MILP · Optimization · Operations Research

Overview

Maritime Hackathon 2026, Team REPmonkeys. Fleet selection for Singapore's bunker fuel supply — pick the right chemical tankers while hitting safety, emissions, and fuel diversity targets. Over a hundred candidate vessels, eight fuel technologies, 48 hours.

The Setup

We processed AIS voyage data to get fuel consumption and emissions per vessel, then built a four-component cost model: fuel, carbon, amortized capital, and a risk premium tied to safety scores. Nothing fancy — the goal was clean inputs for the optimizer.

Base Optimization

Binary integer program. Each vessel is a binary variable — in or out. Objective: minimize total fleet cost. Constraints: meet capacity demand, maintain minimum average safety score, cover all fuel types for diversity.

We used CBC for exact global optimality. With a hundred-odd binary variables and linear constraints, it converges fast. No need for heuristics.

The base case finds the cheapest feasible fleet. Looks good on paper. Then you stress test it.

The Problem With Optimal

The base solution sits right at the constraint boundaries. Safety score barely clears the threshold. That's mathematically optimal, but operationally fragile.

Tighten the safety requirement even slightly — infeasible, no solution exists. Carbon price increases — costs spike because the fleet wasn't selected with that in mind. The "optimal" answer assumes the world stays exactly as modeled. It won't.

Robust Reformulation

We extended to min-max optimization. Define a set of scenarios — different carbon prices, different safety thresholds, representing plausible regulatory futures. Each scenario reprices the carbon component while keeping other costs fixed.

Introduce an auxiliary variable representing worst-case cost. Now minimize that variable, subject to: for every scenario, total fleet cost must stay under the worst-case bound. Plus the original capacity, safety, and diversity constraints — but using the strictest safety threshold across all scenarios.

The solver now picks a fleet that performs well across the entire scenario set. It's not optimizing for one future, it's hedging across many.

What Changes

The robust fleet looks different. More vessels, cleaner ones, higher safety margins. It costs more under baseline assumptions — but that's the premium you pay for resilience.

When you sweep through stress tests, the robust fleet stays feasible where the base case breaks. When carbon prices rise, the cost gap narrows because lower emissions mean less exposure. The base case is cheaper today; the robust case is cheaper across the range of tomorrows that might actually happen.

The Tradeoff

Small cost increase now, bounded downside later. That's the pitch to a shipping company thinking past the next quarter. Especially with maritime emissions regulation ramping up — you don't want a fleet that's optimal for rules that are already changing.