主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

問題ベースの最適化ワークフロー

メモ

优化工具箱™には,単一目的最適化問題を解くためのアプローチが2通りあります。このトピックでは,問題ベースのアプローチについて説明します。ソルバーベースの最適化問題の設定では,ソルバーベースのアプローチについて説明しています。

最適化の問題を解くには,以下の手順を実行します。

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

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

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

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

    x = optimvar (“x”15日3“类型”“整数”下界的,0,“UpperBound”1);
  • 問題オブジェクトの目的関数を名前付き変数の式として定義します。

    メモ

    多項式,有理式,および初等関数(经验值など)で構成されていない非線形関数がある場合は,その関数をfcn2optimexprを使用して最適化式に変換します。詳細は,非線形関数から最適化式への変換最適化変数および式でサポートされる演算を参照してください。

    必要に応じて,式にワークスペース変数として追加のパラメーターを含めます。問題ベースのアプローチでの追加パラメーターの受け渡しを参照してください。

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

    概率。目标=总和(sum (f。* x));
  • 名前付き変数の比較または式の比較として,最適化問題の制約を定義します。

    メモ

    多項式,有理式,および初等関数(经验值など)で構成されていない非線形関数がある場合は,その関数をfcn2optimexprを使用して最適化式に変換します。詳細は,非線形関数から最適化式への変換最適化変数および式でサポートされる演算を参照してください。

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

    one = sum(x,2) == 1;Vertsum = sum(x,1) <= 1;prob.Constraints.onesum = onesum;prob.Constraints.vertsum = vertsum;
  • 非線形問題の場合,フィールドが最適化変数名となっている構造体として,初期点を設定します。以下に例を示します。

    x0。x= randn(size(x)); x0.y = eye(4);%假设y是一个4 × 4的变量
  • 解决を使用して問題を解きます。

    索尔=解决(问题);或者,对于非线性问题,索尔=解决(x0概率)

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

警告

問題ベースのアプローチでは,目的関数,非線形等式,または非線形不等式における複素数値をサポートしていません。関数の計算に複素数値が含まれていると,それが中間値としてであっても,最終結果が不正確になる場合があります。

混合整数線形計画法の基本的な例については,混合整数線形計画法の基礎:問題ベースまたはビデオ求解一个混合整数线性规划问题的优化建模を参照してください。非線形の例は,制約付き非線形問題の解法,問題ベースを参照してください。より広範囲な例は,問題ベースの非線形最適化線形計画法と混合整数線形計画法,または二次計画法と錐計画法を参照してください。

参考

||||||

関連するトピック