Package google.research.optimization.v1

Index

Optimisation

API One Platform proposant un ensemble de solutions d'optimisation pour résoudre les problèmes de haut niveau de la recherche opérationnelle. MOE:début_bande

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

Résoudre le problème de conception et de planification du réseau de livraison par ligne (LSNDSP) à partir de l'élément DesignShippingNetworkRequest donné.

Le LSNDSP est un problème d'optimisation complexe qui vise à optimiser la conception et la planification d'un réseau de livraison par ligne. L'objectif est de minimiser le coût total d'exploitation du réseau, tout en répondant au maximum de la demande de fret entre les ports.

Le LSNDSP peut être décomposé en deux principaux sous-problèmes: la conception du réseau et la planification. Le sous-problème de conception d'un réseau détermine l'ensemble des ports devant être desservis par le réseau, le nombre de navires à déployer sur chaque route et les routes que les navires emprunteront. Le sous-problème de planification détermine les horaires de navigation des navires, en tenant compte du temps nécessaire pour naviguer entre les ports, du temps de chargement et de déchargement des cargaisons, et de la demande de transport de marchandises entre les ports.

En d'autres termes, le LSNDSP consiste à décider quels ports desservir, combien de navires utiliser et comment planifier les navires pour réduire au maximum les coûts d'exploitation du réseau tout en maximisant les revenus liés à la demande de cargaisons. L'acheminement des marchandises est un sous-composant complexe du LSNDSP, qui détermine les demandes à satisfaire et les itinéraires à attribuer au fret afin de maximiser les revenus.

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

Résoudre le modèle d'entrée et renvoie le résultat en une seule fois. Utilisez cette option lorsque vous n'avez pas besoin de rappels, d'incrémentalité ni de suivre la progression d'une solution.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

Résolution d'un problème de génération d'équipes à partir du SolveShiftGenerationRequest donné en générant des équipes à partir de modèles d'équipes donnés afin de couvrir la demande des employés.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

Résolution d'un problème de planification des équipes fixe à partir du SolveShiftSchedulingRequest donné en affectant des employés à des équipes afin de maximiser leurs préférences de planification et de minimiser les cas de non-respect des contraintes de planification.

DesignShippingNetworkRequest

La requête contient une instance du LSNDSP et doit contenir un ensemble de ports, un ensemble de sections candidates, un ensemble de classes de navires et un ensemble de produits à satisfaire.

Champs
request_id

string

Problème ou identifiant de la demande.

solver_parameters

SolverParameters

Paramètres du résolveur.

ports[]

Port

Liste des ports possibles à appeler dans les services de navire. La requête ne doit contenir que les ID de port figurant dans cette liste.

leg_candidates[]

LegCandidate

Liste des étapes potentielles à ajouter aux services des navires. La requête ne doit contenir que les ID des étapes candidates figurant dans cette liste.

vessel_classes[]

VesselClass

Liste des classes de navires pour effectuer des services de navires. Notez que tous les navires d'une même classe sont complètement interchangeables. La requête ne doit contenir que les ID de classe de navire figurant dans cette liste.

commodity_demands[]

CommodityDemand

