Package google.research.optimization.v1

Dizin

Optimizasyon

Üst düzey operasyon araştırma sorunları için bir dizi optimizasyon çözücüyü ortaya çıkaran bir One Platform API. MOE:başlangıç_şeridi

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

Belirtilen DesignShippingNetworkRequest için yolcu taşıma ağı tasarımı ve planlama sorununu (LSNDSP) çözer.

LSNDSP, bir yolcu gemisi taşıma ağının optimum tasarımını ve zamanlamasını bulmaya çalışan karmaşık bir optimizasyon problemidir. Amaç, limanlar arasındaki kargo talebinin mümkün olduğunca büyük bir kısmını karşılarken ağı çalıştırmanın toplam maliyetini en aza indirmektir.

LSNDSP, ağ tasarımı ve planlama olmak üzere iki ana alt soruna ayrılabilir. Ağ tasarımı alt sorunu ağ tarafından hizmet verilecek bağlantı noktaları kümesini, her bir güzergâh üzerinde dağıtılacak gemi sayısını ve gemilerin izleyeceği rotaları belirler. Planlama alt sorunu; limanlar arasında seyretmek için geçen süreyi, yük yükleyip boşaltmak için gereken süreyi ve limanlar arasındaki yük taşıma talebini dikkate alarak gemiler için yelkenli sefer saatlerini belirler.

Basit bir şekilde ifade etmek gerekirse LSNDSP'de hizmet hangi bağlantı noktasının kullanılacağına, kaç tane geminin kullanılacağına ve kargo talebinin karşılanması için geliri en üst düzeye çıkarırken ağ işletme maliyetinin en aza indirilmesi için gemilerin nasıl programlanacağına karar verme sorunudur. LSNDSP'nin zorlu bir alt bileşeni olan kargo rotasıdır. Kargo rotası, geliri en üst düzeye çıkarmak için hangi taleplerin karşılanacağını ve hangi rotaların kargoya atanacağını belirler.

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

Giriş modelini çözer ve sonucu tek seferde döndürür. Geri çağırmaya ve artımlılığa ihtiyacınız olmadığında ve bir çözümün ilerlemesini izlemeniz gerekmediğinde bunu kullanın.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

Çalışan talebini karşılamak için verilen vardiya şablonlarında değişiklikler oluşturarak, belirtilen SolveShiftGenerationRequest ile ilişkili bir vardiya oluşturma problemini çözer.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

Belirli bir SolveShiftSchedulingRequest ile ilişkili sabit vardiya planlama sorununu, çalışanların zaman çizelgesi tercihlerinin en üst düzeye çıkarılacağı ve zaman çizelgesindeki kısıtlama ihlallerinin en aza indirileceği şekilde vardiyalara atayarak çözer.

DesignShippingNetworkRequest

İstek, LSNDSP'nin bir örneğini barındırır ve bir dizi bağlantı noktası, bir dizi ayak adayı, bir dizi gemi sınıfı ve yerine getirilecek bir dizi emtia talebini içermelidir.

Alanlar
request_id

string

Sorun veya istek kimliği.

solver_parameters

SolverParameters

Çözücü parametreleri.

ports[]

Port

Gemi hizmetlerinde çağrılabilecek olası bağlantı noktalarının listesi. İstek yalnızca bu listedeki bağlantı noktası kimliklerini içermelidir.

leg_candidates[]

LegCandidate

Gemi hizmetlerine eklenecek potansiyel ayak adaylarının listesi. İstek yalnızca bu listedeki aday aday kimliklerini içermelidir.

vessel_classes[]

VesselClass

Gemi hizmetleri verilen gemi sınıflarının listesi. Aynı sınıfa ait tüm gemilerin tamamen değiştirilebilir olduğunu unutmayın. İstek yalnızca bu listede bulunan gemi sınıfı kimliklerini içermelidir.

commodity_demands[]

CommodityDemand

Gemi hizmetleri tarafından karşılanması gereken potansiyel emtia (ör. konteyner) taleplerinin listesi.

vessel_services[]

VesselService

Optimizasyonun başlangıç noktası olarak kullanılması için geçerli gemi hizmetlerinden oluşan bir ağ (genellikle ağın mevcut durumu) sağlanabilir.

DesignShippingNetworkResponse

