Package google.research.optimization.v1

Индекс

Оптимизация

API одной платформы, предоставляющий набор решателей оптимизации для задач исследования операций высокого уровня. МЧС:begin_strip

ДизайнДоставкаСеть

rpc DesignShippingNetwork( DesignShippingNetworkRequest ) returns ( DesignShippingNetworkResponse )

Решает проблему проектирования и планирования сети линейных перевозок (LSNDSP) на основе заданного DesignShippingNetworkRequest .

LSNDSP представляет собой сложную задачу оптимизации, целью которой является поиск оптимальной конструкции и планирования сети линейного судоходства. Цель состоит в том, чтобы минимизировать общие затраты на эксплуатацию сети, одновременно удовлетворяя как можно большую часть спроса на грузы между портами.

LSNDSP можно разбить на две основные подзадачи: проектирование сети и планирование. Подзадача проектирования сети определяет набор портов, которые будут обслуживаться сетью, количество судов, которые будут развернуты на каждом маршруте, а также маршруты, по которым будут следовать суда. Подзадача планирования определяет графики движения судов с учетом времени плавания между портами, времени погрузки и разгрузки груза, а также потребности в перевозке грузов между портами.

Проще говоря, LSNDSP — это проблема принятия решения о том, какие порты обслуживать, сколько судов использовать и как планировать движение судов так, чтобы затраты на эксплуатацию сети были минимизированы, при этом максимизируя доходы от удовлетворения спроса на грузы. Сложным подкомпонентом LSNDSP является маршрутизация грузов, которая определяет, какие требования необходимо удовлетворить и какие маршруты назначить для грузов, чтобы максимизировать доход.

РешитьMathOptModel

rpc SolveMathOptModel( SolveMathOptModelRequest ) returns ( SolveMathOptModelResponse )

Решает входную модель и сразу возвращает результат. Используйте это, когда вам не нужны обратные вызовы, инкрементность и не нужно отслеживать ход решения.

РешитьShiftGeneration

rpc SolveShiftGeneration( SolveShiftGenerationRequest ) returns ( SolveShiftGenerationResponse )

Решает проблему создания смен на основе заданного SolveShiftGenerationRequest путем создания смен на основе заданных шаблонов смен, чтобы удовлетворить спрос сотрудников.

SolveShiftПланирование

rpc SolveShiftScheduling( SolveShiftSchedulingRequest ) returns ( SolveShiftSchedulingResponse )

Решает проблему планирования фиксированных смен из заданного SolveShiftSchedulingRequest , назначая сотрудников на смены таким образом, чтобы предпочтения сотрудников в отношении планирования были максимальными, а нарушения ограничений планирования были сведены к минимуму.

ДизайнДоставкаСетьЗапрос

Запрос содержит экземпляр LSNDSP и должен содержать набор портов, набор кандидатов на ветки, набор классов судов и набор требований к товарам, которые необходимо выполнить.

Поля
request_id

string

Идентификатор проблемы или запроса.

solver_parameters

SolverParameters

Параметры решателя.

ports[]

Port

Список возможных портов для захода судов. Запрос должен содержать только идентификаторы портов, которые есть в этом списке.

leg_candidates[]

LegCandidate

Список потенциальных кандидатов на ветки, которые будут добавлены к судовым услугам. Запрос должен содержать только идентификаторы кандидатов на ветку, которые есть в этом списке.

vessel_classes[]

VesselClass

Перечень классов судов для оказания судовых услуг. Обратите внимание, что все суда одного класса полностью взаимозаменяемы. Запрос должен содержать только идентификаторы классов судов, которые есть в этом списке.

commodity_demands[]

CommodityDemand

Перечень потенциальных потребностей в товарах (т.е. контейнерах), которые должны быть удовлетворены судовыми услугами.

vessel_services[]

VesselService

Сеть действительных судовых услуг (обычно текущее состояние сети) может быть предоставлена ​​для использования в качестве отправной точки для оптимизации.

ДизайнДоставкаСетьОтвет

В ответе содержится решение для экземпляра LSNDSP, переданного в запросе. Он содержит действующую сеть судовых перевозок и пути спроса на сырьевые товары. Общий спрос на товары, проходящий через каждый участок, не может превышать вместимость класса судна, обслуживающего этот участок. Обратите внимание, что отсутствие судовых перевозок без удовлетворения спроса всегда является возможным решением проблемы проектирования и планирования сети линейного судоходства.

Поля
request_id

string

Идентификатор запроса, с которым связан этот ответ.

vessel_services[]

VesselService

Сеть судовых сервисов. Для каждого класса судов общее количество используемых судов не может превышать доступное количество судов для этого класса.

commodity_demand_paths[]

CommodityDemandPath

