# Muto Muto is an open-source vehicle routing optimization library written in rust that specializes on _dynamic vehicle routing problems (DVRP)_ such as same day package delivery and on-demand passenger transportation. ## Quick Start Everything you need to get started. ### Using as a Rust library TODO: Need APIs completed ### Using as a http server TODO: Need http server completed ### Using in other languages TODO: Wiki of language & package bindings ## How to contribute TODO ## Questions, Requests & Contact We love hearing about your use cases so we can get a better idea of how to make Muto as useful as possible. If you're wanting detailed in ... email at TODO email If you've got a question about how to implement a certain feature TODO detail how to make a question issue type If you've got a feature request TODO ## Issues TODO ## Code of Conduct TODO ## Q&A #### What's the difference between static and dynamic VRPs? A static VRP is where you setup all the vehicles, jobs (e.g. package deliveries, pick-ups, drop-offs, breaks, etc.) and time windows and tell the optimizer to run for some number of iterations as it finds you a decent (sometimes optimal) solution. That solution will contain all the actions the vehicle has to take to service all those jobs. However, if you need to update your solution as those vehicles are servicing jobs, for example you might get a new request to deliver a package during that day, your problem is a dynamic one. For every "key event" in your system you need to find the best new set of actions your vehicles need to take, while keeping track of which ones have already been completed. In a dynamic problem, the more information the better. Common types of information you might need are: The locations of the vehicles, if a job has been created, if a job has been cancelled, what jobs have been fulfilled so far, what's currently onboard a vehicle (e.g. in package or passenger delivery). #### Why use Muto? We think you might prefer Muto to other packages many reasons, here are a few: * Targeted towards _dynamic_ vrps meaning there's less work involved if this is the challenge you're dealing with * We have extensive and detailed documentation to help you use and adapt muto to your use case * We provide many integrations and packages to use muto in other languages and in may ways (See a full list here)[TODO: Integrations page] * We have many options with our API so that you can get started quickly but have the ability to start using more of our comprehensive options and features as you need * We've chosen to implement this in (the Rust programming language)[https://www.rust-lang.org/] which focuses on performance and saftey, meaning our optimisations are fast (critical for DVRPs) and much less likely to have bugs, taking away a lot of risk in adopting a young project for your use case * We have extensive set of optimizer implementations and make it simple to write your own under the same API — this is especially useful for researching new ways to improve the DVRP problem space #### What are some alternatives? We don't know of many packages that specialize in Dynamic vehicle routing problems, but two packages that help with static VRPs that we can vouch for are: (Jsprit)[https://github.com/graphhopper/jsprit] and (VROOM)[https://github.com/VROOM-Project/vroom]. These packages are well maintained and have been around longer than Muto. In the (literature)[TODO: Link to our literature guide] it's quite common to adapt static optimizers to handle dynamic vrps. We have experience doing exactly this in production systems. However there is quite a lot of work involved and we think Muto would be better choice as it's targeted towards dynamic problems.