Logistics API 設定 (Logistics API Settings)
simulation.data.logistics_api_settings オブジェクトを使用すると、Stateful API を使用してシミュレーションを実行する際の最適化プロセスを微調整できます。これらの設定は、ソルバー、モデル制約、および計算動作のさまざまな側面を制御します。
このオブジェクトは固定されたスキーマとして解析されます。以下のパラメータに含まれないキーは警告もエラーもなく無視され、既定値のまま実行が進みます。そのため、綴り間違いや、最適化 (Stateless) API から借用した名前は、「設定したのに効かないパラメータ」として現 れます。
いくつかのパラメータは、最終的に渡されるソルバーリクエストとは意図的に異なる名前になっています。algo_optimize_quantity は model_parameters.optimize_quantity に、vehicle_cost は model_parameters.vehicle_costs に、first_solution_strategies は solver_parameters.first_solution_strategy になります。このページの表にある名前を使用してください。
以下の既定値はいずれも初期状態の値です。ほとんどはデプロイごとに設定可能な環境変数であるため、実際のインストール環境では異なる値から始まる場合があります。既定値は目安として扱い、運用が依存する項目は明示的に設定してください。
一般設定 (General Settings)
これらの設定は、ロジスティクスシミュレーション構成に直接適用されます。
| パラメータ | タイプ | 説明 | デフォルト |
|---|---|---|---|
pipeline_type | string | 計算パイプラインを定義します。simple_one_stage: 単一のステートレス API 呼び出し。two_stages: 推定とそれに続く正確な計算。 | simple_one_stage |
first_solution_strategies | array | 最適化実行を実行するために同時に使用される初期解戦略(整数)のリスト。先頭の要素がソルバー側の solver_parameters.first_solution_strategy になります。 | [0] |
only_pdp | boolean | true の場合、ピックアップおよびドロップオフ問題 (PDP) モードのみを使用します。false の場合、CVRPTW をデフォルトとします。 | false |
trip_cost | number | 各トリップに割り当てられるコスト。トリップコスト を参照してください。 | 0 |
max_pickup_slack | integer | ピックアップノードの最大許容スラック時間(秒単位)。 | - |
max_dropoff_slack | integer | ドロップオフノードの最大許容スラック時間(秒単位)。 | - |
use_path_equalizer | boolean | パスイコライザーを有効にして、車両間で割り当てをより均等に分散します。 | - |
path_equalizer_weight | integer | パスイコライザー目的の重み。 | 100 |
average_travel_duration_to_node | integer | ノードへの推定平均移動時間(秒単位)。 | 1200 |
allow_upload_after_simulation_start_time | boolean | true の場合、シミュレーション開始後の予約更新(例:ライブ挿入)を許可します。 | false |
booking_data_pipeline_filters | array | ソルバーに渡す前に、受け取った予約へ順に適用されるフィルタ規則のリストです。各規則は booking.data のフィールドを対象とし、equals、not_equals、contains、not_contains、in、not_in、is_null、is_not_null の操作をサポートします。value は Django テンプレート構文(例: {{ simulation.start_time|date:'Y-m-d' }})に対応しており、シミュレーションのプロパティに基づく動的なフィルタが書けます。すべての規則が順に適用され、そのすべてに一致した予約のみがソルバーに渡されます。 | [] |
should_set_max_slack_start_location_zero | boolean | 開始場所の最大スラックをゼロに設定するかどうか。 | - |
stateless_api_server | string | シミュレーションに使用するカスタムステートレス API サーバーの URL。 | - |
should_lock_next_stop_if_vehicle_live | boolean | 再最適化中のドライバーの混乱を防ぐために、ライブ車両の次の停止をロックします。 | true |
should_optimize_fail_to_board_bookings | boolean | true の場合、ピックアップに失敗した注文を最適化の試みに含めます。 | true |
truckban_enabled | boolean | トラック禁止制約を有効または無効にします。 | - |
truckban_buffer_time_windows | integer | トラック禁止の時間枠を調整する際のバッファ時間(秒単位)。 | - |
slack_cost | number | 実行対象のノードをスラック課金対象として指定し、そのノードでの待機時間を目的関数に反映させます。サポートされる値は 0 と 1 のみで、スラックを課金するかどうかを選ぶフィールドです。実際の単価は slack_cost_factor で設定します。これは legacy パスの仕組みです。path_constraints_mode が logistics の場合、ソルバーは各車両の logistics_optimize_slack からスラックコストを取得 し、このフィールドは無視されます。 | null |
logistics_optimize_slack | boolean | true の場合、ソルバーはロジスティクスモードでスラックを最適化します。 | - |
path_constraints_mode | string | パス制約のモード。 | - |
node_grouping_enabled | boolean | ノードグループ化ロジックをアクティブにします。 | - |
clear_cumulative_limitations | boolean | true に設定すると、累積制限をクリアします。 | - |
max_departures_per_hour | number | 1 時間あたりに運行拠点を出発できる車両数の上限を、拠点ごとの cumulative_limitation ではなくシミュレーション全体の単一設定として指定します。値 N は、すべてのピックアップノードと vehicle_position ノードを対象とする 1 件の累積制限(max_cumulative_vehicles は 1、depot_service_time は 3600 / N)に変換されます。同時に 1 台のみを扱うため、3600 / N 秒ごとに 1 台が出発します。未設定または 0 の場合、制限は適用されません。拠点ごとの cumulative_limitation との併用はできず、両方を設 定した実行は拒否されます。適用対象は最適化の実行のみで、手動編集の再計算に累積制限が渡されることはありません。倉庫のキャパシティ制限 を参照してください。 | null |
cumulative_limitations_mode | string | 拠点の時間枠(スロット)割り当てを経路計算と同時に解くか(local_search)、経路計算の後に別のパスで解くか(postprocessing)を指定します。デフォルトはデプロイごとに設定され、現在は postprocessing です。これは最適化 (Stateless) API 自体のデフォルトである local_search とは異なります。累積制限が適用されない場合は効果がありません。拠点スロットの割り当てタイミングの制御 を参照してください。 | postprocessing |
manual_edit_api_minimize_slack | boolean | 手動編集 API 操作中にスラックを最小化しようとします。 | - |
manual_edit_allow_vehicle_late | boolean | 手動編集中に車両の遅延を許可します。 | true |
manual_edit_lateness_penalty_coefficient | integer | 手動編集における遅延のペナルティ係数。 | 10 |
cvb_fleetmin_time_limit | integer | CVB フリート最小化の時間制限。 | 600 |
cvb_fleetmin_solutions_limit | integer | CVB フリート最小化のソリューション制限。 | - |
cvb_fleetmin_iterations_limit | integer | CVB フリート最小化の反復制限。 | - |
use_cvb_local_search_operator | boolean | CVB ローカル検索演算子を使用します。 | - |
cvb_local_search_iterations_limit | integer | CVB ローカル検索の反復制限。 | - |
geofence_definition_strategy | object | ジオフェンスを定義するための戦略。 | - |
geofence_vehicle_allocation_strategy | object | 車両をジオフェンスに割り当てるための戦略 (STRICT または FLEXIBLE)。 | - |
stateless_api_login | string | カスタムステートレス API サーバーの ログイン。 | - |
stateless_api_password | string | カスタムステートレス API サーバーのパスワード。 | - |
truckban_strategy | object | トラック禁止を処理するための戦略。 | - |
booking_order_prioritization | object | 予約注文の優先順位付けのための構成。 | - |
node_grouping_capacity_strategy | object | ノードグループ化容量要件の戦略。 | - |
assigned_node_grouping_enabled | boolean | node_grouping_enabled によるグループ化を、すでに車両に割り当て済みのノードにも拡張します。これにより、新規の注文を車両がすでに保持している停車地とグループ化できます。node_grouping_enabled が true でない場合は効果がありません。また PDP の実行時のみ適用され、CVRPTW の経路で割り当て済みノードがグループ化されることはありません。false の場合、グループ化は未割り当てのノードのみを対象とします。 | false |
manual_edit_api_vehicle_logistics_optimize_slack | boolean | 手動編集 API がスラックを最適化するかどうか。 | - |
manual_edit_api_use_vehicle_start_time | boolean | 手動編集に車両開始時間を使用します。 | - |
manual_edit_api_solver_kind | string | 手動編集 API のソルバーの種類(デフォルト:LOCAL)。 | LOCAL |
manual_edit_finalization_type_pickups | string | 手動編集におけるピックアップノードの確定タイプ。 | - |
manual_edit_finalization_type_dropoffs | string | 手動編集におけるドロップオフノードの確定タイプ。 | - |
manual_edit_max_possible_lateness | integer | 手動編集における最大可能な遅延。 | - |
manual_edit_optimize_quantity | string | 手動編集の最適化数量。 | - |
manual_edit_slack_cost_factor | number | 手動編集のスラックコスト係数。 | - |
manual_edit_allow_cvrptw_conversion | boolean | シミュレーション での手動編集中に CVRPTW モードと注文グループ化を有効にします。アクティブな場合、手動計画アクションは CVRPTW の実現可能性(同じピックアップ場所と時間枠)の最適化チェックをトリガーします。実現可能な場合、複数の注文が単一のノードに変換されます。同様に、重複する時間枠を持つ同じ場所でのドロップオフは、単一のアクションに統合されます(容量制約を無視)。これにより、トリップに単一のピックアップと統合されたドロップオフが含まれ、トリップごとに各場所を1回だけ訪問するようにすることで、手動計画が合理化されます。 | false |
manual_edit_try_strict_time_windows_request | boolean | 時間枠の制約を緩める前に、手動編集中に時間枠を厳密に強制しようとします。manual_edit_allow_vehicle_late を true に設定して組み合わせて使用する必要があります。 | false |
manual_edit_td_postprocessing_no_offer_if_time_window | boolean | postprocessing_no_offer_if_time_window の手動編集 API 版で、同 API 自体が行う時間依存の再計算パスを制御します。true の場合、再計算後の到着時刻が予約の close_time_ts を超えると、その予約は時間枠に違反した状態で経路に残されるのではなく割り当て解除されます。ノードは NEW に戻り、scheduled_ts と break_info はクリアされ、予約はレスポンスの details.rejected_bookings に報告されます。効果があるのは vehicle_assign_booking_list と shift_nodes_time_windows の 2 つのアクションのみです。他のアクションも経路の再計算は行いますが、違反が見つかっても除外は行いません。tdroute_postprocessing_enabled が必要です。 | false |
route_cost_modification_primary | object | プライマリルートエンジンのルートコスト変更。 | - |
route_cost_modification_secondary | object | セカンダリルートエンジンのルートコスト変更。 | - |
finalization_type_pickups | string | ピックアップのデフォルトの確定タイプを上書きします。min または max にすることができます。 | min |
finalization_type_dropoffs | string | ドロップオフのデフォルトの確定タイプを上書きします。min または max にすることができます。 | min |
enable_time_windows_adjustment | boolean | operations_locations から生成されたノードの時間枠調整を有効にします。これにより、場所の設定の open_ts_offset および close_ts_offset 値を使用してノードの時間枠を変更できます。 | false |
time_windows_adjustment_strategy | string | 時間枠調整の戦略を定義します。現在、サポートされている唯一の値は DROPOFF_FIXED_CLOSE_TS_OFFSET です。この戦略では、close_ts_offset(秒)がノードの元の終了時間から減算され、開始時間より前にならないようにします:new_close_time = max(original_open_time, original_close_time - close_ts_offset)。open_ts_offset は現在この戦略では使用されていません。現時点では open_ts の変更はサポートされていません。 | DROPOFF_FIXED_CLOSE_TS_OFFSET |
logistics_break_info_handling_enabled | boolean | ドライバー休憩の扱いを制御するマスタースイッチで、最適化パイプラインと手動編集 API の両方に効きます。無効の間はどの車両の動的休憩パラメータもソルバーに渡らないため、最適化実行では休憩が一切計画されず、calculate_break_start_times も無効になるため break_start_ts は返りません。手動編集も休憩を再計算・保持せず、変更対象のノードから break_info を削除します。省略または null の場合は、固定の false ではなくデプロイごとの既定値に従います。ドライバー休憩 を参照してください。 | デプロイの既定値(有効化されていなければ無効) |
manual_edit_keep_assigned_nodes_relative_order | boolean | true の場合、手動編集中も既に割り当て済みのノードの相対的な順序を厳密に保持します。進行中のルートの並びを崩さずに新しい注文を挿入したい場合に有用です。 | - |
enable_pickup_reassignment | boolean | 割り当て済みのピックアップノードを別の車両へ移動することを最適化に許可します。無効の場合、既存のピックアップ割り当ては固定として扱われます。 | false |
enable_inventory_tracking | boolean | 実行全体で在庫拠点の在庫量を追跡し、すべてのピックアップが可能である前提を置かずに、実際に積める量に沿った計画を立てます。 | false |
ソルバーパラメータ (Solver Parameters)
これらのパラメータは、基礎となる VRP ソルバーの動作を制御します。通常、専門家がパフォーマンスを調整するために使用します。
| パラメータ | タイプ | 説明 | デフォルト |
|---|---|---|---|
algorithm | string | ソルバーアルゴリズム:static(デフォルト)または dynamic(リアルタイム/オンデマンド用)。 | static |
solution_limit | number | 検索中に生成するソリューションの最大数。 | 100000000 |
time_limit_ms | number | 検索に許可される最大時間(ミリ秒単位)。既定値は実質無制限ではなく 30 秒です。大規模な実行では意図的に引き上げるか、auto_calculate_time_limit_enabled で問題の規模から算出させてください。 | 30000 |
use_local_search_metaheuristic | boolean | ローカル検索メタヒューリスティクスを有効にします。 | false |
guided_local_search_lambda_coefficient | number | ガイド付きローカル検索手順のパラメータ。 | 0.1 |
use_tsp_opt | boolean | 巡回セールスマン問題 (TSP) の最適化を有効にします。 | false |
log_search | boolean | 検索ログを有効にします 。 | false |
lns_time_limit_ms | number | 大規模近傍探索 (LNS) 完了検索の時間制限。 | 1000 |
savings_neighbors_ratio | number | 貯蓄近傍の比率。 | 1.0 |
waypoints_optimization_second_phase | boolean | prebook モードのウェイポイント最適化の第2フェーズを有効にします。 | false |
optimization_step | number | ローカル検索の最小改善ステップ。 | 1 |
use_all_local_search_operators | boolean | 利用可能なすべてのローカル検索演算子を使用します。 | false |
use_depth_first_search | boolean | ローカル検索の代わりに深さ優先検索を使用します。 | false |
auto_calculate_time_limit_enabled | boolean | ソルバー時間制限の自動計算を有効または無効にします。 | null |
auto_calculate_time_limit_params | object | ソルバー時間制限の自動計算のためのパラメータ。詳細については ソルバー時間の自動計算 を参照してください。 | null |
first_solution_strategies_second_stage | array | 2 段階実行(pipeline_type が two_stages)における第 2 段階の初期解戦略です。未設定の場合は第 1 段階と同じ戦略を使用します。 | null |
time_limit_ms_second_stage | number | 2 段階実行(pipeline_type が two_stages)における第 2 段階の探索時間の上限です。単一段階のパイプラインでは効果がありません。 | 30000 |
total_to_furthest_distance_ratio | number | 車両の総移動距離と、その車両が訪問する最遠ノードまでの距離との比率に対するハード制約です。放射方向から大きく外れて迂回する経路を除外します。距離比率制約 を参照してください。 | null |
use_local_search_operators | array | 有効にするローカル検索演算子を名前で指定します。すべてか無しかではなく、探索を細かく調整したい場合に使います。各要素はソルバーが認識する演算子名である必要があり、未知の名前はバリデーションエラーになります。空のリストの場合、選択はソルバーに委ねられます。 | [] |
waypoints_solution_limit | number | ウェイポイント最適化フェーズが生成できるソリューション数の上限で、このフェーズが探索予算のどれだけを使うかを制限します。 | 1000 |
モデルパラメータ (Model Parameters)
これらのパラメータは、シミュレーションモデルの一般的なメタデータと制約を定義します。
| パラメータ | タイプ | 説明 | デフォルト |
|---|---|---|---|
vehicle_cost | number | 車両自身の vehicle_cost に対するフリート全体の既定値です。ソルバーが使用する車両 1 台ごとに一度加算される固定コストで、自身で値を持たないすべての車両に適用されます。値を大きくすると追加の車両の使用が抑制されます。ソルバーには model_parameters.vehicle_costs として渡されます。車両コスト を参 照してください。 | 1000 |
booking_penalty | number | 訪問をドロップした(未提供の予約)場合のペナルティ。目的関数に追加されます。 | 1000 |
use_walking_time_to_reduce_time_windows | boolean | 時間枠を調整するために徒歩時間を使用します。 | false |
algo_optimize_quantity | string | 最適化の目標:total_time または total_distance。ソルバーには model_parameters.optimize_quantity として渡されますが、ここで読み取られる設定名は algo_ 付きのものだけです。 | total_time |
use_lifo_order_check | boolean | LIFO(後入れ先出し)注文制約を有効にします。 | false |
lifo_order_check_on_all_vehicles | boolean | LIFO チェックをすべての車両に適用します。 | true |
group_crossing_penalty | number | 厳密に排他的ではないグループを横断する場合のペナルティ。 | - |
strictly_exclusive_groups | array | 同じ車両に混載できないグループのリスト。 | - |
mutually_exclusive_groups | array | 相互に排他的なグループペアのリスト(ソフトまたはハード制約)。 | - |
compound_zones | array | 入退室時間ペナルティのあるゾーンの定義。 | - |
cumulative_limitations | array | デポで同時にサービスを受ける車両数の制限。 | - |
slack_cost_factor | number | スラック(待機)時間の量に比例して適用されるペナルティ係数です。ノードごとの固定コストである slack_cost に対して、こちらは待機量に応じて増減します。注意: path_constraints_mode を logistics に設定する必要があります。 | - |
cluster_cost | object | 車両の訪問先がどれだけ地理的に散らばっているかに基づくペナルティを加え、車両ごとに密集したクラスタを選ぶよう促します。coord_scale(座標から距離への換算係数、既定 0.001)、factor(全体の重み。自身の cluster_cost_factor を持たない車両に適用)、および測定対象から拠点などの固定地点を除外する ignore_nodes / ignore_node_types / ignore_latlons を受け取ります。 | null |
use_working_hours_equalizer | boolean | 労働時間イコライザーを有効にします。訪問件数ではなく、車両間の総トリップ時間(労働時間)を均等化します。working_hours_equalizer_weight と合わせてソルバー側の単一の working_hours_equalizer 係数へ変換されるため、これが false の間は重みは効きません。イコライザー を参照してください。 | false |
working_hours_equalizer_weight | integer | 労働時間イコライザーのコスト係数で、同じ目的関数の中で移動コストと競合します。use_working_hours_equalizer が true でない場合は無視され、車両が 1 台のみの実行でもソルバー側で無視されます。 | 100 |
計算パラメータ (Calculation Parameters)
これらのパラメータは、計算の実行方法と制約の処理方法を制御します。
| パラメータ | タイプ | 説明 | デフォルト |
|---|---|---|---|
allow_vehicle_late | boolean | ルートを改善するために、時間制約を緩和して遅延到着を許可します。 | false |
vehicle_late_penalty_coefficient | integer | allow_vehicle_late が true の場合の遅延のペナルティの重み。 | - |
max_possible_lateness | integer | 最大許容遅延(秒単位)。 | null |
tdroute_postprocessing_enabled | boolean | ソルバーの実行後に、時間依存の移動時間に基づいて経路の時刻を再計算する後処理を実行し、scheduled_ts、estimated_earliest_arrival_ts、slack を精緻化します。最適化パイプラインと、経路の時刻を再計算するすべての手動編集の両方に適用されます。OSRME ルーティングエンジンでのみサポートされ、それ以外のエンジンの経路は変更されません。また fail-open であり、ルーティングエンジンでエラーが発生した場合はログに記録され、ソルバーが算出した時刻がそのまま維持されます。注意: この後処理は再計算した各ノードの break_info も書き換え、独自の累積クロック上でドライバー休憩を計画します。dynamic_break_duration と dynamic_break_avg_time_between_breaks の両方が設定されていない車両では、記録済みの休憩計画が消去されます。ドライバー休憩 を参照してください。 | false |
postprocessing_no_offer_if_time_window | boolean | tdroute_postprocessing_enabled の後処理が算出した時刻が時間枠に違反していた場合の扱いを決めます。たとえばソルバーが考慮していなかったトラック規制による待機時間が、到着時刻をノードの close_time_ts より後ろに押し出すことがあります。false の場合、その予約は違反したまま経路に残ります。true の場合はピックアップとドロップオフの両方を含む予約全体が経路から除外され、除外によって新たに生じた区間を再計測したうえで、残りに対して後処理が再実行されます(そこでさらに違反が見つかれば繰り返されます)。除外された予約は理由 tdroute_postprocessing_time_window_violation とともに実行結果の rejected bookings に加わり、通常の no-offer 処理を経ます。tdroute_postprocessing_enabled が無効な場合は効果がありません。対象は最適化パイプラインで、手動編集 API には別途 manual_edit_td_postprocessing_no_offer_if_time_window があります。 | false |
use_node_weights_cost | boolean | ノード自身の重みを目的関数への寄与に反映させ、重い、あるいは重要な訪問先ほど比例して大きなコストを持たせます。 | true |
use_mixed_time_matrix | boolean | 単一のルーティングプロファイルを共有しない車両を含むフリートのために、複数のソース行列の移動時間を組み合わせて使用します。 | false |
use_selective_path_equalizer | boolean | パスイコライザーを実際に使用される車両にのみ適用します。これにより、待機している車両に薄められることなく、稼働中のフリートを対象に均等化が測られます。 | false |
exclude_unroutable_bookings | boolean | ルーティングエンジンが到達できない予約を計算から除外します。到達できない座標が 1 件あるだけで実行全体の品質が落ちたり失敗したりするのを防ぎます。除外された予約は拒否として返ります。 | false |
partition_nodes | boolean | 探索の前にノードを分割し、より小さな部分問題としてソルバーに解かせます。VRP toolbox ソルバーでのみサポートされます。 | false |