Список всех путей спроса на сырьевые товары, по которым реализуется положительный спрос на сырьевые товары. Обратите внимание, что некоторые идентификаторы спроса на сырьевые товары могут быть не включены, если спрос не будет отгружен. Альтернативно, спрос на сырьевые товары может быть частично удовлетворен. По каждому товарному спросу общий удовлетворенный объем не может превышать общий спрос. Наконец, commodityDemand_paths зависят от судна_services (см. определение CommodityDemandPath).

РешитьMathOptModelRequest

Запрос на унарное удаленное решение в MathOpt.

Поля
solver_type

SolverTypeProto

Необязательный. Тип решателя для численного решения задачи. Обратите внимание: если решатель не поддерживает определенную функцию модели, процедура оптимизации не будет успешной.

model

ModelProto

Необходимый. Математическое представление решаемой задачи оптимизации.

parameters

SolveParametersProto

Необязательный. Параметры для управления одним решением. Параметр Enable_output обрабатывается особым образом. Для решателей, которые поддерживают обратные вызовы сообщений, установка значения true приведет к тому, что сервер зарегистрирует обратный вызов сообщения. Результирующие сообщения будут возвращены в SolveMathOptModelResponse.messages. Для других решателей установка Enable_output значения true приведет к ошибке.

model_parameters

ModelSolveParametersProto

Необязательный. Параметры для управления одним решением, специфичные для входной модели (см. SolveParametersProto для независимых параметров модели).

SolveMathOptModelResponse

Ответ на унарное удаленное решение в MathOpt.

Поля
result

SolveResultProto

Описание результата решения модели в запросе.

messages[]

string

Если использовался SolveParametersProto.enable_output, он будет содержать сообщения журнала для решателей, которые поддерживают обратные вызовы сообщений.

РешитьShiftGenerationRequest

Запрос на решение проблемы формирования смен. Правила формирования смен изложены в каждом ShiftTemplate. Несколько сдвигов в ответе могут быть созданы из одного ShiftTemplate. Смены, созданные и выбранные решателем, должны соответствовать правилам, изложенным в ShiftTemplate, и удовлетворять указанный спрос сотрудников.

Поля
solver_config

SolverConfig

Необязательный. Параметры решателя.

shift_templates[]

ShiftTemplate

Необходимый. Набор шаблонов смен, определяющих правила формирования смен.

employee_demands[]

EmployeeDemand

Необходимый. Общий спрос сотрудников, который необходимо покрыть сменами, созданными с помощью shift_templates . Интервалы DateTime, указанные в каждом EmployeeDemand должны быть непересекающимися и могут быть несмежными.

РешитьShiftGenerationResponse

Ответ на проблему генерации смен. Если возвращенный solution_status имеет значение SOLVED , то набор допустимых сдвигов, сгенерированных решателем, возвращается в employee_schedules . Для действительного графика смен сохраняются следующие свойства:

  1. Каждая смена, созданная в employee_schedules соответствует правилам, указанным в соответствующем ShiftTemplate .
  2. Каждое событие, выбранное в каждой смене, соответствует правилам, указанным в соответствующем ShiftTemplate.Event .
  3. Общее количество сотрудников, назначенных набору смен, созданному на основе одного и того же ShiftTemplate, не превышает maximum_employee_count этого шаблона.
  4. Набор назначенных сотрудников покрывает спрос в каждый заданный интервал.

Поля
solution_status

ShiftGenerationSolutionStatus

Статус возвращенного решения. Если solution_status не SOLVED , employee_schedules будет пустым.

employee_schedules[]

EmployeeSchedule

Набор смен, созданный решателем, а также количество сотрудников, назначенных каждому графику.

РешитьShiftSchedulingRequest

Запрос API планирования рабочей силы. Как минимум, в запросе указывается набор сотрудников, набор смен, набор возможных ролей, которые может выполнять сотрудник, и набор требований к покрытию. Требования к покрытию определяют в течение определенного периода времени количество сотрудников, необходимое для выполнения каждой роли. Сотрудникам, назначенным на смену, также назначается одна (и только одна) роль для этой смены, и сотрудники не могут быть назначены на две перекрывающиеся смены. См. SolveShiftSchedulingResponse ниже для получения более подробной информации о том, что делает назначение смены действительным.

Дополнительные ограничения планирования могут быть указаны для каждого сотрудника, чтобы еще больше ограничить проблему. Всем ограничениям планирования и требованиям покрытия присваивается уровень приоритета (ОБЯЗАТЕЛЬНЫЙ, ВЫСОКИЙ, СРЕДНИЙ, НИЗКИЙ). Все ограничения с уровнем приоритета PRIORITY_MANDATORY должны удовлетворяться решателем. Ограничения с любым другим приоритетом могут быть нарушены решателем, но эти нарушения минимизируются в порядке приоритета. См. перечисление Priority для получения более подробной информации о том, как обрабатываются уровни приоритета для каждого ограничения.

