Package google.research.optimization.v1

Index

Optimierung

Ein One Platform-API, das eine Reihe von Optimierungslösungen für übergeordnete Probleme der Betriebsforschung zur Verfügung stellt. MOE:begin_strip

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

Löst das Problem bezüglich des Entwurfs und der Planung des Liner Shipping Network (LSNDSP) anhand der angegebenen DesignShippingNetworkRequest.

Das LSNDSP ist ein komplexes Optimierungsproblem, das darauf abzielt, das optimale Design und die optimale Planung für ein Linienschiffnetzwerk zu finden. Ziel ist es, die Gesamtkosten für den Betrieb des Netzwerks zu minimieren und gleichzeitig den Frachtbedarf zwischen den Häfen so weit wie möglich zu decken.

Das LSNDSP kann in zwei Hauptunterprobleme unterteilt werden: Netzwerkdesign und Planung. Das Teilproblem beim Netzwerkdesign bestimmt die Gruppe der Ports, die vom Netzwerk bedient werden, die Anzahl der auf jeder Route zu setzenden Schiffe und die Routen, die die Schiffe nehmen werden. Durch das Teilproblem werden die Fahrpläne für die Schiffe festgelegt. Dabei werden die Fahrtzeit zwischen den Häfen, die Zeit zum Be- und Entladen der Fracht sowie die Nachfrage nach Frachttransport zwischen den Häfen berücksichtigt.

Mit einfachen Worten: Bei der LSNDSP geht es darum, zu entscheiden, welche Ports bedient werden, wie viele Schiffe zu nutzen sind und wie die Schiffe so geplant werden, dass die Betriebskosten minimiert und gleichzeitig der Umsatz für die Befriedigung der Frachtnachfrage maximiert wird. Eine schwierige Unterkomponente des LSNDSP ist die Frachtroute. Sie bestimmt, welche Anforderungen erfüllt und welche Routen der Fracht zugewiesen werden müssen, um den Umsatz zu maximieren.

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

Löst das Eingabemodell und gibt das Ergebnis auf einmal zurück. Verwenden Sie diese Option, wenn Sie weder Callbacks noch Steigerung der Conversions benötigen und den Fortschritt einer Lösung nicht verfolgen müssen.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

Löst ein Problem bei der Schichtgenerierung aus den angegebenen SolveShiftGenerationRequest, indem Schichten aus vorgegebenen Schichtvorlagen generiert werden, um die Nachfrage der Mitarbeitenden zu decken.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

Löst ein festes Problem bei der Schichtplanung aus dem gegebenen SolveShiftSchedulingRequest, indem Mitarbeiter Schichten zugewiesen werden, sodass die Zeitplanungseinstellungen der Mitarbeiter maximiert und Terminverstöße minimiert werden.

DesignShippingNetworkRequest

Die Anfrage enthält eine Instanz des LSNDSP und muss eine Reihe von Ports, eine Reihe von Etappenkandidaten, eine Reihe von Schiffsklassen und eine Reihe von zu erfüllenden Warenanforderungen enthalten.

Felder
request_id

string

Problem- oder Anfrage-ID.

solver_parameters

SolverParameters

Parameter für den Solver.

ports[]

Port

Liste der möglichen Ports, die in Schiffsdiensten aufgerufen werden können. Die Anfrage darf nur Port-IDs aus dieser Liste enthalten.

leg_candidates[]

LegCandidate

Liste der möglichen Streckenabschnitte, die in den Schiffsverkehr aufgenommen werden können. Die Anfrage darf nur Streckenkandidat-IDs enthalten, die in dieser Liste enthalten sind.

vessel_classes[]

VesselClass

Liste der Schiffsklassen, die Dienstleistungen für Schiffe ausführen Beachte, dass alle Schiffe derselben Klasse vollständig austauschbar sind. Die Anfrage darf nur Fahrzeugklassen-IDs enthalten, die in dieser Liste enthalten sind.

commodity_demands[]

CommodityDemand

Liste der potenziellen Güteranforderungen (z.B. Containeranforderungen), die von Schiffsdiensten gedeckt werden müssen.

vessel_services[]

VesselService

Es kann ein Netzwerk gültiger Schiffsdienste (in der Regel der aktuelle Status des Netzwerks) als Ausgangspunkt für die Optimierung bereitgestellt werden.

DesignShippingNetworkResponse

