Explanation
Contains the explanation, once solved.
curl --request GET \
--url https://api.solvice.io/v2/vrp/jobs/{id}/explanation \
--header 'Authorization: <api-key>'import requests
url = "https://api.solvice.io/v2/vrp/jobs/{id}/explanation"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.solvice.io/v2/vrp/jobs/{id}/explanation', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.solvice.io/v2/vrp/jobs/{id}/explanation",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.solvice.io/v2/vrp/jobs/{id}/explanation"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.solvice.io/v2/vrp/jobs/{id}/explanation")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.solvice.io/v2/vrp/jobs/{id}/explanation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"score": {
"hardScore": -2000,
"mediumScore": 0,
"softScore": -15000,
"feasible": false
},
"conflicts": [
{
"constraint": "TIME_WINDOW_CONFLICT",
"score": "-1000",
"job": "Job-1",
"resource": "vehicle-1"
},
{
"constraint": "TAG_HARD",
"score": "-1000",
"job": "Job-2",
"resource": "vehicle-1",
"tag": "electrical"
}
],
"unresolved": [
{
"constraint": "TRAVEL_TIME",
"score": "-15000"
}
],
"alternatives": {
"Job-1": [
{
"job": "Job-1",
"resource": "vehicle-2",
"suggestedArrival": "2023-01-13T09:30:00Z",
"latestArrival": "2023-01-13T10:00:00Z",
"executedAfter": "Job-0",
"score": {
"hardScore": 0,
"mediumScore": 0,
"softScore": -1500,
"feasible": true
}
}
]
}
}{
"message": "<string>",
"status": "OK"
}{
"message": "<string>",
"status": "OK"
}{
"message": "<string>",
"status": "OK"
}Authorizations
Api Key based authentication (apikey)
Path Parameters
Response
Status
Explains the conflicts of a certain routing solution and the unresolved constraints.
Score of the solution.
Show child attributes
Show child attributes
Conflicts in the solution
- object[]
- object
Show child attributes
Show child attributes
{
"constraint": "TIME_WINDOW_CONFLICT",
"score": "-1000",
"job": "Job-1",
"resource": "vehicle-1"
}
Unresolved constraints in the solution
- object[]
- object
Show child attributes
Show child attributes
{
"constraint": "TRAVEL_TIME",
"score": "-1500"
}
When options.explanation.enabled is set to true, this field will contain the alternatives for the solution.The key is the job name and the value is the list of assignments. Each assignment contains the resource, the date, and the score. In this way, you can check the impact of the alternative on the score.
Show child attributes
Show child attributes
{
"Job-1": [
{
"job": "Job-1",
"resource": "vehicle-2",
"suggestedArrival": "2023-01-13T09:30:00Z",
"latestArrival": "2023-01-13T10:00:00Z",
"executedAfter": "Job-0",
"score": {
"hardScore": 0,
"mediumScore": 0,
"softScore": -1500,
"feasible": true
}
}
]
}
Only present when alternative generation was cut short by one of the options.explanation limits. When absent, the alternatives map is exhaustive.
Show child attributes
Show child attributes
{
"reason": "TIME_LIMIT_EXCEEDED",
"message": "Explanation stopped after 30000 ms. Analysed 412 of 8186 jobs.",
"analysedJobs": 412,
"totalJobs": 8186,
"cappedJobs": 0,
"limitMillis": 30000
}
Was this page helpful?
curl --request GET \
--url https://api.solvice.io/v2/vrp/jobs/{id}/explanation \
--header 'Authorization: <api-key>'import requests
url = "https://api.solvice.io/v2/vrp/jobs/{id}/explanation"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.solvice.io/v2/vrp/jobs/{id}/explanation', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.solvice.io/v2/vrp/jobs/{id}/explanation",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.solvice.io/v2/vrp/jobs/{id}/explanation"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.solvice.io/v2/vrp/jobs/{id}/explanation")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.solvice.io/v2/vrp/jobs/{id}/explanation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"score": {
"hardScore": -2000,
"mediumScore": 0,
"softScore": -15000,
"feasible": false
},
"conflicts": [
{
"constraint": "TIME_WINDOW_CONFLICT",
"score": "-1000",
"job": "Job-1",
"resource": "vehicle-1"
},
{
"constraint": "TAG_HARD",
"score": "-1000",
"job": "Job-2",
"resource": "vehicle-1",
"tag": "electrical"
}
],
"unresolved": [
{
"constraint": "TRAVEL_TIME",
"score": "-15000"
}
],
"alternatives": {
"Job-1": [
{
"job": "Job-1",
"resource": "vehicle-2",
"suggestedArrival": "2023-01-13T09:30:00Z",
"latestArrival": "2023-01-13T10:00:00Z",
"executedAfter": "Job-0",
"score": {
"hardScore": 0,
"mediumScore": 0,
"softScore": -1500,
"feasible": true
}
}
]
}
}{
"message": "<string>",
"status": "OK"
}{
"message": "<string>",
"status": "OK"
}{
"message": "<string>",
"status": "OK"
}