InjectedSolutionConstraint

Giải pháp được chèn vào yêu cầu, bao gồm cả thông tin về những lượt truy cập phải bị hạn chế và cách hạn chế những 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 cơ bản về tính hợp lệ được liệt kê cho injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Các lô hàng bị bỏ qua 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 0 hoặc nhiều nhóm xe, hãy chỉ định thời điểm và mức độ nới lỏng các ràng buộc. Nếu trường này trống, thì tất cả các tuyến đường không trống của xe đều bị hạn chế hoàn toàn.

ConstraintRelaxation

Đối với một nhóm xe, hãy chỉ định(các) ngưỡng mà tại đó các ràng buộc đố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 bị hạn chế không được thực hiện; tức là không thể thực hiện.

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

object (Relaxation)

Tất cả các quy tắc nới lỏng về lượt ghé thăm sẽ áp dụng cho các lượt ghé thăm trên những tuyến đường có phương tiện trong vehicleIndices.

vehicleIndices[]

integer

Chỉ định chỉ mục xe mà quy tắc ràng buộc lượt truy cập relaxations áp dụng. Nếu bạn để trống, thì đây được coi là giá trị mặc định và relaxations sẽ áp dụng cho tất cả những chiếc xe 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à bạn chỉ được phép để trống tối đa một trường nới lỏng ràng buộc vehicleIndices. Bạn chỉ có thể đăng một chỉ mục xe, ngay cả trong nhiều constraintRelaxations.

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

Thư giãn

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

relaxations(i).level chỉ định cấp độ nới lỏng điều kiện ràng buộc được áp dụng cho lượt truy cập #j thoả mãn:

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

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

  • 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 các điều kiện sau:
  • 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 điều kiện thresholdVisitCount HOẶC thresholdTime, hãy thêm hai relaxations có cùng level: một chỉ có thresholdVisitCount và một chỉ có thresholdTime. Nếu một lượt truy cập đáp ứng các điều kiện của nhiều relaxations, thì cấp độ ít hạn chế nhất sẽ được áp dụng. Do đó, từ khi xe bắt đầu đến khi xe kết thúc, mức độ thư giãn sẽ tăng lên: tức là mức độ thư giãn sẽ không giảm khi tuyến đường tiến triển.

Thời gian và trình tự của các lượt ghé thăm tuyến đường không đáp ứng các điều kiện ngưỡng của bất kỳ relaxations nào đều bị hạn chế hoàn toàn và không thể chèn lượt ghé thăm nào vào các trình tự này. Ngoài ra, nếu thời gian bắt đầu hoặc kết thúc của một chuyến xe không đáp ứng các đ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 không có người.

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 nhất thresholdVisitCount được đáp ứng.

thresholdTime

string (Timestamp format)

Thời gian mà bạn có thể áp dụng quy tắc nới lỏng level.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

thresholdVisitCount

integer

Số lượt truy cập mà sau đó có thể áp dụng quy tắc nới lỏng level. 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 bắt đầu khởi động.

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

Cấp độ

Thể hiện các cấp độ nới lỏng ràng buộc khác nhau, được áp dụng cho một lượt truy cập và những lượt truy cập tiếp theo khi lượt truy cập đó đáp ứng các điều kiện về ngưỡng.

Phần liệt kê dưới đây được sắp xếp theo thứ tự tăng dần mức độ thư giãn.

Enum
LEVEL_UNSPECIFIED

Cấp độ nới lỏng mặc định ngầm ẩn: không 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 lượt ghé thăm và 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 ghé thăm vẫn phải gắn với cùng một chiếc xe và bạn phải tuân thủ trình tự ghé thăm: không được chèn lượt ghé thăm giữa hoặc trước các lượt ghé thăm.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Tương tự như RELAX_VISIT_TIMES_AFTER_THRESHOLD, nhưng trình tự ghé thăm cũng được nới lỏng: chỉ có xe này mới có thể thực hiện các lượt ghé thăm, nhưng có thể không thực hiện được.
RELAX_ALL_AFTER_THRESHOLD Tương tự như RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, nhưng xe cũng được thả lỏng: các 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.