Die Antwort enthält die Lösung für die in der Anfrage übergebene LSNDSP-Instanz. Sie umfasst ein gültiges Netz an Schiffsdiensten und Güternachfragepfaden. Die gesamte Güternachfrage durch die einzelnen Streckenabschnitte darf die Kapazität der gesamten Schiffsklasse, die diesen Streckenabschnitt bedient, nicht überschreiten. Es ist immer eine praktikable Lösung für das Design und die Planung des Linienversandnetzes, wenn keine Schiffsdienste ohne gedeckte Nachfrage verfügbar sind.

Felder
request_id

string

Die ID der Anfrage, der diese Antwort zugeordnet ist.

vessel_services[]

VesselService

Netzwerk von Schiffsdiensten Die Gesamtzahl der verwendeten Schiffe darf die für diese Klasse verfügbare Anzahl nicht überschreiten.

commodity_demand_paths[]

CommodityDemandPath

Liste aller Warennachfragepfade, über die die positive Warennachfrage versendet wird. Beachten Sie, dass einige Nachfrage-IDs für Waren möglicherweise nicht enthalten sind, wenn keine Nachfrage versendet wird. Alternativ kann eine Warennachfrage teilweise gedeckt werden. Für jede Warenachfrage darf die gesamte erfüllte Menge die Gesamtnachfrage nicht übersteigen. Schließlich hängen commodity_demand_paths von vessel_services ab (siehe CommodityDemandPath-Definition).

SolveMathOptModelRequest

Anfrage für eine unäre Remotelösung in MathOpt.

Felder
solver_type

SolverTypeProto

Optional. Solver-Typ, um das Problem numerisch zu lösen. Wenn ein Matherechner eine bestimmte Funktion im Modell nicht unterstützt, ist der Optimierungsvorgang nicht erfolgreich.

model

ModelProto

Erforderlich. Eine mathematische Darstellung des zu lösenden Optimierungsproblems.

parameters

SolveParametersProto

Optional. Parameter zum Steuern einer einzelnen Lösung. Der Parameter „enable_output“ wird speziell verarbeitet. Bei Solver, die Nachrichtenrückrufe unterstützen, wird durch die Einstellung „true“ vom Server ein Nachrichtenrückruf registriert. Die resultierenden Nachrichten werden in SolveMathOptModelResponse.messages zurückgegeben. Bei anderen Solvern führt die Einstellung von „enable_output“ auf „true“ zu einem Fehler.

model_parameters

ModelSolveParametersProto

Optional. Parameter zum Steuern einer einzelnen Lösung, die für das Eingabemodell spezifisch sind. Modellunabhängige Parameter finden Sie unter „SolveParametersProto“.

SolveMathOptModelResponse

Antwort auf eine unäre Remotelösung in MathOpt.

Felder
result

SolveResultProto

Beschreibung der Ausgabe der Lösung des Modells in der Anfrage.

messages[]

string

Wenn „SolveParametersProto.enable_output“ verwendet wurde, enthält es Logeinträge für Solver, die Nachrichtenrückrufe unterstützen.

SolveShiftGenerationRequest

Anfrage zur Lösung des Schichtwechselproblems Die Regeln zum Generieren von Schichten sind in jeder ShiftTemplate beschrieben. Mehrere Verschiebungen in der Antwort können von einer einzelnen ShiftTemplate generiert werden. Die vom Matherechner erzeugten und ausgewählten Schichten müssen den in „Schichtvorlage“ beschriebenen Regeln entsprechen und den jeweiligen Bedarf der Mitarbeitenden abdecken.

Felder
solver_config

SolverConfig

Optional. Parameter für den Solver.

shift_templates[]

ShiftTemplate

Erforderlich. Satz von Schichtvorlagen, die Regeln zum Generieren von Schichten festlegen.

employee_demands[]

EmployeeDemand

Erforderlich. Die Gesamtnachfrage der Mitarbeitenden, die durch die von „shift_templates“ erzeugten Schichten abgedeckt werden muss.

SolveShiftGenerationResponse

Antwort auf das Problem der Schichtgenerierung. Wenn die zurückgegebene solution_status SOLVED lautet, wird eine Reihe gültiger Änderungen, die vom Solver Ihrer Funktion generiert wurden, in employee_schedules zurückgegeben. Für einen gültigen Schichtplan gelten die folgenden Properties:

  1. Jede in employee_schedules generierte Verschiebung unterliegt den Regeln, die in der entsprechenden ShiftTemplate angegeben sind.
  2. Jedes in den einzelnen Schichten ausgewählte Ereignis unterliegt den Regeln, die in der entsprechenden ShiftTemplate.Event festgelegt sind.
  3. Die Gesamtzahl der Mitarbeiter, die den Schichten zugewiesen sind, die aus derselben Schichtvorlage generiert wurden, überschreitet maximum_employee_count dieser Vorlage nicht.
  4. Die zugewiesenen Mitarbeitenden decken den Bedarf in jedem gegebenen Intervall ab.

