ガイドAPIリファレンス
ガイド

目標

最適化問題の目標関数 (または単に目標) は、問題の制約を満たすすべての実行可能なソリューションのセットで値を最小化または最大化する関数です。車両のルーティング課題 (VRP) ドメインの従来のObjectives関数は、合計距離の最小化です。ただし、実際のシナリオでは、異なる、または複数のObectives関数を同時に考慮する必要があります。さまざまな目標の良い例としては、公正にジョブを分配する、特定のジョブに優先順位を付ける、総コストよりもツアー数の削減を優先する、などがあります。

Tour Planningでは、問題の任意プロパティobjectivesを使用して、目標を指定できます。

サポートされる目標

サポートされている目標のリストは次のとおりです。

  • minimizeUnassigned:未割り当てジョブの数を最小限に抑えます
  • minimizeCost:ソリューションの総コストを最小限に抑えます (暗黙的に、距離、所要時間、固定コストを最小限に抑えます)
  • minimizeDistance:総移動距離を最小限に抑えます
  • minimizeDuration:全ツアーの所要時間の合計として計算された合計所要時間を最小限に抑えます
  • optimizeTourCount:ソリューション内のツアー数を最適化します。この目標には次の追加パラメーターがあります。
    • actionminimizeに設定すると、ソリューション内のツアー数を最小限に抑えます。maximizeに設定されている場合は、ソリューション内のツアー数を最大化します
  • optimizeTaskPosition:ツアー内のジョブタスクアクティビティの位置を制御します。指定されている場合は、タスクの位置はソフト制約と見なされ、ソルバーは違反の数を最小限に抑えようとします。指定されていないものの、ジョブタスクのレベルでpositionプロパティが指定されている場合は、違反できないハード制約と見なされます。

次のように、目標はobjectivesプロパティを使用して階層形式で指定します。

"objectives": [
    {
      "type": "minimizeUnassigned"
    },
    {
      "type": "minimizeCost"
    }
]

この例では、Objective minimizeUnassignedが階層の最上位になります。つまり、他のObjectiveよりも強力な最適化が管理されます。その結果、最適化アルゴリズムでは、低コストのSolutionよりも割り当てられていないジョブが少ないSolutionが優先されます。階層の下位レベルにminimizeUnassignedがある場合 (たとえば上の例でminimizeCostの後にある場合) は、すべてのジョブの割り当てが解除されるなど、予期しない結果が生じる可能性があります。

デフォルトの目標

objectivesを指定しなかった場合、デフォルトでは、ソルバーは未割り当てジョブの数を最小化し (最も高い重要度)、ツアーの数を最小化し (中程度の重要度)、総コストを最小化します (最も低い重要度)。これは次の定義と同等です。

"objectives": [
    {
      "type": "minimizeUnassigned"
    },
    {
      "type": "optimizeTourCount",
      "action": "minimize"     
    },
    {
      "type": "minimizeCost"
    }
]

デフォルトの目標を利用する場合は、それがご自身の最適化の目標に合っていることを確認してください。たとえば、運行管理の使用コストを重視していて、大型の車両を含む小型および大型の車両のハイブリッド運行管理の方が高価な場合、おそらくObjectives階層minimizeCostoptimizeTourCount上に置く必要があります。そうしない場合、デフォルトの目標では、より高コストの大型車両が使用される可能性が高くなります。これは、使用される車両の総数が少なくなるためです。

次のセクションでは、目標を定義する際に注目すべき暗黙的な規則について説明します。

定義のルール

  • 目標は配列として指定される
  • 配列内の目標の順序によって、より重要度の高いものから重要度の低いものまでの目標の重要度が定義される
  • minimizeCostの目標が存在する必要がある
  • minimizeUnassignedの目標が存在する必要がある
  • 各特定の目標は、1回のみ定義できる
  • 空のobjectivesの定義は使用できない (「デフォルトの目標」を参照)

目標をテリトリー、優先順位、ジョブタスク位置の各機能と組み合わせる

問題にテリトリー、優先順位、ジョブタスク位置の機能がある場合は、objectivesプロパティが設定されているかどうかにかかわらず、次の内容が適用されます。

  • 問題にテリトリーの機能がある場合は、これを満たすことが最も重要になります。
  • テリトリーの機能がある場合を除き、問題にジョブの優先順位の機能が場合はこれを満たすことが最も重要になります。テリトリーの機能がある場合、ジョブの優先順位の重要度は2番目になります。
  • 問題にジョブタスク位置の機能がある場合、これはハード制約と見なされます。

高度な目標

免責事項:これは開発中のアルファ機能です

最適化に使用される目標が拡張されました。最適化の目標関数を構成する個々の目標を定義するために使用できます。

この機能は、objectivesと併用できません。

サポートされる高度な目標

サポートされている高度な目標のリストは次のとおりです。

  • minimizeUnassigned:未割り当てジョブの数を最小限に抑えます
  • minimizeCost:ソリューションの総コストを最小限に抑えます
  • minimizeTours:使用される車両の台数を最小限に抑えます
  • maximizeTours:使用される車両の台数を最大化します
  • optimizeTaskPosition:ツアー内のジョブタスクアクティビティの位置を制御します。指定されている場合は、タスク位置はソフト制約と見なされ、ソルバーは違反の数を最小限に抑えようとします
  • minimizeDistance:総走行距離を最小限に抑えます
  • minimizeDuration:全ツアーの所要時間の合計として計算された合計所要時間を最小限に抑えます
  • balanceMaxLoad:すべてのツアーで最大積載量のバランスを取ります
  • balanceActivities:すべてのツアーでアクティビティのバランスを取ります
  • balanceDistance:すべてのツアーで走行距離のバランスを取ります
  • balanceDuration:すべてのツアーで所要時間のバランスを取ります
  • maximizePriorityJobs:優先順位の高いジョブの割り当てを最大化します
  • tourOrder:(廃止) ツアー内のジョブアクティビティの順序を制御します
  • maximizeTerritoryJobs:車両が運行する地域を考慮して、車両間のジョブの分配が望ましくなるようにします
  • visuallyAppealingTours:コスト/バランスを考慮するよりも、より視覚的に魅力的なツアーを作成します
  • minimizeTourOverlap:重複するツアーを減らし、より地理的に分離されたコンパクトなツアーを実現します
  • serveInClusters:クラスターでジョブを処理します

例:

"advancedObjectives": [
  [
    {
      "type": "balanceActivities",
      "options": {
        "threshold": 0.1
      }
    }
  ],
  [
    {
      "type": "minimizeUnassigned"
    }
  ],
  [
    {
      "type": "minimizeCost"
    }
  ]
]