1 unstable release
0.1.0 | Sep 27, 2020 |
---|
#19 in #vehicle
14KB
302 lines
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.