Yanıt, çözümü istekte iletilen LSNDSP örneğine tutar. Geçerli bir gemi hizmetleri ağı ve emtia talep yolları ağı içerir. Her bir ayaktan geçen toplam emtia talebi, bu ayağa hizmet veren gemi sınıfı kapasitesini aşamaz. Karşılanan talep olmadan gemi hizmeti bulunmamasının, yolcu gemisi kargo ağı tasarımı ve planlama sorunu için her zaman uygun bir çözüm olduğunu unutmayın.

Alanlar
request_id

string

Bu yanıtın ilişkilendirildiği isteğin kimliği.

vessel_services[]

VesselService

Gemi hizmetleri ağı. Her bir gemi sınıfı için kullanılan toplam gemi sayısı, bu sınıftaki mevcut gemi sayısını aşamaz.

commodity_demand_paths[]

CommodityDemandPath

Pozitif ürün talebinin gönderildiği tüm emtia talep yollarının listesi. Hiçbir talep gönderilmiyorsa bazı emtia talep kimliklerinin dahil edilmeyeceğini unutmayın. Alternatif olarak, emtia talebi kısmen karşılanabilir. Her bir emtia talebi için tamamlanan toplam miktar, toplam talebi aşamaz. Son olarak, commodity_demand_paths vessel_services bağımlıdır (CommodityDemandPath tanımına bakın).

SolveMathOptModelRequest

MathOpt'te tekli uzaktan çözme isteği.

Alanlar
solver_type

SolverTypeProto

İsteğe bağlı. Problemi sayısal olarak çözmek için çözücü türü. Çözücü, modeldeki belirli bir özelliği desteklemiyorsa optimizasyon prosedürünün başarılı olmayacağını unutmayın.

model

ModelProto

Zorunlu. Çözülecek optimizasyon probleminin matematiksel temsili.

parameters

SolveParametersProto

İsteğe bağlı. Tek bir çözümü kontrol etmek için kullanılan parametreler. allow_Çıkış parametresi özel olarak işlenir. İleti geri çağırmalarını destekleyen çözücüler için bu değeri doğru olarak ayarlamak sunucunun bir ileti geri çağırması kaydetmesini sağlar. Sonuçta ortaya çıkan mesajlar SolveMathOptModelResponse.messages içinde döndürülür. Diğer çözücüler için enabled_Exit öğesinin doğru değerine ayarlanması hatayla sonuçlanır.

model_parameters

ModelSolveParametersProto

