Method: projects.locations.optimizeToursLongRunning

Đây là một biến thể của phương thức locations.optimizeTours được thiết kế để tối ưu hoá với các giá trị thời gian chờ lớn. Bạn nên ưu tiên phương thức này hơn phương thức locations.optimizeTours đối với các hoạt động tối ưu hoá mất hơn vài phút.

long-running operation (LRO) được trả về sẽ có tên theo định dạng <parent>/operations/<operation_id> và có thể dùng để theo dõi tiến trình tính toán. Loại trường metadata là OptimizeToursLongRunningMetadata. Loại trường response là OptimizeToursResponse, nếu thành công.

Yêu cầu HTTP

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeToursLongRunning

URL sử dụng cú pháp Chuyển mã gRPC.

Tham số đường dẫn

Tham số
parent

string

Bắt buộc. Dự án hoặc vị trí mục tiêu để thực hiện cuộc gọi.

Định dạng:

  • projects/{project-id}
  • projects/{project-id}/locations/-

Giá trị {location-id} theo khu vực không được hỗ trợ.

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu với cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
Trường
timeout

string (Duration format)

Nếu bạn đặt thời gian chờ này, máy chủ sẽ trả về phản hồi trước khi hết thời gian chờ hoặc trước khi đến thời hạn của máy chủ cho các yêu cầu đồng bộ, tuỳ theo thời điểm nào đến trước.

Đối với các tài nguyên không đồng bộ, máy chủ sẽ tạo một giải pháp (nếu có thể) trước khi hết thời gian chờ.

model

object (ShipmentModel)

Mô hình lô hàng cần giải quyết.

solvingMode

enum (SolvingMode)

Theo mặc định, chế độ giải là DEFAULT_SOLVE (0).

searchMode

enum (SearchMode)

Chế độ tìm kiếm được dùng để giải quyết yêu cầu.

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Hướng dẫn thuật toán tối ưu hoá tìm ra giải pháp đầu tiên tương tự như giải pháp trước đó.

Mô hình bị ràng buộc khi giải pháp đầu tiên được xây dựng. Mọi lô hàng không được thực hiện trên một tuyến đường đều được bỏ qua ngầm định trong giải pháp đầu tiên, nhưng có thể được thực hiện trong các giải pháp tiếp theo.

