Run an optimizer REST API depending of many contraints for a Vehicle Routing Problem (VRP).
For ruby, bundler and gems, rbenv or rvm are recommanded.
sudo apt install libssl-dev libyaml-dev
- Depending on the Ubuntu version, libssl 1.0 may not be available. Then the following may fix the issue.
sudo add-apt-repository 'deb https://security.ubuntu.com/ubuntu bionic-security main'
sudo apt update
sudo apt install libssl1.0-dev
- Ruby 2.5.5 (if not using rbenv/rvm)
sudo apt install ruby-full
- redis-server
sudo apt install redis-server
- Start redis service
sudo systemctl enable redis-server.service
- libgeos-dev
sudo apt install libgeos-dev libgeos-3.7.1
- libicu-dev
sudo apt install libicu-dev
brew install redis
brew install geos
gem install bundler
bundle install
This project requires some solver and interface projects in order to be fully functional!
- Vroom v1.8.0
- Optimizer-ortools v1.14.0 & OR-Tools v7.8 (use the version corresponding to your system operator, not source code).
Note : when updating OR-Tools you should to recompile optimizer-ortools.
By default, Optimizer-API and the related projects are supposed to be in parallel folders as follows:
We recommand to use a symbolic link to point the OR-Tools asset.
ln -s or-tools_Debian-10-64bit_v7.8.7959 or-tools
Adjust config/environments files.
bundle exec rackup [-p 1791]
And in production mode:
APP_ENV=production bundle exec rackup [-p 1791]
Start Redis and then start the worker
APP_ENV=production COUNT=5 QUEUE=* bundle exec rake resque:workers
The API is defined in Swagger format at https://localhost:1791/0.1/swagger_doc and can be tested with Swagger-UI https://swagger.mapotempo.com/?url=https://optimizer.mapotempo.com/0.1/swagger_doc
curl -X POST --header "Content-Type:application/json" --data '{"vrp":{"vehicles":[]}}' https://localhost:1791/0.1/vrp/submit.json?api_key=demo
Moreover, the concepts used are described in the docs folder.
Run tests:
APP_ENV=test bundle exec rake test
If you want to get information about how long each test lasts:
TIME=true HTML=true APP_ENV=test bundle exec rake test
This generates a report with test times. You can find the report in optimizer-api/test/html_reports folder.
If you want to run a specific test file (let's say real_cases_periodic_test.rb file only):
APP_ENV=test bundle exec rake test TEST=test/real_cases_periodic_test.rb
If you want to run only one specific test (let's say test_instance_clustered test only) you can use focus
or call:
APP_ENV=test bundle exec rake test TESTOPTS="--name=test_instance_clustered"
Tests are splitted into several sets and you can replay only one or more set(s):
APP_ENV=test bundle exec rake test:api
APP_ENV=test bundle exec rake test:api test:models
You can list all available tasks with:
bundle exec rake -T
You can add your own tests on specific Vehicle Routing Problem (for instance data from real cases). Let's see how to create a new test called "new_test".
You will find template for test in test/real_cases_test.rb
Before creating test, you need to capture scenario, in order to have a static image of your problem, insensitive to the routers edits.
Add your test JSON file into test/fixtures/
. Now to create your test, just copy test template in test/wrappers/real_cases_test.rb
, or any equivalent file.
Once launched, the dump file of the problem will be created and put aswell in test/fixtures
as following:
new_test.dump
file corresponding to complete vrp with calculated matrices if not provided
If you create a test by using .dump
, your test will fail as soon as vrp model is changed. Just run following task to update fixtures:
TEST_DUMP_VRP=true APP_ENV=test bundle exec rake test TEST=test/real_cases_test.rb
Note: you can update a test and run the modified scenario with new vrp .json
:
bundle exec rackup [-p 1791]
COUNT=5 QUEUE=* bundle exec rake resque:workers
curl -X POST --header "Content-Type:application/json" --data @test/fixtures/my_test.json https://localhost:1791/0.1/vrp/submit.json?api_key=key
If you don't want to run some long real cases tests you can deactive them:
SKIP_REAL_CASES=true APP_ENV=test bundle exec rake test
To test on Github Actions with a optimizer-ortools different than the latest version, specify in your Actions configuration the following environment variable : OPTIMIZER_ORTOOLS_VERSION with you github owner nick.