Scheduled Routes -sovellusliittymän yleiskatsaus
Suunnittele ja optimoi ajoneuvokannan reitit ottaen huomioon palvelun aikarajat, kapasiteettirajoitukset, liikenneolosuhteet ja kuljettajien tauot. Lähetä ongelma ja hanki optimoitu ratkaisu.
Tämä sovellusliittymä on suunniteltu parantamaan ajoneuvokantojen reittisuunnittelua ja aikataulutusta ottaen huomioon keskeiset rajoitteet, kuten palvelun aikarajat, kapasiteettirajoitukset ja liikenneolosuhteet. Sovellusliittymän avulla yritykset voivat merkittävästi parantaa toimitusten tehokkuutta, alentaa toimintakustannuksia ja säästää arvokasta aikaa optimoitujen reittisuunnittelu- ja aikataulutusratkaisujen avulla.
API ratkaisee pohjimmiltaan ajoneuvoreititysongelman (VRP), johon sisältyy tavaroiden nouto ja toimitus. Tässä ongelmassa lasketaan ajoneuvokannalle tehokkaimmat reitit, joilla se voi käydä useissa kohteissa suorittamassa nouto- ja toimitustehtäviä samalla kun noudatetaan rajoituksia, kuten aikavälejä, ajoneuvon kapasiteettia ja saatavuutta.
Lisäksi sovellusliittymä tukee aikataulun dynaamisia muutoksia tai uudelleenoptimointia. Jos joudut muuttamaan olemassa olevaa aikataulua uusien tilausten, peruutusten tai muiden muutosten vuoksi, voit toimittaa päivitetyn kuvan aikataulustasi määrittelemällä toimeksiantojen tilat ja ajoneuvojen sijainnit. Sovellusliittymä optimoi tämän jälkeen aikataulun uudelleen näiden muutosten mukaisesti, mikä varmistaa toiminnan jatkuvan tehokkuuden.
Lisätietoja siitä, miten pääset nopeasti alkuun ja aloitat API:n käytön, löydät kohdasta Aloitus. Opetusohjelmat-osiosta löytyy myös useita lyhyitä opetusohjelmia.
- Versiossa 1.1 lisättiin tuki reittimallien käytölle.
- Versiossa 1.2 lisättiin tuki joustavalle ajoneuvokapasiteetin määrittelylle.
Pikaopas
Scheduled Routes on asynkroninen sovellusliittymä: lähetä reititys- ja aikataulutusongelma, vastaanota viitetunnus ja tarkista kyseistä tunnusta, kunnes optimoitu ratkaisu on valmis.
Lähetä pyynnöt siten, että Authorization-otsikossa on API-käyttöoikeustunnus.
Käyttö POST /raas/optimization ja problem hyötykuorma.
Käyttö GET /raas/optimization/{id} kunnes ratkaisu palautetaan.
Todentaminen
Pyynnöt käyttävät kantajan pääsytunnusta Authorization otsikko. Korvaa YOUR_ACCESS_TOKEN käyttämällä luomaasi API-käyttötunnusta.
Authorization: Bearer YOUR_ACCESS_TOKENAlkuperäisessä lähdekoodissa oli esimerkkejä kantajatunnuksista ja testitunnuksista. Tässä WordPress-yhteensopivassa tiedostossa on säilytetty esimerkit ja ohjeet, mutta siinä käytetään paikkamerkkejä, kuten YOUR_ACCESS_TOKEN, YOUR_EMAIL, ja YOUR_PASSWORD jotta tunnistetietoja ei julkaista vahingossa.
API:n elinkaari #
API tarjoaa kaksi keskeistä menetelmää reitityksen ja aikataulujen optimoinnin hallintaan:
- Optimointi-POST — Lähetä reititys- ja aikataulutusoptimointiongelma. Kun olet lähettänyt POST-pyynnön, saat yksilöllisen viitetunnuksen.
- Optimointi GET — Hae lähetetyn ongelman tila käyttämällä POST-menetelmällä saatua yksilöllistä viitetunnusta. Jos optimointiratkaisu on valmis, voit hakea optimointiongelman ratkaisun.
Miten optimointi toimii #
Ratkaise ajoneuvokannan reititys- ja aikataulutusoptimointiongelma seuraavasti:
- Määritä ongelma. Aloita hahmottelemalla ongelmasi ongelma-osiossa määritetyn mallin mukaisesti.
- Lähetä ongelma. Käytä POST-menetelmää, kuten kohdassa Aloitus on kuvattu, lähettääksesi ongelmasi sovellusrajapinnalle.
- Hae ratkaisu. Hae optimointiongelmasi ratkaisu GET-menetelmällä. Ratkaisun muoto on kuvattu kohdassa Ratkaisu.
Lisätietoja sovellusrajapinnassa käytetyistä termeistä löytyy sanastosta. Luettelo usein kysytyistä kysymyksistä löytyy UKK-osiosta.
POST /raas/optimization #
Käytä tätä menetelmää reitti- ja aikataulutusoptimointiongelman lähettämiseen sovellusrajapinnalle. Kun optimointia koskeva POST-pyyntö on lähetetty onnistuneesti, sovellusrajapinta palauttaa vahvistusvastauksessa yksilöllisen viitetunnuksen. Käytä tätä yksilöllistä tunnusta varsinaisen ratkaisun hakemiseen optimoinnin GET-menetelmällä (katso seuraava luku).
Esimerkkipyyntö (cURL)
Esimerkki optimointiongelman lähettämisestä POST-menetelmällä, jossa käytetään esimerkkitunnusta ja -dataa. Tässä esimerkissä syötettävä ongelma on tiedostossa nimeltä payload.json. Korvaa esimerkkitunnus YOUR_ACCESS_TOKEN omalla tunnuksellasi. Syöttöongelman rakenne on määritelty tiedostossa Ongelma osio.
Vastausmalli
Kun olet lähettänyt POST-menetelmän, saat seuraavanlaisen vastausviestin:
Jos lähetys onnistuu, status tulee olemaan 202, jossa message jossa lukee ”hyväksytty” ja id joka edustaa asynkronisen toiminnon yksilöllistä tunnistenumeroa. Tätä tunnusta käytetään toiminnon tilan seuraamiseen ja tulosten hakemiseen myöhemmin.
Jos virhe ilmenee, status ilmoittaa virhekoodin, id on nolla tai tyhjä, message on ”epäonnistuminen”, ja error kuvailee virheen. Lisätietoja on alla olevissa POST-tilakoodeissa.
Esimerkkipyyntö (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.
POST-tilakoodit
| Koodi | 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 . |
GET /raas/optimization/{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.
Esimerkkipyyntö (cURL)
Esimerkki API:n vastauksen hakemisesta GET-menetelmällä käyttämällä tunnusta. Korvaa ID URL-osoitteeseen POST-menetelmällä saamasi tunnisteen ja muista käyttää omaa API-käyttöoikeustunnustasi.
Esimerkiksi, jos ID on yhtä suuri kuin 5, käytä tätä:
Vastausmalli
Jos ratkaisu on valmis, statistics, routes, ja unassigned täytetään saadun ratkaisun perusteella. Muuten, samalla tavalla kuin POST-menetelmässä, status, message, ja error näyttää tilan tai virheen.
Tulostusratkaisun rakenne on määritelty Ratkaisu -osiossa.
Esimerkkipyyntö (Windows PowerShell)
Alla oleva skripti osoittaa, kuinka tehdään GET-pyyntö käyttämällä POST-menetelmällä luotua tunnusta. Siinä oletetaan, että tunnus on tallennettu tiedostoon nimeltä id.txt, ja API-käyttöoikeustunnus tallennetaan token.txtSuorituksen jälkeen luotu vastaus kirjoitetaan kohteeseen response.txt.
Hae tilakoodit
| Koodi | 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ä. |
Koodimuodot
Käytä samaa päätepisteen prosessia haluamassasi muodossa. Näissä esimerkeissä on säilytetty API-viitteen mukainen pyynnön rakenne ja käytetty julkaisukelpoisia paikkamerkkejä.
Lähetä optimointiongelma
cURL
curl -X POST "https://iq.scheduledroutes.ddswireless.net/raas/optimization" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-d @payload.jsonPython
import json
import requests
url = "https://iq.scheduledroutes.ddswireless.net/raas/optimization"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
}
with open("payload.json", "r", encoding="utf-8") as payload_file:
payload = json.load(payload_file)
response = requests.post(url, headers=headers, json=payload, timeout=60)
response.raise_for_status()
print(response.json())PowerShell
$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 $responseHae optimointitulokset
cURL
curl -X GET "https://iq.scheduledroutes.ddswireless.net/raas/optimization/ID" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Python
import requests
optimization_id = "ID"
url = f"https://iq.scheduledroutes.ddswireless.net/raas/optimization/{optimization_id}"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
}
response = requests.get(url, headers=headers, timeout=60)
response.raise_for_status()
print(response.json())Esineet
Pyyntöobjekti keskittyy problem. Vastausobjekti on keskitetty solution. Alkuperäiset kenttäviitteet, esimerkit, kaaviot, huomautukset ja säännöt on säilytetty alla.
Ongelma, Ajoneuvokanta / Ajoneuvo / Vuoro / Tauko, Työ / Tehtävä / Nouto / Toimitus, Tavoite ja Määritykset.
Ongelma-objekti #
The Ongelma Tämä kokonaisuus edustaa reititys- ja aikataulutusongelmaa. Kuten alla olevasta kuvasta näkyy, se koostuu neljästä pääosasta: fleet, jobs, objective, ja configuration. Näistä fleet ja jobs ovat pakollisia, kun taas objective ja configuration ovat valinnaisia.
Kun määrität sijainnin tai osoitteen sovellusrajapinnassa, käytä WGS84-maantieteellisiä koordinaatteja, joissa on tarkkuuden varmistamiseksi vähintään viisi desimaalia. Esimerkiksi osoite "1600 Amphitheatre Parkway, Mountain View, Kalifornia" jonka leveysaste on 37.423021 ja pituusaste -122.083739. Voit määrittää sen seuraavasti: "location": {"lat": 37.423021, "lng": -122.083739} tai kuten [37.423021, -122.083739].
API käyttää aikaleimoissa ISO 8601 -muotoa, joka sisältää aikavyöhyketiedot, jotta voidaan määrittää paikallinen aika alueelle, jolle reititys ja aikataulutus on optimoitava. Esimerkiksi, 2024-07-31T14:45:30-08:00 tarkoittaa 31. heinäkuuta 2024 klo 14.45.30 PST, joka on 8 tuntia jäljessä koordinoidusta maailmanaikasta (UTC).
Syötteen datakentässä on käytettävä johdonmukaisesti samaa paikallista aikavyöhykettä. Jos järjestelmä havaitsee useita aikavyöhykkeitä, sovellusrajapinta palauttaa virheilmoituksen. Tulostusvastauksessa olevat aikataulun mukaisten pysähdysten ajat ilmoitetaan samassa muodossa kuin syötteen datakentässä on määritetty. Esimerkiksi, jos määrität 2024-07-31T14:45:30-08:00 syöttämissäsi tiedoissa myös tulosteessa näkyvät optimoidut reittiajat perustuvat -08:00; jos käytät +05:30 syötteenä käytetään +05:30.
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.
Varmista, ettei API:lle lähetettävissä tiedoissa ole luottamuksellisia tai henkilökohtaisia tietoja. Vältä esimerkiksi käyttämästä todellisia tunnisteita, kuten ajoneuvon rekisterinumeroita, ajoneuvon tunnisteena tai työn/tehtävän tunnisteina.
Komponenttien yhteenveto
Määrittää ajoneuvojen luettelon sekä niihin liittyvät tiedot, kuten työvuorosuunnitelmat, lähtö- ja päätepisteet, tauot, kapasiteetit ja taidot. Jokaiselle ajoneuvolle voi määrittää yhden tai useamman työvuorosuunnitelman (alku- ja loppuajat sekä paikat), yhden tai useamman tauon (aikaväli, paikka ja kesto), yhden tai useamman kapasiteettityypin käytettävissä olevine yksiköineen (moniulotteiset yksiköt, kuten tilavuus, massa tai koko) sekä yhden tai useamman taidon, joiden avulla ajoneuvo pystyy suorittamaan tiettyjä tehtäviä. Voit esimerkiksi määrittää yhdelle ajoneuvolle taitoiksi ”hitsauskone” ja ”happisäiliö” ja toiselle ajoneuvolle taidoksi ”nostin”; jos työ vaatii nostinta, vain tällä taidolla varustettu ajoneuvo voi suorittaa sen. Voit myös asettaa rajoituksia, kuten pysähdysten enimmäismäärän ja enimmäismatkan (mailina).
Määrittää luettelon tehtävistä, jotka ajoneuvot suorittavat fleet. Jokainen työtehtävä voi koostua useista osatehtävistä, jotka voivat olla joko pelkästään noutoja, pelkästään toimituksia tai sekä noutoja että toimituksia. Niitä ”käyntitehtäviä”, joissa sinun on käytävä paikan päällä suorittamassa työ (esim. korjaukset, modeemin asennus), käsitellään toimitustehtävinä, riippumatta siitä, onko niissä kapasiteettivaatimusta vai ei. Jokaiselle tehtävälle voit määrittää ominaisuuksia, kuten sijainnin, aikavälin, keston, kapasiteettivaatimukset ja tarvittavat taidot. Jos optimointiohjelma ei löydä sopivaa arvioitua saapumisaikaa (ETA) tehtävälle määritetyn aikavälin sisällä, tehtävä jää osoittamatta. Joustaville tai ajallisesti epäkiireellisille tehtäville määritä laajempi aikaväli (enintään 24 tuntia).
Määrittää optimoinnin tavoitteen tai strategian. Tällä hetkellä tuetaan kolmea tavoitetta:
- Matkustusaikojen minimointi — oletusstrategia; minimoi ajoneuvokannan kokonaismatkustusaikaa samalla, kun määritetyt toimeksiannot suoritetaan.
- Reittien määrän minimointi — vähentää töiden suorittamiseen tarvittavien ajoneuvojen määrää. Vastineeksi tämä voi pidentää kokonaiskuljetusaikaa tai lisätä yksittäisten ajoneuvojen kuormitusta.
- Työmäärän tasapainottaminen reittien välillä — jakaa työmäärän tasaisesti koko ajoneuvokannan kesken. Tämä tasapainottaminen voi pidentää kokonaisajoaikaa.
Muokkaa API-asetuksia tai oletusarvoja. Voit esimerkiksi määrittää, sisällytetäänkö API-vastaukseen yhteenveto optimointitilastoista (kuten kokonaismatka-aika ja -matka) tai luettelo määrittämättömistä tehtävistä.
Syöttöpyyntökaavio #
Reitinoptimointiongelman ratkaisemista koskevan syöttöpyynnön rakenne on seuraava. Ongelman lähettämiseksi tämä pyyntö on sisällytettävä POST-menetelmään, kuten kohdassa ”Aloitus” on kuvattu.
Reitinoptimointiongelmassa ajoneuvokanta pyrkii hoitamaan joukon toimeksiantoja tehokkaasti. Yllä olevan kaavion avulla voit määritellä ajoneuvokantasi ja toimeksiantosi. API:n nykyisessä versiossa kukin toimeksianto voi olla:
- Pelkästään nouto-tehtävät — näihin kuuluu tavaroiden nouto reitin varrelta ja niiden toimittaminen reitin päätepisteeseen.
- Pelkästään jakelutehtävät — edellyttävät sellaisten tavaroiden jakelua, jotka on lastattu ajoneuvoon reitin alussa.
- Nouto- ja toimitustehtävät yhdessä – yhdistää molemmat toimet: tavaran noutamisen yhdestä paikasta ja sen viemisen toiseen paikkaan.
Tehtävälle on määritettävä vähintään yksi työtehtävä ja yksi ajoneuvo. Niitä ”käyntitehtäviä”, joissa on mentävä paikan päälle (esim. korjaukset, modeemien asennukset), on pidettävä jakelutehtävinä riippumatta siitä, onko niille asetettu kapasiteettivaatimuksia.
Lisäksi:
- Jospa vain
pickupsJos työhön toimitetaan esine, sitä pidetään noutotyönä. - Jospa vain
deliveriesJos työhön toimitetaan esine, sitä pidetään pelkästään toimitustyönä. - Kun molemmat
pickupsjadeliveriesjos nämä tiedot on annettu, toimitus luokitellaan nouto- ja toimitustyöksi.
Sovellusliittymä (API) ei tue toimeksiantoja, joissa on useita noutoja ja useita toimituksia. Toisin sanoen, kun kyseessä on ”nouto ja toimitus” -toimeksianto:
- The
pickupstaulukon on sisällettävä vain yksi noutotehtävä. - The
deliveriestaulukon on sisällettävä vain yksi toimitustehtävä.
API ei myöskään tue toimeksiantoja, joissa ei ole noutoja eikä toimituksia. Luokittelusäännöt:
- Jos vain
pickupson määritelty, työ luokitellaan pickup-ankkuroitu Job. - Jos vain
deliverieson 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 .
Jokaiselle tehtävälle voidaan määritellä erilaisia ominaisuuksia ja rajoituksia, kuten kapasiteettivaatimukset, palvelun aikarajat ja vaadittavat taidot. Käyntitehtävät, joissa sinun on käytävä tietyissä paikoissa suorittamassa tehtäviä (esim. korjauksia), voidaan nähdä erikoistuneena toimitustehtävänä (kapasiteettivaatimuksilla tai ilman). Tehtävät osoitetaan ajoneuvoille, joiden kapasiteetti tai osaaminen vastaa tehtävän vaatimuksia. Esimerkiksi, jos tehtävä vaatii nostinta tai tikkaita, vain ajoneuvoja, joissa on nostin tai tikkaat, käytetään kyseisen tehtävän suorittamiseen.
problem — kenttäviite
ongelma Pakollinen Määrittää reititys- ja aikataulutusoptimointiongelman, jonka haluat ratkaista. Se koostuu seuraavista attribuuteista.
fleet
vaadittu laivasto Määrittää laivastotiedot. Se on laivasto-objektien taulukko. Jokainen laivasto-objekti koostuu seuraavista attribuuteista:
Ajoneuvon yksilöllinen tunniste.
Työvuoro-objektien taulukko. Jokainen työvuoro-objekti sisältää tiedot työvuoron alkamis- ja päättymispaikoista sekä -ajoista, samoin kuin taulukon tauko-objekteja, joista kukin sisältää tauon alkamis- ja päättymispaikat sekä -ajat. Työvuoro-objekteja voidaan määritellä useita, mutta niiden on oltava toisistaan erillisiä. Kunkin työvuoro-objektin osat:
Vuoron alkamisaika ja aloituspaikka.
time— valinnainen. Määrittää työvuoron alkamisajan. Jos aikaa ei ole määritetty, oletusarvona on nykyisen päivän kello 00:00:00 (keskiyö).location— valinnainen. Lähtöpaikan maantieteelliset koordinaatit (leveys- ja pituusaste). Määritä taulukkomuodossa[A,B](A = leveysaste, B = pituusaste) tai muodossa{"lat": A,"lng": B}.
Vuoron päättymisaika ja -paikka.
time— valinnainen. Määrittää työvuoron päättymisajan. Jos aikaa ei ole määritetty, oletusarvona on nykyisen päivän kello 23:59:00.location— valinnainen. Päätepisteen maantieteelliset koordinaatit. Määritä seuraavasti:[A,B]tai{"lat": A,"lng": B}.
serviceWindow— vaaditaan, jos breaks-ominaisuutta käytetään. Aikajakso, jonka aikana tauko voi tapahtua.duration— vaaditaan, jos breaks-ominaisuutta käytetään. Kokonaisluku, joka määrittää tauon keston sekunteina.location— valinnainen. Murtumakohdan sijainti, kuten[A,B]tai{"lat": A,"lng": B}. Jos sijaintia ei mainita, tauko on ”vapaa”, eli kuljettaja voi pitää sen missä tahansa itselleen sopivana ajankohtana.
Esimerkki — shifts
Kapasiteettiobjektien taulukko. Jokainen kapasiteettiobjekti on avain-arvo-objekti, joka on määritelty seuraavilla avaimilla:
name— vaaditaan. Merkkijono, joka määrittää kapasiteettityypin nimen (esim. "pyörätuoli", "laatikko", "istuin", "roskakori").units— vaaditaan. Kokonaisluku, joka määrittää kyseisen kapasiteettityypin käytettävissä olevat yksiköt.
Jos ajoneuvoon mahtuu esimerkiksi 2 istumapaikkaa ja 20 pakettia, voit määrittää sen kapasiteetin seuraavasti:
Luettelo ajoneuvojen ominaisuuksista tai varusteista, joista kukin on merkitty sovelluksellesi ominaisella merkkijonolla. Tämän avulla voit mukauttaa ajoneuvojen ominaisuuksia vastaamaan niiden tehtävien vaatimuksia. Esimerkki: "skills": ["lift","fridge","oxygen tank"]
Määrittää ajoneuvoon sovellettavat rajoitukset.
maxDistance— valinnainen. Kokonaisluku, joka ilmaisee ajoneuvon suurimman sallitun etäisyyden mailina.maxStops— valinnainen. Kokonaisluku, joka määrittää sen, kuinka monta pysähdystä (nouto- tai toimitustehtävää) ajoneuvo voi suorittaa yhden työvuoron aikana.lifoDepth— valinnainen. Kokonaisluku, joka määrittää ajoneuvon LIFO-syvyyden (Last In First Out).
Ilmoittaa ajoneuvon viimeisen tunnetun sijainnin määritettynä ajankohtana. Tämä tieto on ratkaisevan tärkeää, kun käynnissä olevaa reittiä optimoidaan uudelleen uusien muutosten, kuten ajokelvottomien ajoneuvojen, myöhästyneiden toimeksiantojen, uusien toimeksiantojen tai peruutettujen toimeksiantojen, huomioon ottamiseksi. Kun olemassa olevaa aikataulua optimoidaan uudelleen, sinun on ilmoitettava kaikkien mukana olevien ajoneuvojen sijainti.
Reittimallin määrittämiseen käytettävä yksilöllinen tunniste. API tukee ”reittimallien” käsitettä, jonka avulla voit määrittää tietyn ajoneuvotyypin tekniset tiedot ja pyytää API:ta luomaan tietyn määrän tällaisia ajoneuvoja optimointia varten. Reittimalli sisältää samat tiedot kuin reitti tai ajoneuvo, mutta voit määrittää ”koko”-parametrin, jota kutsutaan maxInstances sitä varten. 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, että sovellusliittymä voi tarvittaessa luoda automaattisesti jopa 60 ajoneuvoa mallin 1 avulla, 5 ajoneuvoa mallin 2 avulla ja 35 ajoneuvoa mallin 3 avulla.
Jos routeTemplateId on tarjottu, maxInstances määrittää, kuinka monta reittimallia tulisi luoda määritetyn reittimallin perusteella.
- Tasan yksi jostakin
idtairouteTemplateIdon käytettävä, ei koskaan molempia. idjamaxInstancesei voi käyttää yhdessä.- Jos molemmat
routeTemplateIdjamaxInstancestarjotaan, API käyttää reittimallin malli reittien luomiseksi.
jobs
työpaikat Vähintään yksi vaaditaan Työpaikkaobjektien joukko. Jokaisella työpaikkaobjektilla on seuraavat ominaisuudet:
Työn yksilöllinen tunniste.
Taulukko, joka koostuu tehtäväobjekteista, joista kukin edustaa nouto-tehtävää.
Taulukko, joka koostuu tehtäväobjekteista, joista kukin edustaa toimitus- (tai palautus-)tehtävää.
- API ei tue töitä, joissa on useita noutoja ja toimituksia .
- API ei tue töitä, joissa ei ole noutoja eikä toimituksia .
- Jos vain
pickupson määritelty, työ luokitellaan nouto-ankkuroitu työ. - Jos vain
deliverieson 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ä .
Tehtäväobjekti
Jokainen tehtäväobjekti koostuu seuraavista attribuuteista:
Tehtävän yksilöllinen tunniste.
Avain-arvo-objekti, joka määrittää sen paikan maantieteelliset koordinaatit (leveys- ja pituusaste), jossa tehtävä on suoritettava. Määritä taulukkomuodossa [A,B] (A = leveysaste, B = pituusaste) tai muodossa {"lat": A,"lng": B}.
Määrittää tehtävän suorittamisen aikavälin (pakollinen tai valinnainen käyttötapauksesta riippuen; ks. edellä mainitut nouto- ja toimituspalvelut). Aikaväli on muodoltaan seuraavanlainen taulukko [A, B] jossa A ja B ovat aloitus- ja lopetusaika. API pyrkii laskemaan arvioidun saapumisajan (ETA) määritetyn aikavälin sisällä; jos tämä ei ole mahdollista, tehtävä merkitään määrittelemättömäksi. Ajat A ja B määrittelevät aikaisimman ja myöhäisimmän ajan, johon mennessä ajoneuvon on saatava tehtävä valmiiksi. Joustavien tai aikataulultaan joustavien tehtävien osalta käytä mielivaltaisen suurta ikkunaa (enintään 24 tuntia), jotta API:lla on enemmän joustavuutta muiden tehtävien aikatauluttamisessa. API:n nykyinen versio tukee vain yhtä palveluaikaa tehtävää kohti. Pelkästään noutoja tai pelkästään toimituksia koskevien tehtävien osalta palveluaika on 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 etsiminen, hissin laskeminen).service— tehtävän suorittamiseen kuluva aika (sekunteina).
Tehtävän kapasiteettivaatimusten joukko. Kunkin vaatimuksen objektin rakenne on identtinen laivastotietueen kapasiteettiobjektin rakenteen kanssa. Jokainen kapasiteettikohde koostuu name (merkkijono) ja sen units (kokonaisluku). Määritettyjen nimien on vastattava niitä, jotka on määritelty laivue-entiteetin kapasiteettiobjektissa. Esimerkiksi jos työ vaatii kapasiteettia kahdelle matkustajapaikalle ja 20 paketille:
Tehtävän suorittamiseen tarvittavien taitojen tai varusteiden joukko, joista kukin on merkitty sovelluksellesi ominaisella mielivaltaisella merkkijonolla. Tehtävän suorittamiseen otetaan huomioon vain ne ajoneuvot, joiden taitojoukko vastaa tehtävän taitojoukkoa. Nämä taidot täsmäytetään ajoneuvokannan entiteetissä määriteltyihin taitoihin. Esimerkki: "skills": ["lift", "ladder", "welding machine"]
Merkkijono, joka kuvaa tehtävän tilaa: pending, in_progresstai performed. Tämä on ratkaisevan tärkeää käynnissä olevan reitin uudelleenoptimoinnin kannalta. Uusien tai vielä suorittamattomien tehtävien kohdalla aseta se arvoon pending. Jos tehtävä on jo suoritettu, aseta se tilaan performed. Jos ajoneuvo on jo saapunut paikalle ja tehtävä on käynnissä, aseta se tilaan in_progressOletusarvo on pending. Esimerkki: "status": "pending"
Määrittää jo aikataulutettujen tehtävien ajoneuvotunnuksen. Tämä on ratkaisevan tärkeää käynnissä olevan reitin uudelleenoptimoinnin kannalta. Oletusarvo on nolla. Aseta arvoksi nolla uusille tehtäville. Jos kyseessä on jo ajoneuvolle osoitettu tehtävä, aseta tämän attribuutin arvoksi kyseisen ajoneuvon tunnus. Esimerkki: "vehicleId": 12
Määrittää jo aikataulutettujen töiden nykyisen arvioidun saapumisajan (ETA). Tämä on ratkaisevan tärkeää käynnissä olevan reitin uudelleenoptimoinnin kannalta. Oletusarvo on 0. Aseta arvoksi 0 uusille tai jo suoritettujen töiden osalta; olemassa olevien odottavien töiden osalta aseta arvoksi nykyinen ETA. Esimerkki: "eta": "2021-07-04T12:13:00-08:00"
objective
tavoite kokonaisluku Valinnainen Määrittää optimointitavoitteen (strategian). Oletusarvo on 1.
| Arvo | Strategia |
|---|---|
1 | Minimoi kokonaismatka-aika (oletusasetus) |
2 | Reittien määrän minimointi |
3 | Työmäärän tasapainottaminen reittien välillä |
Esimerkki: "objective": 1
configuration
asetukset Valinnainen Käytetään lisäasetusten tai -määritysten määrittämiseen.
Määrittää kunkin reitin osalta palautettavan tulostepolyn tyypin. Yksi seuraavista: none, plain, encodedJos none, polylinjoja ei ole mukana. Jos plain, palautetaan järjestetty luettelo risteyksistä, joiden kautta kuljetaan peräkkäisten pysäkkien välillä. Jos encoded, polylinja pakataan merkkijonomuotoon, jonka voit syöttää kolmansien osapuolten navigointirajapintoihin, kuten Google Mapsiin, vaiheittaisten reittiohjeiden saamiseksi. Oletusarvo on none.
Lippu, joka määrittää, onko tulostusvasteeseen sisällytettävä määrittelemättömiä tehtäviä. Oletusarvo on False. Jos API ei jostain syystä pysty osoittamaan tehtävää reitille, se merkitsee sen osoittamattomaksi.
Lippu, joka määrittää, onko optimointitilastot sisällytettävä tuloksena saatavaan ratkaisuun. Oletusarvo on True.
Määrittää tulosteiden tilastojen ja laivaston rajoitusten yksiköt. Joko metric tai imperialOletusarvo on metric.
Määrittää kaikkien töiden enimmäiskeston laitteella. Se määritetään staattisessa taulukossa, jossa jokainen rivi on taulukko, joka sisältää kolme aika-arvoa (minuutteina): [A, B, C]. Tämä tarkoittaa, että jos työn suora matka-aika on pisteiden A ja B välillä, enimmäismatka-aika on yhtä suuri kuin "rideTime + C". Esimerkiksi yksinkertainen taulukko, jossa on kaksi riviä: "maxRideTable":[[0, 10, 30], [11, 20, 40]]. Oletusarvo on [[0, 300, 720]]. Tässä taulukossa ei saa olla päällekkäisyyksiä tai aukkoja, ja aikaväli on minuutteja.
Määrittää, miten optimointimoottori käsittelee aiemmin määritettyjä tehtäviä uudelleenoptimoinnin aikana. Oletusarvo on false.
Kun asetuksena on true, kaikki uudelleenoptimointipaketin ajoneuvoille jo osoitetut toimeksiannot käsitellään lukittuina, ja niiden on pysyttävä nykyisellä ajoneuvollaan. Moottori optimoi ja osoittaa vain uusia toimeksiantoja, joille ei ole vielä osoitettu ajoneuvoa.
Kun asetuksena on false, järjestelmä voi muuttaa olemassa olevia tehtävänmäärityksiä uudelleenoptimoinnin yhteydessä. Aiemmin määritetyt tehtävät voidaan poistaa alkuperäisestä ajoneuvosta, jos tehtävänmääritys ei ole enää voimassa tai optimaalinen. Esimerkiksi alun perin klo 8.00 ajalle suunniteltu tehtävä voidaan poistaa klo 10.00 suoritettavan uudelleenoptimoinnin yhteydessä, koska tehtävää ei voida enää suorittaa asetettujen rajoitusten puitteissa.
Ajoneuvokapasiteetin määritelmille voidaan antaa nimi, ja niitä voidaan sitten käyttää ajoneuvokanta-osiossa. Tämä on erityisen hyödyllistä monimutkaisten määritelmien yhteydessä, kun ajoneuvolla voi olla useita kokoonpanoja. Jos ajoneuvoon mahtuu esimerkiksi joko (10 kävelevää matkustajaa ja 0 pyörätuolimatkustajaa) TAI (8 kävelevää matkustajaa ja 1 pyörätuolimatkustaja), voit määritellä "vehicleCapacities":{"flexBus": [[{"name": "ambulatory", "units": 10}], [{"name": "ambulatory", "units": 8},{"name":"wheelchair", "units": 1}]]}. Sitten laivaston ominaisuuksissa voit käyttää fleet[<index>].capacities: "flexBus" jokaiselle kaluston flexBus-ajoneuvolle. Ajoneuvojen nimelliskapasiteetit voidaan myös tallentaa henkilökohtaiseen asiakasprofiiliisi, jolloin ne ovat käytettävissä ilman, että niitä tarvitsee määritellä konfigurointiosassa. Jos ajoneuvon nimelliskapasiteetti löytyy sekä henkilökohtaisesta profiilistasi että kuormatiedoista, kuormatiedoissa oleva määritelmä on ensisijainen.
Jäähdytysikkunan kesto minuutteina. Jäähdytysikkuna on käsite, jota sovelletaan vain saman päivän optimointiin ja joka on hyödyllinen ongelman uudelleenoptimoinnissa. Jos olet esimerkiksi jo optimoinut ongelman, mutta haluat tehdä muutoksia päivän aikana, voit lähettää ongelman uudelleen (sopivilla task.status (jotta se heijastaisi jo tehtyjä toimia) ja määritä 60 minuutin jäädytysohjelma. Tämä ohjeistaa optimointiohjelmaa, että 60 minuutin ajanjakso ”nykyhetkestä” eteenpäin on kielletty: jäädytysohjelman aikana reiteille ei voi lisätä tai poistaa tehtäviä.
Joukko kapasiteettityyppejä, joihin sovelletaan LIFO-rajoitusta (Last In, First Out). Esimerkki: "lifoConstrainedCapacities": ['wheelchair', 'scooter']
Esimerkki — configuration
version
versio Valinnainen Määrittää sovellusliittymä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.
1. Ainutlaatuiset tunnisteet. Kaikilla toimeksiannoilla on oltava yksilöllinen tunniste. Kaikilla tehtävillä on oltava yksilöllinen tunniste. Kaikilla ajoneuvoilla on oltava yksilöllinen tunniste. Toimeksianto voi jakaa tunnisteensa tehtävän tai ajoneuvon kanssa – tämä on sallittua.
2. Aikarajoitukset. Jokaiseen ongelmaan voi sisältyä useita aikaan liittyviä tekijöitä, kuten tehtävien palveluaikavälejä ja ajoneuvojen vuoroja. Sovellusliittymä (API) määrittää kaikkien arvojen pienimmän ajan. Esimerkiksi, jos pienin arvo on 2024-09-18T04:32:00-08:00, enimmäisaika lasketaan selvittämällä sen päivän keskiyö, jolloin vähimmäisaika saavutetaan, ja lisäämällä tähän aikaleimaan 33 tuntia. Tässä esimerkissä sallittu enimmäisaika on siis 2024-09-19T09:00:00-08:00. Jos jokin tehtävän vaihe (esim. ajoneuvon vaihto tai tehtävän suoritusaika) ylittää tämän rajan, sovellusliittymä palauttaa 400 virhe.
Solution-objekti #
Kun olet lähettänyt ongelman POST-menetelmällä, saat yksilöllisen viitetunnuksen. Käytä tätä viitetunnusta GET-menetelmällä, kun haluat tarkistaa lähetetyn ongelman tilan. Jos optimointiratkaisu on valmis, voit tarkastella sitä solution vastauksen kokonaisuus. Kuten alla olevasta kuvasta näkyy, solution kokonaisuus koostuu kolmesta pääosasta:
Sisältää erilaisia mittareita, jotka antavat yleiskuvan koko ratkaisusta kaikkien reittien osalta, jolloin voit arvioida sen tehokkuutta (esimerkiksi kaikkien optimoitujen reittien kokonaismatka). Analysoimalla näitä tilastoja voit mitata tuotetun ratkaisun laatua ja tehokkuutta.
Sisältää optimoidut reitit sekä niiden pysäkit ja arvioidut saapumisajat (ETA). Se voi sisältää myös kunkin reitin moniviivan.
Sisältää luettelon määrittämättömistä tehtävistä. Jos sovellusliittymä ei pysty määrittämään tehtävää reitille optimoinnin aikana, se merkitään määrittämättömäksi. Luettelossa voi olla syyt sille, miksi kukin tehtävä on jäänyt määrittämättä, mikä antaa käsityksen rajoituksista tai ongelmista, jotka estivät tehtävän määrittämisen.
Tulostusratkaisun rakenne #
API:n vastauksessa toimitettu ratkaisun malli on seuraava:
The solution Entiteetti edustaa reitinoptimointiongelman ratkaisua ja koostuu seuraavassa kuvatuista attribuuteista.
statistics
Sisältää koko ratkaisun tilastotiedot. Se koostuu seuraavista ominaisuuksista:
totalDistance— koko ajoneuvokannan kulkema kokonaismatka, mukaan lukien kunkin ajoneuvon lähtöpaikasta päätepisteeseen kulkema matka.revenueDistance— koko ajoneuvokannan kulkema kokonaismatka, mukaan lukien kunkin ajoneuvon ensimmäisestä pysäkistä viimeiseen pysäkkiin kuljettu matka. Siihen ei sisälly ajoneuvon lähtöpaikasta ensimmäiseen pysäkkiin tai viimeisestä pysäkistä ajoneuvon päätepisteeseen kuljettu matka.
used— ratkaisussa käytettävien ajoneuvojen määrä suunniteltujen töiden ja tehtävien suorittamiseksi.unused— käyttämättömien ajoneuvojen määrä.
scheduledTasks— ajoitettujen tehtävien määrä.unassignedTasks— määrittelemättömien tehtävien määrä.
totalHours— koko ajoneuvokannan matkustusaika yhteensä, mukaan lukien aika, joka kuluu kunkin ajoneuvon lähtöpaikasta määränpäähän.revenueHours— koko ajoneuvokannan matkustustuntien kokonaismäärä, mukaan lukien kunkin ajoneuvon ensimmäisestä pysäkistä viimeiseen pysäkkiin kuluva aika. Siihen ei lasketa aikaa, joka kuluu ajoneuvon lähtöpaikasta ensimmäiseen pysäkkiin tai viimeisestä pysäkistä ajoneuvon päätepisteeseen.
Esimerkki — statistics
routes
Tarjoaa taulukon kunkin ajoneuvon aikataulun mukaisesta reitistä. Jokainen aikataulun mukainen reitti sisältää:
Määritetyn ajoneuvon tunniste.
Vaihtokohteiden joukko. Sovellusliittymä tukee useita vuoroja kullekin ajoneuvolle. Jokainen vuorokohde koostuu seuraavista osista:
index— vuoron numero (kokonaisluku).stops— taulukko, joka sisältää kaikki pysäkit, joilla ajoneuvo pysähtyy tällä vuorolla.
Jokaisella pysäkillä on seuraavat ominaisuudet:
ordinal— pysäkin sijainti ajoneuvon aikataulussa, jota edustaa sen indeksi (kokonaisluku).jobId— tähän pysähdykseen liittyvä työnumero (kokonaisluku).taskId— tähän pysähdykseen liittyvä tehtävän tunnus (kokonaisluku).type— tällä pysäkillä suoritettavan toimeksiannon tyyppi (”nouto” tai ”toimitus”).location— pysäkin sijainnin maantieteelliset koordinaatit.eta— arvioitu saapumisaika kyseiselle pysäkille (samassa aikavyöhykkeessä kuin syötetty data).timeToNext— ajoaika seuraavalle pysäkille. Jos esimerkiksi jätät matkustajan klo 9.00 ja seuraava kyytisi on klo 10.00, tämä kertoo, että ajoaika nykyiseltä pysäkiltä seuraavalle pysäkille on 20 minuuttia.distanceToNext— ajomatka seuraavalle pysäkille. Asetuksissa valituista mittayksiköistä riippuen tämä voi olla mailia tai metrejä.waitTime— kuinka kauan kuljettajan tulisi odottaa seuraavalla pysäkillä, jos hän lähtee liikkeelle nyt.polyline— moniviiva, joka yhdistää pysäkin sitä edeltävään pysäkkiin. Jos asetuksissa on määritetty arvo "plain", moniviiva on järjestetty luettelo risteyksistä, joiden kautta kuljetaan edeltävän pysäkin ja nykyisen pysäkin välillä. Jos asetuksissa on määritetty arvo "encoded", tavallinen moniviiva koodataan ja palautetaan koodattuna merkkijonona.break— jos aikataulun mukainen pysähdys on tauko, se edustaa tauon tunnusta. Muissa pysähdyksissä tätä elementtiä ei ole. API ei vaadi, että tauot (tai työt) luetellaan aikajärjestyksessä.
Esimerkki — routes
unassigned
Valinnainen määrittelemättömien tehtävien luettelo sisältää tehtäviä, joita ei voida osoittaa tiettyjen rajoitusten vuoksi. Jokainen kohde koostuu työn tunnisteesta, tehtävän tunnisteesta sekä mahdollisista syistä, miksi tehtävää ei ole osoitettu (koodi ja kuvaus):
job— määrittelemättömän tehtävän tehtävänumero (kokonaisluku).task— määrittelemättömän tehtävän tunniste (kokonaisluku).
Lukuisia mahdollisia syitä tehtävien suorittamatta jäämiselle.
code— mahdollisen syyn koodi (kokonaisluku).description— mahdollisen syyn kuvaus (merkkijono).
Virheet ja tilakoodit #
Kuten kohdassa ”Aloitus” on kuvattu, sovellusliittymä tukee sekä POST- että GET-menetelmiä. Menetelmästä riippuen se palauttaa tilakoodin vastauksessa. Seuraavassa on kuvaus näiden kahden menetelmän tilakoodeista.
POST-tilakoodit
| Koodi | Kuvaus | Lisähuomautukset |
|---|---|---|
| 202 | Pyyntö hyväksyttiin käsiteltäväksi. | Palautetaan viitetunnus, jota voidaan käyttää GET-pyynnön kanssa ratkaisun hakemiseen, kun se on valmis. |
| 400 | Syötteen validointi epäonnistui (Huono pyyntö). | Yksi tai useampi parametri puuttuu, on virheellinen tai kirjoitettu väärin. Korjaa syötetyt tiedot ja lähetä pyyntö uudelleen. |
| 403 | Virheelliset todennustiedot tai riittämättömät käyttöoikeudet. | Pyyntö ymmärrettiin, mutta asiakkaalla ei ole oikeuksia puuttuvien tai virheellisten käyttöoikeuksien vuoksi. |
| 404 | Pyydettyä polkua ei löydy. | Tämä virhe ilmenee, kun pyydetty URL-polku ei vastaa mitään kelvollista päätepistettä. |
| 429 | Liian monta pyyntöä. | QPM (kyselyitä minuutissa) eli pyyntökiintiö on ylitetty. Asiakkaan on hidastettava pyyntöjen tiheyttä. |
| 500 | Sisäisen palvelun virhe. | API:ssa oli palvelinpuolen ongelma. Ota yhteyttä osoitteeseen support@ddswireless.com saadaksesi apua. |
Hae tilakoodit
| Koodi | Kuvaus | Lisähuomautukset |
|---|---|---|
| 200 | Pyyntö on onnistunut. | Ongelma ratkaistiin onnistuneesti. Tulokset palautetaan palvelun kautta statistics, routes, ja unassigned. |
| 202 | Pyyntö hyväksyttiin, mutta sitä ei ole vielä käsitelty (tila odottaa käsittelyä). | Ratkaisu ei ole vielä valmis. Sinun on tarkistettava tilanne myöhemmin uudelleen. |
| 400 | Pyyntöä ei voitu käsitellä (Bad Request). | Annetuille sijainneille tai parametreille ei voitu luoda toteuttamiskelpoista ratkaisua. |
| 401 | Luvaton pyyntö. | Pyyntö vaatii käyttäjän todennuksen. Palvelin ei saanut oikeita tunnistetietoja. |
| 500 | Sisäisen palvelun virhe. | API:ssamme oli palvelinpuolen ongelma. Ota yhteyttä support@ddswireless.comPellot statistics, routes, ja unassigned tulee olemaan tyhjä. |
Ohjeet / Oppaat #
Täältä löydät erilaisia esimerkkejä, jotka havainnollistavat API:n käyttöä. API tukee pääasiassa kahta pääasiallista käyttötarkoitusta:
- Suunnittelu ja aikataulutus — laatii ajoneuvokannan reiteille optimoidun aikataulun, jossa otetaan huomioon töihin ja ajoneuvoihin liittyvät rajoitukset.
- Uudelleenoptimointi — muokkaa olemassa olevaa tai käynnissä olevaa aikataulua vastaamaan muutoksia, kuten uusia toimeksiantoja, peruutuksia tai ajokelvottomia ajoneuvoja.
Tutustu alla oleviin esimerkkeihin ja katso, miten nämä käyttötapaukset on toteutettu:
- Esimerkki 1 — Yksinkertaisen nouto- ja toimitustilanteen suunnittelu.
- Esimerkki 2 — Yksinkertainen uudelleenoptimointitilanne, jossa olemassa olevaan aikatauluun lisätään uusia töitä.
- Esimerkki 3 — Uudelleenoptimointi peruutettujen töiden kanssa.
- Esimerkki 4 — Uudelleenoptimointi viallisten ajoneuvojen kanssa.
Seuraavissa esimerkeissä mainitut paikat ovat kuvitteellisia ja satunnaisesti luotuja, eivätkä ne vastaa todellisia paikkoja.
Yksinkertaisen nouto- ja toimitustilanteen suunnittelu
Kaksi ajoneuvoa, jotka hoitavat kolme nouto- ja toimituskeikkaa ja joiden reitit on optimoitu kokonaiskuljetusajan minimoimiseksi.
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
- Vuorotiedot: Vuoro alkaa 1.10.2024 klo 8.00 PST sijainnista (50.67293, -120.34195) ja päättyy klo 18.00 samassa sijainnissa. Aikavyöhyke on PST, joten alkamisaika kirjataan muodossa
2024-10-01T08:00:00-08:00ja lopun ajankohdaksi2024-10-01T18:00:00-08:00. - Tauot: Kaksi 15 minuutin taukoa. Ensimmäinen tauko klo 10.00–10.30 koordinaateissa (50.6531, -120.38393); toinen tauko klo 14.00–14.30 koordinaateissa (50.6531, -120.38393).
- Kapasiteetti: 15 istumapaikkaa ja 5 rahtipaikkaa.
- Taidot: Varustettu hissillä ja ilmastoinnilla.
Ajoneuvo 2
- Vuoron tiedot: Vuoro alkaa 1.10.2024 klo 8.00 PST sijainnissa (50.7117, -120.39286) ja päättyy klo 18.00 sijainnissa (50.67698, -120.32012).
- Tauot: Yksi 15 minuutin tauko klo 11.00–11.30 koordinaateissa (50.6531, -120.38393).
- Kapasiteetti: 10 istumapaikkaa ja 8 rahtipaikkaa.
- Taidot: Varustettu vain hissillä.
Meillä on myös kolme nouto- ja toimitustyötä Kamloopsissa, Brittiläisessä Kolumbiassa, Kanadassa. Tässä ovat kunkin työn tiedot:
Työpaikka 1
- Nouto: Sijainti (50.65391, -120.37365). Palveluaika klo 9.00–9.30 (tilaus on sidottu noutoon, ja nouto on suoritettava tämän aikavälin sisällä). Kesto 10 minuuttia. Vaatimukset: 1 matkustajapaikka, 2 rahtipaikkaa, nostolaitteella varustettu ajoneuvo.
- Toimitus: Sijainti (50.69409, -120.35425). Kesto 5 minuuttia.
Job 2
- Nouto: Sijainti (50.70816, -120.37796). Kesto 5 minuuttia. Vaatimukset: 1 istumapaikka, ajoneuvossa on oltava sekä nostolaite että ilmastointi.
- Toimitus: Sijainti (50.66559, -120.36924). Toimitusaika klo 12.45–13.30 (toimitus on toimitusajankohtaan sidottu, ja toimitus on suoritettava tämän aikavälin sisällä). Kesto 5 minuuttia.
Job 3
- Nouto: Sijainti (50.70393, -120.37263). Palveluaika klo 14.00–14.30 (tehtävä on sidottu noutoon). Kesto 10 minuuttia. Vaatimukset: 1 matkustajapaikka, 3 rahtipaikkaa, erityisvarusteita ei tarvita.
- Toimitus: Sijainti (50.69028, -120.39028). Kesto 5 minuuttia.
Tavoitteenamme on jakaa nämä kuljetukset määritellyille ajoneuvoille siten, että kokonaiskuljetusaika on mahdollisimman lyhyt. Toisin sanoen optimointitavoitteemme on 1. Syöttöongelma on seuraava:
Syöttöongelma (hyötykuorma)
Kun olemme lähettäneet tämän ongelman POST-menetelmällä (kuten kohdassa Aloitus on kuvattu), saamme seuraavan ratkaisun GET-menetelmällä:
Lopputulos
Uusien töiden lisääminen olemassa olevaan aikatauluun
Optimoi osittain toteutettu aikataulu uudelleen klo 11:36:34, jotta siihen voidaan sisällyttää juuri saapunut työtehtävä.
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öpaikka 4 (uusi työpaikka)
- Nouto: Sijainti (50.65187, -120.40052). Palveluaika klo 15.45–16.15 (noutoon sidottu toimeksianto). Kesto 15 minuuttia. Vaatimukset: 1 matkustajapaikka, 1 rahtipaikka.
- Toimitus: Sijainti (50.69262, -120.35412). Kesto 10 minuuttia.
Olet jo suorittanut tehtävän 1, mutta tehtävät 2 ja 3 ovat vielä kesken seuraavin yksityiskohdin:
- Tehtävä 1: suoritettu.
- Tehtävä 2: käynnissä. Nouto — ajoneuvon tunnus 1, arvioitu saapumisaika 10.30. Toimitus — ajoneuvon tunnus 1, arvioitu saapumisaika 12.45.
- Tehtävä 3: käynnissä. Nouto — ajoneuvon tunnus 2, arvioitu saapumisaika klo 14.00. Toimitus — ajoneuvon tunnus 2, arvioitu saapumisaika klo 14.29.
Koska työ 2 ja työ 3 ovat käynnissä, niillä on oma ajoneuvotunnus ja arvioitu saapumisaika. Jos haluat optimoida aikataulusi uudelleen uuden työn (työ 4) huomioon ottamiseksi, toimita API:n kautta päivitetty näkymä nykyisestä aikataulustasi. Tähän sisältyvät seuraavat tiedot töistäsi:
- Työ 1: on jo suoritettu, joten aseta nouto- ja toimitustehtävien tilaksi
"status":"performed". Näiden tehtävien osalta sinun ei tarvitse ilmoittaa ajoneuvon nykyistä tunnusta eikä arvioitua saapumisaikaa, sillä ne on jo määritetty eikä niitä voi muuttaa. - Työ 2: vielä käynnissä, osoitettu ajoneuvolle 1, noutoarvio = 10.30 ja toimitusarvio = 12.45. Sisältää
"status": "in_progress","vehicleId": 1ja vastaavaetakuljetus- ja toimitustehtäviinsä. - Työ 3: vielä kesken ja osoitettu ajoneuvolle 2, noutoarvio klo 14.00 ja toimitusarvio klo 14.29. Sisällytä
"status": "in_progress","vehicleId": 2ja vastaavaetakuljetus- ja toimitustehtäviinsä. - Työ 4: uusi työtehtävä, jota ei ole vielä aikataulutettu, joten aseta sen tilaksi
"status":"pending". Sinun ei tarvitse määrittää ajoneuvotunnusta tai arvioitua saapumisaikaa. Uudelleenoptimoinnin jälkeen saat ajoneuvotunnuksen ja arvioidun saapumisajan jokaiselle tämän toimeksiannon tehtävälle.
Sinun on myös ilmoitettava ajoneuvojesi viimeisimmät tunnetut sijainnit, jotta sovellusrajapinta (API) saa ajantasaisen kuvan nykyisestä aikataulustasi. Oletetaan, että viimeisimmät tunnetut sijainnit klo 11:36:34 (ajankohta, jota haluamme optimoida uudelleen) ovat: Ajoneuvo 1: (50.66692, -120.35293) ja Ajoneuvo 2: (50.65324, -120.37398). Lisää lastKnownLocation kohde, jonka sijainti on time jokaiselle ajoneuvolle.
Voit tehdä uudelleenoptimoinnin lähettämällä uuden optimointiongelman seuraavasti:
Hyötykuorman uudelleenoptimointi
Uudelleenoptimointi peruutettujen töiden kanssa
Poista peruutetut työt nykyisestä aikataulusta ja optimoi jäljellä olevat työt uudelleen.
Jos olet lähettänyt optimointiongelman tiettyä työjoukkoa varten ja aikataulu on jo laadittu, mutta osa töistä on peruutettu, voit optimoida aikataulun uudelleen poistamalla peruutetut työt ongelmasta. Tätä varten sinun on:
- Anna ajantasainen kuva jäljellä olevista toimeksiannoistasi ja ajoneuvojesi viimeisimmistä tiedossa olevista sijainneista, kuten esimerkissä 2.
- 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.
Uudelleenoptimointi vaurioituneiden ajoneuvojen kanssa
Järjestä työ uudelleen ajoneuvolle, joka on rikkoutunut työvuoron aikana.
Oletetaan, että kello on 8.00 ja luot API:n avulla optimoidun aikataulun 10 ajoneuvon reiteille. Aloitat aikataulun toteuttamisen, mutta kello 9.14 saat tietää, että yksi ajoneuvoistasi on rikkoutunut eikä voi enää suorittaa sille osoitettuja reittejä. Optimoi aikataulu uudelleen seuraavasti:
- Päivitä ajoneuvokannan tiedot. Poista rikkoutunut ajoneuvo ajoneuvokannan kohteesta.
- Ilmoita ajoneuvojen sijainnit. Ilmoita jäljellä olevien ajoneuvojen viimeisimmät tiedossa olevat sijainnit, kuten esimerkissä 2.
- Päivitä tehtävien tila. Ilmoita kaikkien tehtävien tila: kerro, mitkä tehtävät on jo suoritettu, mitkä ovat kesken ja mitkä ovat uusia tai odottavia. Kesken olevien tehtävien osalta ilmoita niihin liittyvä ajoneuvotunnus ja arvioitu saapumisaika.
- Hoida rikkoutuneeseen ajoneuvoon liittyvät asiat. Muuta kaikkien aiemmin kyseiselle rikkoutuneelle ajoneuvolle osoitettujen tehtävien tila seuraavaksi:
"pending". Näin API voi osoittaa ne uudelleen muihin käytettävissä oleviin ajoneuvoihin ja laskea niiden arvioidut saapumisajat uudelleen. - Lähetä uudelleenoptimoitavaksi. Lähetä päivitetty ongelma sovellusrajapintaan uutta aikataulun optimointia varten.
Aikataulutettujen reittien testaaminen #
Vaihe 1 — Luo käyttöoikeustunnus
Lähetä ensin POST-pyyntö seuraavaan URL-osoitteeseen saadaksesi käyttöoikeustunnuksen alla olevia tunnistetietoja käyttäen.
Vancouverin (vuokralainen 2) POST-pyynnön runko:
POST-pyynnön runko Suomelle (vuokralainen 3):
Kopioi sitten luotu tunniste. Tässä on kuvakaappaus tästä vaiheesta:
Vaihe 2 — Lähetä syöttötiedot (optimointiongelma) sovellusrajapinnalle
Jos haluat lähettää syötteen API:lle ja saada viitetunnuksen, lisää luotu tunnus seuraavan POST-pyynnön ”Authorization”-kenttään ja syöte pyynnön ”Body”-kenttään.
Esimerkki syötteen hyötykuormasta:
Jos POST-pyyntö onnistuu, saat viitetunnuksen, jonka avulla voit hakea vastauksen GET-pyynnöllä. Alla on kuvakaappaus tästä vaiheesta:
Vaihe 3 — Hae API-kutsun vastaus
Jos haluat saada vastauksen vastaanotetun viitetunnuksen avulla, lisää käyttöoikeustunnus seuraavan GET-pyynnön ”Authorization”-kohtaan ja sisällytä viitetunnus URL-osoitteeseen.
Tässä on kuvakaappaus tästä vaiheesta:
Sanasto #
| Termi | Määritelmä |
|---|---|
problem | Reitityksen ja aikataulutuksen optimointiongelma, joka ratkaistaan API:n avulla. |
solution | API:n tarjoama ratkaisu reitityksen ja aikataulutuksen optimointiongelmaan. |
fleet | Kalusto määrittelee luettelon ajoneuvotyypeistä ja niiden tiedoista. |
job | Luettelo toimitus- tai nouto- ja luovutustehtävistä, jotka tietyn ajoneuvon on suoritettava. |
task | Tehtävä on osa työtä ja se on suoritettava tietyssä paikassa ja tiettyyn aikaan. |
break | Määrite, joka määrittää yhden tai useamman taukoajan kuljettajille tietyissä paikoissa. |
demand | Tehtäväkapasiteettivaatimus esitettynä moniulotteisina yksiköinä (esim. tilavuus, massa). |
duration | Tehtävän suorittamiseen tai taukoon käytetty aika. |
shifts | Määrittelee ajoneuvojen aikataulut, mukaan lukien aloitus- ja päättymisajat, sijainnit ja mahdolliset tauot. |
delivery | Työtehtävä, joka koskee aiemmin kierroksella lastatun esineen toimittamista. |
pickup and delivery | Työ, jossa sekä nouto- että toimituspaikka on määritelty. |
skills | Tiettyjen tehtävien suorittamiseen tarvittavat ajoneuvotaidot (esim. laitteet, kokovaatimukset). |
service window | Aikaväli, jonka sisällä tehtävä on suoritettava. |
start/end location | Mistä ajoneuvo lähtee tai mihin se palaa (esim. varikolle tai autotalliin). |
start/end time | Määrittää vuorojen, taukojen, lähtöjen tai tehtävien ajoituksen. |
location | Osoitteen leveys- ja pituusaste WGS84-muodossa. |
re-optimization | Aktiivisen aikataulun päivittäminen muutosten, kuten uusien/peruttujen tilausten, vuoksi. |
ID (or id) | Työn, tehtävän tai ajoneuvon yksilöivä tunniste. |
VRP | Ajoneuvojen reititysongelma. |
CVRP | Kapasitoituneiden ajoneuvojen reititysongelma. |
PDP | Nouto- ja toimitusongelma. |
limits | Ajoneuvotyypille asetetut rajoitukset. |
objective | Ongelman ratkaisemiseen käytetty optimointistrategia. |
statistics | Ratkaisussa palautettujen optimoitujen reittien tilastot. |
stop | Luettelo tiettyyn aikaan/paikkaan reitin varrella suoritettavista toiminnoista. |
unassigned jobs/tasks | Työt/tehtävät, joita ei voitu määrittää reitille. |
ETA | Arvioitu saapumisaika. Ilmoitetaan kaikille pysähdyksille tulosteessa. |
polyline | Yhdistetty viivapolku, joka edustaa reittiä kartalla. |
encoded polyline | Pakattu merkkijonoversio polyviivasta, jota käytetään datan koon minimoimiseen (esim. _kv~uF|y~wGdkZ~gAx|]t@). |
Usein kysytyt kysymykset #
| Kysymys | Vastaa |
|---|---|
| Tukeeko API nouto- ja toimitusongelman (PDP) ratkaisemista? | Kyllä, katso yksityiskohtainen selitys Opastus -osiosta. |
| Tukeeko API avointa PDP:tä? | Kyllä, voit määrittää mielivaltaiset aloitus- ja lopetuspaikat jokaiselle ajoneuvokalustossasi. |
| Käyttääkö API reaaliaikaista liikennedataa? | Kyllä, se käyttää sekä historiallista että reaaliaikaista liikennedataa. |
| Voinko määrittää ajoneuvojen vuorojen ajat, aloitus- ja lopetuspaikat sekä tauot? | Kyllä, katso Ongelma -sivun laivasto-objekti. |
| Voimmeko määritellä useita mielivaltaisia kapasiteettityyppejä ajoneuvoille? | Kyllä, capacity Fleet-objektin attribuutti tukee useita ulottuvuuksia, kuten painoa, tilavuutta ja määrää. |
| Voimmeko määrittää tehtävien enimmäismäärän ajoneuvoa kohden? | Kyllä, tämä voidaan määrittää Ongelma-sivun fleet-objektin avulla. |
| Tukeeko API useita taukoja ajoneuvoa kohti? | Kyllä, tuettu Ongelma-sivun laivasto-objektin kautta. |
| Tukeeko API noutoja, toimituksia vai molempia? | Kyllä, katso jobs-objekti ongelman dokumentaatiosta. |
| Voinko määrittää tehtävän keston? | Kyllä, käytä duration-attribuuttia Problem-tyypin jobs-objektissa. |
| Voinko määritellä mielivaltaisia tehtävien kapasiteettivaatimuksia? | Kyllä, tuettu ongelman määrittelyn jobs-objektin kautta. |
| Voimmeko määritellä palveluaikaikkunan tehtävää kohden? | Kyllä, määritä aikaisin ja myöhäisin aloitusaika käyttämällä työobjektin aikaikkunoita. |
| Voinko määritellä kullekin tehtävälle vaadittavat taidot tai ominaisuudet? | Kyllä, piirteitä tuetaan työpaikkaobjektissa, ja ne auttavat yhdistämään tehtäviä päteviin ajoneuvoihin tai kuljettajiin. |
| Tukeeko API käynnissä olevien reittien uudelleenoptimointia? | Kyllä, katso ohjeet keskeneräisten ratkaisujen uudelleenoptimointiin oppaasta. |
| Tarjoaako API reitti- ja aikataulutilastoja? | Kyllä, katso Ratkaisusta yksityiskohtaiset tilastot, kuten matka-aika, etäisyys ja määräämättömät työt. |
| Selittääkö API, miksi tehtäviä ei määritetty? | Kyllä, katso Ratkaisu syitä määräämättömille töille. |
| Palauttaako API arvioidut saapumisajat? | Kyllä, katso tehtäväkohtaiset arvioidut saapumisajat ratkaisusta . |
| Voiko API klusteroida töitä sijainnin mukaan? | Kyllä, klusterointia tuetaan reittien tehokkuuden parantamiseksi. |
| Voinko valita eri optimointitavoitteita? | Kyllä. Vaihtoehtoja ovat: Matka-ajan minimointi, reittien lukumäärän minimointi ja työmäärän tasapainottaminen reittien välillä. Katso lisätietoja kohdasta Ongelma. |