#vehicle #problem #routing #dynamic #optimization #dvrp #specializes

bin+lib muto

An open-source vehicle routing optimization library that specializes on dynamic vehicle routing problems (DVRP)

1 unstable release

0.1.0 Sep 27, 2020

#19 in #vehicle

MIT license

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.

No runtime deps