Índice
Optimization
(interfaz)DesignShippingNetworkRequest
(mensaje)DesignShippingNetworkResponse
(mensaje)SolveMathOptModelRequest
(mensaje)SolveMathOptModelResponse
(mensaje)SolveShiftGenerationRequest
(mensaje)SolveShiftGenerationResponse
(mensaje)SolveShiftSchedulingRequest
(mensaje)SolveShiftSchedulingResponse
(mensaje)
Optimización
Una API de One Platform que expone un conjunto de soluciones de optimización para problemas de investigación de operaciones de alto nivel. MOE:begin_strip
DesignShippingNetwork |
---|
Soluciona el problema de diseño y programación de la red de envío de transporte (LSNDSP) a partir de un El LSNDSP es un problema de optimización complejo que busca encontrar el diseño y la programación óptimos de una red de transporte de transporte. El objetivo es minimizar el costo total de operación de la red, al mismo tiempo que se satisface la mayor cantidad de demanda de carga entre puertos como sea posible. El LSNDSP puede dividirse en dos subproblemas principales: diseño y programación de la red. El subproblema de diseño de la red determina el conjunto de puertos a los que debe prestar servicio la red, la cantidad de embarcaciones que deben desplegarse en cada ruta y las rutas que tomarán las embarcaciones. El subproblema de programación determina los horarios de navegación de las embarcaciones, teniendo en cuenta el tiempo que se tarda en navegar entre los puertos, el tiempo que se tarda en cargar y descargar la carga, y la demanda de transporte de carga entre los puertos. En palabras sencillas, el LSNDSP es el problema de decidir qué puertos atender, cuántos barcos usar y cómo programar los barcos para que se minimice el costo de operación de la red y se maximicen los ingresos para satisfacer la demanda de carga. Un subcomponente desafiante de la LSNDSP es el enrutamiento de cargas, que determina qué demandas satisfacer y qué rutas asignar a la carga para maximizar los ingresos. |
SolveMathOptModel |
---|
Resuelve el modelo de entrada y muestra el resultado de una sola vez. Úsalo cuando no necesites devoluciones de llamada ni incrementalidad, ni hacer un seguimiento del progreso de una solución. |
SolveShiftGeneration |
---|
Resuelve un problema de generación de turnos a partir de un |
SolveShiftScheduling |
---|
Soluciona un problema fijo de programación de turnos de un |
DesignShippingNetworkRequest
La solicitud contiene una instancia del LSNDSP y debe contener un conjunto de puertos, un conjunto de candidatos de etapa, un conjunto de clases de embarcaciones y un conjunto de demandas de materias primas que se deben cumplir.
Campos | |
---|---|
request_id |
ID de solicitud o problema. |
solver_parameters |
Parámetros para la resolución |
ports[] |
Lista de posibles puertos a los que se llamará en los servicios de embarcaciones. La solicitud solo debe contener los IDs de puerto que se encuentran en esta lista. |
leg_candidates[] |
Lista de posibles candidatos para la etapa correspondiente a los servicios de embarcaciones. La solicitud solo debe contener los IDs de candidatos de etapa que se encuentren en esta lista. |
vessel_classes[] |
Lista de clases de embarcaciones para realizar servicios de embarcaciones. Ten en cuenta que todas las embarcaciones de la misma clase son completamente intercambiables. La solicitud solo debe contener los IDs de clase de embarcación que se encuentran en esta lista. |
commodity_demands[] |
Lista de posibles demandas de productos básicos (es decir, contenedores) que los servicios de embarcaciones deben satisfacer. |
vessel_services[] |
Se puede proporcionar una red de servicios de embarcaciones válidos (por lo general, el estado actual de la red) para utilizarla como punto de partida para la optimización. |
DesignShippingNetworkResponse
La respuesta contiene la solución a la instancia LSNDSP que se pasó en la solicitud. Contiene una red válida de servicios de embarcaciones y rutas de demanda de materias primas. La demanda total de productos básicos que atraviesa cada segmento no puede exceder la capacidad de la clase de embarcación que sirve para este segmento. Ten en cuenta que no tener servicios de embarcaciones ni satisfacer la demanda es siempre una solución factible al problema de diseño y programación de la red de envío de transporte transatlántico.
Campos | |
---|---|
request_id |
El ID de la solicitud con la que se asocia esta respuesta. |
vessel_services[] |
Red de servicios marítimos. Para cada clase, la cantidad total de embarcaciones utilizadas no puede superar la cantidad disponible de embarcaciones para esta clase. |
commodity_demand_paths[] |
Lista de todas las rutas de demanda de productos básicos a través de las cuales se envía una demanda positiva de productos básicos. Ten en cuenta que es posible que algunos IDs de demanda de productos básicos no se incluyan si no se envía demanda. Como alternativa, la demanda de materias primas puede satisfacerse parcialmente. Para cada demanda de materias primas, la cantidad total entregada no puede superar la demanda total. Por último, commodity_demand_paths depende de recipient_services (consulta la definición de CommodityDemandPath). |
SolveMathOptModelRequest
Solicitud de una resolución remota unario en MathOpt.
Campos | |
---|---|
solver_type |
Opcional. Tipo de solucionador para resolver numéricamente el problema. Ten en cuenta que si un solucionador no admite una función específica en el modelo, el procedimiento de optimización no será exitoso. |
model |
Obligatorio. Representación matemática del problema de optimización que se debe resolver. |
parameters |
Opcional. Parámetros para controlar una sola resolución. El parámetro enable_output se controla de manera específica. En el caso de los solucionadores que admiten devoluciones de llamada de mensajes, establecerlo en verdadero hará que el servidor registre una devolución de llamada de mensaje. Los mensajes resultantes se mostrarán en resolveMathOptModelResponse.messages. Para otros solucionadores, configurar enable_output como verdadero generará un error. |
model_parameters |
Opcional. Son parámetros para controlar una sola resolución que son específicos del modelo de entrada (consulta Resolver parámetrosProto para conocer los parámetros independientes del modelo). |
SolveMathOptModelResponse
Respuesta para una resolución remota unario en MathOpt.
Campos | |
---|---|
result |
Descripción del resultado de la resolución del modelo en la solicitud. |
messages[] |
Si se usó ResolverParametersProto.enable_output, contendrá mensajes de registro para los solucionadores que admiten devoluciones de llamadas de mensajes. |
SolveShiftGenerationRequest
Solicitud para resolver el problema de generación de turnos. Las reglas para generar cambios se describen en cada ShiftTemplate. Se pueden generar varios cambios en la respuesta a partir de un solo ShiftTemplate. Los turnos generados y seleccionados por el solucionador deben cumplir con las reglas descritas en ShiftTemplate y cubrir la demanda de empleados especificada.
Campos | |
---|---|
solver_config |
Opcional. Parámetros para la resolución |
shift_templates[] |
Obligatorio. Un conjunto de plantillas de turnos que especifican las reglas para generar turnos. |
employee_demands[] |
Obligatorio. Demanda total de los empleados que deben cubrir los turnos que genera |
SolveShiftGenerationResponse
Respuesta para el problema de generación de turnos. Si la solution_status
que se muestra es SOLVED
, en employee_schedules
se muestra un conjunto de cambios válidos generados por el solucionador de problemas. En el caso de un programa de turnos válido, se aplican las siguientes propiedades:
- Cada cambio generado en
employee_schedules
cumple con las reglas especificadas en elShiftTemplate
correspondiente. - Cada evento seleccionado en cada cambio cumple con las reglas especificadas en el
ShiftTemplate.Event
correspondiente. - La cantidad total de empleados asignados al conjunto de turnos generados a partir del mismo ShiftTemplate no excede los
maximum_employee_count
de esa plantilla. - El conjunto de empleados asignados cubre la demanda en cada intervalo determinado.
Campos | |
---|---|
solution_status |
Estado de la solución que se muestra. Si |
employee_schedules[] |
Conjunto de turnos generados por el solucionador junto con el número de empleados asignados a cada programa. |
demand_coverage_violations[] |
Incumplimientos de cobertura de la demanda basados en la |
SolveShiftSchedulingRequest
Solicitud para la API de programación del personal. Como mínimo, la solicitud especifica un conjunto de empleados, un conjunto de turnos, un conjunto de posibles funciones que un empleado puede realizar y un conjunto de requisitos de cobertura. Los requisitos de cobertura especifican, a lo largo de un período, la cantidad de empleados necesarios para cumplir cada rol. A los empleados asignados a un turno también se les asigna una (y solo una) función para ese turno, y no se les puede asignar a dos turnos superpuestos. Consulta el siguiente SolveShiftSchedulingResponse
para obtener más detalles sobre los motivos por los que una asignación de turnos es válida.
Se pueden especificar restricciones de horario adicionales para cada empleado a fin de limitar aún más el problema. Todas las restricciones de programación y los requisitos de cobertura tienen un nivel de prioridad (OBLIGATORIO, ALTO, MEDIO, BAJO). El solucionador debe satisfacer todas las restricciones con nivel de prioridad PRIORITY_MANDATORY
. El solucionador puede incumplir las restricciones que tienen cualquier otra prioridad, pero estas infracciones se minimizan en el orden de prioridad. Consulta la enumeración Priority
para obtener más detalles sobre cómo se controlan los niveles de prioridad de cada restricción.
La herramienta de resolución intentará maximizar los valores de ShiftPreference.preference
para cada empleado con respecto a las restricciones determinadas. El solucionador no infringirá una restricción para satisfacer más preferencias; solo infringirá una restricción si la asignación de programación es inviable bajo las restricciones dadas.
Nota sobre la hora: Todas las horas del problema se especifican con el mensaje DateTime. El mensaje incluye un campo TimeZone. Se supone que la zona horaria es UTC, a menos que el usuario especifique lo contrario. Los mensajes DateTime solo deben especificarse hasta minutos. Se ignoran los segundos y nano.
Campos | |
---|---|
request_id |
ID de solicitud o problema. |
solve_parameters |
Parámetros para controlar una única solución del problema. |
employees[] |
Se programan todos los empleados disponibles. |
shifts[] |
Todos los turnos para definir el cronograma. |
coverage_requirements[] |
Requisitos de cobertura para todo el horizonte de planificación. Estas especifican la cantidad de empleados que deben cumplir cada función, o que poseen una habilidad, durante un período o una lista de IDs de turnos. Todos los requisitos de cobertura deben especificarse con un período o con una lista de los IDs de los cambios (pero no con ambos). Los períodos (si se proporcionan) de los requisitos de cobertura no pueden superponerse para cada ubicación determinada. El nivel de prioridad predeterminado para cada una de estas restricciones es |
role_ids[] |
Lista de todos los puestos posibles en la fuerza laboral. Cada empleado debe tener al menos una función que se le pueda asignar para un turno. Un rol se refiere a una asignación de trabajo específica durante un turno (es decir, enfermero registrado, chef ejecutivo, camarero, etcétera). Cuando se asigna un turno a un empleado, también se le asigna una función específica. |
skill_ids[] |
Lista de todas las habilidades posibles en la fuerza laboral. Una habilidad se refiere a cualquier calificación adicional que un empleado pueda tener y que no esté relacionada con un trabajo asignable específico (es decir, certificaciones, idiomas que se hablan, etc.). Esta lista puede estar vacía. Cuando se asigna un turno a un empleado, debe cumplir con todas las habilidades necesarias para ese turno. |
location_ids[] |
Lista de todas las ubicaciones posibles para el conjunto de turnos en el horario. Esta lista puede estar vacía. Especificar diferentes ubicaciones puede ser útil cuando, por ejemplo, un gerente de enfermería quiere programar muchas sesiones de enfermería en diferentes unidades de un hospital o, por ejemplo, el gerente de un hotel quiere reservar empleados en varios hoteles. |
budget_requirements[] |
Especificación de presupuesto para el problema de programación. El nivel de prioridad predeterminado para cada uno de estos requisitos es |
assignments_hint[] |
Cambia las asignaciones para usarlas como una solución tentativa (también conocida como sugerencia de solución) para el problema de programación. Las sugerencias de asignación se ignoran si la asignación contradice un cambio no asignable o una solicitud de programación. |
SolveShiftSchedulingResponse
Respuesta para la API de programación del personal. Para cada respuesta, el shift_assignments
estará vacío si el solution_status
que se muestra es NOT_SOLVED_DEADLINE_EXCEEDED
o INFEASIBLE
. Si el solution_status
que se muestra es OPTIMAL
o FEASIBLE
, se muestra una asignación de cambio válida en shift_assignments
. Para una asignación de cambio válida, se cumplen las siguientes propiedades:
- Cada ID de empleado está incluido en el conjunto de empleados que se proporciona en la solicitud.
- Cada ID de rol asignado al empleado está incluido en el conjunto de ID de rol para el empleado dado.
- Cada ID de cambio está contenido en el conjunto de cambios indicado en la solicitud.
- Cada ID de turno no es uno de los ID de turno no asignables para el empleado dado.
- Un empleado nunca tendrá asignado dos turnos que se superpongan.
- Para la programación determinada, no se infringe ninguna de las restricciones o solicitudes con el nivel de prioridad
PRIORITY_MANDATORY
.
Campos | |
---|---|
request_id |
El ID de la solicitud con la que se asocia esta respuesta. |
solution_status |
Estado de la solución que se muestra. Si la solución no es ÓPTIMA ni FEASIBLE, es posible que otros campos de este protocolo estén vacíos. Si el estado es NOT_SOLVED_DEADLINE_EXCEEDED, se alcanzó el límite de tiempo sin encontrar una solución factible o determinar si existe una. Las solicitudes pueden ser inviables si no se pueden satisfacer todas las restricciones del nivel de prioridad OBLIGATORIO. |
shift_assignments[] |
Lista de todas las asignaciones. Cada |
status_message |
Si |