FireData
Built with Suzano for Inteli's Module 5. Operators were deciding by hand which trucks, 4x4s and aircraft to send to each wildfire, and by which route — under time pressure, with lives and millions of reais on the line. FireData pairs two graph algorithms to return an optimal dispatch in under a minute.
- Role
- Developer · 8-person team
- Year
- 2026
- Stack
- Python, Graph Algorithms, Optimisation, React
The problem
Suzano fights forest fires across a very large amount of land. When an incident comes in, an operator has to decide two things at once, quickly: which resources to send — water trucks, 4x4s, aircraft — and which route the brigade should take to get there.
Both decisions were being made manually. That carried two costs. The financial one is obvious: a wrong call can be worth millions of reais. The other one is less discussed and worse — operators and brigade members were carrying the weight of those decisions personally, under time pressure, with lives at stake on the other end.
The approach
We modelled it as two graph problems and solved them together.
- Network Simplex over the resource graph — a minimum-cost assignment of which units go to which incidents.
- Cost Scaling over the road graph — maximum flow, resolving the routes those units take.
Run as a pair, they return an optimal dispatch in under a minute. Cost estimates weight real distance against IMA — wood density — because a denser stand burns hotter and costs more to reach and control.
The output is three things: an optimal assignment, a clear visualisation for the operator in the moment, and performance reports for managers afterwards.
The part that mattered
The algorithms were the tractable half. The harder half was the interface: an operator under pressure does not need the optimal answer, they need to believe the optimal answer within a few seconds of seeing it. Everything about how the plan is presented — what is shown, what is ranked, what is justified — is doing that work.
Credits
Built with Sarah Araujo Duarte, Richard D'Alves, Lorenzo Ferrari Aggio, Lucas Cofcewicz Faria, Marco Ruas S. Peixoto, Pedro Henrique Prado and Livia Tavares, with Suzano as partner.
# Min-cost flow over the resource graph,
# max-flow over the roads. Together:
# who goes where, and by which road.
def dispatch(incidents, resources, roads):
graph = build(incidents, resources, roads)
plan = network_simplex(graph, cost_fn)
routes = cost_scaling(graph, plan)
# IMA = wood density. A denser stand
# burns hotter, and costs more to reach.
cost = sum(
r.distance * r.ima for r in routes
)
return Plan(plan, routes, cost)