ドキュメンテーション

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

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 オブジェクト、または OptimizationConstraint オブジェクトを含む構造体として指定します。問題の作成時に、または後からドット表記を使用して、制約を問題に組み込みます。

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 = [];

オブジェクト関数

writeproblem最適化問題の説明の保存
showproblem最適化問題の表示
solve最適化問題を解く
prob2struct最適化問題のソルバー形式への変換

すべて折りたたむ

最大化を目的とする線形計画問題を作成します。問題には、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;

問題を確認します。

showproblem(prob)
  OptimizationProblem : 

	max :
       x(1, 1) + 2*x(2, 1)

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

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

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

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

問題を解きます。

sol = solve(prob);
Optimal solution found.
sol.x
ans = 2×1

   25.0000
   15.0000

R2017b で導入