Felder
solution_status

ShiftGenerationSolutionStatus

Status der zurückgegebenen Lösung. Wenn solution_status nicht SOLVED ist, ist employee_schedules leer.

employee_schedules[]

EmployeeSchedule

Satz der vom Matherechner generierten Schichten und die Anzahl der Mitarbeitenden, die den einzelnen Zeitplänen zugewiesen sind.

demand_coverage_violations[]

DemandCoverageViolation

Verstöße gegen die Nachfrageabdeckung basierend auf dem zugewiesenen employee_counts in der angegebenen employee_schedules. Die in der Anfrage angegebenen employee_demands werden zusammengefasst. Wenn sich zwei employee_demand-Intervalle überschneiden, wird der Bedarf über den sich überschneidenden Anteil des Intervalls summiert.

SolveShiftSchedulingRequest

Anfrage für die Mitarbeiterplanungs-API In der Anfrage werden mindestens eine Gruppe von Mitarbeitenden, eine Reihe von Schichten, eine Reihe möglicher Rollen, die ein Mitarbeiter ausüben kann, und eine Reihe von Deckungsvoraussetzungen angegeben. Die Abdeckungsanforderungen geben über einen bestimmten Zeitraum die Anzahl der Mitarbeitenden an, die für die Erfüllung der einzelnen Rollen erforderlich sind. Mitarbeitende, die einer Schicht zugewiesen sind, werden auch nur einer Rolle für diese Schicht zugewiesen. Mitarbeitende können nicht zwei sich überschneidenden Schichten zugewiesen werden. Weitere Informationen dazu, warum eine Schichtzuweisung gültig ist, finden Sie unten im Abschnitt SolveShiftSchedulingResponse.

Für jeden Mitarbeitenden können zusätzliche Zeitplanbeschränkungen festgelegt werden, um das Problem weiter einzuschränken. Alle Planungseinschränkungen und Abdeckungsanforderungen haben eine Prioritätsstufe (VERBINDLICH, HOCH, MITTEL, NIEDRIG). Alle Einschränkungen mit der Prioritätsstufe PRIORITY_MANDATORY müssen vom Matherechner erfüllt werden. Einschränkungen mit einer anderen Priorität können vom Solver überwunden werden. Diese Verstöße werden jedoch in der Reihenfolge der Priorität minimiert. Weitere Informationen dazu, wie die Prioritätsstufen für die einzelnen Einschränkungen gehandhabt werden, finden Sie in der Enum Priority.

Der Matherechner versucht, die ShiftPreference.preference-Werte für jeden Mitarbeiter unter Berücksichtigung der vorgegebenen Einschränkungen zu maximieren. Der Solver verstößt gegen eine Einschränkung nicht, um mehr Präferenzen zu erfüllen. Er verstößt nur dann gegen eine Einschränkung, wenn die Planungszuweisung unter den gegebenen Einschränkungen nicht möglich ist.

Hinweis zur Uhrzeit: Alle Zeiten für das Problem werden mithilfe der DateTime-Nachricht angegeben. Diese Nachricht enthält das Feld „Zeitzone“. Sofern vom Nutzer nicht anders angegeben, wird als Zeitzone UTC verwendet. DateTime-Nachrichten sollten nur minutengenau angegeben werden. Alle Sekunden und Nanos werden ignoriert.

Felder
request_id

string

Problem- oder Anfrage-ID.

solve_parameters

SolveParameters

Parameter, mit denen eine einzelne Lösung des Problems gesteuert wird.

employees[]

Employee

Alle verfügbaren Mitarbeiter müssen eingeplant werden.

shifts[]

Shift

Alle Schichten bilden den Zeitplan.

coverage_requirements[]

CoverageRequirement

Abdeckungsanforderungen für den gesamten Planungshorizont Diese geben die Anzahl der Mitarbeitenden an, die entweder während eines bestimmten Zeitfensters oder einer Liste von Schicht-IDs jede Rolle ausüben oder über eine Fähigkeit verfügen müssen. Alle Abdeckungsanforderungen müssen entweder mit Zeitfenstern oder mit einer Liste von Schicht-IDs angegeben werden (aber nicht mit beidem). Zeitfenster für die Abdeckungsanforderungen (falls angegeben) dürfen sich für jeden Standort nicht überschneiden. Die standardmäßige Prioritätsstufe für jede dieser Einschränkungen ist PRIORITY_MANDATORY für die Rollenanforderungen und PRIORITY_LOW für die Kompetenzanforderungen. Weitere Informationen finden Sie in der Priority-Enum.

