VRP - Vehicle Routing Problem

Vehicle Routing Problem (VRP) là API cung cấp giải pháp để tối ưu tuyến đường vận chuyển cho một đội xe phục vụ một lượng công việc nhất định. API này cung cấp các tuỳ chọn cho phép bổ sung các tham số về trọng lượng phục vụ, chi phí, thời gian hoạt động của một xe để đưa ra các tuyến đường phù hợp nhằm đáp ứng một lượng công việc đưa vào, bao gồm việc giao hàng, nhận hàng, thời gian nhận hàng, thời gian giao hàng 

API

URL: /vrp

Method: POST

Content-Type: application/json

Request mẫu

curl --location --request POST 'https://api.vnmap.com.vn/vrp' \
--header 'Content-Type: application/json' \ 
--data-raw '{
    "key":"{{API_KEY}}",
    "vehicles":[
        {
            "id":1,
            "start":{"lng":106.68314908546016,"lat":10.803259272429408},
            "capacity":55,  
            "costs":2500,  
            "end":{"lng":106.68568109074583,"lat":10.811985176196991}
        },
        {
            "id":1,
            "start":{"lng":106.68314908546016,"lat":10.803259272429408},
            "capacity":22, 
             "costs":2500,  
            "end":{"lng":106.68568109074583,"lat":10.811985176196991}
        } 
    ],
     "jobs":[
        {
            "id":1,
            "description":"Giao anh Quoc", 
            "delivery": 1 ,
            "pickup": 55 ,
            "priority":1,
            "location":{"lng":106.67366479437896,"lat":10.803975901943996}
        },
        {
            "id":2,
            "description":"Giao anh Duc", 
          "delivery": 1 ,
            "pickup": 1 ,
            "priority":1,
            "location":{"lng":106.69246171497416,"lat":10.790317489166636}
        },
        {
            "id":3,
            "description":"Giao anh Duc 2", 
            "priority":11,
            "delivery": 1 ,
            "pickup": 1 ,
            "location":{"lng":106.68413613827217,"lat":10.798242816645477}
        },
        {
            "id":4,
            "delivery": 1 ,
            "pickup": 1 ,
            "description":"Giao anh AA", 
            "priority":11,
            "location":{"lng":106.65915940816625,"lat":10.785638075366874}
        }
    ]
}'

Input  

Tham số Mô tả
jobs Là một mảng các công việc đưa vào. Thông tin công việc là một đối tượng job được mô tả bên dưới
shipments Đây là một mảng chứa các công việc vừa lấy hàng và vừa giao hàng trực tiếp 
vehicles Là một mảng các phương tiện truyền vào 

Phương tiện

Phương tiện truyền vào bao gồm các tham số như sau:

Key Description
id id của phương tiện. Id này không được trùng lặp
[description] Mô tả cho phương tiện
start Toạ độ bắt đầu của phương tiện {lat:10.1213,lng:106.12122}
[end] [Không bắt buộc] Toạ độ kết thúc của phương tiện {lat:10.1213,lng:106.12122}
[capacity] [Không bắt buộc] Khối lượng tối đa mà phương tiện có thể vận chuyển được
[costs] [Không bắt buộc] Chi phí cho phương tiện
[time_window] [Không bắt buộc] Thời gian hoạt động của phương tiện [bắt đầu, kết thúc]. Đơn vị là timestamp

Jobs

Là một đối tượng job chứa các tham số như sau:

Key Description
id ID duy nhất cho công việc
[description] Mô tả cho công việc
location {lat:10.1212,lng:106.2323}
delivery khối lượng giao hàng của xe
pickup khối lượng nhận hàng của xe
[priority] Tham số quy định độ ưu tiên của xe giá trị từ 0 đến 100. Mặc định là 0
[time_windows] một mãng chứa thời gian làm việc [bắt đầu,kết thúc]. Đơn vị tính là timestamp

Nếu các công việc có id giống nhau thì sẽ báo lỗi

Shipments  

Đây là một mảng chứa các công việc vừa lấy hàng và vừa giao hàng trực tiếp 

Key Description
pickup Là một đối tượng shipment được mô tả bên dưới
delivery Là một đối tượng shipment được mô tả bên dưới
priority Tham số quy định độ ưu tiên của xe giá trị từ 0 đến 100. Mặc định là 0
amount Khối lượng đơn hàng

Đối tượng shipment

Key Description
id Id của công việc
[description] Mô tả cho công việc
location Vị trí của công việc. Ví dụ: {lat:10.1212,lng:106.2323}

Kết quả

Key Description
code Thông tin mã lỗi
results Mãng chứa kết quả tổng hợp
unassigned Mãng chứa danh sách các công việc chưa phân công được.
routes Kết quả tuyến đường di chuyển 

Code

