InjectedSolutionConstraint

Hangi ziyaretlerin nasıl kısıtlanması gerektiğiyle ilgili bilgileri içeren, isteğe yerleştirilmiş çözüm.

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

object (ShipmentRoute)

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

skippedShipments[]

object (SkippedShipment)

Çözümün yerleştirileceği gönderimler atlandı. Bazıları orijinal çözümde yer almayabilir. 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 ne ölçüde gevşetileceğini belirtir. skipped_shipment alanında listelenen gönderiler atlanmak zorundadır. Yani bu gönderiler gerçekleştirilemez.

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

object (Relaxation)

vehicleIndices bölgesindeki araçlarla yapılan ziyaretler için geçerli olacak tüm ziyaret kısıtlaması gevşetmeleri.

vehicleIndices[]

integer

Ziyaret kısıtlamasının relaxations uygulanacağı araç indekslerini belirtir. Boş bırakılırsa varsayılan olarak kabul edilir ve diğer constraintRelaxations içinde belirtilmeyen tüm araçlar için relaxations uygulanır. En fazla bir varsayılan olabilir. Yani en fazla bir kısıtlama gevşetme alanının boş bırakılmasına izin verilir vehicleIndices. Bir araç indeksi, birden fazla constraintRelaxations içinde olsa bile yalnızca bir kez listelenebilir.

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

Dinlenme

relaxations boşsa routes üzerindeki tüm ziyaretlerin başlangıç saati ve sırası tamamen kısıtlanır ve bu rotalara yeni ziyaretler eklenemez. Ayrıca, araç boş değilse (yani ziyaretleri yoksa ve modelde usedIfRouteIsEmpty değeri yanlışsa) routes içindeki bir aracın başlangıç ve bitiş zamanı tamamen sınırlanır.

relaxations(i).level, aşağıdakileri karşılayan #j ziyaretine uygulanan 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 işlemi relaxations(i).level olarak değerlendirilir:

  • vehicleStartTime >= relaxations(i).threshold_time VE
  • relaxations(i).threshold_visit_count == 0 ve araç ucu, aşağıdaki koşulları karşılıyorsa relaxations(i).level'ye kadar 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 gevşetme düzeyi uygulamak için aynı level ile iki relaxations ekleyin: biri yalnızca thresholdVisitCount ayarlanmış, diğeri ise yalnızca thresholdTime ayarlanmış olsun. Bir ziyaret birden fazla relaxations koşullarını karşılıyorsa en esnek düzey uygulanır. Sonuç olarak, araç başlangıcından rotadaki ziyaretlere ve araç bitişine kadar rahatlama düzeyi artar. Diğer bir deyişle, rota ilerledikçe rahatlama düzeyi azalmaz.

Herhangi bir relaxations eşik koşulunu karşılamayan rota ziyaretlerinin zamanlaması ve sırası tamamen kısıtlanmıştır ve bu sıralara ziyaret eklenemez. Ayrıca, bir araç başlangıcı veya bitişi herhangi bir gevşeme koşulunu karşılamıyorsa araç boş olmadığı sürece süre sabittir.

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

enum (Level)

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

thresholdTime

string (Timestamp format)

Gevşetmenin level uygulanabileceği veya uygulandığı zaman.

Zaman damgasında RFC 3339 kullanılır. Yani oluşturulan çıkış her zaman Z ile normalleştirilir ve 0, 3, 6 veya 9 kesirli basamak kullanılır. "Z" dışındaki zaman farkları da kabul edilir. Örnekler: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" veya "2014-10-02T15:01:23+05:30".

thresholdVisitCount

integer

Gevşetmenin level uygulanabileceği ziyaret sayısı. thresholdVisitCount 0 ise (veya ayarlanmamışsa) level doğrudan araç çalıştırıldığında uygulanabilir.

route.visits_size() + 1 ise level yalnızca araç ucuna uygulanabilir. route.visits_size() + 1 değerinden büyükse bu rota için level hiç uygulanmaz.

Seviye

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

Aşağıdaki numaralandırma, rahatlama düzeyinin artış sırasına göre yapılmıştır.

Sıralamalar
LEVEL_UNSPECIFIED

Örtülü varsayılan gevşeme düzeyi: Kısıtlamalar 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 esnetilir ancak her ziyaret aynı araca bağlı kalır ve ziyaret sırasına uyulması gerekir: Ziyaretler araya veya öncesine eklenemez.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD ile aynıdır ancak ziyaret sırası da gevşetilir: Ziyaretler yalnızca bu araç tarafından gerçekleştirilebilir ancak gerçekleştirilmeyebilir.
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD ile aynıdır ancak araç da rahatlatılır: Eşik zamanında veya sonrasında ziyaretler tamamen ücretsizdir ve potansiyel olarak gerçekleştirilmeyebilir.