主要内容

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

optimineq

空の最適化不等式配列の作成

説明

optimineqを使用して,不等式のセットを初期化します。

ヒント

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

若干= optimineq (Nは,N行1列の空の最適化不等式の配列を作成します。若干を使用して不等式を作成するループを初期化します。

若干= optimineq (装运箱は,文字ベクトルの细胞配列または字符串ベクトル装运箱によってインデックス付けされる空の最適化制約の配列を作成します。

装运箱が1行n装运箱列の場合(ここで,n装运箱装运箱の要素数),若干も1行n装运箱列です。それ以外の場合,若干はn装运箱行1列です。

若干= optimineq (装运箱1,N2……装运箱k)または若干= optimineq ({装运箱1,装运箱2……装运箱k})または若干= optimineq ([N1,N2……Nk)は,装运箱Nの引数のすべての組み合わせについて,空の最適化不等式のn装运箱1 xN2 x……x n装运箱kの配列を作成します。ここで,n装运箱装运箱の要素数です。

すべて折りたたむ

2 要素変数xが多数の円板の交差部分になければならないという制約を作成します。円板の中心と半径は,配列中心および半径に格納されています。

x = optimvar (“x”、1、2);[1 -2;3 -4;- 3];Radii = [6 7 8];若干= optimineq(长度(半径));i = 1:长度总和(若干)若干(i) = ((x -中心(我:))^ 2)< =半径(我)^ 2;结束

不等式を表示します。

显示(若干)
arg_LHS <= arg_RHS where: arg1 = 0 ([3,1]); / / arg_LHSarg1(1) = sum((x - extraParams{1}).^2);arg1(2) = sum((x - extraParams{2}).^2);arg1(3) = sum((x - extraParams{3}).^2);arg_LHS = __arg1 (:);Arg1 = 0 ([3,1]);__arg1 (1) = 36;__arg1 (2) = 49;__arg1 (3) = 64;arg_RHS = __arg1 (:); extraParams{1}: 1 -2 extraParams{2}: 3 -4 extraParams{3}: -2 3

ループを使用する代わりに,変数に対する行列演算を使用して,同じ制約を作成できます。

constr2 =总和(((x, x, x) -中心)^ 2,2)< =半径”。^ 2;

ループでの不等式の作成は,行列演算による不等式の作成より多くの時間を要することがあります。

ダイエットで消費されるカロリーを表すためのインデックス付き不等式と変数を作成します。食事ごとに異なるカロリー制限があります。食事や食物,各食物のカロリーを表す配列を作成します。

餐= [“早餐”“午餐”“晚餐”];食物= [“麦片”“燕麦片”“酸奶”“花生酱三明治”“披萨”“汉堡包”...“沙拉”“牛排”“砂锅”“冰激凌”];卡路里= [200175150450350800150650350300]';

各食事の食物を表す最適化変数を作成し,食物名と食事名によってインデックス付けします。

饮食= optimvar (“饮食”、食品、膳食费、下界的, 0);

食事ごとに食事のカロリーの上限を設ける不等式制約を設定します。

若干= optimineq(餐);I = 1:3 constr(I) = diet(:, I)'*卡路里<= 250* I;结束

晚餐の不等式を表示します。

显示(若干(“晚餐”))
200 *饮食(“麦片”,“晚餐”)+ 175 *饮食(“燕麦片”,“晚餐”)+ 150 *饮食(“酸奶”,“晚餐”)+ 450 *饮食(“花生酱三明治”,“晚餐”)+ 350 *饮食(“披萨”,“晚餐”)+ 800 *饮食(“汉堡包”,“晚餐”)+ 150 *饮食(“沙拉”,“晚餐”)+ 650 *饮食(“牛排”,“晚餐”)+ 350 *饮食(“砂锅”,“晚餐”)+ 300 *饮食(“冰淇淋”,“晚餐”)< = 750

ループを使用する代わりに,変数に対する行列演算を使用して,同じ不等式を作成できます。

Constr2 = diet'*卡路里<= 250*(1:3)';

IndexNamesプロパティを設定することで,不等式の適切なインデックス名を含めます。

constr2。IndexNames = {meals, {}};

晚餐の新しい不等式を表示します。これは先ほどの不等式と同じです。

显示(constr2 (“晚餐”))
200 *饮食(“麦片”,“晚餐”)+ 175 *饮食(“燕麦片”,“晚餐”)+ 150 *饮食(“酸奶”,“晚餐”)+ 450 *饮食(“花生酱三明治”,“晚餐”)+ 350 *饮食(“披萨”,“晚餐”)+ 800 *饮食(“汉堡包”,“晚餐”)+ 150 *饮食(“沙拉”,“晚餐”)+ 650 *饮食(“牛排”,“晚餐”)+ 350 *饮食(“砂锅”,“晚餐”)+ 300 *饮食(“冰淇淋”,“晚餐”)< = 750

ループでの不等式の作成は,行列演算による不等式の作成より多くの時間を要することがあります。

入力引数

すべて折りたたむ

制約の次元のサイズ。正の整数として指定します。

  • 若干= optimineq (N)のサイズはN行1列です。

  • 若干= optimineq (N1、N2)のサイズはN1N2列です。

  • 若干= optimineq (N1、N2…,Nk)のサイズはN1xN2x……xNkです。

例:5

データ型:

インデックス用の名前。文字ベクトルの细胞配列または字符串ベクトルとして指定します。

例:{“红色”、“橙”、“绿色”、“蓝”}

例:(“红”、“橙色”、“绿色”;“蓝色”)

データ型:字符串|细胞

出力引数

すべて折りたたむ

制約。空のOptimizationInequality配列として返されます。若干を使用して制約式を作成するループを初期化します。

たとえば,

x = optimvar (“x”8);若干= optimineq (4);k = 1:4若干(k) = 5 * k * (x (2 * k) - x (2 * k - 1)) < = 10 - 2 * k;结束

ヒント

  • 一般に,ループではなく,ベクトル化された式で制約を作成する方がより効率的です。詳細は,効率的な最適化問題の作成を参照してください。

  • optimineqの代わりにoptimconstrを使用して,最適化問題の不等式制約を作成できます。

R2019bで導入