What is decided, what is minimized, and which rules every plan must satisfy.
Business problem
FAL2, FAL3, and FAL5 were selected as representative CMA CGM Asia–North Europe liner services to
demonstrate how Red Sea routing disruptions affect fleet allocation, sailing speeds, and operating costs.
Each service keeps a weekly departure, and all three share one limited pool of
company-owned, identical vessels. More ships on a loop allow slower, cheaper sailing; fewer ships force
faster sailing and higher fuel burn.
Primary decision
Vessels per service
x[s] ∈ {1,…,F}
How many vessels each service operates — an integer, chosen by the solver.
Derived, not decided
Sailing speed
v[s] = v(x[s])
Follows from the fleet size: the cheapest speed that still keeps weekly departures.
Objective
Minimum weekly cost
min Σ (fuel + h·x)
Fuel plus incremental vessel operating cost, in USD per week.
Essential rules
Every plan must
use at most the available fleet F
keep a departure every 7 days on every service
sail within the speed range
The dashboard compares three operating plans: Baseline (A, mixed-routing optimum) ·
Unchanged Fleet (B1, full Cape with the Baseline vessel counts, speeds recomputed) · Optimized Fleet
(B2, full Cape, fleet and speeds re-optimized).
Key assumptions
Identical, company-owned vessels in one shared fleet — treating the three loops' vessels as a homogeneous, jointly allocatable pool is an illustrative modeling assumption, not a claim about CMA CGM's actual vessel ownership or deployment flexibility
Fixed port rotation and distance per scenario
One average sailing speed per service
Weekly departures on every service
Medium-term steady state (no transition)
Fuel per day ∝ speed³ (per nautical mile ∝ speed²)
Unused vessels may stay idle
No cargo demand, capacity, repositioning, canal tolls or AIS data in v1
Owned fleet: why ownership cost is left out. Each vessel's weekly cost splits into an
unavoidable part and an activity-dependent part,
h = h_active − h_idle.
The unavoidable part is the same for every allocation, so dropping it does not change the optimal plan.
h covers extra maintenance, consumables and operating expenses, plus the opportunity cost of using the
vessel instead of keeping it in reserve — excluding fuel.
Constraints
C1
One fleet size per serviceexactly one integer option is chosen
Σ_n y = 1mandatory
C2
Shared fleet poolcouples the services
Σ n·y ≤ Fmandatory
C3
Binary optionsinteger vessel counts
y ∈ {0,1}mandatory
C4
Weekly frequencysailing + port (+ buffer) fits 7n days
Σ (sail+P+B−7n)·y ≤ 0mandatory
C5
Speed rangephysical operating limits
v_min ≤ Σ v·y ≤ v_maxmandatory
C6
Max fleet per servicebusiness cap per loop
Σ n·y ≤ Moptional
C7
Minimum schedule bufferrecovery margin in the rotation
B > 0 in C4optional
C8
Max round-trip timeactive ship cycle, not cargo transit
Last term only when C8 is on; B = buffer when C7 is on, else 0. A non-positive denominator means no speed works.
Option speed and sailing time
v = min(v_max, v_req), sail = D/(24v)
If the required speed exceeds the maximum, the option sails at vmax, no longer fits 7n days, and C4 rules it out.
Fuel coefficient
c = f_ref / (24·v_ref³)
Weekly cost of option (s, n) and objective
C[s,n] = p·c·D·v² + h·n; min Σ C·y
One round trip departs per service per week, so weekly fuel is c·D·v² — not multiplied by n.
Why this is an exact 0–1 MILP. Speed enters the cost through v² and the frequency rule
through 1/v. Rather than making speed a variable (a mixed-integer nonlinear program), every integer fleet
size n is enumerated as an option. For a fixed n, speed, sailing time and cost are constants, so all constraints
and the objective are linear in the binaries y. C1 forces exactly one y = 1 per service, so each summed
row equals the chosen option's value — an exact reformulation, not an approximation.
How each constraint is implemented
#
Implementation in the solver
C1, C2, C6
Explicit linear rows over y (C6 only when enabled).
C3
Variable domain (BoolVar).
C4 (+ C7)
Explicit row using precomputed sailing days; the buffer B enters the same row and the option speed.
C5
Satisfied in preprocessing (speed clamped to the range); kept as visible, non-binding rows.
C8
Explicit row using precomputed sailing days; also raises the option speed.
The solver decides feasibility; if it reports INFEASIBLE, the app explains why afterwards (minimum fleet per service, binding rule).
Optimization workflow
Business inputsfleet, fuel, cost, routes, rules
→
Optionsn = 1…F per service: speed, time, cost
→
0–1 MILPy[s,n], C1–C8, min cost
→
OR-Tools / SCIPstatus & plan
→
Independent verificationre-derive all rules & costs
→
ResultsA · B1 · B2
Limitations and data sources
The two routing scenarios are hypothetical planning cases, not a claim about today's actual maritime routing.
Results compare separate steady states; not a transition or repositioning plan, and cost differences are not guaranteed cash savings.
Single average speed per service; weather, congestion and canal waiting are not modeled.
Leg distances come from authored sea-lane waypoints (validated against a published reference), not navigation software.
Port time = port calls × average berth days; economic inputs are illustrative, not CMA CGM data.
Data sources
Scenario Configuration
Planning inputs for both routing scenarios. Any change marks the dashboard as out of date until you rerun.
Default economic parameters are illustrative and are not CMA CGM financial data.
Service and routing data
Westbound = Asia → EuropeEastbound = Europe → AsiaRound trip = westbound leg + eastbound leg of the scenario's route
Default distances are the lengths of the authored sea-lane paths shown on the map.
Hover a service name to see its port rotation.
Business constraints
Optional settings
Always applied
One Fleet Allocation per ServiceEach service must be assigned a whole number of vessels.
Fleet AvailabilityThe total number of vessels assigned across all services cannot exceed the available fleet.
Weekly DeparturesEach service must maintain one departure every week.
Sailing Speed LimitsVessels must operate within the minimum and maximum sailing speeds specified above.
Decision Dashboard
Fleet allocation and sailing-speed plan for Asia–North Europe under Red Sea routing disruption.
Preparing the first optimization run…
1Operating Plan Comparison
2Fleet Movement Comparison
Three operating plans · synchronized simulation · illustrative vessel movements, not live tracking
BaselineMixed routing · EB via Suez
Unchanged FleetFull Cape routing
Optimized FleetFull Cape routing
Day 0Click a route to highlight that service on all maps.
3Fleet Allocation and Sailing Speed
Fleet allocation (vessels per service)
Sailing speed by service
Weekly operating cost
4Detailed AnalysisWeekly cost breakdown (fuel vs incremental vessel operating cost)Service-level metrics (vessels, speed, active cycle, rotation, slack, fuel, costs)
Active cycle = sailing time + port time.Scheduled rotation = 7 × allocated vessels (days).Schedule slack = scheduled rotation − active cycle; with a minimum schedule buffer (C7) enabled,
the buffer is the minimum required part of this slack.
Route distances by service (mixed routing vs full Cape)Cost calculation detailsSolver status and independent verification