Value Status
0 Thành công
1 Server bị lỗi
2 Dữ liệu đầu vào không hợp lệ
3 Vấn đề định tuyến không hợp lệ

Results  

Key Description
cost Chi phí tổng của các lộ trình
routes Tổng số tuyến đường trả về
unassigned Tổng số công việc chưa được phân công
duration Thời gian di chuyển
[delivery] Tổng khối lượng giao hàng
[pickup] Tổng khối lượng nhận hàng
[distance]* Quảng đường di chuyển

Routes 

Key Description
vehicle id của phương tiện truyền vào
steps Thông tin chi tiết công việc 
duration Thời gian di chuyển
[delivery] Tổng khối lượng giao hàng
[pickup] Tổng khối lượng nhận hàng
[description] Mô tả phương tiện
[overview_polyline]* Thông tin tuyến đường di chuyển show trên bản đồ
[distance]* Quảng đường đi

Steps

step object has the following properties:

Key Description
type Thông tin công việc (startjobpickupdeliveryend)
duration Thời gian trên từng step
[description] Mô tả công việc
[location] Toạ độ điểm đến
[id] id của công việc
[distance]* Quảng đường di chuyển

Kết quả mẫu

{
    "code": 0,
    "result": {
        "routes": 2,
        "delivery": [
            4
        ],
        "pickup": [
            58
        ],
        "duration": 1765,
        "distance": 23924,
        "unassigned": 0
    },
    "routes": [
        {
            "vehicle": 1,
            "delivery": 1,
            "pickup": 55,
            "duration": 572,
            "priority": 1,
            "distance": 6589,
            "steps": [
                {
                    "type": "start",
                    "location": {
                        "lat": 10.803259272429408,
                        "lng": 106.68314908546016
                    },
                    "load": 1,
                    "duration": 0,
                    "distance": 0
                },
                {
                    "type": "job",
                    "location": {
                        "lat": 10.803975901943996,
                        "lng": 106.67366479437896
                    },
                    "id": 1,
                    "job": 1,
                    "load": 55,
                    "duration": 268,
                    "distance": 3294
                },
                {
                    "type": "end",
                    "location": {
                        "lat": 10.811985176196991,
                        "lng": 106.68568109074585
                    },
                    "load": 55,
                    "duration": 572,
                    "distance": 6589
                }
            ],
            "overview_polyline": "q_}`AqpcjSCE]]YWq@o@SUc@d@c@n@e@v@W`@]d@m@t@GLGLMVYl@IJOb@ETK^KZGPIZKn@SRWNc@_@q@k@FGn@u@JQVa@p@u@^q@T[bAyA\\i@f@u@f@m@HKZa@JOJKXSTOPMjBuApApAdAdAVXxBvBFFnArAnArALNbAbAPRPR`@b@FH\\\\HHx@x@^^RVLRN`@DLBTM~EEvASrDG|ACn@ARGxB?JADGrBEbBAJInBWtGCh@OxDAXALA`@GjAe@?Y?E@EMAAC?_CIqAe@CAQ?g@_@gAi@a@YQM[k@cD{BFKeD}Ba@[GHIJsArBwAtBcD}B{CyBmBrCm@c@[UWQKIg@]OIa@[QSsB_BqC}B[Ww@q@m@e@qCcCsA_ASQs@o@K_@_@_@gA}@a@]WSWWm@i@oAeAK[DKFSBWASESIOMOQIKEMCMAO@MY[_AcA_DgByEaA_Cy@iBkD{GRKUa@q@mAS_@o@uAo@oAISCECEl@PPHd@TNMD?ZBXCp@I`AWEUEQHK|@c@~@g@l@UdCy@j@O|@]r@S`@Qn@Yb@ULG~@m@^n@JN^t@Tl@@J?JSLMHKH?LBRZNPNnAbALFHH"
        },
        {
            "vehicle": 1,
            "delivery": 3,
            "pickup": 3,
            "duration": 1193,
            "priority": 23,
            "distance": 17335,
            "steps": [
                {
                    "type": "start",
                    "location": {
                        "lat": 10.803259272429408,
                        "lng": 106.68314908546016
                    },
                    "load": 3,
                    "duration": 0,
                    "distance": 0
                },
                {
                    "type": "job",
                    "location": {
                        "lat": 10.790317489166636,
                        "lng": 106.69246171497416
                    },
                    "id": 2,
                    "job": 2,
                    "load": 3,
                    "duration": 271,
                    "distance": 3666
                },
                {
                    "type": "job",
                    "location": {
                        "lat": 10.785638075366874,
                        "lng": 106.65915940816625
                    },
                    "id": 4,
                    "job": 4,
                    "load": 3,
                    "duration": 601,
                    "distance": 8731
                },
                {
                    "type": "job",
                    "location": {
                        "lat": 10.798242816645477,
                        "lng": 106.68413613827217
                    },
                    "id": 3,
                    "job": 3,
                    "load": 3,
                    "duration": 938,
                    "distance": 13872
                },
                {
                    "type": "end",
                    "location": {
                        "lat": 10.811985176196991,
                        "lng": 106.68568109074585
                    },
                    "load": 3,
                    "duration": 1193,
                    "distance": 17335
                }
            ],
            "overview_polyline": "q_}`AqpcjSCE]]YWq@o@SUc@d@c@n@e@v@W`@]d@m@t@GLGLMVYl@IJOb@ETK^KZGPIZKn@SRWNc@_@q@k@FGn@u@JQVa@p@u@^q@T[bAyA\\i@f@u@f@m@HKZa@JOJKXSTOPMjBuApApAdAdAVXxBvBFFnArAnArALNbAbAPRPR`@b@FH\\\\HHx@x@^^RVLRN`@VKTInBw@BAt@WB?@AxAg@HC`Bi@dA_@bA_@r@W\\[f@_@FIJMRSLQ`@g@Zg@`AuAf@s@X_@\\g@j@w@Za@\\e@RY@C^e@b@m@t@aA\\g@RWt@eA|AoBb@k@LQhA_Bl@q@^k@d@k@HMt@gALMfA_B\\g@b@i@d@i@DIt@cAPS^k@\\c@^m@X[q@i@e@_@aAw@a@Y{BgBPg@UYGGJ]r@oBDOr@oBfC`Cb@^l@p@bAdA`@\\~@z@tAjA`A`AXVdAfANLXXlBnBnAjA~AxANJLNx@z@TXlBnBRRrAxAJH~BvBd@b@LJ^^z@z@`@d@jBjBjCfCt@n@j@f@\\\\~@~@dChCJHJJbA`AlBxBNXUBKDIFGJCJAJ@L@HDHHJA^ETa@~@Sb@MXWl@Sd@]v@Uf@y@rBi@dAGPMVGP[n@INs@dBITO\\ORGREFINaAbCMZWj@GLQ`@OXQb@O`@KRUh@_@x@]x@CDIRg@fAi@nASd@a@~@GJO\\_@z@e@fAQ`@q@zACD]x@Sd@ABUf@A@EJa@`AEJQ^Sb@ADKTUh@c@~@O^KVa@~@e@fAu@dBOZq@xAM\\Sd@g@dAG@cAzBm@tAaAxBm@nAy@rBCX[r@a@|@MZa@~@a@z@Wf@ITGPBtAAfCCzAAF@LLDPFLFLHLJ\\h@JPFJHNLNZJ~@LVBl@Dz@JN?F?L?B@TBH@NBTAX?V?TCWVVWUBW?Y?U@OCIAUCCAM?G?O?{@Km@EWC_AM[KMOIOGKKQaBhBIB@J@^AH?LsAFO?QGMGgAaAq@e@q@~AMZSd@EHSd@[t@O^GL]t@EL]t@?@Ud@]x@{AtDWn@Yj@GPINaAxBaBrD_@XKHMBK@M?OESEq@o@eAs@CAg@_@a@k@wAmAQQa@e@OOEEg@k@CKCIOSKKmBkBUWwEgFeCmCi@c@wAmAkAqAaAeA[]}@eAKMOOwAuBCMEIKMKEg@y@Qe@JyB@e@Dy@@q@D_A@[GcA\\gIBWPkEBk@?MDq@Do@FkAJ{@?QDkA?MDs@BeABe@FsADqA@GLcDDgABc@Bg@@YBa@DoADy@@[B{@DeAJqCDaA@M@c@DuAHeC?E?KDu@F}ABc@FiBNwC@_@DaAHuCBo@@e@?E?OCa@OYOWwAuAr@u@\\]b@e@n@m@h@k@FE?GCWAOEc@CW?I@IJYH_@D]BM?GBc@@C?a@CUGOESBKLe@h@JLBMCi@KMd@CJDRFNBT?`@ABCb@?FCLE\\I^KXAH?HBVDb@@NBV?FGDi@j@o@l@c@d@]\\s@t@mAkAsByBACwAyAuB{BsAwAUS_AcA}B_Cs@m@MQi@u@O]I]AECYAe@Bs@?KRcCBa@Hg@Bm@@SHwAJmAJuAHgBFi@@k@JaBFcAFkAXsDB[JyAOAoA\\MFuAh@_Br@KFo@T}ApAm@b@OJOLGDiBbB]Vc@b@e@`@[Z_@\\EDoAhAe@`@QP[j@S^o@zASh@Sd@g@lAMXI^YdA?j@@\\Ch@APCNMr@e@tACB]x@O\\O^eAtBCA_@Ii@EGASAe@K_@GWa@KOKKCEQWEGMQW[a@o@Vm@Ci@KUSUUU"
        }
    ],
    "unassigned": []
}