子供iが種類jの菓子をxi,j個もらうとすると、与えられた問題は以下の条件で∑xi,jを最大化する問題と考えられる:
- ∑j=1Nxi,j≤Ci∀i∈[M]
- ∑i=1Mxi,j≤Aj∀j∈[N]
- 0≤xi,j≤Bi∀i∈[M],∀j∈[N]
- xi,j∈Z∀i∈[M],∀j∈[N]
ただし、[M]={1,2,...,M},[N]={1,2,...,N}。実は4の整数制約は外してもよい。つまり、このILPの最適解はLP緩和の最適解にもなっている。以下はConfortiのInteger Programmingのp. 133を基にした説明。
定義: m×n行列Aの行を2つの集合SとRに分割する: S∪˙R=[m]。Sの行ベクトルの総和 - Rの行ベクトルの総和が0,±1のみからなるベクトルであるとき、S,RをAの公平な行二彩色 (equitable row-bicoloring) と呼ぶ。
定理: 行列Aが0,±1のみからなり、各列の非ゼロ成分は高々2個であるとする。Aが公平な行二彩色可能であれば、全ユニモジュラである。
上の制約の1, 2の係数行列について考えると、1の行と2の行に分割すれば公平になっている定理の条件を満たし、全ユニモジュラである。
定理: Aをm×n整数行列とする。Aが全ユニモジュラならば、任意のl,u∈Zn,d∈Zmについて凸多面体Q:={x:Ax≤d,l≤x≤u}は整数多面体である、
この定理より上の制約1~3によって与えられる凸多面体は整数多面体なので、任意の目的関数について(有界なら)最適解の少なくとも一つは整数解である。
従って、ILPに関する双対、つまり元の問題のLP緩和のLP双対に整数制約を課したものを考えると、これについても強双対性が成り立つ。双対問題は以下の条件で∑i=1MCipi+∑j=1NAjqj+∑i=1MBi∑j=1Nri,jを最小化する問題である:
- pi+qj+ri,j≥1∀i∈[M],∀j∈[N]
- pi≥0,qj≥0,ri,j≥0∀i∈[M],∀j∈[N]
- pi,qj,ri,j∈Z∀i∈[M],∀j∈[N]
双対問題を、M×Nのグリッドのいくつかの行と列を選択して覆うようなイメージで解釈した:
- 行と列の集合S⊆[M],T⊆[N]を任意に選ぶ。言い換えると、pi=1とするi、qj=1とするjを選ぶ。
- i∈SについてコストCiを払う。
- j∈TについてコストAjを払う。
- Sに含まれる行とTに含まれる列に覆われないすべてのマス(i,j)についてコストBiを払う。
最後の「覆われない」の部分の扱いが面倒に見えるので、さらに言い換える:
- 最初にコストN∑i=1MBiを払っておく。
- S⊆[M],T⊆[N]を任意に選ぶ。k=∣T∣とする。
- i∈SについてコストCi−(N−k)Biを払う。
- j∈TについてコストAj−∑i=1MBiを払う。
さて、[N]からk点選ぶと決めたときの最小コストについて考える。S∈[M],T∈[N]について(N−k)∑i=1MBi+∑i∈S(Ci−(N−k)Bi)+∑j∈TAjが総コストである。TはAjの小さいほうからk個取ればよく、SのほうはCi−(N−k)Bi<0であるものだけ取ればよい。Ci−(N−k)Biはkが減少すると一点で正から負に切り替わる。具体的にはk≤⌊(NBi−Ci)/Bi⌋で0以下になる。したがって、この閾値を超えたiについてCiとBiの総和を保持することにすればkごとにO(1)で計算できる。(Ai)のソートが必要だから全体の計算量はO(NlogN+M)。
LPの整数性について追記した。