#
Johdanto #
Tervetuloa reititys- ja aikataulutus-API:n käyttöohjeeseen!
v1.1 lisätty tuki reittimalleille
v1.2 lisäsi tuen joustavalle ajoneuvokapasiteetin konfiguroinnille
API-rajapintamme on suunniteltu parantamaan ajoneuvokannan reittisuunnittelua ja aikataulutusta ja ottamaan huomioon keskeiset rajoitukset, kuten palveluaikaikkunat, kapasiteettirajoitukset ja liikenneolosuhteet. Hyödyntämällä API-rajapintaamme yritykset voivat merkittävästi parantaa toimitustehokkuutta, vähentää toimintakustannuksia ja säästää arvokasta aikaa optimoitujen reititys- ja aikataulutusratkaisujen avulla.
Ytimessään API ratkaisee ajoneuvojen reititysongelman (VRP) noudon ja toimituksen yhteydessä. Tämä ongelma sisältää tehokkaimpien reittien laskemisen ajoneuvokalustolle useiden toimipisteiden välillä nouto- ja toimitustehtävien suorittamiseksi ottaen huomioon aikaikkunat, ajoneuvojen kapasiteetin ja saatavuuden rajoitukset.
Lisäksi sovellusliittymämme tukee dynaamisia aikataulun mukautuksia tai uudelleenoptimointia. Jos sinun on muutettava olemassa olevaa aikataulua - olipa kyse sitten uusista tilauksista, peruutuksista tai muista muutoksista - voit antaa päivitetyn kuvan aikataulustasi määrittelemällä työn tilat ja ajoneuvojen sijainnit. API optimoi sitten aikataulun uudelleen vastaamaan näitä muutoksia, mikä varmistaa toimintojesi jatkuvan tehokkuuden.
Tietoja API:n käytön nopeasta valmistelusta ja aloittamisesta on kohdassa Aloittaminen. ”Ohjeet”-osiossa on myös useita lyhyitä opetusvideoita.
Aloita #
API tarjoaa kaksi keskeistä menetelmää reitityksen ja aikataulujen optimoinnin hallintaan:
Optimoinnin POST-testi – Käytä tätä menetelmää reitityksen ja aikataulutuksen optimointiongelman lähettämiseen. POST-menetelmän lähettämisen jälkeen saat yksilöllisen viitenumeron.
Optimointi GET – Käytä tätä metodia hakeaksesi lähetetyn ongelman tilan käyttämällä POST-metodista saatua yksilöllistä viitetunnusta. Jos optimointiratkaisu on valmis, voit hakea optimointitehtävän ratkaisun.
Optimoinnin POST-menetelmä #
POSTI: https://iq.ui.scheduledroutes.ddswireless.net
Tällä menetelmällä voit lähettää reititys- ja aikataulutusoptimoinnin ongelman API:lle. Kun optimoinnin POST-pyyntö on lähetetty onnistuneesti, API palauttaa yksilöllisen viitetunnuksen kuittausvastauksessa. Tämän yksilöllisen ID:n avulla voit hakea varsinaisen ratkaisun käyttämällä Optimization GET -menetelmää (ks. seuraava kohta).
Esimerkki optimointiongelman lähettämisestä POST-metodilla esimerkkitokenin ja hyötykuorman avulla:
curl -X POST "https://iq.scheduledroutes.ddswireless.net/raas/optimization"
-H "Content-Type: application/json"
-H "Authorization: Bearer fgJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJhZWU2MDQyZC0zN2E3LTQxNDYtODRlYy04YWU3M2ViODQ4YTgiLCJmaXJzdE5hbWUiOiJUZWMiLCJsYXN0TmFtZSI6IlRyYW5zaXQiLCJzZXF1ZW5jZU51bWJlciI6MSwicm9sZU5hbWVzIjpbImFkbWluIl0sInByb3ZpZGVyTmFtZXMiOlsiQUxMIl0sInVzZXJUZW5hbnRzIjpbMl0sInBlcm1pc3Npb25zIjpbMCwxNjYsMTcwLDE4MSwxODYsMTkxLDIwMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwxNTgsMTU5LDE2MywxNjgsMTgyLDE4OSwxNTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTc1LDE3NiwxOTcsMTk1LDIwNSwyMDIsMjAzLDIwNiwyMTcsMjE5LDE5NiwyMDcsMTk0LDIxNCwyMTgsMjIwLDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDgyLDgzLDg2LDg3LDg4LDg5LDkxLDkyLDkzLDk0LDk1LDk2LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE2MiwxNjUsMTcxLDE4NCwxODcsMTkyLDE5OSwxNzMsMTk4LDE2MCwxNjEsMTY5LDE4MywxODgsODQsOTcsOTgsOTksMTY3LDE3MiwxODAsMTg1LDE5MCwxOTMsMTc0LDE2NCwyMDQsMjE1XSwicGFzc3dvcmRVcGRhdGVkQXQiOiIiLCJ0ZW5hbnQiOnsiaWQiOjIsIm5hbWUiOiJ0ZWNUcmFuc2l0Iiwic2l0ZUlkIjoiOTQiLCJ0aW1lem9uZSI6IkFtZXJpY2EvTG9zX0FuZ2VsZXMiLCJ0eXBlIjoiUmFhUyIsInNlc1VybCI6Imh0dHA6Ly9zdHJhdGVneS1lbmdpbmUtbXVsdGktdGVuYW50LTM6MTYwMDAiLCJkaXNwbGF5TmFtZSI6IlRlYyBUcmFuc2l0In0sInJvbGVzIjpbMjBdLCJpYXQiOjE3NDE5MDU2ODIsImV4cCI6MTc0NDQ5NzY4MiwiaXNzIjoiaXEuc2NoZWR1bGVkcm91dGVzLmRkc3dpcmVsZXNzLm5ldCJ9.fmdXyIylp604DCewvtuKCqLGhh-GFPfJNC9p2v4D-kHxhN2ZmRkHfknpTjiWZOZnB7AnWTUAh6BfZztNR_KLpQDPXcEpNL01lrw7ypIuwIf6CwA3Kwh916mNX-kgvPsyRQvAnvkyd-YO8M6zd_lsVD8oRnb-g07Vta3s3U-Y5uyWnQzv9PEeRf2IizflzlMkM7f1q472_3FQAEmomqMrSreK-YwUP9YxzD-QOW4GaaIUK5pgnzFYgEH2DFNU8KtDPeRdEk1cXL8aACFeawZnYzndvNcuv5fxd-9r-Y4-Tr8NiUwerdhRX3CuD5L5E6JVQdYOUJMFtSVpCbV7smaOJa"
-d @payload.json
Yllä olevassa esimerkissä oletimme, että syöttöongelma on tiedostossa nimeltä payload.jsonSinun on vaihdettava näytetunnus. <strong>fgJhbGciOiJSUzI1N</strong>..... omalla tunnuksellasi. Syöteongelman skeema on määritelty ”Ongelma”-osiossa.
Kun olet lähettänyt POST-menetelmän, saat seuraavanlaisen vastausviestin:
POST-metodin vastauskaavio:
{
"id": "string",
"message": "string",
"status": "string",
"error" : "string"
}
Jos lähetys onnistuu, status tulee olemaan ”202”, ja message lukemalla ”hyväksytty” ja id edustaa asynkronisen operaation yksilöllistä viitenumeroa. Tätä tunnusta käytetään operaation tilan seuraamiseen ja tulosten hakemiseen myöhemmin. Jos tapahtuu virhe, status ilmoittaa virhekoodin, id on nolla tai tyhjä, message tulee olemaan "epäonnistuminen" ja error kuvaa virheen. Lisätietoja on alla olevissa POST-tilakoodeissa.
POST-esimerkki (Windows PowerShell):
Alla oleva komentosarja osoittaa, miten POST-pyyntö tehdään käyttämällä esimerkkihyötykuormaa Windows PowerShellissä. Se olettaa, että syötehyötykuorma on tallennettu tiedostoon nimeltä payload.json, ja API-käyttöoikeustunnus tallennetaan token.txtSuorituksen jälkeen luotu tunnus kirjoitetaan kohteeseen id.txtSuorittaaksesi PowerShellin, kirjoita PowerShell Käynnistä-valikkoon tai komentoriville.
$token = Get-Content token.txt -Raw
$headers = @{
Authorization = "Bearer $token"
"Content-Type" = "application/json"
}
$body = Get-Content payload.json -Raw
$response = Invoke-RestMethod -Uri "https://iq.scheduledroutes.ddswireless.net/raas/optimization" -Method Post -Headers $headers -Body $body
$response.id | Out-File -Encoding utf8 id.txt
Write-Output $response
POST-tilakoodit #
| Vastauskoodi | Kuvaus | Lisähuomautukset |
|---|---|---|
| 202 | Pyyntö hyväksyttiin käsiteltäväksi. | Palautetaan viitetunnus, jota voit käyttää GET-pyynnön kanssa ratkaisun hakemiseen, kun se on valmis. |
| 400 | Syötteen validointi epäonnistui (Huono pyyntö). | Puuttuva/virheellinen parametri tai väärä arvotyyppi. Tarkista syötetyt tiedot ja yritä uudelleen. |
| 403 | Luvaton pyyntö. | Tämä tapahtuu, kun todennus epäonnistuu. |
| 404 | Pyydettyä polkua ei löydy. | Tämä tapahtuu, kun käytetään väärää polkua. |
| 429 | Liian monta pyyntöä. | Nopeusraja ylitetty (kyselyitä minuutissa tai kiintiö ylitetty). |
| 500 | Sisäinen palveluvirhe. | Ongelma meidän puolellamme. Ota yhteyttä osoitteeseen support@ddswireless.com . |
Optimoinnin GET-menetelmä #
GET: https://iq.ui.scheduledroutes.ddswireless.net/{id}
Tällä menetelmällä voit hakea optimoidun ratkaisun optimointitehtäville, jotka on luotu Optimization POST -menetelmällä. Tätä varten sinun on määritettävä POST-menetelmästä saatu viitetunnus.
Esimerkki API:n tulostusvastauksen saamisesta GET-menetelmällä ID:n kanssa:
curl -X GET "https://iq.scheduledroutes.ddswireless.net/raas/optimization/ID"
-H "Content-Type: application/json"
-H "Authorization: Bearer fgkhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJhZWU2MDQyZC0zN2E3LTQxNDYtODRlYy04YWU3M2ViODQ4YTgiLCJmaXJzdE5hbWUiOiJUZWMiLCJsYXN0TmFtZSI6IlRyYW5zaXQiLCJzZXF1ZW5jZU51bWJlciI6MSwicm9sZU5hbWVzIjpbImFkbWluIl0sInByb3ZpZGVyTmFtZXMiOlsiQUxMIl0sInVzZXJUZW5hbnRzIjpbMl0sInBlcm1pc3Npb25zIjpbMCwxNjYsMTcwLDE4MSwxODYsMTkxLDIwMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwxNTgsMTU5LDE2MywxNjgsMTgyLDE4OSwxNTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTc1LDE3NiwxOTcsMTk1LDIwNSwyMDIsMjAzLDIwNiwyMTcsMjE5LDE5NiwyMDcsMTk0LDIxNCwyMTgsMjIwLDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDgyLDgzLDg2LDg3LDg4LDg5LDkxLDkyLDkzLDk0LDk1LDk2LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE2MiwxNjUsMTcxLDE4NCwxODcsMTkyLDE5OSwxNzMsMTk4LDE2MCwxNjEsMTY5LDE4MywxODgsODQsOTcsOTgsOTksMTY3LDE3MiwxODAsMTg1LDE5MCwxOTMsMTc0LDE2NCwyMDQsMjE1XSwicGFzc3dvcmRVcGRhdGVkQXQiOiIiLCJ0ZW5hbnQiOnsiaWQiOjIsIm5hbWUiOiJ0ZWNUcmFuc2l0Iiwic2l0ZUlkIjoiOTQiLCJ0aW1lem9uZSI6IkFtZXJpY2EvTG9zX0FuZ2VsZXMiLCJ0eXBlIjoiUmFhUyIsInNlc1VybCI6Imh0dHA6Ly9zdHJhdGVneS1lbmdpbmUtbXVsdGktdGVuYW50LTM6MTYwMDAiLCJkaXNwbGF5TmFtZSI6IlRlYyBUcmFuc2l0In0sInJvbGVzIjpbMjBdLCJpYXQiOjE3NDE5MDU2ODIsImV4cCI6MTc0NDQ5NzY4MiwiaXNzIjoiaXEuc2NoZWR1bGVkcm91dGVzLmRkc3dpcmVsZXNzLm5ldCJ9.fmdXyIylp604DCewvtuKCqLGhh-GFPfJNC9p2v4D-kHxhN2ZmRkHfknpTjiWZOZnB7AnWTUAh6BfZztNR_KLpQDPXcEpNL01lrw7ypIuwIf6CwA3Kwh916mNX-kgvPsyRQvAnvkyd-YO8M6zd_lsVD8oRnb-g07Vta3s3U-Y5uyWnQzv9PEeRf2IizflzlMkM7f1q472_3FQAEmomqMrSreK-YwUP9YxzD-QOW4GaaIUK5pgnzFYgEH2DFNU8KtDPeRdEk1cXL8aACFeawZnYzndvNcuv5fxd-9r-Y4-Tr8NiUwerdhRX3CuD5L5E6JVQdYOUJMFtSVpCbV7smaOJs"
Yllä olevassa esimerkissä korvaa ID URL-osoitteessa POST-metodilla saamasi URL-osoitteen kanssa. Esimerkiksi, jos ID on yhtä suuri kuin 5, käytä tätä:
curl -X GET "https://iq.scheduledroutes.ddswireless.net/raas/optimization/5"
-H "Content-Type: application/json"
-H "Authorization: Bearer fgkhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJhZWU2MDQyZC0zN2E3LTQxNDYtODRlYy04YWU3M2ViODQ4YTgiLCJmaXJzdE5hbWUiOiJUZWMiLCJsYXN0TmFtZSI6IlRyYW5zaXQiLCJzZXF1ZW5jZU51bWJlciI6MSwicm9sZU5hbWVzIjpbImFkbWluIl0sInByb3ZpZGVyTmFtZXMiOlsiQUxMIl0sInVzZXJUZW5hbnRzIjpbMl0sInBlcm1pc3Npb25zIjpbMCwxNjYsMTcwLDE4MSwxODYsMTkxLDIwMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwxNTgsMTU5LDE2MywxNjgsMTgyLDE4OSwxNTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTc1LDE3NiwxOTcsMTk1LDIwNSwyMDIsMjAzLDIwNiwyMTcsMjE5LDE5NiwyMDcsMTk0LDIxNCwyMTgsMjIwLDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDgyLDgzLDg2LDg3LDg4LDg5LDkxLDkyLDkzLDk0LDk1LDk2LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE2MiwxNjUsMTcxLDE4NCwxODcsMTkyLDE5OSwxNzMsMTk4LDE2MCwxNjEsMTY5LDE4MywxODgsODQsOTcsOTgsOTksMTY3LDE3MiwxODAsMTg1LDE5MCwxOTMsMTc0LDE2NCwyMDQsMjE1XSwicGFzc3dvcmRVcGRhdGVkQXQiOiIiLCJ0ZW5hbnQiOnsiaWQiOjIsIm5hbWUiOiJ0ZWNUcmFuc2l0Iiwic2l0ZUlkIjoiOTQiLCJ0aW1lem9uZSI6IkFtZXJpY2EvTG9zX0FuZ2VsZXMiLCJ0eXBlIjoiUmFhUyIsInNlc1VybCI6Imh0dHA6Ly9zdHJhdGVneS1lbmdpbmUtbXVsdGktdGVuYW50LTM6MTYwMDAiLCJkaXNwbGF5TmFtZSI6IlRlYyBUcmFuc2l0In0sInJvbGVzIjpbMjBdLCJpYXQiOjE3NDE5MDU2ODIsImV4cCI6MTc0NDQ5NzY4MiwiaXNzIjoiaXEuc2NoZWR1bGVkcm91dGVzLmRkc3dpcmVsZXNzLm5ldCJ9.fmdXyIylp604DCewvtuKCqLGhh-GFPfJNC9p2v4D-kHxhN2ZmRkHfknpTjiWZOZnB7AnWTUAh6BfZztNR_KLpQDPXcEpNL01lrw7ypIuwIf6CwA3Kwh916mNX-kgvPsyRQvAnvkyd-YO8M6zd_lsVD8oRnb-g07Vta3s3U-Y5uyWnQzv9PEeRf2IizflzlMkM7f1q472_3FQAEmomqMrSreK-YwUP9YxzD-QOW4GaaIUK5pgnzFYgEH2DFNU8KtDPeRdEk1cXL8aACFeawZnYzndvNcuv5fxd-9r-Y4-Tr8NiUwerdhRX3CuD5L5E6JVQdYOUJMFtSVpCbV7smaOJs"
Muista myös käyttää omaa API-käyttäjätunnustasi.
GET-menetelmän vastausskeema:
{
status: "string",
message: "string",
error: "string",
"solution": {
"statistics": {},
"routes": []
"unassigned": [],
}
}
Jos ratkaisu on valmis, statistics, routes, ja unassignedtäytetään saadun ratkaisun perusteella. Muuten, samalla tavalla kuin POST-menetelmässä, status, message, ja errornäyttää tilan tai virheen. Tulostusratkaisun kaava on määritelty ”Ratkaisu”-osiossa.
GET Esimerkki (Windows PowerShell):
Alla oleva komentosarja osoittaa, miten GET-pyyntö tehdään käyttämällä Windows PowerShellin POST-metodin luomaa tunnusta. Se olettaa, että tunnus on tallennettu tiedostoon nimeltä id.txt, ja API-käyttöoikeustunnus tallennetaan token.txtSuorituksen jälkeen luotu vastaus kirjoitetaan kohteeseen response.txtSuorittaaksesi PowerShellin, kirjoita PowerShell Käynnistä-valikkoon tai komentoriville.
$token = Get-Content token.txt -Raw
$id = Get-Content id.txt -Raw
$headers = @{
Authorization = "Bearer $token"
"Content-Type" = "application/json"
}
$url = "https://iq.scheduledroutes.ddswireless.net/raas/optimization/$id"
$response = Invoke-RestMethod -Uri $url -Method Get -Headers $headers
$response | ConvertTo-Json -Depth 10 | Out-File -Encoding utf8 response.txt
GET-tilakoodit #
| Vastauskoodi | Kuvaus | Lisähuomautukset |
|---|---|---|
| 200 | Pyyntö on onnistunut. | Ratkaisu palautetaan kautta statistics, routes, ja unassigned. |
| 202 | Pyyntö hyväksyttiin, mutta sitä ei ole vielä käsitelty. | Tila on odottamassa. Tarkista ratkaisun valmius myöhemmin uudelleen. |
| 400 | Pyyntöä ei voitu käsitellä (Bad Request). | Toteutettavaa ratkaisua ei voitu luoda virheellisten syötteiden tai parametrien vuoksi. |
| 401 | Luvaton pyyntö. | Käyttäjän todennus vaaditaan. Kelvollisia tunnistetietoja ei vastaanotettu. |
| 500 | Sisäinen palveluvirhe. | Jokin meni pieleen meidän puolellamme. Ota yhteyttä support@ddswireless.comKentät, kuten statistics, routes, ja unassigned tulee olemaan tyhjä. |
Käsitteet #
Ratkaise ajoneuvokannan reititys- ja aikataulutusoptimointiongelma seuraavasti:
-
Määrittele ongelma: Aloita hahmottelemalla ongelmasi ”Ongelma”-osiossa määritellyssä muodossa.
-
Lähetä ongelma: Lähetä ongelma API:lle POST-metodilla, kuten ”Aloitus”-osiossa on kuvattu.
-
Ratkaisun hakeminen: Hanki optimointiongelmasi ratkaisu käyttämällä GET-metodia, joka on kuvattu yksityiskohtaisesti ”Aloitus”-osiossa. Ratkaisun muoto on esitetty ”Ratkaisu”-osiossa.
Lisätietoja API:ssa käytetyistä eri terminologioista on osiossa ”Sanasto”. Usein kysyttyjen kysymysten luettelon löydät osiosta ”Usein kysytyt kysymykset”.
Ongelma #
The Ongelma entiteetti edustaa reititys- ja aikataulutusongelmaa. Kuten seuraavassa kuvassa näkyy, se koostuu neljästä pääkomponentista: fleet, jobs, objective, ja configurationNäiden neljän komponentin joukossa fleet ja jobs, ovat pakollisia, kun taas objective ja configuration ovat valinnaisia.