Решатель попытается максимизировать значения ShiftPreference.preference для каждого сотрудника с учетом заданных ограничений. Решатель не будет нарушать ограничение, чтобы удовлетворить больше предпочтений; это нарушит ограничение только в том случае, если назначение планирования невозможно при данных ограничениях.

Примечание о времени: все время в задаче указывается с помощью сообщения DateTime. Это сообщение включает поле TimeZone. Предполагается, что часовой пояс — UTC, если пользователем не указано иное. Сообщения DateTime следует указывать только с точностью до минут; все секунды и нано игнорируются.

Поля
request_id

string

Идентификатор проблемы или запроса.

solve_parameters

SolveParameters

Параметры для управления единственным решением проблемы.

employees[]

Employee

Все доступные сотрудники подлежат планированию.

shifts[]

Shift

Все смены формируют график.

coverage_requirements[]

CoverageRequirement

Требования к покрытию для всего горизонта планирования. Они определяют количество сотрудников, которые должны выполнять каждую роль или обладать навыками в течение определенного периода времени или списка идентификаторов смен. Все требования к покрытию должны быть указаны либо с указанием временных окон, либо со списком идентификаторов смен (но не с тем и другим). Временные окна (если они предусмотрены) для требований к покрытию не могут перекрываться для каждого данного местоположения. Уровень приоритета по умолчанию для каждого из этих ограничений — PRIORITY_MANDATORY для требований роли и PRIORITY_LOW для требований к навыкам. Дополнительные сведения см. в перечислении Priority .

role_ids[]

string

Список всех возможных ролей среди сотрудников. У каждого сотрудника должна быть хотя бы одна роль, которую ему можно назначить на смену. Роль относится к конкретному рабочему заданию в течение смены (например, дипломированная медсестра, шеф-повар, официант и т. д.). Когда сотрудника назначают на смену, ему также назначается одна конкретная роль.

skill_ids[]

string

Список всех возможных навыков среди сотрудников. Навык означает любую дополнительную квалификацию, которую может иметь сотрудник, не относящуюся к конкретной назначаемой работе (например, сертификаты, знание языков и т. д.). Этот список может быть пустым. Когда сотрудника назначают на смену, он должен обладать всеми навыками, необходимыми для этой смены.

location_ids[]

string

Список всех возможных мест набора смен в графике. Этот список может быть пустым. Указание разных местоположений может оказаться полезным, когда, например, менеджер медсестры хочет запланировать работу нескольких медсестер в разных отделениях больницы или, например, менеджер отеля хочет запланировать сотрудников в нескольких отелях.

budget_requirements[]

BudgetRequirement

Спецификация бюджета для задачи планирования. Уровень приоритета по умолчанию для каждого из этих требований — PRIORITY_LOW . Дополнительные сведения см. в перечислении Priority .

assignments_hint[]

ShiftAssignment

Перемещайте задания, чтобы использовать их в качестве предварительного решения (так называемого подсказки к решению) проблемы планирования. Подсказки о назначении игнорируются, если назначение противоречит неназначаемой смене или запросу планирования.

РешитьShiftSchedulingResponse

Ответ для API планирования рабочей силы. Для каждого ответа shift_assignments будет пустым, если возвращаемый solution_status равен NOT_SOLVED_DEADLINE_EXCEEDED или INFEASIBLE . Если возвращенное solution_status имеет значение OPTIMAL или FEASIBLE , то в shift_assignments возвращается допустимое назначение смены. Для допустимого назначения смены сохраняются следующие свойства:

  1. Каждый идентификатор сотрудника содержится в наборе сотрудников, указанном в запросе.
  2. Каждый идентификатор роли, назначенный сотруднику, содержится в наборе идентификаторов ролей для данного сотрудника.
  3. Идентификатор каждой смены содержится в наборе смен, указанном в запросе.
  4. Каждый идентификатор смены не является одним из неназначаемых идентификаторов смены для данного сотрудника.
  5. Сотрудник никогда не будет назначен на две перекрывающиеся смены.
  6. Для данного расписания ни одно из ограничений или запросов с уровнем приоритета PRIORITY_MANDATORY не нарушено.

Поля
request_id

string

Идентификатор запроса, с которым связан этот ответ.

solution_status

SolutionStatus

Статус возвращенного решения. Если решение не является ВОЗМОЖНЫМ или ОПТИМАЛЬНЫМ, другие поля в этом прототипе могут быть пустыми. Если статус NOT_SOLVED_DEADLINE_EXCEEDED, ограничение по времени было достигнуто без нахождения возможного решения или определения его существования. Запросы могут оказаться невыполнимыми, если ограничения уровня приоритета ОБЯЗАТЕЛЬНО не могут быть удовлетворены полностью.

shift_assignments[]

ShiftAssignment

Список всех заданий. Каждый ShiftAssignment указывает сотрудника, смену, к которой он назначен, и роль, которую ему поручено выполнять в этой смене.

status_message

string

Если solution_status не является оптимальным, это поле может содержать дополнительную информацию о решателе.