メインコンテンツ

整数線形計画法の調整

一部の “整数” 解は整数ではない

通常、解 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 では、絶対値が 1e20 を超える問題の要素 (fub の係数など) は受け入れられません。また、絶対値が 1e15 を超える AAeq の要素も受け入れられません。このような問題をもつ intlinprog を実行しようとすると、intlinprog でエラーが発生します。

このエラーが発生した場合は、以下のように問題をスケーリングしてより小さな係数をもつようにすることができます。

  • f の係数が大きすぎる場合、f に小さな正のスケーリング係数を乗算してみます。

  • 制約係数が大きすぎる場合、すべての範囲および制約行列に同じ小さな正のスケーリング係数を乗算してみます。

参照

[1] Williams, H. Paul. Model Building in Mathematical Programming, 5th Edition. Wiley, 2013.