I am an operations research (OR) scientist, interested in optimization, algorithms and systems thinking & design; and a rust developer 🦀.
| github | email | discord | linkedin | cv | crates |
I am enthusiastic about all things OR: decision science, mathematical optimization, algorithms, networks, routing, multiobjective decision making and decision making under uncertainty. I enjoy computation a lot, working on efficient concurrent data structures and parallel computation. Least but not the least, I love rust ❤️🦀.
Two of the big challenges in applying OR in practice might be (i) to explain complex solutions to decision makers and (ii) to address uniqueness or custom requirements of each real life problem. I am not yet actively working on (i) but I find using LLMs for this purpose very promising and watching the advances closely.
For the latter, we are seeking flexible tools which allow for conveniently representing different sets of real life constraints. Although speed is an important feature in optimization tools, we even consider sacrificing performance to be able to deliver faster.
Imo, speed and type system of rust makes it the perfect language for rich and flexible optimization algorithms. It allows us to compose real life constraints as if we are working with a dynamic high level language, while our solutions are performant and memory efficient. For more details on this fitness, you may see the following article and talk.
My work on OR & rust goal is currently split into two parallel streams:
- Composable, flexible and efficient local search algorithms (orx-local-search). I will probably branch from this to focus specifically on vehicle routing algorithms.
- An expressive, solver-agnostic, type-safe, macro-free and concise mathematical modeling tool (orx-math-model). You may see a prototype in c# below (zoom in 🔎).
I am working on a high performance, configurable and expressive parallel computation library in rust, orx-parallel. The crate is considerably mature, but also continuously improving with many new exciting challenges.
The journey to build a parallel computation crate involved developing pinned vectors (PinnedVec, SplitVec and FixedVec) and various concurrent data structures such as ConcurrentBag, ConcurrentOrderedBag, ConcurrentIter, ConcurrentRecursiveIter. While improving the parallel computation library, these data structures continue to evolve.
On the other hand, ConcurrentVec is developed without parallel computation in focus. It is designed to be the concurrent counterpart of the standard vec.
I also work on various side topics which are either relevant to efficient computation, or to improve ergonomics, or related to rust patterns. Some examples are:
- orx-iterable ➛ Defines and implements Iterable, Collection and CollectionMut traits to represent types that can be iterated over multiple times.
- orx-tree ➛ A beautiful, convenient and efficient 🌳.
- orx-v ➛ Traits to unify all vectors!
- orx-priority-queue ➛ Priority queue traits and high performance d-ary heap implementations.
- orx-meta ➛ Meta structures such as statically typed queues of heterogeneous elements.
Finally, I write articles on this journey at orxfun-notes.
If you are interested in what I aim, feel free to email, open an issue or contribute to the repos on github, or share your ideas at discord, or sponsor.