İsteğe bağlı. Giriş modeline özel tek bir çözme işlemini kontrol etmek için kullanılan parametreler (Modelden bağımsız parametreler için SolveParametersProto'ya bakın).

SolveMathOptModelResponse

MathOpt'te tekli uzaktan çözme yanıtı.

Alanlar
result

SolveResultProto

İstekteki model çözümleme çıktısının açıklaması.

messages[]

string

SolveParametersProto.enable_Exit kullanıldıysa, mesaj geri çağırmalarını destekleyen çözücülere ilişkin günlük mesajlarını içerir.

SolveShiftGenerationRequest

Shift Generation probleminin çözümüyle ilgili istek. Kaydırma oluşturma kuralları her bir ShiftTemplate'te ana hatlarıyla açıklanmaktadır. Yanıtta birden fazla kayma, tek bir ShiftTemplate'ten oluşturulabilir. Çözme aracı tarafından oluşturulan ve seçilen vardiyalar, ShiftTemplate'te belirtilen kurallara uymalı ve belirtilen çalışan talebini kapsamalıdır.

Alanlar
solver_config

SolverConfig

İsteğe bağlı. Çözücü parametreleri.

shift_templates[]

ShiftTemplate

Zorunlu. Kaydırma oluşturma kurallarını belirten vardiya şablonları kümesi.

employee_demands[]

EmployeeDemand

Zorunlu. shift_templates nedeniyle oluşan değişimlerin karşılaması gereken toplam çalışan talebi.

SolveShiftGenerationResponse

Üst Karakter Oluşturma sorunu için yanıt. Döndürülen solution_status değeri SOLVED ise çözücü tarafından oluşturulan geçerli kaymalar grubu employee_schedules içinde döndürülür. Geçerli bir vardiya programı için aşağıdaki mülklerde bulunur:

  1. employee_schedules uygulamasında oluşturulan her bir değişiklik, ilgili ShiftTemplate politikasında belirtilen kurallara uyar.
  2. Her vardiyada seçilen her etkinlik, ilgili ShiftTemplate.Event içinde belirtilen kurallara uyar.
  3. Aynı ShiftTemplate'ten oluşturulan vardiya kümelerine atanan toplam çalışan sayısı söz konusu şablonun maximum_employee_count kadarını aşmaz.
  4. Atanan çalışan grubu, belirtilen her aralıktaki talebi karşılar.

Alanlar
solution_status

ShiftGenerationSolutionStatus

Döndürülen çözümün durumu. solution_status, SOLVED değilse employee_schedules boş olur.

employee_schedules[]

EmployeeSchedule

Çözücü tarafından oluşturulan vardiyalar ve her bir zaman çizelgesine atanan çalışan sayısı.

demand_coverage_violations[]

DemandCoverageViolation

Belirtilen employee_schedules içindeki atanmış employee_counts öğesine dayalı talep kapsamı ihlalleri. İstekte belirtilen employee_demands toplanır. İki employee_demand aralığı çakışırsa talep, aralığın çakışan kısmı üzerinde toplanır.

SolveShiftSchedulingRequest

İş gücü planlama API'si için istek. İstekte en azından bir grup çalışan, bir dizi vardiya, bir çalışanın üstlenebileceği olası rol ve bir dizi kapsam kriteri belirtiliyor. Kapsam gereksinimleri, bir zaman aralığı boyunca her bir rolü yerine getirmek için gereken çalışan sayısını belirtir. Bir vardiyada olan çalışanlar aynı zamanda o vardiyada tek bir role atanır ve çakışan iki vardiyaya atanamaz. Kaydırma atamasını geçerli kılan unsurlar hakkında daha fazla bilgi için aşağıdaki SolveShiftSchedulingResponse bölümüne bakın.

Sorunun daha da kısıtlanmasını sağlamak amacıyla her çalışan için ek zaman çizelgesi kısıtlamaları belirlenebilir. Tüm planlama kısıtlamaları ve kapsam gereksinimlerine bir öncelik düzeyi verilir (ZORUNLU, YÜKSEK, ORTA, DÜŞÜK). PRIORITY_MANDATORY öncelik düzeyine sahip tüm kısıtlamalar çözücü tarafından karşılanmalıdır. Diğer önceliklerle ilgili kısıtlamalar çözücü tarafından ihlal edilebilir, ancak bu ihlaller öncelik sırasına göre en aza indirilir. Her bir kısıtlamanın öncelik düzeylerinin nasıl işlendiği hakkında daha fazla bilgi için Priority sıralamasına bakın.

Çözücü, verilen kısıtlamaların üzerinde her Çalışan için ShiftPreference.preference değerlerini en üst düzeye çıkarmaya çalışır. Çözücü, daha fazla tercihi karşılamak için bir kısıtlamayı ihlal etmez; yalnızca zaman çizelgesi atamasının verilen kısıtlamalar dahilinde uygulanabilir olmaması durumunda bir kısıtlamayı ihlal eder.

Saatle ilgili not: Sorunun içerdiği tüm zamanlar DateTime mesajı kullanılarak belirtilir. Bu mesajda bir TimeZone alanı bulunur. Saat dilimi, kullanıcı tarafından aksi belirtilmedikçe UTC olduğu varsayılır. DateTime mesajları yalnızca dakikaya kadar belirtilmelidir. Tüm saniyeler ve nanolar göz ardı edilir.

Alanlar
request_id

string

Sorun veya istek kimliği.

solve_parameters

SolveParameters

Sorunun tek bir çözümünü kontrol edecek parametreler.

employees[]

Employee

Müsait olan tüm çalışanlar için zaman planlaması yapılabilir.

shifts[]

Shift

Tüm vardiyaları zaman çizelgesini oluşturmak.

coverage_requirements[]

CoverageRequirement

Planlama döneminin tamamı için kapsam gereksinimleri. Bunlar, bir zaman aralığı veya vardiya kimlikleri listesi süresince her bir rolü yerine getirmesi ya da bir beceriye sahip olması gereken çalışan sayısını belirtir. Tüm kapsam koşulları, zaman aralıkları veya kaydırma kimlikleri listesi (ikisi birden değil) ile belirtilmelidir. Kapsam gereksinimlerinin zaman aralıkları (verilmişse) her bir konum için çakışamaz. Bu kısıtlamaların her biri için varsayılan öncelik düzeyi, rol gereksinimleri için PRIORITY_MANDATORY, beceri gereksinimleri içinse PRIORITY_LOW şeklindedir. Daha fazla bilgi için Priority sıralamasına bakın.

role_ids[]

string

İş gücü genelindeki olası tüm rollerin listesi. Her çalışanın bir vardiya için atanabilecek en az bir rolü olmalıdır. Rol, vardiya sırasında yapılan belirli bir iş atamasını ifade eder (ör.kayıtlı hemşire, şef, garson vb.). Bir çalışan bir vardiyaya atandığında, aynı zamanda tek bir role atanır.

skill_ids[]

string

İş gücündeki olası tüm becerilerin listesi. Beceri, bir çalışanın belirli bir atanabilir işle ilgili olmayan (ör. sertifikalar, konuşulan diller) sahip olabileceği tüm ekstra nitelikleri ifade eder. Bu liste boş olabilir. Bir çalışan vardiyaya atandığında, o vardiya için gereken tüm becerileri edinmesi gerekir.

location_ids[]

string

Zaman çizelgesindeki kayma grubu için mümkün olan tüm konumların listesi. Bu liste boş olabilir. Örneğin bir hemşire yöneticisi bir hastanedeki farklı birimlerde çok sayıda hemşire randevusu almak istediğinde veya örneğin bir otel yöneticisi birden fazla otelde çalışanları planlamak istediğinde farklı konumlar belirtmek yararlı olabilir.

budget_requirements[]

BudgetRequirement

Zaman çizelgesi problemi için bütçe spesifikasyonu. Bu gereksinimlerin her biri için varsayılan öncelik düzeyi PRIORITY_LOW'tir. Daha fazla bilgi için Priority sıralamasına bakın.

assignments_hint[]

ShiftAssignment

Zaman çizelgesi oluşturma problemine belirsiz bir çözüm (çözüm ipucu) olarak kullanılacak atamaları kaydırın. Atama, atanamayan bir vardiya veya planlama isteğiyle çelişiyorsa atama ipuçları yoksayılır.

SolveShiftSchedulingResponse

İş gücü planlama API'sinin yanıtı. Döndürülen solution_status değeri NOT_SOLVED_DEADLINE_EXCEEDED veya INFEASIBLE ise her yanıt için shift_assignments boş olur. Döndürülen solution_status değeri OPTIMAL veya FEASIBLE ise shift_assignments içinde geçerli bir vardiya ataması döndürülür. Geçerli bir kaydırma ataması için aşağıdaki özellikler muhafaza edilir:

  1. Her çalışan kimliği, istekte belirtilen çalışan grubunda yer alır.
  2. Çalışana atanan her rol kimliği, söz konusu çalışana ait rol kimlikleri grubunda yer alır.
  3. Her vardiya kimliği, istekte belirtilen kaymalar grubunda yer alır.
  4. Her vardiya kimliği, belirtilen çalışanın atanamayan vardiya kimliklerinden biri değildir.
  5. Bir çalışan hiçbir zaman çakışan iki vardiyaya atanmaz.
  6. Belirtilen zaman planlamasında, öncelik düzeyi PRIORITY_MANDATORY olan kısıtlamaların veya isteklerin hiçbiri ihlal edilmedi.

Alanlar
request_id

string

Bu yanıtın ilişkilendirildiği isteğin kimliği.

solution_status

SolutionStatus

Döndürülen çözümün durumu. Çözüm GEÇİCİ veya OPTİMİZASYON değilse bu protokoldeki diğer alanlar boş olabilir. Durum NOT_SOLVED_DEADLINE_EXCEEDED ise, zaman sınırına, uygulanabilir bir çözüm sunulmadan veya uygulanabilir bir çözüm mevcut olup olmadığı belirlenmeden ulaşılmıştır. ZORUNLU öncelik düzeyi kısıtlamalarının tümü karşılanamıyorsa istekler uygulanabilir olmayabilir.

shift_assignments[]

ShiftAssignment

Tüm ödevlerin listesi. Her ShiftAssignment; bir çalışanı, atandığı vardiyayı ve bu vardiyada gerçekleştirmek üzere atandığı rolü belirtir.

status_message

string

solution_status optimum değilse bu alan çözücü hakkında ek bilgiler içerebilir.