InjectedSolutionConstraint

Giải pháp được đưa vào yêu cầu bao gồm thông tin về những lượt truy cập phải được hạn chế và cách thức ràng buộc các lượt truy cập này.

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 của giải pháp để chèn. Một số tuyến có thể bị bỏ qua khỏi giải pháp ban đầu. Các tuyến và chuyến hàng bị bỏ qua phải đáp ứng các giả định cơ bản về tính hợp lệ được nêu cho injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Đã bỏ qua lô hàng dung dịch cần tiêm. Một số có thể bị bỏ qua khỏi lời giải ban đầu. Hãy xem trường routes.

constraintRelaxations[]

object (ConstraintRelaxation)

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

ConstraintRelaxation

Đối với một nhóm phương tiện, hãy chỉ định(các) ngưỡng giới hạn đối với lượt ghé thăm sẽ được nới lỏng và ở mức nào. Các lô hàng được liệt kê trong trường skipped_shipment buộc phải bỏ qua; tức là không thể thực hiện được.

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

object (Relaxation)

Tất cả các hạn chế về việc ghé thăm sẽ áp dụng cho những lượt ghé thăm trên các tuyến đường có xe ở vehicleIndices.

vehicleIndices[]

integer

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

Chỉ số xe được liên kết giống như ShipmentRoute.vehicle_index, nếu interpretInjectedSolutionsUsingLabels là đúng (xem nhận xét về 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ị hạn chế hoàn toàn và bạn không thể chèn hoặc thêm lượt ghé thăm 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 một xe trong routes sẽ bị hạn chế hoàn toàn, trừ phi xe đó trống (tức là không có lượt ghé thăm nào và đã đặt usedIfRouteIsEmpty thành false trong mô hình).

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

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

Tương tự, thời gian khởi động của xe được nới lỏng đến relaxations(i).level nếu đáp ứng:

  • vehicleStartTime >= relaxations(i).threshold_time
  • relaxations(i).threshold_visit_count == 0 và đuôi xe được nới lỏng đến 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 độ nới lỏng, 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ỉ có thresholdVisitCount được đặt và mục còn lại chỉ được đặt thresholdTime. Nếu một lượt ghé thăm đáp ứng các điều kiện của nhiều relaxations, thì mức độ thoải mái nhất sẽ được áp dụng. Do đó, từ lúc xe bắt đầu đi đến cuối tuyến đường cho đến cuối xe, 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 đi tiếp.

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 về ngưỡng của bất kỳ relaxations nào sẽ bị hạn chế hoàn toàn và không có lượt truy cập nào có thể được chèn vào các trình tự này. Ngoài ra, nếu thời gian khởi động hoặc kết thúc của xe không đáp ứng các điều kiện nới lỏng, thì thời gian sẽ được ấn đị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 ràng buộc áp dụng khi các điều kiện tại hoặc sau thresholdTime VÀ tối thiểu là thresholdVisitCount được đáp ứng.

thresholdTime

string (Timestamp format)

Đây là thời điểm có thể áp dụng thời gian nới lỏng level.

Dấu thời gian theo múi giờ "Zulu" RFC3339 (giờ UTC) với độ phân giải nano giây và lên đến 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

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

Nếu là route.visits_size() + 1, bạn chỉ có thể áp dụng level cho đầu xe. Nếu giá trị này lớn hơn route.visits_size() + 1, thì hệ thống sẽ không áp dụng level cho tuyến đó.

Cấp độ

Thể hiện nhiều mức nới lỏng ràng buộc được áp dụng cho một lượt truy cập và những mức sau khi đáp ứng các điều kiện về ngưỡng.

Bảng liệt kê dưới đây là để tăng mức độ thư giãn.

Enum
LEVEL_UNSPECIFIED

Mức độ nới lỏng mặc định ngầm ẩn: không có sự ràng buộc nào được nới lỏng, tức là mọi 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 ghé thăm và thời gian bắt đầu/kết thúc xe sẽ được nới lỏng, nhưng mỗi lượt ghé thăm vẫn được ràng buộc với cùng một xe và bạn phải tuân thủ trình tự ghé thăm: bạn không thể chèn lượt ghé thăm giữa các lượt ghé thăm hoặc trước lượt ghé thăm.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Giống như RELAX_VISIT_TIMES_AFTER_THRESHOLD, nhưng trình tự ghé thăm cũng không thay đổi: lượt ghé thăm vẫn chỉ gắn liền với xe của khách hàng.
RELAX_ALL_AFTER_THRESHOLD Giống như RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, nhưng phương tiện di chuyển cũng không thay đổi: lượt ghé thăm hoàn toàn miễn phí vào hoặc sau thời gian ngưỡng và có thể không hoạt động.