Liste des demandes potentielles de produits (c'est-à-dire de conteneurs) que les services des navires doivent remplir.

vessel_services[]

VesselService

Vous pouvez fournir un réseau de services de navires valides (généralement l'état actuel du réseau) pour commencer l'optimisation.

DesignShippingNetworkResponse

La réponse contient la solution à l'instance LSNDSP transmise dans la requête. Elle contient un réseau valide de services de navires et de chemins de la demande de marchandises. La demande totale de produits par tronçon ne peut pas dépasser la capacité de la classe des navires desservant cette section. Notez qu'aucun service de navire ne répondant à la demande est toujours une solution envisageable au problème de conception et de planification du réseau de livraison par ligne.

Champs
request_id

string

ID de la requête à laquelle cette réponse est associée.

vessel_services[]

VesselService

Réseau de services de navires. Pour chaque classe de navire, le nombre total de navires utilisés ne peut pas dépasser le nombre de navires disponible pour cette classe.

commodity_demand_paths[]

CommodityDemandPath

Liste de tous les parcours par lesquels une demande positive de produits de base est acheminée. Notez que certains identifiants de demande de produits peuvent ne pas être inclus si aucune demande n'est expédiée. Par ailleurs, une demande de produits de base peut être partiellement satisfaite. Pour chaque demande de produits de base, la quantité totale satisfaite ne peut pas dépasser la demande totale. Enfin, commodity_demand_paths dépend de vessel_services (voir la définition de CommodityDemandPath).

SolveMathOptModelRequest

Demande de solution unaire à distance dans MathOpt.

Champs
solver_type

SolverTypeProto

Facultatif. Type Solveur permettant de résoudre le problème numériquement. Notez que si une solution n'est pas compatible avec une caractéristique spécifique du modèle, la procédure d'optimisation ne fonctionnera pas.

model

ModelProto

Obligatoire. Représentation mathématique du problème d'optimisation à résoudre.

parameters

SolveParametersProto

Facultatif. Paramètres permettant de contrôler une seule résolution. Le paramètre enable_output est géré spécifiquement. Pour les résolveurs qui acceptent les rappels de messages, le définir sur "true" permet au serveur d'enregistrer un rappel de message. Les messages résultants seront renvoyés dans SolveMathOptModelResponse.messages. Pour les autres résolveurs, la définition de enable_output sur "true" entraîne une erreur.

model_parameters

ModelSolveParametersProto

Facultatif. Paramètres permettant de contrôler une seule résolution, spécifiques au modèle d'entrée (consultez la section SolveParametersProto pour les paramètres indépendants du modèle).

SolveMathOptModelResponse

Réponse pour une solution unaire à distance dans MathOpt.

Champs
result

SolveResultProto

Description du résultat de la résolution du modèle dans la requête.

messages[]

string

Si SolveParametersProto.enable_output a été utilisé, il contient les messages de journal des résolveurs qui acceptent les rappels de message.

SolveShiftGenerationRequest

Requête de résolution du problème de génération d'équipes. Les règles permettant de générer des équipes sont décrites dans chaque ShiftTemplate. Plusieurs décalages dans la réponse peuvent être générés à partir d'un seul ShiftTemplate. Les équipes générées et sélectionnées par le résolveur doivent respecter les règles décrites dans ShiftTemplate et couvrir la demande spécifiée des employés.

Champs
solver_config

SolverConfig

Facultatif. Paramètres du résolveur.

shift_templates[]

ShiftTemplate

Obligatoire. Ensemble de modèles d'équipes spécifiant des règles pour générer des équipes.

employee_demands[]

EmployeeDemand

Obligatoire. Nombre total de demandes des employés que les équipes générées par shift_templates doivent couvrir.

SolveShiftGenerationResponse

Réponse au problème de génération d’équipes. Si la valeur solution_status renvoyée est SOLVED, un ensemble de décalages valides générés par le résolveur est renvoyé dans employee_schedules. Pour que le planning des équipes soit valide, les propriétés suivantes sont valides:

  1. Chaque équipe générée dans employee_schedules respecte les règles spécifiées dans le ShiftTemplate correspondant.
  2. Chaque événement sélectionné dans chaque quart de travail respecte les règles spécifiées dans le ShiftTemplate.Event correspondant.
  3. Le nombre total d'employés affectés à l'ensemble des équipes générées à partir du même modèle ShiftTemplate ne dépasse pas maximum_employee_count de ce modèle.
  4. L'ensemble des employés affectés couvrent la demande à chaque intervalle donné.

Champs
solution_status

ShiftGenerationSolutionStatus

État de la solution renvoyée. Si solution_status n'est pas SOLVED, employee_schedules sera vide.

employee_schedules[]

EmployeeSchedule

Ensemble des quarts de travail générés par le résolveur avec le nombre d'employés affectés à chaque planification.

demand_coverage_violations[]

DemandCoverageViolation

Cas de non-respect de la couverture de la demande basés sur le employee_counts attribué dans le employee_schedules donné. Les employee_demands indiqués dans la demande sont agrégés. Si deux intervalles employee_demand se chevauchent, la demande est additionnée sur la partie de l'intervalle qui se chevauche.

SolveShiftSchedulingRequest

Requête pour l'API de planification des employés. La demande spécifie au minimum un ensemble d'employés, un ensemble d'équipes, un ensemble de rôles qu'un employé peut occuper et un ensemble d'exigences en matière de couverture. Les exigences de couverture précisent, sur une période donnée, le nombre d'employés nécessaires pour remplir chaque rôle. Les employés affectés à un quart de travail sont également affectés à un seul rôle (et à un seul) pour ce poste, et les employés ne peuvent pas être affectés à deux quarts de travail qui se chevauchent. Consultez les SolveShiftSchedulingResponse ci-dessous pour en savoir plus sur la validité de l'attribution d'équipes.

Des contraintes de planification supplémentaires peuvent être spécifiées pour chaque employé afin de limiter davantage le problème. Un niveau de priorité est attribué à toutes les contraintes de planification et à toutes les exigences de couverture (OBLIGATOIRE, ÉLEVÉE, MOYENNE, FAIBLE). Toutes les contraintes avec le niveau de priorité PRIORITY_MANDATORY doivent être satisfaites par le résolveur. Le résolveur peut contourner les contraintes associées à toute autre priorité, mais ces cas de non-respect sont minimisés dans l'ordre de priorité. Consultez l'énumération Priority pour en savoir plus sur la gestion des niveaux de priorité pour chaque contrainte.

Le résolveur tente d'optimiser les valeurs ShiftPreference.preference pour chaque employé en respectant les contraintes données. Le résolveur n'enfreint pas une contrainte afin de satisfaire d'autres préférences ; il n'enfreint une contrainte que si l'attribution de planification est impossible avec les contraintes données.

Remarque concernant l'heure: toutes les heures concernées par le problème sont spécifiées à l'aide du message DateTime. Ce message inclut un champ "TimeZone". Sauf indication contraire de l'utilisateur, le fuseau horaire par défaut est UTC. Les messages DateTime ne doivent être spécifiés qu'en minutes. Toutes les secondes et les nano-unités sont ignorées.

Champs
request_id

string

Problème ou identifiant de la demande.

solve_parameters

SolveParameters

Paramètres permettant de contrôler une seule solution du problème.

employees[]

Employee

Tous les employés disponibles doivent être planifiés.

shifts[]

Shift

Toutes les périodes de travail constituent le planning.

coverage_requirements[]

CoverageRequirement

Exigences de couverture pour l'ensemble de l'horizon de planification. Celles-ci indiquent le nombre d'employés qui doivent assumer chaque rôle ou posséder une compétence particulière au cours d'une période donnée ou d'une liste d'ID d'équipes. Toutes les exigences de couverture doivent être spécifiées soit à l'aide de périodes, soit à l'aide d'une liste d'ID d'équipes, mais pas des deux. Les périodes (le cas échéant) correspondant aux exigences de couverture ne peuvent pas se chevaucher pour chaque emplacement. Le niveau de priorité par défaut pour chacune de ces contraintes est PRIORITY_MANDATORY pour les exigences de rôle et PRIORITY_LOW pour les compétences requises. Pour en savoir plus, consultez l'énumération Priority.

role_ids[]

string

Liste de tous les rôles possibles pour l'ensemble du personnel. Chaque employé doit avoir au moins un rôle auquel il peut être assigné pour un quart de travail. Un rôle fait référence à un poste spécifique attribué au cours d'une équipe (infirmier diplômé, chef exécutif, serveur, etc.). Lorsqu'un employé est affecté à un poste, il se voit également attribuer un rôle spécifique.

skill_ids[]

string

Liste de toutes les compétences possibles pour l'ensemble du personnel. Une compétence fait référence à toute qualification supplémentaire qu'un employé peut avoir et qui ne concerne pas un emploi spécifique qui peut lui être attribué (certifications, langues parlées, etc.). Cette liste peut être vide. Lorsqu'un employé est affecté à un poste, il doit posséder toutes les compétences nécessaires pour ce poste.

location_ids[]

string

Liste de tous les lieux possibles pour l'ensemble des quarts de la planification. Cette liste peut être vide. Il peut s'avérer utile de spécifier des lieux différents lorsque, par exemple, un infirmier en chef souhaite réserver des horaires à plusieurs membres du personnel d'un hôpital ou, dans un autre exemple, le directeur d'un hôtel veut réserver les employés de plusieurs hôtels.

budget_requirements[]

BudgetRequirement

Spécification de budget pour le problème de planification. Le niveau de priorité par défaut pour chacune de ces exigences est PRIORITY_LOW. Pour en savoir plus, consultez l'énumération Priority.

assignments_hint[]

ShiftAssignment

Décalez les affectations à utiliser comme solution provisoire (c’est-à-dire une indice de solution) au problème de planification. Les indications d'attribution sont ignorées si l'attribution contredit un quart de travail non attribuable ou une demande de planification.

SolveShiftSchedulingResponse

Réponse pour l'API de planification du personnel. Pour chaque réponse, shift_assignments sera vide si la valeur solution_status renvoyée est NOT_SOLVED_DEADLINE_EXCEEDED ou INFEASIBLE. Si la valeur solution_status renvoyée est OPTIMAL ou FEASIBLE, une attribution d'équipe valide est renvoyée dans shift_assignments. Pour que l'attribution d'un ajustement soit valide, les propriétés suivantes sont conservées:

  1. Chaque identifiant d'employé est contenu dans l'ensemble d'employés indiqué dans la demande.
  2. Chaque ID de rôle attribué à l'employé est contenu dans l'ensemble des ID de rôle de l'employé en question.
  3. Chaque ID d'équipe est contenu dans l'ensemble des quarts fourni dans la requête.
  4. Chaque ID d'équipe n'est pas l'un des ID non attribuables pour l'employé donné.
  5. Un employé ne sera jamais affecté à deux quarts de travail qui se chevauchent.
  6. Pour la planification donnée, aucune des contraintes ni des requêtes avec le niveau de priorité PRIORITY_MANDATORY n'est enfreinte.

Champs
request_id

string

ID de la requête à laquelle cette réponse est associée.

solution_status

SolutionStatus

État de la solution renvoyée. Si la solution n'est ni FÉASIBLE, ni OPTIMALE, les autres champs de ce fichier proto peuvent être vides. Si l'état est NOT_SOLVED_DEADLINE_EXCEEDED, cela signifie que le délai a été atteint sans que nous ayons trouvé de solution réalisable ni déterminé s'il en existe une. Les requêtes peuvent être impossibles si les contraintes du niveau de priorité MANDATORY ne peuvent pas toutes être satisfaites.

shift_assignments[]

ShiftAssignment

Liste de toutes les attributions. Chaque ShiftAssignment spécifie un employé, le quart de travail auquel il est assigné et le rôle qu'il doit remplir pour ce quart de travail.

status_message

string

Si solution_status n'est pas optimal, ce champ peut contenir des informations supplémentaires sur le solutionneur.