ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

問題ベースのワークフロー

メモ

Optimization Toolbox™ には、線形計画問題、混合整数線形計画問題、および二次計画問題を解くためのアプローチが 2 通りあります。この節では、問題ベースのアプローチについて説明します。ソルバーベースの最適化問題の設定では、ソルバーベースのアプローチについて説明しています。

線形または二次目的関数と線形制約がある問題を解くには、以下の手順を実行します。

  • optimproblem を使用して、問題オブジェクトを作成します。問題オブジェクトは、目的と制約の式を埋めるコンテナーです。これらの式は、問題変数に存在する範囲と共に、問題を定義します。

    たとえば、最大化問題を作成します。

    prob = optimproblem('ObjectiveSense','maximize');
  • optimvar を使用して、名前付き変数を作成します。最適化変数は、問題の目的と制約を記述するために使用するシンボリック変数です。変数定義に範囲を含めます。

    たとえば、'x' という名前の 2 値変数の 15 行 3 列の配列を作成します。

    x = optimvar('x',15,3,'Type','integer','LowerBound',0,'UpperBound',1);
  • 問題オブジェクトの目的関数を名前付き変数の式として定義します。

    たとえば、変数 x の行列と同じサイズの実数行列 f があり、目的が f 内のエントリと対応する変数 x の積の合計であるとします。

    prob.Objective = sum(sum(f.*x));
  • 問題オブジェクトの制約を名前付き変数の式として定義します。

    たとえば、x の各行の変数の合計が 1 で、各列の変数の合計は 1 以下でなければならないものとします。

    onesum = sum(x,2) == 1;
    vertsum = sum(x,1) <= 1;
    prob.Constraints.onesum = onesum;
    prob.Constraints.vertsum = vertsum;
  • solve を使用して、最適化問題を解きます。

    sol = solve(prob);

これらの基本的な手順に加え、showproblem と関連する関数を使用して、問題を解く前に問題定義を確認することができます。既定のソルバーまたはオプションの変更で説明されているように、optimoptions を使用して solve のオプションを設定します。

基本的な例については、混合整数線形計画法の基礎: 問題ベースまたはビデオ Solve a Mixed-Integer Linear Programming Problem using Optimization Modeling を参照してください。より大規模で拡張可能な例については、工場、倉庫、販売店割り当てモデル: 問題ベース巡回セールスマン問題: 問題ベースを参照するか、線形計画法と混合整数線形計画法または二次計画法のその他の例を参照してください。

参考

| |

関連するトピック