Main Content

OptimizationProblem

説明

OptimizationProblem オブジェクトには、最適化の変数、制約、目的関数、目的が最大化であるか最小化であるかを含め、最適化問題が記述されます。solve を使用して、完全な問題を解きます。

ヒント

完全なワークフローについては、問題ベースの最適化ワークフローを参照してください。

作成

optimproblem を使用して、OptimizationProblem オブジェクトを作成します。

警告

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

プロパティ

すべて展開する

問題のラベル。string または文字ベクトルとして指定します。Description はソフトウェアでは使用されません。あらゆる理由で自由に使用できるラベルです。たとえば、モデルまたは問題を共有、アーカイブ、または提示し、モデルまたは問題に関する説明情報を Description プロパティに保存できます。

例: "Describes a traveling salesman problem"

データ型: char | string

最小化または最大化の指示。'minimize' または 'maximize' で指定します。このプロパティは solve の動作方法に影響します。

'minimize' の場合は省略名 'min' を、'maximize' の場合は省略名 'max' を使用できます。

例: 'maximize'

データ型: char | string

この プロパティ は読み取り専用です。

オブジェクトの最適化変数。OptimizationVariable オブジェクトの構造体として指定します。

データ型: struct

目的関数。スカラー OptimizationExpression またはスカラー OptimizationExpression を含む構造体として指定します。問題の作成時に、または後からドット表記を使用して、目的関数を問題に組み込みます。

prob = optimproblem('Objective',5*brownies + 2*cookies)
% or
prob = optimproblem;
prob.Objective = 5*brownies + 2*cookies

最適化制約。OptimizationConstraint オブジェクト、OptimizationEquality オブジェクト、OptimizationInequality オブジェクト、またはこれらのオブジェクトのいずれかを含む構造体として指定します。問題の作成時に、または後からドット表記を使用して、制約を問題に組み込みます。

constrs = struct('TrayArea',10*brownies + 20*cookies <= traysize,...
    'TrayWeight',12*brownies + 18*cookies <= maxweight);
prob = optimproblem('Constraints',constrs)
% or
prob.Constraints.TrayArea = 10*brownies + 20*cookies <= traysize
prob.Constraints.TrayWeight = 12*brownies + 18*cookies <= maxweight

制約を [] に設定して削除します。

prob.Constraints.TrayArea = [];

オブジェクト関数

optimoptions最適化オプションの作成
prob2struct最適化問題または方程式問題のソルバー形式への変換
show最適化オブジェクトの情報表示
solve最適化問題または方程式問題の求解
solvers最適化問題または方程式問題に対する既定のソルバーと有効なソルバーの決定
varindexソルバーベースの変数インデックスへの問題変数のマッピング
write最適化オブジェクトの説明の保存

すべて折りたたむ

最大化を目的とする線形計画問題を作成します。問題には、2 つの正の変数と 3 つの線形不等式制約があります。

prob = optimproblem('ObjectiveSense','max');

正の変数を作成します。目的関数を問題に含めます。

x = optimvar('x',2,1,'LowerBound',0);
prob.Objective = x(1) + 2*x(2);

問題の線形不等式制約を作成します。

cons1 = x(1) + 5*x(2) <= 100;
cons2 = x(1) + x(2) <= 40;
cons3 = 2*x(1) + x(2)/2 <= 60;
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;
prob.Constraints.cons3 = cons3;

問題を確認します。

show(prob)
  OptimizationProblem : 

	Solve for:
       x

	maximize :
       x(1) + 2*x(2)


	subject to cons1:
       x(1) + 5*x(2) <= 100

	subject to cons2:
       x(1) + x(2) <= 40

	subject to cons3:
       2*x(1) + 0.5*x(2) <= 60

	variable bounds:
       0 <= x(1)
       0 <= x(2)

問題を解きます。

sol = solve(prob);
Solving problem using linprog.

Optimal solution found.
sol.x
ans = 2×1

    25
    15

バージョン履歴

R2017b で導入