Hi, I'm Ryan.

I use data and models to make complex decisions.

In my work, I direct Grubhub's Decision Engineering department, which builds strategic, tactical, and operational decision services enabling real-time meal delivery at enormous scale, and the algorithmic and quantitative components that power them.

Before that, I created successful dynamic vehicle routing systems for on-demand delivery at Zoomer, models and simulations to help large federal agencies make better decisions at MITRE, and data journalism projects in The Washington Post newsroom.

I've done this while finishing bachelors and masters degrees in Computer Science and Operations Research, respectively, and finally a Ph.D. in Systems Engineering & Operations Research by night. I recently defended my dissertation, Exact Methods for Solving Single-Vehicle Pickup and Delivery Problems in Real Time. My academic research applies hybrid optimization techniques to pickup and delivery problems for real-time decision making. I'm also interested in applications of optimization to machine learning, cutting and packing problems, computational optimization, and modeling languages.

Here are a few things I've done lately.




  • TSPPD Hybrid Optimization Code and TSPPD Decision Diagram Code are both used in my dissertation. The former contains C++14 code for hybrid CP and MIP models for solving TSPPDs. The latter uses a hybridized Decision Diagram implementation with an Assignment Problem inference dual inside a branch-and-bound.
  • TSPPDlib is a standard test set for TSPPDs. The instances are based on observed meal delivery data at Grubhub.
  • ap.cpp is an incremental primal-dual assignment problem solver written in C++. It can vastly improve propagation in hybrid optimization models that use AP relaxations. I use it within custom propagators in Gecode and in Decision Diagrams for solving the Traveling Salesman Problem with side constraints. ap is a Go version of the same thing.
  • The Ruby Algebraic Modeling System is a simple modeling tool for formulating and solving MILPs in Ruby.
  • adventures in optimization is a blog about modeling, optimization, and computer programming.