role_ids[]

string

Liste aller möglichen Rollen in der Belegschaft. Jedem Mitarbeiter muss mindestens eine Rolle zugewiesen werden, der er für eine Schicht zugewiesen werden kann. Eine Rolle bezieht sich auf einen bestimmten Arbeitsauftrag während einer Schicht (z. B. registrierte Krankenschwester, Chefkoch, Kellner usw.). Wenn ein Mitarbeiter einer Schicht zugewiesen wird, wird ihm auch eine bestimmte Rolle zugewiesen.

skill_ids[]

string

Liste aller möglichen Fähigkeiten in der gesamten Belegschaft. Eine Kompetenz bezieht sich auf alle zusätzlichen Qualifikationen, die Mitarbeitende möglicherweise haben und die nicht mit einer bestimmten zuweisbaren Tätigkeit in Zusammenhang stehen (z. B. Zertifizierungen, gesprochene Sprachen usw.). Diese Liste kann leer sein. Wenn ein Mitarbeiter einer Schicht zugewiesen wird, muss er alle für diese Schicht erforderlichen Fähigkeiten erfüllen.

location_ids[]

string

Liste aller möglichen Orte für die Schichten im Fahrplan. Diese Liste kann leer sein. Die Angabe verschiedener Standorte kann nützlich sein, wenn beispielsweise ein Pflegepersonal mehrere Krankenschwestern mit verschiedenen Einheiten eines Krankenhauses einplanen möchte oder ein Hotelmanager, der Mitarbeiter für mehrere Hotels einplanen möchte.

budget_requirements[]

BudgetRequirement

Budgetspezifikation für das Planungsproblem. Die standardmäßige Prioritätsstufe für jede dieser Anforderungen ist PRIORITY_LOW. Weitere Informationen finden Sie in der Priority-Enum.

assignments_hint[]

ShiftAssignment

Schichtzuweisungen, die als vorläufige Lösung (auch als Lösungshinweis bezeichnet) für das Planungsproblem verwendet werden sollen. Zuweisungshinweise werden ignoriert, wenn die Zuweisung einer nicht zuweisbaren Schicht- oder Planungsanfrage widersprechen.

SolveShiftSchedulingResponse

Antwort für die Mitarbeiterplanungs-API Bei jeder Antwort ist shift_assignments leer, wenn die zurückgegebene solution_status NOT_SOLVED_DEADLINE_EXCEEDED oder INFEASIBLE ist. Wenn die zurückgegebene solution_status OPTIMAL oder FEASIBLE ist, wird in shift_assignments eine gültige Schichtzuweisung zurückgegeben. Für eine gültige Schichtzuweisung gelten die folgenden Properties:

  1. Jede Mitarbeiter-ID ist in der Gruppe von Mitarbeitern enthalten, die in der Anfrage angegeben wurde.
  2. Jede dem Mitarbeiter zugewiesene Rollen-ID ist in den Rollen-IDs für den jeweiligen Mitarbeiter enthalten.
  3. Jede Schicht-ID ist in dem in der Anfrage angegebenen Schichtsatz enthalten.
  4. Jede Schicht-ID gehört nicht zu den nicht zuweisbaren Schicht-IDs für den jeweiligen Mitarbeiter.
  5. Einem Mitarbeiter wird nie zwei Schichten zugewiesen, die sich überschneiden.
  6. Beim angegebenen Zeitplan wird keine der Einschränkungen oder Anfragen mit der Prioritätsstufe PRIORITY_MANDATORY verletzt.

Felder
request_id

string

Die ID der Anfrage, der diese Antwort zugeordnet ist.

solution_status

SolutionStatus

Status der zurückgegebenen Lösung. Wenn die Lösung nicht FEASIBLE oder OPTIMAL ist, können andere Felder in diesem Proto leer sein. Wenn der Status NOT_SOLVED_DEADLINE_EXCEEDED lautet, wurde das Zeitlimit erreicht, ohne dass eine praktikable Lösung gefunden oder festgestellt werden konnte, ob eine praktikable Lösung existiert. Anfragen sind möglicherweise nicht durchführbar, wenn die Einschränkungen der Prioritätsebene MANDATORY nicht alle erfüllt werden können.

shift_assignments[]

ShiftAssignment

Liste aller Zuweisungen. Jede ShiftAssignment gibt einen Mitarbeiter an, die Schicht, der er zugewiesen ist, und die Rolle, die er in dieser Schicht ausführen soll.

status_message

string

Wenn solution_status nicht optimal ist, kann dieses Feld zusätzliche Informationen zum Rechner enthalten.