Giải pháp phải đáp ứng một số giả định cơ bản về tính hợp lệ:

  • đối với tất cả các tuyến, vehicleIndex phải nằm trong phạm vi và không được trùng lặp.
  • đối với tất cả các lượt truy cập, shipmentIndex và visitRequestIndex phải nằm trong phạm vi.
  • một lô hàng chỉ có thể được tham chiếu trên một tuyến đường.
  • bạn phải thực hiện việc lấy hàng của một lô hàng lấy và giao trước khi giao hàng.
  • không được thực hiện quá một phương án thay thế cho việc đến lấy hàng hoặc giao hàng của một lô hàng.
  • đối với tất cả các tuyến đường, thời gian đều tăng (tức là vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • chỉ được phép vận chuyển bằng phương tiện được cho phép. Xe được phép nếu Shipment.allowed_vehicle_indices trống hoặc vehicleIndex của xe có trong Shipment.allowed_vehicle_indices.

Nếu giải pháp được chèn không khả thi, thì hệ thống không nhất thiết phải trả về lỗi xác thực mà có thể trả về lỗi cho biết giải pháp không khả thi.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Ràng buộc thuật toán tối ưu hoá để tìm ra giải pháp cuối cùng tương tự như giải pháp trước đó. Ví dụ: bạn có thể dùng thuộc tính này để cố định các phần của tuyến đường đã hoàn thành hoặc sắp hoàn thành nhưng không được sửa đổi.

Nếu giải pháp được chèn không khả thi, thì hệ thống không nhất thiết phải trả về lỗi xác thực mà có thể trả về lỗi cho biết giải pháp không khả thi.

refreshDetailsRoutes[]

object (ShipmentRoute)

Nếu không trống, các tuyến đường đã cho sẽ được làm mới mà không sửa đổi trình tự ghé thăm hoặc thời gian di chuyển cơ bản: chỉ các thông tin chi tiết khác mới được cập nhật. Thao tác này không giải quyết được mô hình.

Kể từ tháng 11 năm 2020, thuộc tính này chỉ điền sẵn các hình nhiều đường của những tuyến đường không trống và yêu cầu populatePolylines phải là true.

Trường routePolyline của các tuyến được truyền vào có thể không nhất quán với tuyến transitions.

Bạn không được sử dụng trường này cùng với injectedFirstSolutionRoutes hoặc injectedSolutionConstraint.

Shipment.ignore và Vehicle.ignore không ảnh hưởng đến hành vi. Hình nhiều đường vẫn được điền giữa tất cả các lượt ghé thăm trong tất cả các tuyến đường không trống, bất kể các lô hàng hoặc xe liên quan có bị bỏ qua hay không.

interpretInjectedSolutionsUsingLabels

boolean

Nếu đúng:

Cách diễn giải này áp dụng cho các trường injectedFirstSolutionRoutes, injectedSolutionConstraint và refreshDetailsRoutes. Bạn có thể sử dụng chỉ mục này khi chỉ mục lô hàng hoặc xe trong yêu cầu đã thay đổi kể từ khi giải pháp được tạo, có thể là do lô hàng hoặc xe đã bị xoá hoặc thêm vào yêu cầu.

Nếu đúng, nhãn trong các danh mục sau đây chỉ được xuất hiện tối đa một lần trong danh mục của chúng:

Nếu một vehicleLabel trong giải pháp được chèn không tương ứng với một phương tiện yêu cầu, thì tuyến đường tương ứng sẽ bị xoá khỏi giải pháp cùng với các lượt ghé thăm của tuyến đường đó. Nếu một shipmentLabel trong giải pháp được chèn không tương ứng với một lô hàng theo yêu cầu, thì lượt ghé thăm tương ứng sẽ bị xoá khỏi giải pháp. Nếu một SkippedShipment.label trong giải pháp được chèn không tương ứng với một lô hàng được yêu cầu, thì SkippedShipment sẽ bị xoá khỏi giải pháp.

Việc xoá các lượt ghé thăm tuyến đường hoặc toàn bộ tuyến đường khỏi một giải pháp được chèn có thể ảnh hưởng đến các quy tắc ràng buộc ngầm định, dẫn đến thay đổi trong giải pháp, lỗi xác thực hoặc không khả thi.

LƯU Ý: Phương thức gọi phải đảm bảo rằng mỗi Vehicle.label (resp. Shipment.label) xác định duy nhất một thực thể xe (hoặc lô hàng) được dùng trong hai yêu cầu có liên quan: yêu cầu trước đây đã tạo ra OptimizeToursResponse được dùng trong giải pháp được chèn và yêu cầu hiện tại bao gồm giải pháp được chèn. Các bước kiểm tra tính duy nhất được mô tả ở trên không đủ để đảm bảo yêu cầu này.

considerRoadTraffic

boolean

Cân nhắc thông tin ước tính lưu lượng truy cập khi tính toán các trường ShipmentRoute Transition.travel_duration, Visit.start_time và vehicleEndTime; khi đặt trường ShipmentRoute.has_traffic_infeasibilities và khi tính toán trường OptimizeToursResponse.total_cost.

populatePolylines

boolean

Nếu đúng, hình nhiều đường sẽ được điền vào ShipmentRoute phản hồi.

populateTransitionPolylines

boolean

Nếu đúng, hình nhiều đường và mã thông báo tuyến đường sẽ được điền vào phản hồi ShipmentRoute.transitions.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Nếu bạn đặt giá trị này, thì yêu cầu có thể có thời hạn (xem https://grpc.io/blog/deadlines) lên đến 60 phút. Nếu không, thời hạn tối đa chỉ là 30 phút. Xin lưu ý rằng các yêu cầu có thời gian hoạt động dài có nguy cơ bị gián đoạn cao hơn đáng kể (nhưng vẫn ở mức thấp).

useGeodesicDistances

boolean

Nếu đúng, quãng đường di chuyển sẽ được tính bằng khoảng cách trắc địa thay vì khoảng cách trên Google Maps và thời gian di chuyển sẽ được tính bằng khoảng cách trắc địa với tốc độ do geodesicMetersPerSecond xác định.

label

string

Nhãn có thể được dùng để xác định yêu cầu này, được báo cáo lại trong OptimizeToursResponse.request_label.

geodesicMetersPerSecond

number

Khi useGeodesicDistances là true, bạn phải đặt trường này và xác định tốc độ được áp dụng để tính thời gian di chuyển. Giá trị của thuộc tính này phải ít nhất là 1 m/giây.

maxValidationErrors

integer

Cắt bớt số lỗi xác thực được trả về. Những lỗi này thường được đính kèm vào tải trọng lỗi INVALID_ARGUMENT dưới dạng thông tin chi tiết về lỗi BadRequest (https://cloud.google.com/apis/design/errors#error_details), trừ phi solvingMode=VALIDATE_ONLY: hãy xem trường OptimizeToursResponse.validation_errors. Giá trị mặc định là 100 và tối đa là 10.000.

Nội dung phản hồi

Nếu thành công, nội dung phản hồi sẽ chứa một thực thể của Operation.

Phạm vi uỷ quyền

Yêu cầu phạm vi OAuth sau:

  • https://www.googleapis.com/auth/cloud-platform

Quyền IAM

Cần có quyền IAM sau đây đối với tài nguyên parent:

  • routeoptimization.operations.create

Để biết thêm thông tin, hãy xem tài liệu về IAM.