Package google.research.optimization.v1

索引

最適化

運用調査の概要レベルの問題に対する最適化ソルバーのセットを公開する One Platform API。MOE:begin_strip

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

指定された DesignShippingNetworkRequest の船舶のネットワーク設計とスケジュールに関する問題(LSNDSP)を解きます。

LSNDSP は、ライナー船会社の最適な設計とスケジュールを見つけるための複雑な最適化問題です。目標は、ポート間の貨物需要を可能な限り多く満たしながら、ネットワーク運用の総コストを最小限に抑えることです。

LSNDSP は、ネットワーク設計とスケジューリングという 2 つの主要なサブ問題に分けることができます。ネットワーク設計のサブ問題では、ネットワークによってサービスを提供するポートのセット、各ルートに展開する船舶の数、船が通るルートを決定します。スケジューリング サブ問題では、港間の出航にかかる時間、貨物の積み下ろしにかかる時間、港間の貨物輸送の需要を考慮して、船舶の出航スケジュールを決定します。

簡単に言えば、LSNDSP は、貨物需要を満たすために収益を最大化しながらネットワークの運用コストを最小限に抑えるために、サービスを提供するポート、使用する船の数、船のスケジュールを決定する方法を決定する問題です。LSNDSP の難しいサブコンポーネントは、貨物のルーティングです。収益を最大化するために、どの需要を満たすべきか、どのルートを貨物に割り当てるかを決定します。

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

入力モデルを解いて結果を一度に返します。コールバックやインクリメンタリティが不要で、解決の進捗状況を追跡する必要がない場合に使用します。

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

従業員の需要を満たすために、特定のシフト テンプレートからシフトを生成することで、指定された SolveShiftGenerationRequest からのシフト生成問題を解きます。

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

従業員のスケジュール設定が最大化され、スケジュールの制約違反が最小限になるように従業員をシフトに割り当てることで、指定された SolveShiftSchedulingRequest からの固定シフトのスケジュール設定の問題を解決します。

DesignShippingNetworkRequest

このリクエストには LSNDSP のインスタンスが含まれ、ポートのセット、区間の候補のセット、船舶のクラスのセット、履行すべき商品需要のセットが含まれている必要があります。

フィールド
request_id

string

問題またはリクエスト ID。

solver_parameters

SolverParameters

ソルバーのパラメータ。

ports[]

Port

船舶サービスで呼び出すことができるポートのリスト。リクエストには、このリストにあるポート ID のみを含める必要があります。

leg_candidates[]

LegCandidate

船舶サービスに追加する区間の候補リスト。リクエストには、このリストにある区間候補 ID のみを含める必要があります。

vessel_classes[]

VesselClass

船舶サービスを提供する船舶クラスのリスト。同じクラスの船はすべて完全に交換可能です。リクエストには、このリストにある船クラス ID のみを含める必要があります。

commodity_demands[]

CommodityDemand

船舶サービスによって満たされる可能性のあるコモディティ(コンテナ)の需要のリスト。

vessel_services[]

VesselService

有効な船舶サービスのネットワーク(通常はネットワークの現在の状態)を提供して、最適化の出発点として使用できます。

DesignShippingNetworkResponse

レスポンスには、リクエストで渡された LSNDSP インスタンスに解答が保持されます。船舶サービスとコモディティ需要経路の有効なネットワークが含まれています。各区間を通る商品需要の総額は、この区間を通る船舶クラスの容量を超えてはなりません。船舶のネットワーク設計とスケジュールに関する問題は、需要を満たしていない船舶サービスを提供しないことが、常に現実的な解決策となります。

フィールド
request_id

string

このレスポンスが関連付けられているリクエストの ID。

vessel_services[]

VesselService

船舶サービスのネットワーク。各船舶クラスにおいて、使用される船舶の総数は、このクラスで利用可能な船舶の数を超えてはいけません。

commodity_demand_paths[]

CommodityDemandPath

プラスの商品需要が出荷されるすべてのコモディティ需要パスのリスト。需要が発送されない場合、一部の商品需要 ID は含まれない場合があります。あるいは、商品需要を部分的に満たすこともできます。各商品の需要について、履行された数量の合計が需要の合計を超えることはできません。最後に、commodity_demand_paths は vessel_services に依存します(CommodityDemandPath の定義を参照)。

