InjectedSolutionConstraint

Giải pháp được chèn vào yêu cầu, bao gồm thông tin về những lượt truy cập phải bị hạn chế và cách hạn chế các lượt truy cập đó.

Biểu diễn dưới dạng JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Trường
routes[]

object (ShipmentRoute)

Các tuyến đường của giải pháp cần chèn. Một số tuyến đường có thể bị bỏ qua trong giải pháp ban đầu. Các tuyến đường và lô hàng bị bỏ qua phải đáp ứng các giả định về tính hợp lệ cơ bản được liệt kê cho injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Bỏ qua các lô hàng của giải pháp cần chèn. Một số có thể bị bỏ qua trong giải pháp ban đầu. Xem trường routes.

constraintRelaxations[]

object (ConstraintRelaxation)

Đối với không hoặc nhiều nhóm xe, hãy chỉ định thời điểm và mức độ nới lỏng các quy tắc ràng buộc. Nếu trường này trống, thì tất cả các tuyến xe không trống đều bị ràng buộc hoàn toàn.

ConstraintRelaxation

Đối với một nhóm xe, hãy chỉ định(các) ngưỡng mà các quy tắc ràng buộc về lượt truy cập sẽ được nới lỏng và đến mức nào. Các lô hàng được liệt kê trong trường skipped_shipment bị ràng buộc để bỏ qua; tức là không thể thực hiện các lô hàng đó.

Biểu diễn dưới dạng JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Trường
relaxations[]

object (Relaxation)

Tất cả các trường hợp nới lỏng quy tắc ràng buộc về lượt truy cập sẽ áp dụng cho các lượt truy cập trên tuyến đường có xe trong vehicleIndices.

vehicleIndices[]

integer

Chỉ định các chỉ mục xe mà quy tắc ràng buộc về lượt truy cập relaxations áp dụng. Nếu trống, giá trị này được coi là giá trị mặc định và relaxations áp dụng cho tất cả các phương tiện không được chỉ định trong constraintRelaxations khác. Có thể có tối đa một giá trị mặc định, tức là tối đa một trường nới lỏng quy tắc ràng buộc được phép để trống vehicleIndices. Bạn chỉ có thể liệt kê một chỉ mục xe một lần, ngay cả trong một số constraintRelaxations.

Chỉ mục xe được liên kết giống như ShipmentRoute.vehicle_index, nếu interpretInjectedSolutionsUsingLabels là đúng (xem bình luận fields).

Thư giãn

Nếu relaxations trống, thời gian bắt đầu và trình tự của tất cả các lượt truy cập trên routes sẽ bị ràng buộc hoàn toàn và bạn không thể chèn hoặc thêm lượt truy cập mới vào các tuyến đường đó. Ngoài ra, thời gian bắt đầu và kết thúc của xe trong routes bị ràng buộc hoàn toàn, trừ phi xe trống (tức là không có lượt truy cập và usedIfRouteIsEmpty được đặt thành false trong mô hình).

relaxations(i).level chỉ định mức độ nới lỏng quy tắc ràng buộc áp dụng cho một lượt truy cập #j thỏa mãn:

  • route.visits(j).start_time >= relaxations(i).threshold_time
  • j + 1 >= relaxations(i).threshold_visit_count

Tương tự, việc khởi động xe được nới lỏng thành relaxations(i).level nếu đáp ứng:

  • vehicleStartTime >= relaxations(i).threshold_time
  • relaxations(i).threshold_visit_count == 0 và đầu xe được nới lỏng thành relaxations(i).level nếu đáp ứng:
  • vehicleEndTime >= relaxations(i).threshold_time
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Để áp dụng mức độ thư giãn nếu một lượt truy cập đáp ứng thresholdVisitCount HOẶC thresholdTime, hãy thêm hai relaxations có cùng level: một chỉ đặt thresholdVisitCount và một chỉ đặt thresholdTime. Nếu một lượt truy cập đáp ứng điều kiện của nhiều relaxations, thì cấp độ nới lỏng nhất sẽ được áp dụng. Do đó, từ khi xe bắt đầu đến khi kết thúc chuyến đi, mức độ thư giãn sẽ trở nên thoải mái hơn: tức là mức độ thư giãn không giảm khi tuyến đường diễn ra.

Thời gian và trình tự của các lượt truy cập tuyến không đáp ứng các điều kiện ngưỡng của bất kỳ relaxations nào đều bị ràng buộc hoàn toàn và không thể chèn lượt truy cập nào vào các trình tự này. Ngoài ra, nếu thời điểm bắt đầu hoặc kết thúc của một xe không đáp ứng điều kiện của bất kỳ trường hợp nới lỏng nào, thì thời gian sẽ được cố định, trừ phi xe trống.

Biểu diễn dưới dạng JSON
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Trường
level

enum (Level)

Mức độ nới lỏng quy tắc ràng buộc áp dụng khi các điều kiện tại hoặc sau thresholdTime VÀ ít nhất thresholdVisitCount được đáp ứng.

thresholdTime

string (Timestamp format)

Thời gian tại hoặc sau đó có thể áp dụng level thư giãn.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, có độ phân giải nano giây và tối đa 9 chữ số thập phân. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

Số lượt truy cập tại hoặc sau thời điểm có thể áp dụng level thư giãn. Nếu thresholdVisitCount là 0 (hoặc chưa được đặt), thì level có thể được áp dụng trực tiếp khi xe khởi động.

Nếu là route.visits_size() + 1, thì level chỉ có thể được áp dụng cho đầu xe. Nếu lớn hơn route.visits_size() + 1, level sẽ không được áp dụng cho tuyến đó.

Cấp độ

Biểu thị các mức độ nới lỏng quy tắc ràng buộc khác nhau được áp dụng cho một lượt truy cập và các lượt truy cập tiếp theo khi lượt truy cập đó đáp ứng các điều kiện ngưỡng.

Dưới đây là danh sách liệt kê theo thứ tự tăng dần độ thư giãn.

Enum
LEVEL_UNSPECIFIED

Cấp độ nới lỏng mặc định ngầm ẩn: không có quy tắc ràng buộc nào được nới lỏng, tức là tất cả các lượt truy cập đều bị ràng buộc hoàn toàn.

Bạn không được sử dụng giá trị này một cách rõ ràng trong level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Thời gian bắt đầu và kết thúc lượt truy cập cũng như thời gian bắt đầu/kết thúc của xe sẽ được nới lỏng, nhưng mỗi lượt truy cập vẫn liên kết với cùng một xe và bạn phải tuân thủ trình tự lượt truy cập: không được chèn lượt truy cập nào vào giữa hoặc trước các lượt truy cập đó.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Tương tự như RELAX_VISIT_TIMES_AFTER_THRESHOLD, nhưng trình tự lượt truy cập cũng được nới lỏng: lượt truy cập chỉ có thể được thực hiện bằng xe này, nhưng có thể không được thực hiện.
RELAX_ALL_AFTER_THRESHOLD Tương tự như RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, nhưng xe cũng được nới lỏng: lượt truy cập hoàn toàn miễn phí tại hoặc sau thời gian ngưỡng và có thể không được thực hiện.