Jos haluat määrittää sijainnin tai osoitteen API:ssa, käytä WGS84-geokoordinaatteja, joiden tarkkuus on vähintään 5 desimaalia.
Jos sinulla on esimerkiksi sellainen osoite kuin “1600 Amphitheatre Parkway, Mountain View, Kalifornia”, sen vastaava maantieteellinen koordinaatti olisi leveysaste
37.423021 ja pituusaste -122.083739Siksi määrität sen joko:
"location": {"lat": 37.423021, "lng": -122.083739} tai [37.423021, -122.083739].
Huomautus:
API käyttää ISO 8601 -muotoa aikaleimoille, mukaan lukien aikavyöhyketiedot, määrittääkseen paikallisen ajan alueelle, jolle tarvitset optimoitua reititystä ja aikataulutusta.
Esimerkki:
2024-07-31T14:45:30-08:00 edustaa 31. heinäkuuta 2024 klo 14.45.30 PST, joka on 8 tuntia UTC-aikaa (Coordinated Universal Time) jäljessä.
Lisäksi syötetyn API-ohjelman hyötykuormassa on käytettävä johdonmukaisesti samaa paikallista aikavyöhykettä. Jos havaitaan useita aikavyöhykkeitä, API palauttaa virheilmoituksen. Aikataulutettujen pysähdysten kellonajat annetaan tulostusvastauksessa samassa muodossa kuin syötetyn API:n hyötykuormassa.
Esimerkki:
Jos määrität 2024-07-31T14:45:30-08:00 syötetyssä hyötykuormassasi myös tulosteen optimoidut reittiajat ovat 2024-07-31T14:45:30-08:00 muoto.
Jos käytät 2024-07-31T14:45:30+05:30 syötteessä, lähtö on 2024-07-31T14:45:30+05:30.
Huom:
Kaikki valinnaiset attribuutit voidaan jättää pois hyötykuormasta. Tyhjät taulukot (esim. []) voidaan käyttää myös valinnaisille attribuuteille, jotka hyväksyvät taulukon.
Huomautus:
Varmista, ettei API:in lähetetyssä datassa ole luottamuksellisia tai henkilökohtaisia tietoja. Vältä esimerkiksi todellisten tunnisteiden, kuten ajoneuvon rekisterikilven numeron, käyttöä ajoneuvon tunnuksena tai työ-/tehtävätunnuksina.
Seuraavassa kuvataan yksityiskohtaisesti kukin näistä osista:
fleet: [pakollinen] se määrittää luettelon ajoneuvoista sekä niihin liittyvät tiedot, kuten vuoroaikataulut, aloitus- ja päättymispaikat, tauot, kapasiteetit ja taidot.
Voit määrittää kullekin ajoneuvolle yhden tai useita vuoroaikatauluja määrittämällä aloitus- ja päättymisajat sekä vastaavat sijainnit. Näiden sijaintien tunnistamiseksi sinun on annettava niiden maantieteelliset koordinaatit, jotka koostuvat leveys- ja pituusasteista.
Jokaisella ajoneuvolla voi olla yksi tai useampi tauko. Voit määrittää jokaiselle tauolle aikaikkunan, jonka aikana se voidaan pitää, sekä tauon paikan ja keston.
Voit määrittää kullekin ajoneuvolle yhden tai useamman kapasiteettityypin sekä kullekin tyypille käytettävissä olevat yksiköt. Ajoneuvon kapasiteetti voidaan esittää moniulotteisilla mittayksiköillä, kuten tilavuudella, massalla tai koolla.
Voit määrittää kullekin ajoneuvolle yhden tai useamman taidon, jotka mahdollistavat sille tiettyjen tehtävien suorittamisen. Voit esimerkiksi määrittää yhden ajoneuvon taidoiksi "hitsauskone" ja "happisäiliö" ja toisen ajoneuvon taidoksi "nostin". Jos työ vaatii nostoa, vain tällä taidolla varustettu ajoneuvo voi palvella sitä. Voit myös asettaa kullekin ajoneuvolle rajoituksia, kuten pysähdysten enimmäismäärän ja enimmäisajomatkan (maileina).
jobs: [pakollinen] se määrittää luettelon tehtävistä, joita määritellyillä ajoneuvoilla on tarkoitus hoitaa fleet objekti. Jokainen työ voi sisältää sarjan tehtäviä, jotka voivat olla vain noutoja, vain toimituksia tai sekä noutoja että toimituksia. "Vierailu"-töissä, joissa meidän on käytävä paikassa suorittamaan työ (esim. korjaukset, modeemin asennus jne.), voit tarkastella niitä toimitustehtävänä kapasiteettitarpeella tai ilman sitä. Voit määrittää kullekin tehtävälle erilaisia ominaisuuksia, kuten sijainnin, aikaikkunat, keston, kapasiteettivaatimukset ja tarvittavat taidot.
Tehtävän sijainnin määrittämiseksi sinun on annettava sen maantieteelliset koordinaatit, jotka sisältävät leveys- ja pituusasteet.
Jos asetat tehtävälle palveluaikaikkunan, optimoija ajoittaa tehtävän tapahtuvan kyseisen aikavälin sisällä. Toisin sanoen tehtävän arvioitu saapumisaika ( ETA ) API-vastauksessa osuu määritetyn aikaikkunan sisälle. Jos optimoija ei löydä tehtävälle sopivaa saapumisaikaa määritetyn aikaikkunan sisällä, tehtävä pysyy määrittämättömänä. Joustaville tai ei-aikaherkille tehtäville voit määrittää laajemman aikaikkunan, jonka enimmäispituus on 24 tuntia. API käyttää ISO-aikaleimoja aiemmin kuvatulla tavalla.
Voit määrittää keston (sekunteina) jokaiselle tehtävälle. Tämä on aika, joka käytetään tietyssä paikassa joko esineen lastaamiseen tai purkamiseen tai tehtävän suorittamiseen.
Voit määrittää kunkin tehtävän kapasiteettivaatimukset käyttämällä moniulotteisia mittayksiköitä, kuten tilavuutta, massaa tai kokoa. Lisäksi voit luoda mukautettuja nimiä kapasiteettityypeille, kuten "paikka", "kontti", "lava" tai "lokero". Voit myös määrittää kullekin kapasiteettityypille tarkalleen tehtävän suorittamiseen tarvittavan määrän.
Voit myös määrittää luettelon kullekin tehtävälle vaadituista taidoista. Vain ajoneuvot, joilla on vastaavat taidot, ovat oikeutettuja suorittamaan kyseisen tehtävän. Jos esimerkiksi määrität tehtävän vaadituiksi taidoiksi "hitsauskone" ja "happisäiliö", vain näillä taidoilla varustetut ajoneuvot valitaan suorittamaan tehtävä.
objective: [valinnainen] määrittää optimoinnin tavoitteen tai strategian. Tällä hetkellä API tukee seuraavia kolmea tavoitetta:
Minimoi kokonaismatka-aika: Tämä on oletusarvoinen optimointistrategia, ja se pyrkii minimoimaan kaluston kokonaismatka-ajan samalla, kun määritetyt työt suoritetaan.
Reittien määrän minimointi: Tämä optimointistrategia keskittyy tiettyjen töiden suorittamiseen tarvittavien ajoneuvojen määrän vähentämiseen. Tämä voi kuitenkin johtaa ajoneuvokannan kokonaismatka-ajan pidentämiseen tai yksittäisten ajoneuvojen suurempaan työmäärään kompromissina.
Työkuorman tasaaminen reittien kesken: Tämä optimointistrategia pyrkii jakamaan työkuorman tasaisesti kaikkien ajoneuvojen kesken. Tämä tasapaino voi kuitenkin johtaa ajoneuvokannan kokonaismatka-ajan kasvuun.
configuration[valinnainen] Määrityksen kautta voit muuttaa API-asetuksia tai muokata oletusasetuksia. Voit esimerkiksi määrittää, sisällytetäänkö API-vastaukseen optimointitilastojen yhteenveto (kuten kokonaismatka-aika ja -etäisyys) vai luettelo määrittämättömistä tehtävistä.
Syöttöpyyntömalli: #
Reittioptimointiongelman ratkaisemiseen tarvittavan syöttöpyynnön kaavio on seuraava:
"problem": {
"fleet": required
[
"shifts": [optional]
"capacities": [required]
"limits": {optional}
"skills" : [optional]
"id": required
"routeTemplateId" : optional
"maxInstances": optional
],
"jobs": required
[
"pickups": [...]
"deliveries": [...]
"id" : required
]
"objective": optional
"configuration": {optional}
"version": optional
}
Jotta voit lähettää ongelman API:n kautta, tämä pyyntö on sisällytettävä POST-metodiin ”Aloitus”-osiossa kuvatulla tavalla.
Reittioptimointiongelmassa ajoneuvokalusto pyrkii palvelemaan tehokkaasti joukkoa tehtäviä. Yllä oleva skeema antaa käyttäjille mahdollisuuden määritellä kalustonsa ja työnsä. API:n nykyisessä versiossa jokainen työ voi olla:
-
Vain noutotehtävät: Nämä tehtävät sisältävät tavaroiden noutamisen reitin varrella ja niiden toimittamisen reitin päätepisteeseen.
-
Vain toimitustehtävät: Nämä tehtävät edellyttävät sellaisten tuotteiden toimittamista, jotka on lastattu ajoneuvoon reitin alussa.
-
Nouto- ja jakelutehtävät (P/D) yhdessä: Näissä tehtävissä yhdistyvät sekä nouto- että toimitustoimenpiteet. Niihin kuuluu jonkin asian noutaminen yhdestä paikasta ja tuominen toiseen paikkaan.
Ongelmaan on tarjottava vähintään yksi työpaikka ja yksi ajoneuvo.
”Vierailu” -töitä, jotka edellyttävät paikan päällä käymistä (esim. korjaukset, modeemiasennukset jne.), kannattaa pitää toimitustehtävinä – kapasiteettivaatimuksella tai ilman.
Lisäksi:
-
Jos työstä on annettu vain "nouto"-objekti, sitä pidetään pelkkää noutoa koskevana työnä.
-
Jos työstä on annettu vain "toimitukset"-objekti, sitä pidetään vain toimituksia koskevana työnä.
-
Kun työn yhteydessä tarjotaan sekä "noutoja" että "toimituksia", se luokitellaan nouto- ja toimitustyöksi.
API tekee ei tukityöt, joissa on useita noutoja ja useita toimituksia.
Toisin sanoen, jos haluat määritellä "nouto- ja toimitus" -työn:
- The
"pickups"taulukon on sisällettävä vain yksi noutotehtävä. - The
"deliveries"taulukon on sisällettävä vain yksi toimitustehtävä.
API ei myöskään tue töitä, joissa ei ole noutoja tai toimituksia .
Luokittelusäännöt:
- Jos vain
"pickups"on määritelty, työ luokitellaan pickup-ankkuroitu Job. - Jos vain
"deliveries"on määritelty, työ luokitellaan toimitusankkuroitu Job. - Jos sekä nouto että toimitus on määritelty, ankkuri on se, joka sisältää palveluikkunan .
- Jos sekä noudolla että toimituksella on palveluikkunat, työtä pidetään nouto-ankkuroituna .
Kullekin tehtävälle voidaan määritellä erilaisia ominaisuuksia ja rajoituksia, kuten kapasiteettivaatimukset, palveluaikaikkunat ja vaadittavat taidot. Käyntitehtävät, joissa on käytävä tietyissä paikoissa suorittamassa tehtäviä (esim. korjauksia), voidaan todellakin nähdä toimitustehtävien erityismuotona (kapasiteettivaatimuksin tai ilman niitä). Tehtävät osoitetaan ajoneuvoille, joiden kapasiteetti tai taidot vastaavat tehtävän vaatimuksia. Jos esimerkiksi tehtävä edellyttää nostinta tai tikkaita, vain nostimella tai tikkailla varustettuja ajoneuvoja käytetään kyseisen tehtävän suorittamiseen.
Tutustutaan nyt tarkemmin API-syötteen hyötykuorman kunkin elementin yksityiskohtiin.
ongelma [pakollinen]: se määrittää ratkaistavan reititys- ja aikataulutusoptimointiongelman. Se koostuu seuraavista määritteistä:
fleet [pakollinen]: se määrittelee fleet-tiedot. Se on fleet-objektien taulukko. Jokainen fleet-objekti koostuu seuraavista ominaisuuksista:
id : [pakollinen] ajoneuvon yksilöllinen tunniste (kokonaisluku).
shifts : [valinnainen] taulukko vuoro-objekteja, joista jokainen vuoro-objekti sisältää tiedot vuoron alkamis- ja päättymispaikoista ja -ajoista sekä taukojen objekteja, joista jokainen sisältää taukojen alkamis- ja päättymispaikat ja -ajat. Useita vuoro-objekteja voidaan määritellä, mutta niiden on oltava erillisiä. Kunkin vuoro-objektin elementit:
start: vuoron aloitusaika ja aloituspaikka
time: [valinnainen]. Se määrittää vuoron aloitusajan. Jos sitä ei määritetä, oletusarvo on kuluvan päivän kello 00:00:00 (keskiyö).
location: [valinnainen]. Se määrittää lähtöpaikan maantieteelliset koordinaatit (leveys- ja pituusasteet). Voit määrittää sen taulukkona, kuten [A,B] jossa A edustaa leveysastetta ja B edustaa pituusastetta. Vaihtoehtoisesti voit määrittää sen muodossa {"lat": A,"lng": B}.
end: vuoron päättymisaika ja päättymispaikka
time: [valinnainen]. Se määrittää vuoron päättymisajan. Jos sitä ei määritetä, oletusarvo on kuluvan päivän kello 23.59.00.
location: [valinnainen]. Se määrittää päätepisteen maantieteelliset koordinaatit (leveys- ja pituusasteet). Voit määrittää sen taulukkona, kuten [A,B] jossa A edustaa leveysastetta ja B edustaa pituusastetta. Vaihtoehtoisesti voit määrittää sen muodossa {"lat": A,"lng": B}.
breaks: [valinnainen] tauko-objektien taulukko
serviceWindow: [pakollinen, jos käytetään taukoja]: ajanjakso, jonka aikana tauko voi tapahtua
duration: [pakollinen, jos taukoja käytetään]: kokonaisluku, joka määrittää tauon keston sekunteina
location: [valinnainen]: tauon sijainti. Voit määrittää sen taulukkona, kuten [A,B] jossa A edustaa leveysastetta ja B edustaa pituusastetta. Vaihtoehtoisesti voit määrittää sen muodossa {"lat": A,"lng": B}.Sijainti on valinnainen. Jos sijainti jätetään pois, tauko on "kelluva", mikä tarkoittaa, että kuljettaja voi pitää tauon missä tahansa hänelle sopivana ajankohtana.
Esimerkki:
"shifts": [{
"start": {
"time": "2020-07-04T09:00:00-08:00",
"location": {"lat": 52.46642, "lng": 13.28124}
},
"end": {
"time": "2020-07-04T18:00:00-08:00",
"location": [54.21981, 14.01237]
},
"breaks": [
{
"serviceWindow": ["2020-07-04T12:00:05-08:00","2020-07-04T14:05:05-08:00"],
"duration": 1200,
"location": {"lat": 53.70645, "lng": 12.34156}
},
{
"serviceWindow": ["2020-07-04T16:00:00-08:00","2020-07-04T16:45:00-08:00"],
"duration": 600,
"location": {"lat": 51.46642, "lng": 12.28124}
}
]
}]
kapasiteetit : [pakollinen] taulukko kapasiteettiobjekteja. Jokainen kapasiteettiobjekti on avain-arvo-objekti, joka on määritelty seuraavilla avaimilla:
name: [pakollinen] merkkijono, joka määrittää kapasiteettityypin nimen (esim. ”pyörätuoli”, ”laatikko”, ”istuin”, ”roska-astia”)
units[pakollinen] kokonaisluku, joka määrittää kapasiteettityypin käytettävissä olevat yksiköt
Jos ajoneuvoon mahtuu esimerkiksi 2 istumapaikkaa ja 20 pakettia, voit määrittää sen kapasiteetin seuraavasti:
"capacities": [
{
"name": "seat",
"units": 2,
},
{
"name": "package",
"units": 20,
}
]
taidot : [valinnainen] luettelo ajoneuvon taidoista tai varusteista, joista kutakin edustaa sovelluksellesi ominainen mielivaltainen merkkijono. Näin voit mukauttaa ajoneuvojesi ominaisuuksia vastaamaan niiden tehtävien vaatimuksia, joita ne tarvitsevat. Esimerkki:
"skills": ["lift","fridge","oxygen tank"]
rajoitukset : [valinnainen] määrittää ajoneuvoon sovellettavat rajoitukset
maxDistance[valinnainen] kokonaisluku, joka määrittää ajoneuvon enimmäisajomatkan maileina
maxStops[valinnainen] kokonaisluku, joka määrittää ajoneuvon yhden vuoron aikana suoritettavien pysähdysten (nouto- tai toimitustehtävien) enimmäismäärän
lifoDepth[valinnainen] kokonaisluku, joka määrittää ajoneuvon LIFO-syvyyden (Viimeisenä sisään, ensin ulos)
"limits": {
"lifoDepth" : 1,
"maxDistance": 3000,
"maxStops" : 20,
}
lastKnownLocation: [valinnainen, käytetään vain uudelleenoptimointiin] Määrittää ajoneuvon viimeisen tunnetun sijainnin määritettynä ajankohtana. Tämä tieto on ratkaisevan tärkeää meneillään olevan reitin uudelleenoptimoimiseksi uusien muutosten, kuten rikkoutuneiden ajoneuvojen, myöhästyneiden töiden, uusien töiden tai peruutettujen töiden, huomioon ottamiseksi. API käyttää tätä tietoa suunnitelman tehokkaaseen uudelleenoptimointiin. Siksi, kun optimoit olemassa olevaa aikataulua uudelleen, sinun on annettava kaikkien mukana olevien ajoneuvojen sijainti.
Esimerkki:
"lastKnownLocation": {
"location": {"lat":53.45612, "lng":12.65421},
"time" : "2020-07-04T12:00:05-08:00"
}
routeTemplateId: [valinnainen] Tämä on yksilöivä tunniste, jota käytetään reittimallin määrittämiseen. API tukee reittimallien käsitettä, jonka avulla voit määrittää tietyn ajoneuvotyypin tiedot ja pyytää API:a luomaan tietyn määrän tällaisia ajoneuvoja reitityksen ja aikataulutuksen optimointia varten. Reittimalli sisältää samat tiedot kuin reitti tai ajoneuvo, mutta voit määrittää sille "koko"-parametrin nimeltä maxInstances. Oletetaan esimerkiksi, että sinulla on 100 ajoneuvoa. Voit määrittää 2 tai 3 reittimallia:
- Vuoro klo 6-18, kapasiteetti 4, koko = 60
- Vuoro klo 13-01, kapasiteetti 4, koko = 50
- Vuoro klo 6-20, kapasiteetti 10, koko = 35
Tämä tarkoittaa sitä, että API voi tarvittaessa luoda automaattisesti jopa 60 ajoneuvoa mallin 1 avulla, 5 ajoneuvoa mallin 2 avulla ja 35 ajoneuvoa mallin 3 avulla.
maxInstances: [valinnainen] Jos routeTemplateId on tarjottu, maxInstances määrittää, kuinka monta reittimallia tulisi luoda määritetyn reittimallin perusteella.
Seuraavat säännöt pätevät reittejä määritettäessä käyttämällä
id, routeTemplateId, ja maxInstances:
Tasan yksi jostakin id tai routeTemplateId on käytettävä – ei koskaan molempia.
id ja maxInstances ei voi käyttää yhdessä.
Jos molemmat routeTemplateId ja maxInstances tarjotaan, API käyttää reittimallin malli reittien luomiseksi.
jobs : työobjektien taulukko [vähintään yksi työ vaaditaan]:
id: [pakollinen] työn yksilöllinen tunniste (kokonaisluku)
noutotehtävät : [valinnainen] tehtäväobjektien taulukko, joista jokainen määrittää noutotehtävän
delive rie s : [valinnainen] tehtäväobjektien taulukko, joista jokainen määrittelee toimitus- (tai jättö-)tehtävän
API:lla on tiukat säännöt työtehtävien nouto- ja toimitusmäärityksille:
- API ei tue töitä, joissa on useita noutoja ja toimituksia .
- API ei tue töitä, joissa ei ole noutoja eikä toimituksia .
- Jos vain
"pickups"on määritelty, työ luokitellaan nouto-ankkuroitu työ. - Jos vain
"deliveries"on määritelty, työ luokitellaan toimitusankkuroitu työ. - Jos työhön kuuluu sekä nouto että toimitus, ankkuri määräytyy palveluikkunan määrittävän tehtävän mukaan.
- Jos molemmilla tehtävillä on palveluikkunat, työtä käsitellään nouto-ankkuroituna työnä .
Jokainen tehtäväobjekti koostuu seuraavista ominaisuuksista:
tunnus : [pakollinen] tehtävän yksilöllinen tunniste (kokonaisluku)
sijainti : [pakollinen] Se on avain-arvo-objekti, joka määrittää tehtävän suorituspaikan maantieteelliset koordinaatit (leveys- ja pituusasteet). Voit määrittää sen taulukkona, kuten [A,B] jossa A edustaa leveysastetta ja B edustaa pituusastetta. Vaihtoehtoisesti voit määrittää sen muodossa {"lat": A,"lng": B}.
Esimerkki:
"location": {"lat": 52.46642, "lng": 13.28124}
"location": [52.46642, 13.28124]
palveluWindows : [valinnainen tai pakollinen käyttötapauksesta riippuen, katso yllä oleva noutojen ja toimitusten määritelmä] Se määrittää tehtävän suorittamisen aikaikkunan. Palveluikkuna on taulukko, jonka muoto on seuraava: [A, B] jossa A ja B ovat palveluaikaikkunan alkamis- ja päättymisajat. API yrittää tuottaa arvioidun saapumisajan kyseiselle tehtävälle määritetyn palveluaikaikkunan sisällä. Jos tämä ei ole mahdollista, tehtävä listataan määrittämättömäksi. Toisin sanoen ajat "A" ja "B" määrittävät aikaisimman ja myöhäisimmän ajan, johon mennessä ajoneuvon on suoritettava tehtävä. Joustaville tai ei-aikaherkille tehtäville käytä mielivaltaisen suurta aikaikkunaa (enintään 24 tuntia), jotta API:lla on enemmän joustavuutta muiden tehtävien aikatauluttamisessa. API:n nykyinen versio tukee vain yhtä palveluaikaikkunaa kutakin tehtävää kohden.
Vain noutoja ja vain toimituksia koskevissa tehtävissä palveluikkuna on pakollinen. Esimerkki:
"serviceWindows": ["2024-08-30T09:00:00-08:00",
"2024-08-30T21:00:00-08:00"]
duration : [pakollinen] Määrittää tehtävän keston sekunteina. Se voi olla joko kokonaisluku tai avain-arvo-objekti, jossa on seuraavat avaimet:
"fixed": tehtävän kiinteä kesto (sekunteina) (esim. pysäköintipaikan löytäminen, nostimen laskeminen jne.)
"service": työn suorittamiseen kuluva palvelun kesto (sekunteina).
Esimerkkejä:
"duration": 1950
OR
"duration": {"fixed":150, "service": 1800}
demand : [valinnainen] tehtävän kapasiteettivaatimusten taulukko. Kunkin kysyntäobjektin rakenne on identtinen yllä määritellyn laivasto-entiteetin kapasiteettiobjektin rakenteen kanssa. Jokainen kapasiteettielementti koostuu nimestä (merkkijono) ja sen käytettävissä olevista yksiköistä (kokonaisluku). Määritettyjen nimien on vastattava laivasto-entiteetin kapasiteettiobjektissa määriteltyjä nimiä. Jos esimerkiksi työ vaatii kapasiteettia kahdelle paikalle ja 20 paketille, määrittelet kysynnän seuraavasti:
"demand": [
{
"name": "seat",
"units": 2,
},
{
"name": "package",
"units": 20,
}
]
taidot : [valinnainen] joukko tehtävän suorittamiseen tarvittavia taitoja tai laitteita, joista kutakin edustaa sovelluksellesi ominainen mielivaltainen merkkijono. Vain ajoneuvot, joiden taidot vastaavat tehtävän taitojoukkoa, otetaan huomioon tehtävän suorittamisessa. Nämä taidot vastaavat yllä määritellyssä kalustoyksikössä määriteltyjä taitoja. Esimerkki:
"skills": ["lift", "ladder", "welding machine"]
tila : [valinnainen, käytetään vain uudelleenoptimointiin] Tämä on merkkijono, joka määrittää tehtävän tilan, joka voi olla yksi seuraavista vaihtoehdoista: "pending", "in_progress", "performed"Nämä tiedot ovat ratkaisevan tärkeitä meneillään olevan reitin uudelleenoptimoinnissa uusien muutosten, kuten rikkoutuneiden ajoneuvojen, myöhästyneiden töiden, uusien töiden tai peruutettujen töiden, huomioon ottamiseksi. API käyttää näitä tietoja suunnitelman tehokkaaseen uudelleenoptimointiin. Siksi, kun optimoit olemassa olevaa aikataulua uudelleen, sinun on määritettävä tämän attribuutin arvo. Uusille tehtäville tai tehtäville, joita ei ole vielä suoritettu, aseta se arvoon "pending"Jos tehtävä on jo suoritettu, aseta se arvoon "performed"Jos ajoneuvo on jo saapunut tehtävän suorittamispaikkaan ja tehtävä on käynnissä, aseta se tilaan "in_progress"Oletusarvo on "pending".
Esimerkki: "status": "pending"
vehicleId : [valinnainen, käytetään vain uudelleenoptimointiin], määrittää jo ajoitettujen tehtävien ajoneuvotunnuksen (kokonaisluku). Tämä tieto on ratkaisevan tärkeää meneillään olevan reitin uudelleenoptimoimiseksi uusien muutosten, kuten rikkoutuneiden ajoneuvojen, myöhästyneiden töiden, uusien töiden tai peruutettujen töiden, huomioon ottamiseksi. API käyttää tätä tietoa suunnitelman tehokkaaseen uudelleenoptimointiin. Siksi, kun optimoit olemassa olevaa aikataulua uudelleen, sinun on määritettävä tämän attribuutin arvo. Oletusarvo on nolla. Uusille tehtäville aseta se nollaksi. Olemassa oleville tehtäville, jotka on jo liitetty ajoneuvoon, aseta tämä attribuutti liitettyyn ajoneuvotunnukseen.
Esimerkki: "vehicleId": 12
eta : [valinnainen, käytetään vain uudelleenoptimointiin], määrittää jo aikataulutettujen töiden nykyisen ETA:n (arvioidun saapumisajan). Tämä tieto on ratkaisevan tärkeää meneillään olevan reitin uudelleenoptimoimiseksi uusien muutosten, kuten rikkoutuneiden ajoneuvojen, myöhästyneiden töiden, uusien töiden tai peruutettujen töiden, huomioon ottamiseksi. API käyttää tätä tietoa suunnitelman tehokkaaseen uudelleenoptimointiin. Siksi, kun optimoit olemassa olevaa aikataulua uudelleen, sinun on määritettävä tämän attribuutin arvo. Oletusarvo on 0. Aseta uusille tai suoritetuille tehtäville arvoksi 0, mutta olemassa oleville odottaville tehtäville aseta se olemassa olevaan ETA:an.
Esimerkki: "eta": "2021-07-04T12:13:00-08:00"
tavoite : [valinnainen] kokonaisluku, joka määrittää optimoinnin tavoitteen (strategian): (oletus = 1)
1: Minimoi kokonaismatka-aika [oletus]
2: Minimoi reittien määrä
3Tasapainota työkuorma reittien kesken
Esimerkki: "objective": 1
kokoonpano: [valinnainen] sitä voidaan käyttää joidenkin lisäasetusten tai -kokoonpanojen määrittämiseen:
polylineType: [valinnainen] määrittää kullekin ajoitetulle reitille palautettavan tulosteen polyline-tyypin. Se on merkkijono, joka on jokin seuraavista vaihtoehdoista: "none", "plain", "encoded"Jos "none"on valittuna, lähtö-API-vastaukseen ei sisällytetä polylinejä. Jos "plain" on määritetty, palautetaan järjestetty luettelo risteyksistä, jotka on kuljettava kunkin peräkkäisen pysähdysparin välillä, polyline-funktiona. Jos "encoded" käytetään, polyline pakataan merkkijonomuotoon, jonka käyttäjät voivat antaa kolmannen osapuolen navigointi-API-rajapinnoille, kuten Google Mapsille, saadakseen käännöskohtaiset ohjeet. Oletusarvo on "none".
unassignedTasks: [valinnainen] Tämä on merkintä, joka määrittää, sisällytetäänkö määrittämättömät tehtävät tulosvastaukseen vai ei. Oletusarvo on False. Jos API ei jostain syystä voi määrittää tehtävää reitille, se listaa sen määrittämättömäksi.
tilastot: [valinnainen] tämä on merkintä, joka määrittää, sisällytetäänkö optimointitilastot tulosratkaisuun vai ei. Oletusarvo on True.
yksiköt: [valinnainen] se määrittää tulostilastojen yksiköt sekä laivaston rajoitusten yksiköt. Se voi olla joko "metric" tai "imperial"Oletusarvo on "metric".
maxRideTable: [valinnainen] määrittää kaikkien töiden enimmäisajan. Se määritellään staattisella taulukolla, jonka jokainen rivi on joukko, joka sisältää kolme aika-arvoa (minuutteina): [A, B, C]. Tämä tarkoittaa sitä, että jos työn suora matka-aika on välillä A ja B, enimmäisaika laivalla on yhtä suuri kuin "rideTime+C". Tässä on esimerkiksi yksinkertainen taulukko, jossa on kaksi riviä: "maxRideTable":[[0, 10, 30], [11, 20, 40]]. Oletusarvo on [[0, 300, 720]]. Päällekkäisyyttä ja aukkoja ei sallita tässä taulukossa. Myös rakeisuus on minuuttia.
vechicleCapacities: [valinnainen] Ajoneuvojen kapasiteettimääritykset voidaan nimetä ja käyttää sitten kalusto-osassa. Tämä on erityisen hyödyllistä monimutkaisissa määritelmissä, kun ajoneuvolla voi olla useita kokoonpanoja. Esimerkiksi jos ajoneuvoon mahtuu joko (10 ambulatorista ja 0 pyörätuolimatkustajaa) TAI (8 ambulatorista ja 1 pyörätuolimatkustaja), voit määritellä seuraavasti "vehicleCapacities":{"flexBus": [[{"name": "ambulatory", "units": 10}], [{"name": "ambulatory", "units": 8},{"name":"wheelchair", "units": 1}]]}. Ja sitten laivaston ominaisuudessa voit käyttää fleet[<index>].capacities: "flexBus" jokaiselle kaluston flexBus-linja-autolle. Nimetyt ajoneuvokapasiteetit voidaan myös tallentaa henkilökohtaiseen asiakasprofiiliisi, jossa ne ovat käytettävissä ilman, että niitä tarvitsee määritellä konfigurointiosiossa. Jos nimetty ajoneuvokapasiteetti on sekä henkilökohtaisessa profiilissasi että hyötykuormassa, hyötykuormassa oleva määritelmä on ensisijainen.
freezeWindowLength: [valinnainen] Jäädytysikkunan pituus minuutteina. Pysäytysikkuna on käsite, jota sovelletaan vain saman päivän optimointiin, ja se on hyödyllinen, kun ongelmaa optimoidaan uudelleen. Jos olet esimerkiksi jo optimoinut ongelman, mutta haluat tehdä muutoksia keskellä päivää, voit lähettää ongelman uudelleen (asianmukaisella task.status-toiminnolla, joka kuvastaa sitä, mitä on jo tehty) ja asettaa 60 minuutin pituisen freeze window -ikkunan. Tämä kertoo optimoijalle, että 60 minuuttia "nyt"-hetkestä jatkuva ajanjakso on kielletty. Tehtäviä ei voi lisätä/poistaa miltään reitiltä jäädytysikkunan aikana.
lifoConstrainedCapacities: [valinnainen] Joukko kapasiteettityyppejä, joihin sovelletaan LIFO-rajoitusta (Last In, First Out). Esimerkki: "lifoConstrainedCapacities": ['wheelchair', 'scooter']
Esimerkki:
"configuration":
{
"polylineType": "plain",
"unassignedTasks": False,
"statistics": True,
}
versio: [valinnainen]: määrittää API:n version. Oletusarvo on 1.0.
Nähdäksesi erilaisia esimerkkejä
Problem ja opi käyttämään API:a eri käyttötapauksissa (esim. uudelleenoptimointi), katso Oppaat.Huom:
1. Yksilölliset tunnisteet
-
- Kaikilla työpaikoilla on oltava yksilölliset tunnukset.
- Kaikilla tehtävillä on oltava yksilölliset tunnukset.
- Kaikilla ajoneuvoilla on oltava yksilölliset tunnisteet.
- Työ voi jakaa tunnuksensa tehtävän tai ajoneuvon kanssa – tämä on sallittua.
2. Aikarajoitukset
Jokainen ongelma voi sisältää useita aikaan liittyviä elementtejä, kuten tehtävien palveluikkunat ja ajoneuvovuorot.
API määrittää vähimmäisajan kaikille arvoille. Esimerkiksi, jos vähimmäisaika on:
2024-09-18T04:32:00-08:00Maksimi lasketaan seuraavasti:
- Keskiyön löytäminen päivänä, jolloin minimi on läsnä.
- Lisätään tuohon aikaleimaan 33 tuntia.
Joten tässä esimerkissä sallittu enimmäisaika on:
2024-09-19T09:00:00-08:00Jos ongelman jokin aika (esim. ajoneuvon vuoro tai tehtäväikkuna) ylittää tämän, API palauttaa 400 virhe.
Ratkaisu #
Kuten ”Aloitus”-osiossa selitettiin, kun lähetät ongelman POST-metodilla, saat yksilöllisen viitenumeron. Voit käyttää tätä viitenumeroa GET-metodin kanssa hakeaksesi lähetetyn ongelman tilan. Jos optimointiratkaisu on valmis, voit käyttää sitä kohdassa "solution" vastaanotetun vastauksen kokonaisuus. Kuten seuraavassa kuvassa näkyy, "solution" kokonaisuus koostuu kolmesta pääosasta:
"statistics": se sisältää erilaisia tilastoja (mittareita), jotka antavat yleiskuvan koko ratkaisusta kaikilla reiteillä, jolloin voit arvioida sen tehokkuutta. Näihin mittareihin kuuluu esimerkiksi kaikkien optimoitujen reittien kokonaismatka. Analysoimalla näitä tilastoja voit mitata tuotetun ratkaisun laatua ja tehokkuutta. Nämä tiedot auttavat ymmärtämään optimointiprosessin suorituskykyä ja vaikutusta.
"routes": se sisältää optimoidut reitit sekä niiden pysähdykset ja arvioidun saapumisajan (ETA). Se voi sisältää myös kunkin reitin polyline-kaavion.
"unassigned": se sisältää luettelon määrittämättömistä tehtävistä. Jos API ei voi määrittää tehtävää reitille optimointiprosessin aikana, se listataan määrittämättömäksi. Lisäksi se voi sisältää syitä sille, miksi kutakin tehtävää ei ole määritetty, mikä antaa tietoa mahdollisista rajoituksista tai ongelmista, jotka estivät niiden määrittämisen.