SolveMathOptModelRequest

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 が使用されている場合、メッセージ コールバックをサポートするソルバーのログ メッセージが格納されます。

SolveShiftGenerationRequest

シフト生成の問題を解決するリクエスト。シフトを生成するためのルールについては、各 ShiftTemplate をご覧ください。1 つの ShiftTemplate からレスポンスの複数のシフトを生成できます。ソルバーによって生成および選択されたシフトは、ShiftTemplate で概説されているルールに従い、指定された従業員の需要をカバーする必要があります。

フィールド
solver_config

SolverConfig

省略可。ソルバーのパラメータ。

shift_templates[]

ShiftTemplate

必須。シフトを生成するためのルールを指定するシフト テンプレートのセット。

employee_demands[]

EmployeeDemand

必須。shift_templates によるシフトでカバーする必要がある従業員の需要の合計。

SolveShiftGenerationResponse

シフト生成の問題に対するレスポンス。返された solution_statusSOLVED の場合、ソルバーによって生成された有効なシフトのセットが employee_schedules に返されます。有効なシフト スケジュールの場合、次のプロパティが保持されます。

  1. employee_schedules で生成された各シフトは、対応する ShiftTemplate で指定されたルールに従います。
  2. 各シフトで選択された各イベントは、対応する ShiftTemplate.Event で指定されたルールに従います。
  3. 同じ ShiftTemplate から生成された一連のシフトに割り当てられた従業員の合計数が、そのテンプレートの maximum_employee_count を超えない。
  4. 割り当てられた従業員セットが一定の間隔で需要に対応します。

フィールド
solution_status

ShiftGenerationSolutionStatus

返されたソリューションのステータス。solution_statusSOLVED でない場合、employee_schedules は空になります。

employee_schedules[]

EmployeeSchedule

ソルバーによって生成された一連のシフトと、各スケジュールに割り当てられた従業員数。

demand_coverage_violations[]

DemandCoverageViolation

指定された employee_schedules に割り当てられた employee_counts に基づくデマンド カバレッジ違反。リクエストで指定された employee_demands は集計されます。2 つの employee_demand 間隔が重複する場合、デマンドは間隔の重複部分で合計されます。

SolveShiftSchedulingRequest

Workforce Scheduling API のリクエスト。少なくとも、このリクエストでは、一連の従業員、一連のシフト、従業員が実行できる一連の可能なロール、一連のカバレッジ要件を指定します。適用範囲の要件では、時間枠内で各役割を果たすために必要な従業員数を指定します。シフトに割り当てられた従業員はそのシフトの 1 つの(唯一の)役割にも割り当てられ、重複する 2 つのシフトに従業員を割り当てることはできません。シフト割り当てが有効になる条件について詳しくは、以下の SolveShiftSchedulingResponse をご覧ください。

各従業員に対して追加のスケジュール制約を指定して、問題をさらに制限できます。すべてのスケジューリング制約とカバレッジ要件に優先度レベル(MANDATORY、HIGH、MEDIUM、LOW)が割り当てられます。優先度レベルが PRIORITY_MANDATORY のすべての制約は、ソルバーによって満たされる必要があります。他の優先順位の制約は、ソルバーによって違反される可能性がありますが、これらの違反は優先順位に従って最小限に抑えられます。各制約の優先度レベルの処理の詳細については、Priority 列挙型をご覧ください。

ソルバーは、指定された制約内で各 Employee の ShiftPreference.preference 値を最大化しようとします。ソルバーは、より多くの設定を満たすために制約に違反しません。指定された制約の下でスケジューリング割り当てが実行不可能な場合にのみ、ソルバーが制約に違反することになります。

時間に関する注意: 問題の時刻はすべて、DateTime メッセージを使用して指定されます。このメッセージには TimeZone フィールドが含まれています。TimeZone は、ユーザーが特に指定しない限り UTC とみなされます。DateTime メッセージは分単位でのみ指定します。秒と nano はすべて無視されます。

フィールド
request_id

string

問題またはリクエスト ID。

solve_parameters

SolveParameters

問題の 1 つの解き方を制御するパラメータ。

employees[]

Employee

スケジュール可能なすべての従業員。

