Index
Optimization
(Benutzeroberfläche)DesignShippingNetworkRequest
(Meldung)DesignShippingNetworkResponse
(Meldung)SolveMathOptModelRequest
(Meldung)SolveMathOptModelResponse
(Meldung)SolveShiftGenerationRequest
(Meldung)SolveShiftGenerationResponse
(Meldung)SolveShiftSchedulingRequest
(Meldung)SolveShiftSchedulingResponse
(Meldung)
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 |
---|
Löst das Problem bezüglich des Entwurfs und der Planung des Liner Shipping Network (LSNDSP) anhand der angegebenen 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 |
---|
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 |
---|
Löst ein Problem bei der Schichtgenerierung aus den angegebenen |
SolveShiftScheduling |
---|
Löst ein festes Problem bei der Schichtplanung aus dem gegebenen |
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 |
Problem- oder Anfrage-ID. |
solver_parameters |
Parameter für den Solver. |
ports[] |
Liste der möglichen Ports, die in Schiffsdiensten aufgerufen werden können. Die Anfrage darf nur Port-IDs aus dieser Liste enthalten. |
leg_candidates[] |
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[] |
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[] |
Liste der potenziellen Güteranforderungen (z.B. Containeranforderungen), die von Schiffsdiensten gedeckt werden müssen. |
vessel_services[] |
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 |
Die ID der Anfrage, der diese Antwort zugeordnet ist. |
vessel_services[] |
Netzwerk von Schiffsdiensten Die Gesamtzahl der verwendeten Schiffe darf die für diese Klasse verfügbare Anzahl nicht überschreiten. |
commodity_demand_paths[] |
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 |
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 |
Erforderlich. Eine mathematische Darstellung des zu lösenden Optimierungsproblems. |
parameters |
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 |
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 |
Beschreibung der Ausgabe der Lösung des Modells in der Anfrage. |
messages[] |
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 |
Optional. Parameter für den Solver. |
shift_templates[] |
Erforderlich. Satz von Schichtvorlagen, die Regeln zum Generieren von Schichten festlegen. |
employee_demands[] |
Erforderlich. Die Gesamtnachfrage der Mitarbeitenden, die durch die von „ |
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:
- Jede in
employee_schedules
generierte Verschiebung unterliegt den Regeln, die in der entsprechendenShiftTemplate
angegeben sind. - Jedes in den einzelnen Schichten ausgewählte Ereignis unterliegt den Regeln, die in der entsprechenden
ShiftTemplate.Event
festgelegt sind. - Die Gesamtzahl der Mitarbeiter, die den Schichten zugewiesen sind, die aus derselben Schichtvorlage generiert wurden, überschreitet
maximum_employee_count
dieser Vorlage nicht. - Die zugewiesenen Mitarbeitenden decken den Bedarf in jedem gegebenen Intervall ab.
Felder | |
---|---|
solution_status |
Status der zurückgegebenen Lösung. Wenn |
employee_schedules[] |
Satz der vom Matherechner generierten Schichten und die Anzahl der Mitarbeitenden, die den einzelnen Zeitplänen zugewiesen sind. |
demand_coverage_violations[] |
Verstöße gegen die Nachfrageabdeckung basierend auf dem zugewiesenen |
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 |
Problem- oder Anfrage-ID. |
solve_parameters |
Parameter, mit denen eine einzelne Lösung des Problems gesteuert wird. |
employees[] |
Alle verfügbaren Mitarbeiter müssen eingeplant werden. |
shifts[] |
Alle Schichten bilden den Zeitplan. |
coverage_requirements[] |
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 |
role_ids[] |
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[] |
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[] |
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[] |
Budgetspezifikation für das Planungsproblem. Die standardmäßige Prioritätsstufe für jede dieser Anforderungen ist |
assignments_hint[] |
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:
- Jede Mitarbeiter-ID ist in der Gruppe von Mitarbeitern enthalten, die in der Anfrage angegeben wurde.
- Jede dem Mitarbeiter zugewiesene Rollen-ID ist in den Rollen-IDs für den jeweiligen Mitarbeiter enthalten.
- Jede Schicht-ID ist in dem in der Anfrage angegebenen Schichtsatz enthalten.
- Jede Schicht-ID gehört nicht zu den nicht zuweisbaren Schicht-IDs für den jeweiligen Mitarbeiter.
- Einem Mitarbeiter wird nie zwei Schichten zugewiesen, die sich überschneiden.
- Beim angegebenen Zeitplan wird keine der Einschränkungen oder Anfragen mit der Prioritätsstufe
PRIORITY_MANDATORY
verletzt.
Felder | |
---|---|
request_id |
Die ID der Anfrage, der diese Antwort zugeordnet ist. |
solution_status |
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[] |
Liste aller Zuweisungen. Jede |
status_message |
Wenn |