Tulosteen ratkaisukaavio: #
Optimointiongelman ratkaisun malli, joka annetaan API:n tulostusvastauksessa, on seuraava:
"solution": {
"statistics": {},
"routes": []
"unassigned": [],
}
The "solution" entiteetti edustaa reitin optimointiongelman ratkaisua, joka koostuu seuraavista ominaisuuksista:
tilastot : se sisältää koko ratkaisun tilastot ja koostuu seuraavista ominaisuuksista:
"etäisyys":
”totalDistance”: koko ajoneuvokannan kulkema kokonaismatka. Tämä mitta sisältää etäisyyden kunkin ajoneuvon lähtöpaikasta määränpäähän.
'revenueDistance': koko laivaston kulkema kokonaismatka tuloihin. Tähän mittaukseen sisältyy kunkin ajoneuvon matka ensimmäiseltä pysäkiltä viimeiselle pysäkille. Se ei sisällä etäisyyttä ajoneuvon lähtöpaikasta ensimmäiseen pysäkkiin eikä etäisyyttä viimeisestä pysäkistä ajoneuvon päätepysäkkiin.
"ajoneuvot":
"käytetty": Käytettyjen ajoneuvojen määrä ratkaisussa aikataulutettujen töiden/tehtävien suorittamiseen.
"käyttämätön": Käyttämättömien ajoneuvojen määrä
"työpaikat":
"scheduledTasks": aikataulutettujen tehtävien määrä
"unassignedTasks": Tehtävien määrä, joita ei ole osoitettu
"times":
'totalHours': koko laivaston kokonaismatkatunnit. Tähän mittaukseen sisältyy aika, joka kuluu kunkin ajoneuvon lähtöpaikasta sen määränpäähän.
'revenueHours': koko laivaston kulkemien tulotuntien kokonaismäärä. Tähän mittaukseen sisältyy kunkin ajoneuvon ensimmäisestä pysähdyksestä viimeiseen pysähdykseen kulunut aika. Se ei sisällä aikaa, joka kuluu ajoneuvon lähtöpaikalta ensimmäiselle pysäkille tai viimeiseltä pysäkiltä ajoneuvon päätepysäkille.
Esimerkki:
"statistics": {
"distance": {
"totalDistance": 42,
"revenueDistance": 25
},
"vehicles": {
"used": 2,
"unused": 0
},
"jobs": {
"scheduledTasks": 3,
"unassignedTasks": 0
},
"times": {
"totalHours": 11.6,
"revenueHours": 10.8
}
}
reitit : se tarjoaa taulukon kunkin ajoneuvon aikataulutetuista reiteistä. Jokainen aikataulutettu reitti sisältää seuraavat tiedot:
'vehicleId': kokonaisluku, joka määrittää osoitetun ajoneuvon tunnuksen.
” shifts ” : taulukko vuoro-objekteja. Huomaa, että API tukee useita vuoroja jokaiselle ajoneuvolle. Jokainen vuoro-objekti koostuu seuraavista elementeistä:
"index": siirtymän indeksi (kokonaisluku).
”pysähdykset”: se tarjoaa taulukon kaikista ajoneuvon suorittamista pysähdyksistä tässä vuorossa. Jokaisella pysähdyksellä on seuraavat ominaisuudet:
"ordinaali": Pysäkin asema ajoneuvoaikataulussa, jota edustaa sen indeksi (kokonaisluku).
"jobId": Työn tunnus, joka liittyy tähän pysäkkiin (kokonaisluku).
"taskId": Tehtävän tunnus, joka liittyy tähän pysäkkiin (kokonaisluku).
"type": Tehtävän tyyppi (merkkijono), joka on suoritettava tällä pysäkillä ("nouto" tai "toimitus").
"sijainti": Pysäkin sijainnin maantieteelliset koordinaatit.
"eta": Pysäkin arvioitu saapumisaika (ETA) (samalla aikavyöhykkeellä kuin syötetty hyötykuorma).
”timeToNext”: Tämä on ajoaika seuraavalle pysäkille. Jos esimerkiksi jätät matkustajan kyytiin klo 9.00 ja seuraava työmatkasi on klo 10.00, tämä tilasto kertoo, että ajoaika nykyisestä pysäkiltä seuraavalle pysäkille on 20 minuuttia.
”distanceToNext”: Tämä on ajoetäisyys seuraavaan pysäkkiin. ”Asetuksessa” valituista yksiköistä riippuen tämä voi edustaa maileja tai metrejä.
”odotusaika”: odotusaika kertoo, kuinka kauan kuljettajan on odotettava seuraavalla pysäkillä, jos hän aloittaa ajamisen nyt.
"polyline": Pysäkki ja sitä edeltävä pysäkki yhdistävä polyline. Jos "plain" polyline on määritetty "configuration"-kentässä, polyline on järjestetty luettelo risteyksistä, jotka on kuljettava edellisen pysäkin ja nykyisen pysäkin välillä. Jos "konfiguraatiossa" on määritetty "koodattu" polyline, tavallinen polyline koodataan ja palautetaan koodattuna merkkijonona.
"break": jos aikataulun mukainen pysähdys on taukoa varten, se edustaa tauon tunnusta. Muilla pysähdyksillä ei ole tätä elementtiä. API ei edellytä, että tauot (tai työt) luetellaan aikajärjestyksessä.
Esimerkki:
"routes": [
{
"vehicleId": 1,
"shifts": [
{
"index": 1,
"stops": [
{
"break": 1,
"start": "2023-10-01T10:00:00-08:00",
"end": "2023-10-01T10:15:00-08:00",
"timeToNext": 15,
"distanceToNext": 7.3,
"waitTime": 0,
"polyline": null,
"ordinal": 1
},
{
"jobId": 4,
"taskId": 5,
"type": "pickup",
"location": [
50.70816,
-120.37796
],
"eta": "2023-10-01T10:30:00-08:00",
"timeToNext": 13,
"distanceToNext": 5.6,
"waitTime": 112,
"polyline": null,
"ordinal": 2
},
{
"jobId": 4,
"taskId": 6,
"type": "delivery",
"location": [
50.66559,
-120.36924
],
"eta": "2023-10-01T12:45:00-08:00",
"timeToNext": 4,
"distanceToNext": 1.7,
"waitTime": 71,
"polyline": null,
"ordinal": 3
},
{
"break": 2,
"start": "2023-10-01T14:00:00-08:00",
"end": "2023-10-01T14:15:00-08:00",
"timeToNext": 7,
"distanceToNext": 3.2,
"waitTime": 217,
"polyline": null,
"ordinal": 4
}
]
}
]
},
{
"vehicleId": 2,
"shifts": [
{
"index": 1,
"stops": [
{
"break": 1,
"start": "2023-10-01T11:00:00-08:00",
"end": "2023-10-01T11:15:00-08:00",
"timeToNext": 3,
"distanceToNext": 1.2,
"waitTime": 267,
"polyline": null,
"ordinal": 1
},
{
"jobId": 10,
"taskId": 11,
"type": "pickup",
"location": [
50.65187,
-120.40052
],
"eta": "2023-10-01T15:45:00-08:00",
"timeToNext": 12,
"distanceToNext": 6.4,
"waitTime": 0,
"polyline": null,
"ordinal": 2
},
{
"jobId": 10,
"taskId": 12,
"type": "delivery",
"location": [
50.69262,
-120.35412
],
"eta": "2023-10-01T16:22:00-08:00",
"timeToNext": 6,
"distanceToNext": 2.7,
"waitTime": 91,
"polyline": null,
"ordinal": 3
}
]
}
]
}
]
määrittämätön : Valinnainen määrittämättömien tehtävien luettelo sisältää tehtäviä, joita ei voida määrittää tiettyjen rajoitusten vuoksi. Jokainen kohta koostuu työtunnuksesta, tehtävätunnuksesta ja mahdollisista määrittämättä jättämisen syistä (koodi ja kuvaus):
"id":
"job": määrittelemättömän tehtävän työn tunnus (kokonaisluku).
"task": määrittämättömän tehtävän tunnus (kokonaisluku).
” syy ”: joukko mahdollisia syitä sille, miksi tehtäviä ei ole määritetty
"code": mahdollisen syyn koodi (kokonaisluku).
"description": Mahdollisen syyn kuvaus (merkkijono).
{
"unassigned": [
{
"id": {
"job": 2,
"task": 1
},
"reason": [
{
"code": 2,
"description": "Not enough capacity for this job"
}
]
},
{
"id": {
"job": "31",
"task": "2"
},
"reason": [
{
"code": 5,
"description": "The service time of the job is out of the shift hours"
}
]
}
]
}
Sanasto #
|
|---|
Opastusvideot #
Tältä sivulta löydät useita esimerkkejä, joissa näytetään, miten API:ta käytetään eri skenaarioissa. API tukee pääasiassa kahta pääkäyttötarkoitusta:
-
Suunnittelu ja aikataulutus: Tuottaa optimoidun aikataulun ajoneuvokannan matkoille ottaen huomioon työtehtäviin ja ajoneuvoihin liittyvät rajoitukset.
-
Uudelleenoptimointi: Muuttaa olemassa olevaa tai käynnissä olevaa aikataulua vastaamaan muutoksia, kuten uusia töitä tai peruutuksia sekä rikkoutuneita ajoneuvoja.
Tutustu annettuihin esimerkkeihin nähdäksesi, miten nämä käyttötapaukset toteutetaan:
Esimerkki 1: Yksinkertaisen nouto- ja toimitusskenaarion (drop-off) suunnittelu
Esimerkki 2: Yksinkertainen uudelleenoptimointiskenaario uusien töiden lisäämiseksi olemassa olevaan aikatauluun.
Esimerkki 3: Uudelleenoptimointi peruutettujen töiden kanssa
Esimerkki 4: Uudelleenoptimointi rikkinäisten ajoneuvojen kanssa
Seuraavissa esimerkeissä mainitut paikat ovat kuvitteellisia ja satunnaisesti luotuja, eivätkä ne vastaa todellisia paikkoja.
Esimerkki 1: Yksinkertaisen nouto- ja toimitusskenaarion suunnittelu #
Tässä esimerkissä kalustossamme on 2 ajoneuvoa, ja meillä on 3 nouto- ja jakelutehtävää, jotka näiden kahden ajoneuvon on hoidettava. Seuraavassa on kunkin ajoneuvon tiedot:
Ajoneuvo 1:
Vuoron tiedot: Vuoro alkaa 1.10.2024 klo 8.00 PST sijainnista (50.67293, -120.34195) ja päättyy klo 18.00 samassa sijainnissa. Huomaa, että aikavyöhyke on PST, joten aloitusajaksi tallennetaan 2024-10-01T08:00:00-08:00, ja lopun aika tulee olemaan 2024-10-01T18:00:00-08:00.
Tauot: Ajoneuvossa on kaksi 15 minuutin mittaista taukoa:
Ensimmäinen tauko: Klo 10.00 ja 10.30 välillä sijainnissa (50.6531, -120.38393).
Toinen tauko: Klo 14.00 ja 14.30 välillä sijainnissa (50.6531, -120.38393).
Kapasiteetti: 15 istumapaikkaa ja 5 rahtipaikkaa.
Taidot: Varustettu hissillä ja ilmastoinnilla.
Ajoneuvo 2:
Vuoron tiedot: Vuoro alkaa 2024-10-01 klo 8:00 AM PST paikasta (50.7117, -120.39286) ja päättyy klo 18:00 paikassa (50.67698, -120.32012).
Tauot: Ajoneuvolla on yksi 15 minuutin tauko:
Tauko: klo 11:00-11:30 paikassa (50.6531, -120.38393).
Kapasiteetti: 10 istumapaikkaa ja 8 rahtipaikkaa.
Taidot: Varustettu vain hissillä.
Meillä on myös kolme "nouto- ja jakelutehtävää" Kamloopsissa, BC:ssä, Kanadassa. Tässä ovat kunkin työn yksityiskohdat:
Työ 1:
Noutopaikka: Sijainti (50.65391, -120.37365)
Palveluaika: klo 9.00–9.30 (työ on noutosidonnainen, ja nouto on suoritettava tämän aikaikkunan sisällä)
Kesto: 10 minuuttia
Vaatimukset: 1 istuin, 2 tavaratilaa, nostin ajoneuvossa
Toimitus: Sijainti (50.69409, -120.35425)
Kesto: Kesto: 5 minuuttia
Työ 2:
Noutopaikka: Sijainti (50.70816, -120.37796)
Kesto: 5 minuuttia
Vaatimukset: 1 istuin, ajoneuvo, jossa on sekä nostolaite että ilmastointi
Toimitus: Sijainti (50.66559, -120.36924)
Palveluikkuna: 12.45–13.30 (työ on toimitusankkuroitu, ja toimitus on suoritettava tämän aikaikkunan sisällä)
Kesto: 5 minuuttia
Työ 3:
Noutopaikka: Sijainti (50.70393, -120.37263)
Palveluaika: klo 14.00–14.30 (työ on noutosidonnainen, ja nouto on suoritettava tämän aikaikkunan sisällä)
Kesto: 10 minuuttia
Vaatimukset: 1 istuin, 3 tavaratilaa, ei erityisvarusteita vaadita
Toimitus: Sijainti (50.69028, -120.39028)
Kesto: Kesto: 5 minuuttia
Tavoitteenamme on jakaa nämä työt määritellyille ajoneuvoille siten, että kokonaismatka-aika minimoidaan. Toisin sanoen optimointitavoitteemme on yhtä suuri kuin 1. Luodaan nyt syöttöongelmamme seuraavasti:
Syöttöongelma (hyötykuorma):
{
"problem": {
"fleet": [
{
"id": 1,
"shifts": [
{
"start": {
"time": "2023-10-01T08:00:00-08:00",
"location": {
"lat": 50.67293,
"lng": -120.34195
}
},
"end": {
"time": "2023-10-01T18:00:00-08:00",
"location": {
"lat": 50.67293,
"lng": -120.34195
}
},
"breaks": [
{
"serviceWindow": [
"2023-10-01T10:00:00-08:00",
"2023-10-01T10:30:00-08:00"
],
"duration": 900,
"location": {
"lat": 50.6531,
"lng": -120.38393
}
},
{
"serviceWindow": [
"2023-10-01T14:00:00-08:00",
"2023-10-01T14:30:00-08:00"
],
"duration": 900,
"location": {
"lat": 50.6531,
"lng": -120.38393
}
}
]
}
],
"capacities": [
{
"name": "seat",
"units": 15
},
{
"name": "cargo",
"units": 5
}
],
"skills": [
"lift",
"air_conditioner"
]
},
{
"id": 2,
"shifts": [
{
"start": {
"time": "2023-10-01T08:00:00-08:00",
"location": {
"lat": 50.7117,
"lng": -120.39286
}
},
"end": {
"time": "2023-10-01T18:00:00-08:00",
"location": {
"lat": 50.67698,
"lng": -120.32012
}
},
"breaks": [
{
"serviceWindow": [
"2023-10-01T11:00:00-08:00",
"2023-10-01T11:30:00-08:00"
],
"duration": 900,
"location": {
"lat": 50.6531,
"lng": -120.38393
}
}
]
}
],
"capacities": [
{
"name": "seat",
"units": 10
},
{
"name": "cargo",
"units": 8
}
],
"skills": [
"lift"
]
}
],
"jobs": [
{
"id": 1,
"pickups": [
{
"id": 2,
"location": [
50.65391,
-120.37365
],
"serviceWindows": [
[
"2023-10-01T09:00:00-08:00",
"2023-10-01T09:30:00-08:00"
]
],
"duration": 600,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 2
}
],
"skills": [
"lift"
]
}
],
"deliveries": [
{
"id": 3,
"location": [
50.69409,
-120.35425
],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 2
}
],
"skills": [
"lift"
]
}
]
},
{
"id": 4,
"pickups": [
{
"id": 5,
"location": [
50.70816,
-120.37796
],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
}
],
"skills": [
"lift",
"air_conditioner"
]
}
],
"deliveries": [
{
"id": 6,
"location": [
50.66559,
-120.36924
],
"serviceWindows": [
[
"2023-10-01T12:45:00-08:00",
"2023-10-01T13:30:00-08:00"
]
],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
}
],
"skills": [
"lift",
"air_conditioner"
]
}
]
},
{
"id": 7,
"pickups": [
{
"id": 8,
"location": [
50.70393,
-120.37263
],
"serviceWindows": [
[
"2023-10-01T14:00:00-08:00",
"2023-10-01T14:30:00-08:00"
]
],
"duration": 600,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 3
}
]
}
],
"deliveries": [
{
"id": 9,
"location": [
50.69028,
-120.39028
],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 3
}
]
}
]
}
],
"objective": 1,
"configuration": {
"polylineType": "none",
"unassignedTasks": true,
"units": "imperial",
"statistics": true
}
}
}
Kun olemme lähettäneet ongelman POST-menetelmällä (kuten kohdassa "Aloita" on kuvattu), saamme seuraavan ratkaisun GET-menetelmällä:
Lähtöratkaisu:
{
"id": 8193,
"status": 200,
"solution": {
"statistics": {
"distance": {
"totalDistance": 54,
"revenueDistance": 36
},
"vehicles": {
"used": 2,
"unused": 0
},
"jobs": {
"scheduledTasks": 3,
"unassignedTasks": 0
},
"times": {
"totalHours": 9.4,
"revenueHours": 8.7
}
},
"routes": [
{
"vehicleId": 1,
"shifts": [
{
"index": 1,
"stops": [
{
"jobId": 1,
"taskId": 2,
"type": "pickup",
"location": [
50.65391,
-120.37365
],
"eta": "2023-10-01T09:00:00-08:00",
"timeToNext": 10,
"distanceToNext": 4.9,
"waitTime": 0,
"polyline": null,
"ordinal": 1
},
{
"jobId": 1,
"taskId": 3,
"type": "delivery",
"location": [
50.69409,
-120.35425
],
"eta": "2023-10-01T09:25:00-08:00",
"timeToNext": 10,
"distanceToNext": 5.4,
"waitTime": 25,
"polyline": null,
"ordinal": 2
},
{
"break": 1,
"start": "2023-10-01T10:00:00-08:00",
"end": "2023-10-01T10:15:00-08:00",
"timeToNext": 15,
"distanceToNext": 7.3,
"waitTime": 0,
"polyline": null,
"ordinal": 3
},
{
"jobId": 4,
"taskId": 5,
"type": "pickup",
"location": [
50.70816,
-120.37796
],
"eta": "2023-10-01T10:30:00-08:00",
"timeToNext": 13,
"distanceToNext": 5.6,
"waitTime": 112,
"polyline": null,
"ordinal": 4
},
{
"jobId": 4,
"taskId": 6,
"type": "delivery",
"location": [
50.66559,
-120.36924
],
"eta": "2023-10-01T12:45:00-08:00",
"timeToNext": 4,
"distanceToNext": 1.7,
"waitTime": 71,
"polyline": null,
"ordinal": 5
},
{
"break": 2,
"start": "2023-10-01T14:00:00-08:00",
"end": "2023-10-01T14:15:00-08:00",
"timeToNext": 7,
"distanceToNext": 3.2,
"waitTime": 217,
"polyline": null,
"ordinal": 6
}
]
}
]
},
{
"vehicleId": 2,
"shifts": [
{
"index": 1,
"stops": [
{
"break": 1,
"start": "2023-10-01T11:00:00-08:00",
"end": "2023-10-01T11:15:00-08:00",
"timeToNext": 13,
"distanceToNext": 6.6,
"waitTime": 152,
"polyline": null,
"ordinal": 1
},
{
"jobId": 7,
"taskId": 8,
"type": "pickup",
"location": [
50.70393,
-120.37263
],
"eta": "2023-10-01T14:00:00-08:00",
"timeToNext": 14,
"distanceToNext": 4.6,
"waitTime": 0,
"polyline": null,
"ordinal": 2
},
{
"jobId": 7,
"taskId": 9,
"type": "delivery",
"location": [
50.69028,
-120.39028
],
"eta": "2023-10-01T14:29:00-08:00",
"timeToNext": 13,
"distanceToNext": 3.9,
"waitTime": 197,
"polyline": null,
"ordinal": 3
}
]
}
]
}
],
"unassigned": []
},
"message": "success"
}
Esimerkki 2: Yksinkertainen uudelleenoptimointiskenaario uusien töiden lisäämiseksi olemassa olevaan aikatauluun #
Tarkastellaan nyt edellistä esimerkkiä. Oletetaan, että olet aloittanut tuotetun aikataulun suorittamisen aamusta lähtien, ja nyt kello on 11:36:34, ja saat uuden työmääräyksen seuraavasti:
Työ 4: (uusi työ)
Noutopaikka: Sijainti (50.65187, -120.40052)
Palveluaika: klo 15.45–16.15 (työ on noutopainotteinen)
Kesto: 15 minuuttia
Vaatimukset: 1 istuin, 1 tavaratila
Toimitus: Sijainti (50.69262, -120.35412)
Kesto: 10 minuuttia
Muuten, olet jo suorittanut tehtävän 1, mutta tehtävät 2 ja 3 ovat vielä kesken seuraavin tiedoin:
Työ 1: (suoritettu)
Työ 2: (keskeneräinen)
Nouto:
Nykyinen ajoneuvon tunnus: 1
Arvioitu saapumisaika: 10:30
Toimitus:
Nykyinen ajoneuvon tunnus: 1
Arvioitu saapumisaika: 12:45
Työ 3: (keskeneräinen)
Nouto:
Nykyinen ajoneuvon tunnus: 2
Arvioitu saapumisaika: 14:00
Toimitus:
Nykyinen ajoneuvon tunnus: 2
Arvioitu saapumisaika: 14:29
Huomaa, että koska työ 2 ja työ 3 ovat käynnissä, niillä on ajoneuvon tunnus ja ETA. Jos haluat optimoida aikataulusi uudelleen niin, että se sisältää uuden työn (eli työn 4), sinun on annettava API:n kautta päivitetty näkymä nykyisestä aikataulustasi. Tämän pitäisi sisältää seuraavat tiedot töistäsi:
Työ 1: tälle työlle, koska se on jo suoritettu, voit asettaa sen nouto- ja toimitustehtävien tilaksi "status":"performed" Huomaa, että sinun ei tarvitse antaa nykyistä ajoneuvon tunnusta ja arvioitua saapumisaikaa näihin tehtäviin, koska ne on jo suoritettu, etkä voi enää muuttaa niitä.
Työ 2: tämä työ on edelleen käynnissä ja se on osoitettu ajoneuvolle 2, jonka noutoaika on klo 10.30 ja toimitusaika klo 12.45. Sinun on siis sisällytettävä seuraava objekti sen noutotehtävään:
"status": "in_progress",
"vehicleId": 1,
"eta": "2024-10-01T10:30:00-08:00"
Lisäksi sinun on sisällytettävä seuraava objekti sen toimitustehtävää varten:
"status": "in_progress",
"vehicleId": 1,
"eta": "2024-10-01T12:45:00-08:00"
"status": "in_progress",
"vehicleId": 2,
"eta": "2024-10-01T14:00:00-08:00"
Lisäksi sinun on sisällytettävä seuraava objekti sen toimitustehtävää varten:
"status": "in_progress",
"vehicleId": 2,
"eta": "2024-10-01T14:29:00-08:00"
Työ 4: koska tämä on uusi työ eikä sitä ole vielä aikataulutettu, asetat sen tilaksi "status":"pending"Sinun ei tarvitse määrittää ajoneuvon tunnusta tai arvioitua saapumisaikaa tälle työlle, koska sitä ei ole vielä ajoitettu, etkä ole saanut näitä tietoja. Uudelleenoptimoinnin jälkeen saat ajoneuvon tunnuksen ja arvioidun saapumisajan jokaiselle tämän työn tehtävälle.
Lisäksi sinun on ilmoitettava ajoneuvojesi viimeisin tunnettu sijainti, jotta API saa päivitetyn kuvan nykyisestä aikataulustasi optimointitehtävän tehokasta suorittamista varten. Oletetaan, että ajoneuvojesi viimeinen tunnettu sijainti kello 11:36:34 (eli aikana, jolloin haluamme tehdä uudelleenoptimoinnin) on seuraava:
- Ajoneuvo 1: (50.66692,-120.35293)
- Ajoneuvo 2: (50.65324,-120.37398)
Tätä tarkoitusta varten sinun on sisällytettävä seuraava ajoneuvon 1 kohde:
"lastKnownLocation":{
"location":[50.66692,-120.35293],
"time":"2024-10-01T11:36:34-08:00"
}
Vastaavasti ajoneuvoa 2 varten on lisättävä seuraava kohde:
"lastKnownLocation":{
"location":[50.65324,-120.37398],
"time":"2024-10-01T11:36:34-08:00"
}
Voit tehdä uudelleenoptimoinnin lähettämällä uuden optimointiongelman seuraavasti:
{
"problem": {
"fleet": [
{
"id": 1,
"shifts": [
{
"start": {
"time": "2023-10-01T08:00:00-08:00",
"location": {
"lat": 50.67293,
"lng": -120.34195
}
},
"end": {
"time": "2023-10-01T18:00:00-08:00",
"location": {
"lat": 50.67293,
"lng": -120.34195
}
},
"breaks": [
{
"serviceWindow": [
"2023-10-01T10:00:00-08:00",
"2023-10-01T10:30:00-08:00"
],
"duration": 900,
"location": {
"lat": 50.6531,
"lng": -120.38393
}
},
{
"serviceWindow": [
"2023-10-01T14:00:00-08:00",
"2023-10-01T14:30:00-08:00"
],
"duration": 900,
"location": {
"lat": 50.6531,
"lng": -120.38393
}
}
]
}
],
"capacities": [
{
"name": "seat",
"units": 15
},
{
"name": "cargo",
"units": 5
}
],
"skills": [
"lift",
"air_conditioner"
],
"lastKnownLocation":{
"location":[50.66692,-120.35293],
"time":"2024-10-01T11:36:34-08:00"
}
},
{
"id": 2,
"shifts": [
{
"start": {
"time": "2023-10-01T08:00:00-08:00",
"location": {
"lat": 50.7117,
"lng": -120.39286
}
},
"end": {
"time": "2023-10-01T18:00:00-08:00",
"location": {
"lat": 50.67698,
"lng": -120.32012
}
},
"breaks": [
{
"serviceWindow": [
"2023-10-01T11:00:00-08:00",
"2023-10-01T11:30:00-08:00"
],
"duration": 900,
"location": {
"lat": 50.6531,
"lng": -120.38393
}
}
]
}
],
"capacities": [
{
"name": "seat",
"units": 10
},
{
"name": "cargo",
"units": 8
}
],
"skills": [
"lift"
],
"lastKnownLocation":{
"location":[50.65324,-120.37398],
"time":"2024-10-01T11:36:34-08:00"
}
}
],
"jobs": [
{
"id": 1,
"pickups": [
{
"id": 2,
"location": [
50.65391,
-120.37365
],
"serviceWindows": [
[
"2023-10-01T09:00:00-08:00",
"2023-10-01T09:30:00-08:00"
]
],
"duration": 600,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 2
}
],
"skills": [
"lift"
],
"status": "performed"
}
],
"deliveries": [
{
"id": 3,
"location": [
50.69409,
-120.35425
],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 2
}
],
"skills": [
"lift"
],
"status": "performed"
}
]
},
{
"id": 4,
"pickups": [
{
"id": 5,
"location": [
50.70816,
-120.37796
],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
}
],
"skills": [
"lift",
"air_conditioner"
],
"status": "in_progress",
"vehicleId": 1,
"eta": "2023-10-01T10:30:00-08:00"
}
],
"deliveries": [
{
"id": 6,
"location": [
50.66559,
-120.36924
],
"serviceWindows": [
[
"2023-10-01T12:45:00-08:00",
"2023-10-01T13:30:00-08:00"
]
],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
}
],
"skills": [
"lift",
"air_conditioner"
],
"status": "in_progress",
"vehicleId": 1,
"eta": "2023-10-01T12:45:00-08:00"
}
]
},
{
"id": 7,
"pickups": [
{
"id": 8,
"location": [
50.70393,
-120.37263
],
"serviceWindows": [
[
"2023-10-01T14:00:00-08:00",
"2023-10-01T14:30:00-08:00"
]
],
"duration": 600,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 3
}
],
"status": "in_progress",
"vehicleId": 2,
"eta": "2023-10-01T14:00:00-08:00"
}
],
"deliveries": [
{
"id": 9,
"location": [
50.69028,
-120.39028
],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 3
}
],
"status": "in_progress",
"vehicleId": 2,
"eta": "2023-10-01T14:29:00-08:00"
}
]
},
{
"id": 10,
"pickups": [
{
"id": 11,
"location": [
50.65187,
-120.40052
],
"serviceWindows": [
[
"2023-10-01T15:45:00-08:00",
"2023-10-01T16:15:00-08:00"
]
],
"duration": 900,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 1
}
],
"status": "pending"
}
],
"deliveries": [
{
"id": 12,
"location": [
50.69262,
-120.35412
],
"duration": 600,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "cargo",
"units": 1
}
],
"status": "pending"
}
]
}
],
"objective": 1,
"configuration": {
"polylineType": "none",
"unassignedTasks": true,
"units": "imperial",
"statistics": true
}
}
}
Esimerkki 3: Uudelleenoptimointi peruutetuilla töillä #
Jos olet lähettänyt optimointiongelman joukolle töitä ja sinulla on jo olemassa aikataulu, mutta osa töistä on peruttu, voit optimoida aikataulun uudelleen poistamalla perutut työt ongelmasta. Tätä varten sinun on tehtävä seuraavaa:
- Anna päivitetty kuva jäljellä olevista työpaikoistasi ja ajoneuvojesi viimeisimmistä tiedossa olevista sijainneista esimerkin 2 tapaan.
- Luo ja lähetä tarkistettu ongelma, joka heijastaa näitä muutoksia.
Kun lähetät sen, saat uuden aikataulun, jossa on otettu huomioon päivitetyt työt ja kaluston tila.
Esimerkki 4: Uudelleenoptimointi rikkinäisillä ajoneuvoilla #
Oletetaan, että kello on 8:00 aamulla, ja käytät API:ta luodaksesi optimoidun aikataulun 10 ajoneuvon työpaikoillesi. Aloitat aikataulun suorittamisen, mutta klo 9:14 saat tietää, että yksi ajoneuvo on hajonnut eikä voi enää suorittaa sille osoitettuja töitä.
Voit optimoida aikataulun uudelleen seuraavasti:
-
Kaluston tietojen päivittäminen: Poista rikkoutunut ajoneuvo kalustokohteestasi.
-
Ilmoita ajoneuvojen sijainnit: Ilmoita jäljelle jääneiden ajoneuvojen viimeiset tiedossa olevat sijainnit esimerkin 2 tapaan.
-
Päivitä tehtävän tila :
-
Ilmoita kaikkien tehtävien tila. Sinun on määritettävä, mitkä tehtävät on jo suoritettu, mitkä ovat käynnissä ja mitkä ovat uusia tai odottavia (ei vielä ajoitettu).
-
Ilmoita käynnissä olevien tehtävien osalta ajoneuvon tunnus ja arvioitu saapumisaika (ETA).
-
-
Hoida rikkoutuneen ajoneuvon tehtävät :
-
Muuta kaikkien rikkoutuneelle ajoneuvolle aiemmin annettujen tehtävien tilaksi "odottava". Näin API voi määrittää ne uudelleen muille käytettävissä oleville ajoneuvoille ja laskea niiden ETA-ajat uudelleen.
-
-
Lähetä uudelleenoptimointia varten: Lähetä päivitetty ongelma API:lle uutta aikatauluoptimointia varten.
Kuinka testata aikataulutettuja reittejä? #
Vaihe 1: Luo käyttöoikeustunniste
Lähetä ensin POST-pyyntö seuraavaan URL-osoitteeseen saadaksesi Vancouverin (vuokralainen 2) käyttöoikeustunnuksen seuraavilla tunnistetiedoilla:
POST URL: https://iq.aiqwhite.ddsdeploytest.com/sso/auth-token
POST-pyyntö - Vancouverin runko (vuokralainen2):
{
"plugin": "internal;basic",
"internal": {
"email": "tenant2@ddswireless.com",
"password": "AdM5I0N09ToS$IlJ",
"tenantId": 2
},
"basic": {
"username": "tenant2@ddswireless.com",
"password": "AdM5I0N09ToS$IlJ",
"tenantId": 2
}
}
POST-pyyntö - Suomen runko (vuokralainen3):
{
"plugin": "internal;basic",
"internal": {
"email": "tenant3@ddswireless.com",
"password": "AdM5I0N09ToS$IlJ",
"tenantId": 3
},
"basic": {
"username": "tenant3@ddswireless.com",
"password": "AdM5I0N09ToS$IlJ",
"tenantId": 3
}
}
Kopioi sitten luotu tunniste. Tässä on kuvakaappaus tästä vaiheesta:

