最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
混合整数線形計画法 (MILP)
混合整数線形計画法ソルバー。
以下で指定された問題の最小値を見つけます。
f、x、intcon、b、beq、lb、ub はベクトル、A と Aeq は行列です。
f、intcon、lb および ub をベクトルまたは配列として指定することができます。詳細は、行列引数を参照してください。
メモ
intlinprog
は、ソルバーベースのアプローチのみに適用されます。2 つの最適化アプローチの詳細については、はじめに問題ベース アプローチまたはソルバーベース アプローチを選択を参照してください。
は x
= intlinprog(problem
)problem
構造体を使用してすべてのソルバーの入力をカプセル化します。mpsread
を使用して MPS ファイルから problem
構造体をインポートできます。prob2struct
を使用して OptimizationProblem
オブジェクトから構造体 problem
を作成することもできます。
通常、解 x(intCon)
の整数値と推定される要素は厳密に整数ではありません。intlinprog
では整数の IntegerTolerance
内の解の値はすべて整数と見なされます。
整数と推定されるすべての数値を厳密に整数に丸めるには、関数 round
を使用します。
x(intcon) = round(x(intcon));
注意
丸めによって解が実行不可能になる場合があります。丸めを行った後に実行可能性をチェックします。
max(A*x - b) % See if entries are not too positive, so have small infeasibility max(abs(Aeq*x - beq)) % See if entries are near enough to zero max(x - ub) % Positive entries are violated bounds max(lb - x) % Positive entries are violated bounds
intlinprog
は、絶対値が 2.1e9
を超える場合、解の要素に整数値を適用しません。このような要素が解に含まれる場合、intlinprog
は警告を表示します。この警告が表示された場合は、解をチェックして、解の整数値と推定される要素が整数に近いかどうかを確認します。
intlinprog
では、f
、A
または ub
の係数など、問題の要素が絶対値の 1e25
を超えることはできません。このような問題をもつ intlinprog
を実行しようとすると、intlinprog
でエラーが発生します。
現在、最適化アプリ で intlinprog
を実行することはできません。
2 値変数を指定するには、変数がintcon
で整数となるように設定し、下限に 0
、上限に 1
を指定します。
スパース線形制約行列 A
と Aeq
を指定してメモリを節約します。ただし、b
と beq
にスパース行列を指定することはできません。
x0
引数を含めると、intlinprog
でより良い整数実行可能点が見つかるまで、'rins'
およびガイド付きダイビング ヒューリスティックでその値が使用されます。そのため、x0
を指定する場合には、'Heuristics'
オプションを 'rins-diving'
に設定するか、'rins'
を使用する別の設定にすることによって、良好な結果を得ることができます。
整数要素、つまり整数を示す 1
をもつバイナリ ベクトルの論理インデックスを提供するには、find
を使用して intcon
形式に変換します。たとえば、
logicalindices = [1,0,0,1,1,0,0]; intcon = find(logicalindices)
intcon = 1 4 5
bintprog
は intlinprog
に置き換えられています。古い bintprog
コードを intlinprog
で使用するように更新するには、次の変更を行います。
intcon
を 1:numVars
に設定します。ここで、numVars
は問題の変数の数です。
lb
を zeros(numVars,1)
に設定します。
ub
を ones(numVars,1)
に設定します。
関連するオプションを更新します。optimoptions
を使用して intlinprog
オプションを作成します。
呼び出しを bintprog
に変更します。以下のようになります。
[x,fval,exitflag,output] = bintprog(f,A,b,Aeq,Beq,x0,options)
% Change your call to:
[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,Beq,lb,ub,x0,options)