Model ghi lại các chế độ cài đặt và ràng buộc cho toàn bộ yêu cầu, bao gồm cả Shipments và Vehicles.
Lô hàng thể hiện các nhiệm vụ hoặc lô hàng thực tế, bao gồm cả VisitRequest nhận và giao hàng. Lô hàng có các chế độ cài đặt và quy tắc hạn chế tại địa phương.
Phương tiện đại diện cho phương tiện, người lái xe hoặc nhân viên. Xe cũng có các chế độ cài đặt và hạn chế tại địa phương.
Các thuộc tính của mỗi thực thể mô tả một phần của vấn đề tối ưu hoá ở một mức độ chi tiết cụ thể. Các ràng buộc trên toàn mô hình được áp dụng cho tất cả các lô hàng và xe, trong khi các ràng buộc và thuộc tính được chỉ định trên lô hàng hoặc xe chỉ dành riêng cho một lô hàng hoặc xe.
Để xem tài liệu đầy đủ về từng loại thông báo, hãy xem tài liệu tham khảo cho thông báo ShipmentModel (REST, gRPC), Shipment (REST, gRPC) và Vehicle (REST, gRPC).
OptimizeToursRequest cơ sở lưu trú
Sau đây là một số thuộc tính thường dùng của thông báo OptimizeToursRequest cấp cao nhất (REST, gRPC):
searchMode cho biết có nên trả về giải pháp đầu tiên đáp ứng các ràng buộc đã chỉ định hay tìm giải pháp tốt nhất có thể trong một thời hạn nhất định.
considerRoadTraffic xác định xem có sử dụng tình hình giao thông trực tiếp để định tuyến và ước tính thời gian đến hay không.
populateTransitionPolylines xác định xem các đường nhiều đoạn của tuyến đường và mã thông báo tuyến đường có được trả về trong phản hồi hay không.
Thuộc tính mô hình
Sau đây là một số thuộc tính thường dùng của thông báo ShipmentModel (REST, gRPC):
globalStartTime biểu thị thời gian bắt đầu sớm nhất của các tuyến đường trên tất cả các phương tiện và lô hàng. Không có phương tiện nào được phép bắt đầu quá trình chuyển đổi và vận chuyển đầu tiên trước thời gian này.
globalEndTime thể hiện thời gian kết thúc mới nhất của các tuyến đường trên tất cả các phương tiện và lô hàng. Tất cả các lô hàng và quá trình chuyển đổi được chỉ định phải hoàn tất trước thời gian này.
Thuộc tính thông tin vận chuyển
Sau đây là một số thuộc tính thường dùng của thông báo Shipment (REST, gRPC):
pickups[] và deliveries[] biểu thị nơi bạn có thể đến lấy hoặc gửi một lô hàng. Cả hai thuộc tính pickups[] và deliveries[] đều sử dụng thông báo VisitRequest (REST, gRPC).
loadDemands biểu thị tải trọng cần thiết để một chiếc xe hoàn tất việc vận chuyển. Thuộc tính load_limits (REST, gRPC) tương ứng của xe biểu thị lượng tải mà xe có thể chứa tại một thời điểm.
Đọc thêm về tải trong phần Yêu cầu và giới hạn về tải.
penalty_cost biểu thị chi phí phát sinh nếu một lô hàng bị bỏ qua. Đọc thêm về chi phí trong Tham số mô hình chi phí.
Thuộc tính xe
Sau đây là một số thuộc tính thường dùng của thông báo Vehicle (REST, gRPC):
startLocation biểu thị vị trí mà xe phải bắt đầu tuyến đường. Thuộc tính này là không bắt buộc. Nếu không được chỉ định, tuyến đường của xe sẽ bắt đầu tại vị trí của lô hàng được giao đầu tiên.
endLocation biểu thị nơi xe phải kết thúc tuyến đường. Thuộc tính này là không bắt buộc. Nếu bạn không chỉ định, tuyến đường của xe sẽ kết thúc tại vị trí của lô hàng được giao gần đây nhất.
startTimeWindows[] biểu thị thời điểm xe có thể bắt đầu hành trình. Thuộc tính này là không bắt buộc.
endTimeWindows[] biểu thị thời điểm một xe có thể bắt đầu và kết thúc tuyến đường.
Cả hai thuộc tính đều không bắt buộc.
loadLimits thể hiện sức chứa của xe để đáp ứng nhu cầu về tải trọng của các lô hàng. Đọc thêm về nhu cầu và giới hạn tải trong phần Nhu cầu và giới hạn tải.
Một yêu cầu mẫu hoàn chỉnh ở định dạng JSON sẽ có dạng như sau:
Cả OptimizeTours và BatchOptimizeTours đều sử dụng các thông báo yêu cầu như ví dụ ở trên, nhưng theo những cách khác nhau. Trước khi đưa ra yêu cầu Tối ưu hoá tuyến đường, bạn cần hiểu rõ sự khác biệt giữa hai phương thức này:
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-09-04 UTC."],[[["\u003cp\u003eRoute Optimization requests require defining a \u003ccode\u003eModel\u003c/code\u003e with \u003ccode\u003eShipments\u003c/code\u003e and \u003ccode\u003eVehicles\u003c/code\u003e to represent the optimization problem.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eModel\u003c/code\u003e sets global parameters, while \u003ccode\u003eShipments\u003c/code\u003e and \u003ccode\u003eVehicles\u003c/code\u003e have individual properties and constraints for pickups, deliveries, loads, and time windows.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eOptimizeToursRequest\u003c/code\u003e allows controlling the search mode, traffic considerations, and response details.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eOptimizeTours\u003c/code\u003e and \u003ccode\u003eBatchOptimizeTours\u003c/code\u003e offer synchronous and asynchronous request processing, respectively, with key differences in handling large or complex scenarios.\u003c/p\u003e\n"],["\u003cp\u003eYou can specify global start and end times for all vehicles and shipments within the \u003ccode\u003eShipmentModel\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# Construct a request message\n\n**European Economic Area (EEA) developers** If your billing address is in the European Economic Area, effective on 8 July 2025, the [Google Maps Platform EEA Terms of Service](https://cloud.google.com/terms/maps-platform/eea) will apply to your use of the Services. Functionality varies by region. [Learn more](/maps/comms/eea/faq).\n\nAs briefly described in [Route Optimization Overview](/maps/documentation/route-optimization/overview), a basic request\nconsists of **Model** , **Shipments** , and **Vehicles** as required entities:\n\n- **Model** captures settings and constraints for the entire request, inclusive of both `Shipments` and `Vehicles`.\n- **Shipments** represent tasks or actual shipments that include pickup and delivery `VisitRequest`s. Shipments have local settings and constraints.\n- **Vehicles** represent vehicles, drivers, or personnel. Vehicles also have local settings and constraints.\n\nEach entity's properties describe part of an optimization problem at a\nparticular level of granularity. Model-wide constraints are applied to all\nshipments and vehicles, while constraints and properties specified on shipments\nor vehicles are specific to a single shipment or vehicle.\n\nFor complete documentation on each message type, see the reference documentation\nfor `ShipmentModel` ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentModel), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.ShipmentModel)), `Shipment` ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentModel#Shipment), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.Shipment)),\nand `Vehicle` ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentModel#Vehicle), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.Vehicle)) messages.\n\n`OptimizeToursRequest` properties\n---------------------------------\n\nSome commonly used properties of the top-level `OptimizeToursRequest` message\n([REST](/maps/documentation/route-optimization/reference/rest/v1/projects/optimizeTours), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.OptimizeToursRequest)) include the following:\n\n- `searchMode` indicates whether to return the first solution that satisfies specified constraints or find the best possible solution within a set deadline.\n- `considerRoadTraffic` determines whether or not live traffic is used for routing and ETA estimation.\n- `populateTransitionPolylines` determines whether or not route polylines and route tokens are returned in the response.\n\nModel properties\n----------------\n\nSome commonly used properties of the `ShipmentModel` message ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentModel),\n[gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.ShipmentModel)) include:\n\n- `globalStartTime` represents the earliest start time of routes across all vehicles and shipments. No vehicle may start its first transitions and shipments before this time.\n- `globalEndTime` represents the latest end time of routes across all vehicles and shipments. All assigned shipments and transitions must be complete before this time.\n\nShipment properties\n-------------------\n\nSome commonly used properties of the `Shipment` message ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentModel#Shipment), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.Shipment))\ninclude:\n\n- `pickups[]` and `deliveries[]` represent where a shipment can be picked up or dropped off. `pickups[]` and `deliveries[]` properties both use the `VisitRequest` message ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentModel#VisitRequest), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.Shipment.VisitRequest)).\n- `loadDemands` represent the load required for a vehicle to complete a shipment. Vehicles' corresponding `load_limits` ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentModel#Vehicle.FIELDS.load_limits), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.Vehicle.FIELDS.repeated.google.maps.routeoptimization.v1.Vehicle.LoadLimitsEntry.google.maps.routeoptimization.v1.Vehicle.load_limits)) property represents how much load a vehicle can accommodate at one time. Read more about load in [Load Demands and Limits](/maps/documentation/route-optimization/load-demands-limits).\n- `penalty_cost` represents the cost incurred if a shipment is skipped. Read more on costs in [Cost Model Parameters](/maps/documentation/route-optimization/cost-model).\n\nVehicle properties\n------------------\n\nSome commonly used properties of the `Vehicle` message ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentModel#Vehicle), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.Vehicle))\ninclude:\n\n- `startLocation` represents where a vehicle must start its route. This property is optional. If not specified, the vehicle's route starts at the location of its first assigned shipment.\n- `endLocation` represents where a vehicle must end its route. This property is optional. If not specified, the vehicle's route ends at the location of its last assigned shipment.\n- `startTimeWindows[]` represents when a vehicle can start its route. This property is optional.\n- `endTimeWindows[]` represents when a vehicle can start and end its route. Both properties are optional.\n- `loadLimits` represent the vehicle's capacity available to meet shipments' load demands. Read more about load demands and limits in [Load Demands and\n Limits](/maps/documentation/route-optimization/load-demands-limits).\n\nA complete example request in JSON format looks like: \n\n {\n \"model\": {\n \"shipments\": [\n {\n \"pickups\": [\n {\n \"arrivalLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n }\n }\n ],\n \"deliveries\": [\n {\n \"arrivalLocation\": {\n \"latitude\": 37.79581,\n \"longitude\": -122.4218856\n }\n }\n ]\n }\n ],\n \"vehicles\": [\n {\n \"startLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n },\n \"endLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n },\n \"costPerKilometer\": 1.0\n }\n ],\n \"globalStartTime\": \"2024-02-13T00:00:00.000Z\",\n \"globalEndTime\": \"2024-02-14T06:00:00.000Z\"\n }\n }\n\n`OptimizeTours` and `BatchOptimizeTours` both consume request messages like the\nexample above, but in different ways. Before making a Route Optimization\nrequest, it's important to understand the difference between the two methods:\n\n[Comparing OptimizeTours and BatchOptimizeTours](/maps/documentation/route-optimization/sync-vs-async)"]]