InjectedSolutionConstraint

Hangi ziyaretlerin kısıtlanması gerektiği ve nasıl kısıtlanacağı hakkında bilgiler içeren, isteğe yerleştirilen çözüm.

JSON gösterimi
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Alanlar
routes[]

object (ShipmentRoute)

Enjekte edilecek çözümün yolları. Bazı rotalar orijinal çözümden çıkarılabilir. Rotalar ve atlanan gönderimler, injectedFirstSolutionRoutes için listelenen temel geçerlilik varsayımlarını karşılamalıdır.

skippedShipments[]

object (SkippedShipment)

Enjekte edilecek çözümün atlanan gönderimleri. Bazıları orijinal çözümden çıkarılabilir. routes alanına bakın.

constraintRelaxations[]

object (ConstraintRelaxation)

Sıfır veya daha fazla araç grubu için kısıtlamaların ne zaman ve ne kadar gevşetileceğini belirtir. Bu alan boşsa boş olmayan tüm araç rotaları tamamen kısıtlanır.

ConstraintRelaxation

Bir araç grubu için, ziyaretlerle ilgili kısıtlamaların hangi eşiklerde ve hangi düzeyde gevşetileceğini belirtir. skipped_shipment alanında listelenen gönderimler atlanacak şekilde kısıtlanmıştır. Yani bu gönderimler gerçekleştirilemez.

JSON gösterimi
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Alanlar
relaxations[]

object (Relaxation)

vehicleIndices'te araç bulunan rotalardaki ziyaretler için geçerli olacak tüm ziyaret kısıtlaması kolaylaştırmaları.

vehicleIndices[]

integer

Ziyaret kısıtlamasının relaxations uygulandığı araç dizinlerini belirtir. Boş bırakılırsa varsayılan olarak kabul edilir ve relaxations, diğer constraintRelaxations öğelerinde belirtilmeyen tüm araçlar için geçerli olur. En fazla bir varsayılan olabilir. Yani en fazla bir kısıtlama gevşetme alanının boş olmasına izin verilir vehicleIndices. Bir araç dizini, birden fazla constraintRelaxations içinde olsa bile yalnızca bir kez listelenmelidir.

interpretInjectedSolutionsUsingLabels doğruysa araç dizini ShipmentRoute.vehicle_index ile aynı şekilde eşlenir (fields yorumuna bakın).

Dinlenme

relaxations boşsa routes'teki tüm ziyaretlerin başlangıç zamanı ve sırası tamamen kısıtlanır ve bu rotalara yeni ziyaret eklenemez. Ayrıca, araç boş olmadığı sürece (ör. ziyareti yoksa ve modelde usedIfRouteIsEmpty yanlış olarak ayarlanmışsa) aracın routes'teki başlangıç ve bitiş zamanı tamamen kısıtlanır.

relaxations(i).level, #j ziyaretine uygulanan ve aşağıdaki koşulları karşılayan kısıtlama gevşetme düzeyini belirtir:

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

Benzer şekilde, aşağıdaki koşulları karşılıyorsa araç çalıştırma süresi relaxations(i).level olarak gevşetilir:

  • vehicleStartTime >= relaxations(i).threshold_time VE
  • relaxations(i).threshold_visit_count == 0 ve araç sonu, aşağıdaki koşulları karşılıyorsa relaxations(i).level olarak gevşetilir:
  • vehicleEndTime >= relaxations(i).threshold_time VE
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Bir ziyaret thresholdVisitCount VEYA thresholdTime koşulunu karşılıyorsa bir rahatlama düzeyi uygulamak için aynı level ile iki relaxations ekleyin: Biri yalnızca thresholdVisitCount, diğeri yalnızca thresholdTime ayarlıdır. Bir ziyaret birden fazla relaxations koşulunu karşılıyorsa en gevşek düzey uygulanır. Sonuç olarak, araç başlangıcından rota ziyaretleri boyunca araç sonuna kadar rahatlama seviyesi daha rahat hale gelir: Yani rota ilerledikçe rahatlama seviyesi azalmaz.

Herhangi bir relaxations'ün eşik koşullarını karşılamayan rota ziyaretlerinin zamanlaması ve sırası tamamen kısıtlanır ve bu sıralamalara ziyaret eklenemez. Ayrıca, bir aracın başlangıç veya bitiş zamanı, herhangi bir esneklik koşulunu karşılamıyorsa araç boş olmadığı sürece zaman sabitlenir.

JSON gösterimi
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Alanlar
level

enum (Level)

thresholdTime veya sonrasındaki koşullar VE en az thresholdVisitCount koşulu karşılandığında geçerli olan kısıtlama gevşetme düzeyi.

thresholdTime

string (Timestamp format)

Gevşemenin level uygulanabileceği zaman veya bu zaman sonrasındaki süre.

Nanosaniye çözünürlüğüne sahip ve en fazla dokuz kesirli basamak içeren RFC3339 UTC "Zulu" biçiminde bir zaman damgası. Örnekler: "2014-10-02T15:01:23Z" ve "2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

Gevşetme level'nin uygulanabileceği ziyaret sayısı veya bu ziyaretten sonraki ziyaret sayısı. thresholdVisitCount 0 ise (veya ayarlanmamışsa) level doğrudan aracın başlatılmasında uygulanabilir.

route.visits_size() + 1 ise level yalnızca araç tarafına uygulanabilir. route.visits_size() + 1'ten fazlaysa level bu rota için hiç uygulanmaz.

Seviye

Bir ziyaret için uygulanan ve eşik koşulları karşılandığında sonraki ziyaretler için uygulanan farklı kısıtlama gevşetme düzeylerini ifade eder.

Aşağıdaki liste, rahatlama düzeyinin artması sırasına göre düzenlenmiştir.

Sıralamalar
LEVEL_UNSPECIFIED

Örtük varsayılan gevşeme düzeyi: Hiçbir kısıtlama gevşetilmez, yani tüm ziyaretler tamamen kısıtlanır.

Bu değer level içinde açıkça kullanılmamalıdır.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Ziyaret başlangıç saatleri ve araç başlangıç/bitiş saatleri için daha esnek bir yaklaşım uygulanacak ancak her ziyaret aynı araca bağlı olmaya devam edecek ve ziyaret sırasına uyulması gerekecek: Ziyayetler arasına veya ziyaretlerden önce başka ziyaret eklenemez.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD ile aynıdır ancak ziyaret sırası da gevşetilmiştir: Ziyaretler yalnızca bu araç tarafından gerçekleştirilebilir ancak potansiyel olarak iptal edilebilir.
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD ile aynıdır ancak araçta da esneklik vardır: Ziyaretler, eşik zamanda veya sonrasında tamamen ücretsizdir ve potansiyel olarak gerçekleştirilmeyebilir.