インスタンス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 件のコメント:
コメントを投稿