From fa96e3d9fa230290277a32668faf341f9b1640ef Mon Sep 17 00:00:00 2001 From: Anton Kuznets Date: Sun, 20 Oct 2024 16:27:55 +0300 Subject: [PATCH] Update README.md --- README.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b92e23..eed53cf 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,64 @@ [![CI](https://github.com/Astronomax/vrptw-powerful-route-minimization-heuristic/actions/workflows/test.yml/badge.svg)](https://github.com/Astronomax/vrptw-powerful-route-minimization-heuristic/actions/workflows/test.yml) -# vrptw-powerful-route-minimization-heuristic \ No newline at end of file + +# vrptw-powerful-route-minimization-heuristic + +Efficient and fast implementation of the algorithm described in the following articles: +* A powerful route minimization heuristic for the vehicle routing problem with time windows, Operations Research Letters, Volume 37, Issue 5, 2009, +Pages 333-338 [[link]](https://doi.org/10.1016/j.orl.2009.04.006) +* A penalty-based edge assembly memetic algorithm for the vehicle routing problem with time windows, Computers & Operations Research, Volume 37, Issue 4, 2010, Pages 724-737 [[link]](https://doi.org/10.1016/j.cor.2009.06.022) + +> The vehicle routing problem with time windows (VRPTW) is one of the most important and widely studied problems in the operations research. The objective of the +VRPTW is to minimize the number of routes (primary objective) and, in case of ties, the +total travel distance (secondary objective). Given the hierarchical objective, most of the +recent and best heuristics for the VRPTW use a two-stage approach where the number +of routes is minimized in the first stage and the total distance is then minimized in the +second stage. It has also been shown that minimizing the number of routes is sometimes +the most time consuming and challenging part of solving VRPTWs. +https://www.sintef.no/globalassets/project/vip08/abstract_nagata.pdf + +This algorithm does exactly that: it minimizes the primary objective. + +Various implementations that minimize the secondary objective can be attached to it. For example, the algorithm described in the following: +* Edge assembly‐based memetic algorithm for the capacitated vehicle routing problem, Networks, Volume 54, 2009 [[link]](https://doi.org/10.1002/net.20333) + +Its implementation may also appear in this repository at some point, although this is not so interesting. + +## Benchmark Problem Sets + +* [Solomon's problem sets] (https://www.sintef.no/projectweb/top/vrptw/solomon-benchmark/) (25, 50, and 100 customers) +* [Gehring & Homberger's extended benchmark] (http://www.sintef.no/Projectweb/TOP/VRPTW/Homberger-benchmark/) (200, 400, 600, 800, and 1000 customers) + +## Usage + +This implementation is just a simple command line utility. +But it's also pretty easy to borrow and use as a library in your own project. For example, to use it in conjunction with your own implementation of the algorithm that minimizes the total travel distance (secondary objective). + +Before running the cmake build process, you need to load some external submodules (for now these are only public Tarantool helper repositories). Run the following: + +```console +$ git submodule update --init --recursive +``` + +After that, build in the standard way: + +```console +$ mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo && make && cd .. +``` + +Then you can run the utility: +```console +$ ./build/routes --help +Usage: ./debug-build/routes [] +file1 - problem statement, file2 - where to output the solution + +Options: + --beta_correction - Enables beta-correction mechanism. + --log_level=