Индекс
-
Optimization
(интерфейс) -
DesignShippingNetworkRequest
(сообщение) -
DesignShippingNetworkResponse
(сообщение) -
SolveMathOptModelRequest
(сообщение) -
SolveMathOptModelResponse
(сообщение) -
SolveShiftGenerationRequest
(сообщение) -
SolveShiftGenerationResponse
(сообщение) -
SolveShiftSchedulingRequest
(сообщение) -
SolveShiftSchedulingResponse
(сообщение)
Оптимизация
API одной платформы, предоставляющий набор решателей оптимизации для задач исследования операций высокого уровня. МЧС:begin_strip
ДизайнДоставкаСеть |
---|
Решает проблему проектирования и планирования сети линейных перевозок (LSNDSP) на основе заданного LSNDSP представляет собой сложную задачу оптимизации, целью которой является поиск оптимальной конструкции и планирования сети линейного судоходства. Цель состоит в том, чтобы минимизировать общие затраты на эксплуатацию сети, одновременно удовлетворяя как можно большую часть спроса на грузы между портами. LSNDSP можно разбить на две основные подзадачи: проектирование сети и планирование. Подзадача проектирования сети определяет набор портов, которые будут обслуживаться сетью, количество судов, которые будут развернуты на каждом маршруте, а также маршруты, по которым будут следовать суда. Подзадача планирования определяет графики движения судов с учетом времени плавания между портами, времени погрузки и разгрузки груза, а также потребности в перевозке грузов между портами. Проще говоря, LSNDSP — это проблема принятия решения о том, какие порты обслуживать, сколько судов использовать и как планировать движение судов так, чтобы затраты на эксплуатацию сети были минимизированы, при этом максимизируя доходы от удовлетворения спроса на грузы. Сложным подкомпонентом LSNDSP является маршрутизация грузов, которая определяет, какие требования необходимо удовлетворить и какие маршруты назначить для грузов, чтобы максимизировать доход. |
РешитьMathOptModel |
---|
Решает входную модель и сразу возвращает результат. Используйте это, когда вам не нужны обратные вызовы, инкрементность и не нужно отслеживать ход решения. |
РешитьShiftGeneration |
---|
Решает проблему создания смен на основе заданного |
SolveShiftПланирование |
---|
Решает проблему планирования фиксированных смен из заданного |
ДизайнДоставкаСетьЗапрос
Запрос содержит экземпляр LSNDSP и должен содержать набор портов, набор кандидатов на ветки, набор классов судов и набор требований к товарам, которые необходимо выполнить.
Поля | |
---|---|
request_id | Идентификатор проблемы или запроса. |
solver_parameters | Параметры решателя. |
ports[] | Список возможных портов для захода судов. Запрос должен содержать только идентификаторы портов, которые есть в этом списке. |
leg_candidates[] | Список потенциальных кандидатов на ветки, которые будут добавлены к судовым услугам. Запрос должен содержать только идентификаторы кандидатов на ветку, которые есть в этом списке. |
vessel_classes[] | Перечень классов судов для оказания судовых услуг. Обратите внимание, что все суда одного класса полностью взаимозаменяемы. Запрос должен содержать только идентификаторы классов судов, которые есть в этом списке. |
commodity_demands[] | Перечень потенциальных потребностей в товарах (т.е. контейнерах), которые должны быть удовлетворены судовыми услугами. |
vessel_services[] | Сеть действительных судовых услуг (обычно текущее состояние сети) может быть предоставлена для использования в качестве отправной точки для оптимизации. |
ДизайнДоставкаСетьОтвет
В ответе содержится решение для экземпляра LSNDSP, переданного в запросе. Он содержит действующую сеть судовых перевозок и пути спроса на сырьевые товары. Общий спрос на товары, проходящий через каждый участок, не может превышать вместимость класса судна, обслуживающего этот участок. Обратите внимание, что отсутствие судовых перевозок без удовлетворения спроса всегда является возможным решением проблемы проектирования и планирования сети линейного судоходства.
Поля | |
---|---|
request_id | Идентификатор запроса, с которым связан этот ответ. |
vessel_services[] | Сеть судовых сервисов. Для каждого класса судов общее количество используемых судов не может превышать доступное количество судов для этого класса. |
commodity_demand_paths[] | Список всех путей спроса на сырьевые товары, по которым реализуется положительный спрос на сырьевые товары. Обратите внимание, что некоторые идентификаторы спроса на сырьевые товары могут быть не включены, если спрос не будет отгружен. Альтернативно, спрос на сырьевые товары может быть частично удовлетворен. По каждому товарному спросу общий удовлетворенный объем не может превышать общий спрос. Наконец, commodityDemand_paths зависят от судна_services (см. определение CommodityDemandPath). |
РешитьMathOptModelRequest
Запрос на унарное удаленное решение в MathOpt.
Поля | |
---|---|
solver_type | Необязательный. Тип решателя для численного решения задачи. Обратите внимание: если решатель не поддерживает определенную функцию модели, процедура оптимизации не будет успешной. |
model | Необходимый. Математическое представление решаемой задачи оптимизации. |
parameters | Необязательный. Параметры для управления одним решением. Параметр Enable_output обрабатывается особым образом. Для решателей, которые поддерживают обратные вызовы сообщений, установка значения true приведет к тому, что сервер зарегистрирует обратный вызов сообщения. Результирующие сообщения будут возвращены в SolveMathOptModelResponse.messages. Для других решателей установка Enable_output значения true приведет к ошибке. |
model_parameters | Необязательный. Параметры для управления одним решением, специфичные для входной модели (см. SolveParametersProto для независимых параметров модели). |
SolveMathOptModelResponse
Ответ на унарное удаленное решение в MathOpt.
Поля | |
---|---|
result | Описание результата решения модели в запросе. |
messages[] | Если использовался SolveParametersProto.enable_output, он будет содержать сообщения журнала для решателей, которые поддерживают обратные вызовы сообщений. |
РешитьShiftGenerationRequest
Запрос на решение проблемы формирования смен. Правила формирования смен изложены в каждом ShiftTemplate. Несколько сдвигов в ответе могут быть созданы из одного ShiftTemplate. Смены, созданные и выбранные решателем, должны соответствовать правилам, изложенным в ShiftTemplate, и удовлетворять указанный спрос сотрудников.
Поля | |
---|---|
solver_config | Необязательный. Параметры решателя. |
shift_templates[] | Необходимый. Набор шаблонов смен, определяющих правила формирования смен. |
employee_demands[] | Необходимый. Общий спрос сотрудников, который необходимо покрыть сменами, созданными с помощью |
РешитьShiftGenerationResponse
Ответ на проблему генерации смен. Если возвращенный solution_status
имеет значение SOLVED
, то набор допустимых сдвигов, сгенерированных решателем, возвращается в employee_schedules
. Для действительного графика смен сохраняются следующие свойства:
- Каждая смена, созданная в
employee_schedules
соответствует правилам, указанным в соответствующемShiftTemplate
. - Каждое событие, выбранное в каждой смене, соответствует правилам, указанным в соответствующем
ShiftTemplate.Event
. - Общее количество сотрудников, назначенных набору смен, созданному на основе одного и того же ShiftTemplate, не превышает
maximum_employee_count
этого шаблона. - Набор назначенных сотрудников покрывает спрос в каждый заданный интервал.
Поля | |
---|---|
solution_status | Статус возвращенного решения. Если |
employee_schedules[] | Набор смен, созданный решателем, а также количество сотрудников, назначенных каждому графику. |
РешитьShiftSchedulingRequest
Запрос API планирования рабочей силы. Как минимум, в запросе указывается набор сотрудников, набор смен, набор возможных ролей, которые может выполнять сотрудник, и набор требований к покрытию. Требования к покрытию определяют в течение определенного периода времени количество сотрудников, необходимое для выполнения каждой роли. Сотрудникам, назначенным на смену, также назначается одна (и только одна) роль для этой смены, и сотрудники не могут быть назначены на две перекрывающиеся смены. См. SolveShiftSchedulingResponse
ниже для получения более подробной информации о том, что делает назначение смены действительным.
Дополнительные ограничения планирования могут быть указаны для каждого сотрудника, чтобы еще больше ограничить проблему. Всем ограничениям планирования и требованиям покрытия присваивается уровень приоритета (ОБЯЗАТЕЛЬНЫЙ, ВЫСОКИЙ, СРЕДНИЙ, НИЗКИЙ). Все ограничения с уровнем приоритета PRIORITY_MANDATORY
должны удовлетворяться решателем. Ограничения с любым другим приоритетом могут быть нарушены решателем, но эти нарушения минимизируются в порядке приоритета. См. перечисление Priority
для получения более подробной информации о том, как обрабатываются уровни приоритета для каждого ограничения.
Решатель попытается максимизировать значения ShiftPreference.preference
для каждого сотрудника с учетом заданных ограничений. Решатель не будет нарушать ограничение, чтобы удовлетворить больше предпочтений; это нарушит ограничение только в том случае, если назначение планирования невозможно при данных ограничениях.
Примечание о времени: все время в задаче указывается с помощью сообщения DateTime. Это сообщение включает поле TimeZone. Предполагается, что часовой пояс — UTC, если пользователем не указано иное. Сообщения DateTime следует указывать только с точностью до минут; все секунды и нано игнорируются.
Поля | |
---|---|
request_id | Идентификатор проблемы или запроса. |
solve_parameters | Параметры для управления единственным решением проблемы. |
employees[] | Все доступные сотрудники подлежат планированию. |
shifts[] | Все смены формируют график. |
coverage_requirements[] | Требования к покрытию для всего горизонта планирования. Они определяют количество сотрудников, которые должны выполнять каждую роль или обладать навыками в течение определенного периода времени или списка идентификаторов смен. Все требования к покрытию должны быть указаны либо с указанием временных окон, либо со списком идентификаторов смен (но не с тем и другим). Временные окна (если они предусмотрены) для требований к покрытию не могут перекрываться для каждого данного местоположения. Уровень приоритета по умолчанию для каждого из этих ограничений — |
role_ids[] | Список всех возможных ролей среди сотрудников. У каждого сотрудника должна быть хотя бы одна роль, которую ему можно назначить на смену. Роль относится к конкретному рабочему заданию в течение смены (например, дипломированная медсестра, шеф-повар, официант и т. д.). Когда сотрудника назначают на смену, ему также назначается одна конкретная роль. |
skill_ids[] | Список всех возможных навыков среди сотрудников. Навык означает любую дополнительную квалификацию, которую может иметь сотрудник, не относящуюся к конкретной назначаемой работе (например, сертификаты, знание языков и т. д.). Этот список может быть пустым. Когда сотрудника назначают на смену, он должен обладать всеми навыками, необходимыми для этой смены. |
location_ids[] | Список всех возможных мест набора смен в графике. Этот список может быть пустым. Указание разных местоположений может оказаться полезным, когда, например, менеджер медсестры хочет запланировать работу нескольких медсестер в разных отделениях больницы или, например, менеджер отеля хочет запланировать сотрудников в нескольких отелях. |
budget_requirements[] | Спецификация бюджета для задачи планирования. Уровень приоритета по умолчанию для каждого из этих требований — |
assignments_hint[] | Перемещайте задания, чтобы использовать их в качестве предварительного решения (так называемого подсказки к решению) проблемы планирования. Подсказки о назначении игнорируются, если назначение противоречит неназначаемой смене или запросу планирования. |
РешитьShiftSchedulingResponse
Ответ для API планирования рабочей силы. Для каждого ответа shift_assignments
будет пустым, если возвращаемый solution_status
равен NOT_SOLVED_DEADLINE_EXCEEDED
или INFEASIBLE
. Если возвращенное solution_status
имеет значение OPTIMAL
или FEASIBLE
, то в shift_assignments
возвращается допустимое назначение смены. Для допустимого назначения смены сохраняются следующие свойства:
- Каждый идентификатор сотрудника содержится в наборе сотрудников, указанном в запросе.
- Каждый идентификатор роли, назначенный сотруднику, содержится в наборе идентификаторов ролей для данного сотрудника.
- Идентификатор каждой смены содержится в наборе смен, указанном в запросе.
- Каждый идентификатор смены не является одним из неназначаемых идентификаторов смены для данного сотрудника.
- Сотрудник никогда не будет назначен на две перекрывающиеся смены.
- Для данного расписания ни одно из ограничений или запросов с уровнем приоритета
PRIORITY_MANDATORY
не нарушено.
Поля | |
---|---|
request_id | Идентификатор запроса, с которым связан этот ответ. |
solution_status | Статус возвращенного решения. Если решение не является ВОЗМОЖНЫМ или ОПТИМАЛЬНЫМ, другие поля в этом прототипе могут быть пустыми. Если статус NOT_SOLVED_DEADLINE_EXCEEDED, ограничение по времени было достигнуто без нахождения возможного решения или определения его существования. Запросы могут оказаться невыполнимыми, если ограничения уровня приоритета ОБЯЗАТЕЛЬНО не могут быть удовлетворены полностью. |
shift_assignments[] | Список всех заданий. Каждый |
status_message | Если |