主要内容

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

最適化式

最適化式とは

最適化式は,最適化変数の多項式結合または有理結合です。

x = optimvar (“x”3、3);%一个名为“x”的3 × 3变量expr1 =总和(x, 1)将x的列相加,得到一个行向量expr2 = sum(x,2)%添加X行,获取列向量expr3 =总和(总和(x。* randn (3)))%添加x的元素乘以随机数Expr4 = Randn(3)* x%乘以随机矩阵时间xexpr5 = sum(sum(x * diag(1:3)))))将x的列数乘以它们的列数,并将结果相加expr6 =总和(sum (x。* x))所有变量的平方和

最適化式は,最適化変数に対する,変数の転置や連結など多数のMATLAB®演算の結果としても得られます。最適化式に対してサポートされている演算の一覧については、最适化学数目およびを参照してください。

最後に,FCN2Optimexpr.を最適化変数に作用するMATLAB関数に適用した結果,最適化式になる場合があります。詳細は,非線形関数から最適化式への変換を参照してください。

最適化モデリング関数では,複素数,inf,または値演算によりこのような式が得られた场,が得られた场ませ详细得は表示できできませ详细详细は表示指定できませ详细详细详细は表示表示表示できません详细详细によりにより表示このできんん详细式にinfまたはnanが含まれるを参照してください。

目的関数の式

目的关键词,サイズサイズ1行1列の式。

y = Optimvar(“y”,5,3);expr = sum(y,2);%A 5×1载体expr2 = [1:5] * expr;

expr.はベクトルであるため,目的関数には適していません。式expr2は,目的関数に適しています。

メモ

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

式を目的関数として問題に含めるには,ドット表記を使用するか,または問題を作成するときにその目的関数を含めます。

概率= optimproblem;概率。目标= expr2;%或等价概率= optimproblem (“目标”,expr2);

式をループで作成するには,optimexprによって返される空の式から始めます。

x = optimvar(“x”,3,3,“类型”,“整数”、“下界”,0,' UpperBound ', 1);y = optimvar (' y ', 3, 3);expr = optimexpr;For I = 1:3 For j = 1:3 expr = expr + y(j, I) - x(j)结束结束显示(expr)
Y(1,1)+ Y(2,1)+ Y(3,1)+ Y(1,2)+ Y(2,2)+ Y(3,2)+ Y(1,3)+ Y(1,3)+ Y(1,3)+ Y(2,3)+ y(3,3) -  x(1,1) -  x(2,1) -  x(3,1) -  x(1,2) -  x(2,2) -  x(3,2) -  X(1,3) -  x(2,3) -  x(3,3)

expr.は,ループを使用せずに作成できます。