shifts[]

Shift

スケジュールを作成するすべてのシフト。

coverage_requirements[]

CoverageRequirement

プランニング期間全体のカバレッジ要件。これらは、時間枠またはシフト ID のリストのいずれかにおいて、各役割を担う必要がある従業員、またはスキルを保有する必要がある従業員の数を指定します。適用範囲の要件はすべて、時間枠またはシフト ID のリスト(両方ではなく)で指定する必要があります。カバレッジ要件の期間(指定した場合)を地域ごとに重複させることはできません。これらの各制約のデフォルトの優先度は、ロール要件では PRIORITY_MANDATORY、スキル要件では PRIORITY_LOW です。詳細については、Priority 列挙型をご覧ください。

role_ids[]

string

従業員全体で可能なすべてのロールのリスト。各従業員には、シフトに割り当てることができるロールが少なくとも 1 つ必要です。Role は、シフト中に割り当てられた特定の職務を指します(登録看護師、エグゼクティブ シェフ、ウェイターなど)。従業員がシフトに割り当てられると、単一の特定のロールにも割り当てられます。

skill_ids[]

string

従業員全体で獲得し得るすべてのスキルのリスト。スキルとは、従業員が持っている、特定の割り当て可能な職務とは無関係な追加の資格を指します(認定資格、使用言語など)。このリストは空でもかまいません。従業員がシフトに割り当てられると、そのシフトに必要なすべてのスキルを習得する必要があります。

location_ids[]

string

スケジュール内の一連のシフトに対して考えられるすべてのロケーションのリスト。このリストは空でもかまいません。たとえば、看護師のマネージャーが病院の複数の部門で多数の看護師の勤務スケジュールを設定したい場合や、ホテル マネージャーが複数のホテルにまたがって従業員のスケジュールを設定したい場合などに、異なる場所を指定すると便利です。

budget_requirements[]

BudgetRequirement

スケジューリングの問題の予算の仕様。これらの各要件のデフォルトの優先度は PRIORITY_LOW です。詳細については、Priority 列挙型をご覧ください。

assignments_hint[]

ShiftAssignment

割り当てをシフトして、スケジューリングの問題への暫定的な解決策(別名、解答ヒント)として使用する。割り当てできないシフトまたはスケジュール リクエストと割り当てが一致しない場合、割り当てのヒントは無視されます。

SolveShiftSchedulingResponse

Workforce Scheduling API に対するレスポンス。各レスポンスで、返された solution_statusNOT_SOLVED_DEADLINE_EXCEEDED または INFEASIBLE の場合、shift_assignments は空になります。返された solution_statusOPTIMAL または FEASIBLE の場合、有効なシフト割り当てが shift_assignments で返されます。シフトの割り当てが有効な場合、次のプロパティが保持されます。

  1. 各従業員 ID は、リクエストで指定された従業員のセットに含まれます。
  2. 従業員に割り当てられた各ロール ID は、その従業員のロール ID のセットに含まれています。
  3. 各シフト ID は、リクエストで与えられた一連のシフトに含まれます。
  4. 各シフト ID は、その従業員の割り当て不可能なシフト ID ではありません。
  5. 1 人の従業員が、重複する 2 つのシフトに割り当てられることはありません。
  6. 指定されたスケジュールで、優先度レベル PRIORITY_MANDATORY の制約またはリクエストに違反はありません。

フィールド
request_id

string

このレスポンスが関連付けられているリクエストの ID。

solution_status

SolutionStatus

返されたソリューションのステータス。解答が FEASIBLE または OPTIMAL でない場合、この proto の他のフィールドは空になる可能性があります。ステータスが NOT_SOLVED_DEADLINE_EXCEEDED の場合、実行可能な解決策が見つからなかったり、実行可能な解決策が存在するかどうかを判別することなく、制限時間に達しています。優先度レベル「MANDATORY」の制約をすべて満たすことができない場合、リクエストは不可能なことがあります。

shift_assignments[]

ShiftAssignment

すべての割り当てのリスト。各 ShiftAssignment では、従業員、そのシフトに割り当てられたシフト、そのシフトの実施に割り当てられたロールを指定します。

status_message

string

solution_status が最適でない場合、このフィールドには解法に関する追加情報が含まれることがあります。