API – okienka czasowe

Ta strona opisuje zaawansowane funkcje OptiFacility dotyczące okienek czasowych (czyli przedziałów czasu, kiedy pracownicy mogą odwiedzać obiekty). Zanim przeczytasz tę część, zapoznaj się z podstawowymi możliwościami OptiFacility.

Następujący plik json definiuje problem z ograniczeniami okien czasowych. Dodatki do podstawowego pliku json są podświetlone:

{
    "UserID": "demo",
    "RequestID": 12347,
    "Comment": "my first request with time window constraints",
    "Quality": 2,
    "AgentSpeed": 45.0,
    "AgentWorkTime": 12.0,
    "AgentVisitTime": 1.0,
    "AgentStartTime": 6.0,
    "CostAgentWork1h": 70.0,
    "CostAgentTravel1km": 1.0,
    "Facilities": [{"Lat":51.929, "Lon":18.615, "TimeConstraints":[{"From":0.0,"To":16.0}]},
                   {"Lat":52.039, "Lon":18.765, "TimeConstraints":[{"From":18.0,"To":20.0}]},
                   {"Lat":51.874, "Lon":18.971, "TimeConstraints":[{"From":35.2,"To":37.4}]},
                   {"Lat":52.058, "Lon":19.177, "TimeConstraints":[{"From":10.0,"To":13.0},
                                                                   {"From":14.0,"To":17.0}]},
                   {"Lat":51.99,  "Lon":18.589},
                   {"Lat":51.865, "Lon":18.765},
                   {"Lat":51.89,  "Lon":19.098},
                   {"Lat":52.014, "Lon":18.89},
                   {"Lat":52.011, "Lon":19.237}],
    "Agents": [{"Lat":51.768, "Lon":19.094,  "AgentStartTime": 9.0}],
    "Task": "FindRoutesCommutingIncluded"
}

Znaczenie podświetlonych pól wyjaśnione jest poniżej:

  • AgentStartTime – pole opcjonalne: czas (w godzinach), w którym pracownik (kurier, serwisant) zaczyna swoją pracę. Ta wartość zostanie uznana za domyślną dla wszystkich pracowników w tym problemie. Jeśli nie zostanie zdefiniowana, domyślną wartością będzie 9.0.
  • Facilities: TimeConstraints – tablica przedziałów definiująca okienka czasowe, w których obiekt może być odwiedzony. Obiekt musi być odwiedzony tylko w jednym z okien czasowych, nie we wszystkich. Każde okienko czasowe jest określone przez dwie wartości: "From" i "To". Wartość "From" definiuje najwcześniejszy moment, w którym pracownik może rozpocząć wizytę w lokalizacji, a wartość "To" definiuje najpóźniejszy moment, w którym pracownik może zakończyć wizytę. Zatem jeśli czas pomiędzy "To" i "From" będzie krótszy niż wartość "AgentVisitTime", to żaden pracownik nie będzie mógł odwiedzić obiektu w takim okienku.

    Okienka czasowe muszą być definiowane w porządku chronologicznym i nie mogą się pokrywać. Obiekty bez zdefiniowanych ograniczeń czasowych mogą być odwiedzone o dowolnej porze.

  • Agents: AgentStartTime – pole opcjonalne: czas (w godzinach), kiedy dany pracownik rozpoczyna pracę. Ta wartość zastępuje wartość domyślną.

Wartości czasowe w "TimeConstraints" są zdefiniowane względem 0.0, które oznacza północ (początek) pierwszego dnia. Wartość 17.25 oznacza 17:15 (5:15pm). Wartość 30.5 oznacza drugi dzień, 6:30am (1*24.0 + 6.5).

Okna czasowe mogą wyrażać terminy. Aby wykorzystać okna czasowe do tego celu, wartość "From" powinna zostać ustawiona na 0.0, podczas gdy wartość "To" powinna odpowiadać terminowi odwiedzenia lokalizacji. Okna czasowe mogą być dłuższe niż 24 godziny.