x = optimvar(“x”,3,3,“类型”,“整数”、“下界”,0,' UpperBound ', 1);y = optimvar (' y ', 3, 3);Expr = sum(sum(y' - x));显示(expr)
Y(1,1)+ Y(2,1)+ Y(3,1)+ Y(1,2)+ Y(2,2)+ Y(3,2)+ Y(1,3)+ Y(1,3)+ Y(1,3)+ Y(2,3)+ y(3,3) -  x(1,1) -  x(2,1) -  x(3,1) -  x(1,2) -  x(2,2) -  x(3,2) -  X(1,3) -  x(2,3) -  x(3,3)

メモ

附近解决ににそのようにに认识さにに,expr‘* exprではなく总和(expr。^ 2)と記述します。内部パーサーは,明示的な二乗和のみを認識します。例については,非负の线最小二乘法,问题ベースを参照してください。

制約の式と方程式

制約は,==.<=> =のいずれかの比較演算子を含む2つの“比较可能式”です。方程式式,比较比较子==.を使用する2つの比較可能な式です。比較可能な式は同じサイズであるか,または一方の式がスカラー,つまり,サイズが1行1列でなければなりません。

x = optimvar (“x”3 2“类型”'整数'下界的,0,“UpperBound”1);y = Optimvar(“y”、2、4);z = optimvar (“z”);Constr1 = sum(x,2) >= z;

xのサイズは3行2列であるため,总和(x, 2)のサイズは3行1列です。zがスカラースカラー数であるため,この式はzと比较可です。

Constr2 = y <= z;

yのサイズは2行4列です。ここでも,zがが分数であるため,yzと比较可です。

Constr3 = (sum(x,1))' <= sum(y,2);

总和(x, 1)のサイズは1行2列であるため,(总和(x,1))'のサイズは2行1列です。总和(y, 2)のサイズは2行1列であるため,この2つの式は比較可能です。

メモ

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

問題に制約を含めるには,ドット表記を使用し,各制約に異なる名前を付けます。

概率= optimproblem;prob.Constraints。constr1 = constr1;prob.Constraints。constr2 = constr2;prob.Constraints。constr3 = constr3;

同様に,問題に方程式を含めるには,ドット表記を使用し,各方程式に異なる名前を付けます。

prob = eqnproblem;prob.equations.eq1 = EQ1;prob.equations.eq2 = EQ12.

また,问题を作品方程たとえば,合并ができます。

x = optimvar (“x”,10,2,下界的, 0);概率= optimproblem (“约束”,总和(x,2)<= 1);

制約式や方程式をループで作成するには,Optimconstr.Optimeq.,またはOptimineq.によって返される空の制約式から始めます。

x = optimvar(“x”,3、2、“类型”、“整数”、“下界”,0,' UpperBound ', 1);y = optimvar (' y ', 2、4);z = optimvar (' z ');const1 = optimconstr (2);因为我= 1:2 const1 (i) = x(我)- x(我)+ 2 * z > = 4 * (y(我,2)+ y(我,3)+ 2 * y(我,4));终端显示(const1)
(1,1) x (1,1) - x (3,1) + 2 * z - 4 * y(1、2)- 4 * y (1,3) - 8 * y(1、4)> = 0 (2,1)x(1、2)- x (3 2) + 2 * z - 4 * y (2, 2) - 4 * y (2,3) - 8 * y(2、4)> = 0

const1は,ループを使用せずに作成できます。

x = optimvar(“x”,3、2、“类型”、“整数”、“下界”,0,' UpperBound ', 1);y = optimvar (' y ', 2、4);z = optimvar (' z ');: const1 = x (1) - x (3:) + 2 * z > = 4 * (y (: 1) + y (:, 3) + 2 * y (:, 4)) ';显示(const1)
(1,1) x (1,1) - x (3,1) + 2 * z - 4 * y (1,1) - 4 * y (1,3) - 8 * y(1、4)> = 0(1、2)x(1、2)- x (3 2) + 2 * z - 4 * y (2,1) - 4 * y(2、3)- 8 * y(2、4)> = 0

ヒント

最良のパフォーマンスを得るには,制約式ではなく,変数定義に変数範囲を含めます。また,ループを使用せずに制約を作成すると,通常はパフォーマンスが向上します。詳細は,効率的な最適化問題の作成を参照してください。

注意

問題内の各制約式は,同じ比較を使用しなければなりません。たとえば,以下のコードは,cons1<=比較を使用し,cons2> =比較を使用しており,cons1cons2が同じ式内にあるため,エラーが発生します。

概率= optimproblem;x = optimvar (“x”2,下界的, 0);con1 = x(1) + x(2) <= 10;>= 1, >= 2, >= 1;概率。约束= [cons1; cons2];%此行抛出错误

〖图库“

prob.Constraints。cons1 = cons1;prob.Constraints。cons2 = cons2;

最適化変数のハンドル動作

  • OptimizationVariableオブジェクトには,”“ハンドルコピー動作があります。詳細は,ハンドルオブジェクトの動作ハンドルクラスと値クラスの比較を参照してください。ハンドルコピー動作とは,OptimizationVariableののコピーがオリジナルオリジナルを指して,独立して现处于していないを意味ます。xを作成し,それをyにコピーして,yのプロパティを設定します。xに新しいプロパティ値が反映される点に注意してください。

    x = optimvar (“x”下界的1);y = x;y.LowerBound = 0;showbounds (x)
    0 < = x

参考

|||

関連するトピック