Vaihe 2: Lähetä syötteen hyötykuorma (optimointiongelma) API:lle.
Jos haluat lähettää syötteen hyötykuorman API:lle ja saada viitetunnuksen, laita luotu tunniste seuraavan POST-pyynnön "Authorization"-osaan ja syötteen hyötykuorma pyynnön "Body"-osaan:
POST URL: https://iq.aiqwhite.ddsdeploytest.com/raas/optimization
Esimerkki syötteen hyötykuormasta:
{
"problem": {
"fleet": [
{
"id": 1,
"shifts": [
{
"start": {
"time": "2023-10-01T08:00:00-08:00",
"location": { "lat": 50.67293, "lng": -120.34195 }
},
"end": {
"time": "2023-10-01T18:00:00-08:00",
"location": { "lat": 50.67293, "lng": -120.34195 }
},
"breaks": [
{
"serviceWindow": ["2023-10-01T10:00:00-08:00", "2023-10-01T10:30:00-08:00"],
"duration": 900,
"location": { "lat": 50.6531, "lng": -120.38393 }
},
{
"serviceWindow": ["2023-10-01T14:00:00-08:00", "2023-10-01T14:30:00-08:00"],
"duration": 900,
"location": { "lat": 50.6531, "lng": -120.38393 }
}
]
}
],
"capacities": [
{
"name": "seat",
"units": 15
},
{
"name": "baggage",
"units": 5
}
],
"skills": ["lift", "air_conditioner"]
},
{
"id": 2,
"shifts": [
{
"start": {
"time": "2023-10-01T08:00:00-08:00",
"location": { "lat": 50.7117, "lng": -120.39286 }
},
"end": {
"time": "2023-10-01T18:00:00-08:00",
"location": { "lat": 50.67698, "lng": -120.32012 }
},
"breaks": [
{
"serviceWindow": ["2023-10-01T11:00:00-08:00", "2023-10-01T11:30:00-08:00"],
"duration": 900,
"location": { "lat": 50.6531, "lng": -120.38393 }
}
]
}
],
"capacities": [
{
"name": "seat",
"units": 10
},
{
"name": "baggage",
"units": 8
}
],
"skills": ["lift"]
}
],
"jobs": [
{
"id": 1,
"pickups": [
{
"id": 2,
"location": [50.65391, -120.37365],
"serviceWindows": [["2023-10-01T09:00:00-08:00", "2023-10-01T09:30:00-08:00"]],
"duration": 600,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "baggage",
"units": 2
}
],
"skills": ["lift"]
}
],
"deliveries": [
{
"id": 3,
"location": [50.69409, -120.35425],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "baggage",
"units": 2
}
],
"skills": ["lift"]
}
]
},
{
"id": 4,
"pickups": [
{
"id": 5,
"location": [50.70816, -120.37796],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
}
],
"skills": ["lift", "air_conditioner"]
}
],
"deliveries": [
{
"id": 6,
"location": [50.66559, -120.36924],
"serviceWindows": [["2023-10-01T12:45:00-08:00", "2023-10-01T13:30:00-08:00"]],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
}
],
"skills": ["lift", "air_conditioner"]
}
]
},
{
"id": 7,
"pickups": [
{
"id": 8,
"location": [50.70393, -120.37263],
"serviceWindows": [["2023-10-01T14:00:00-08:00", "2023-10-01T14:30:00-08:00"]],
"duration": 600,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "baggage",
"units": 3
}
]
}
],
"deliveries": [
{
"id": 9,
"location": [50.69028, -120.39028],
"duration": 300,
"demand": [
{
"name": "seat",
"units": 1
},
{
"name": "baggage",
"units": 3
}
]
}
]
}
],
"objective": 1,
"configuration": {
"polylineType": "none",
"unassignedTasks": true,
"units" : "imperial",
"statistics" : true
}
}
}
Jos POST-menetelmä onnistuu, saat viitetunnuksen, jonka avulla voit hakea API-kutsun tulostusvastauksen GET-menetelmällä. Alla on kuvakaappaus tästä vaiheesta:

Vaihe 3: Hae API-kutsun tulostusvaste.
Jos haluat saada API-kutsun tulostusvastauksen käyttämällä vastaanotettua viitetunnusta, laita käyttöoikeustunniste seuraavan GET-pyynnön "Authorization"-osaan ja sisällytä viitetunnus URL-osoitteeseen seuraavasti:
GET URL: https://iq.aiqwhite.ddsdeploytest.com/raas/optimization/{ID}
Tässä on kuvakaappaus tästä vaiheesta:

API-virheiden lukumäärä
Kuten kohdassa Aloittaminen on kuvattu, API tukee sekä POST- että GET-menetelmiä. Menetelmästä riippuen se palauttaa tulostusvastauksessa tilakoodin. Täältä löydät näiden kahden menetelmän eri tilakoodien kuvaukset.
POST-tilakoodit #
|
|---|
GET-tilakoodit #
|
|---|
Usein kysytyt kysymykset #
|