2026年3月12日木曜日

Daul==0でスラックに余裕があるとき、その行は削除してよいか?

 インスタンス24は、制約が重すぎてLPソルバが遅いので、一時的に削除できないかを検討しました。

結論的には、上記条件でも以下の議論の通り削除することは出来ません。それ以前に、オリジナルLPで、お目当ての行群中、DUAL=0の行が存在しなかったので、それも意味がなく、削除不能という結論です。


❗ DUAL値 = 0 でも制約を削除してはいけない理由

DUAL値が 0 というのは、**「最適解においてその制約が binding ではない」**というだけです。

binding ではない → 余裕がある

余裕がある → 緩めても目的関数は改善しない

しかし → 削除すると可行領域が広がり、別の解が出てしまう可能性がある

つまり、


制約は「最適解を規定する」だけでなく、「不適切な解を排除する」役割も持つため、

DUAL値だけで削除判断をするのは危険です。


🧭 では、どんなときに削除してもよいのか?

以下の条件が揃うと、削除しても安全な場合があります。

1. 制約が常に冗長(redundant constraint)であると証明できる

例:

他の制約の線形結合で表せる、または常に他の制約により厳しく支配されている。

これは数学的に確認できる場合のみ。

2. 制約の右辺を大きくしても可行領域が変わらない

DUAL値 = 0 の制約には「許容範囲(allowable increase/decrease)」があります。

allowable decrease が無限大

allowable increase が無限大

のように、右辺をどれだけ動かしても可行領域が変わらない場合は、削除しても影響がありません。

3. 制約が論理的に不要であることが問題構造から明らか

例:

上限 100 の制約と上限 80 の制約が両方ある → 上限 100 は不要

x ≥ 0 と x ≥ -5 → x ≥ -5 は不要

0 件のコメント:

コメントを投稿