    \documentclass[japanese]{jnlp_1.4}
\usepackage{jnlpbbl_1.3}
\usepackage[dvipdfm]{graphicx}
\usepackage{amsmath}

\usepackage{amsmath,amssymb}
\usepackage{bm}
\newtheorem{theorem}{}


\Volume{21}
\Number{5}
\Month{September}
\Year{2014}

\received{2014}{5}{22}
\accepted{2014}{6}{13}

\setcounter{page}{1059}

\jtitle{組合せ最適化入門：線形計画から整数計画まで}
\jauthor{梅谷　俊治\affiref{Author}}
\jabstract{
線形計画問題において変数が整数値を取る制約を持つ整数計画問題は，産業や学術の幅広い分野における現実問題を定式化できる汎用的な最適化問題の1つであり，最近では分枝限定法に様々なアイデアを盛り込んだ高性能な整数計画ソルバーがいくつか公開されている．
しかし，整数計画問題では線形式のみを用いて現実問題を記述する必要があるため，数理最適化の専門家ではない利用者にとって現実問題を整数計画問題に定式化することは決して容易な作業ではない．
本論文では，数理最適化の専門家ではない利用者が現実問題の解決に取り組む際に必要となる整数計画ソルバーの基本的な利用法と定式化の技法を解説する．
}
\jkeywords{組合せ最適化，線形計画，整数計画，数理最適化}

\etitle{Introduction to Combinatorial Optimization: \\
	Model Building in Integer Programming}
\eauthor{Shunji Umetani\affiref{Author}} 
\eabstract{
The integer programming (IP) model is a general-purpose optimization model that can formulate a surprisingly wide class of real applications using integer variables in linear programming (LP) models.
Recent development in IP software systems has significantly improved our ability to solve large-scale instances.
However, it is still difficult for most non-expert users to formulate real applications into IP models, because all conditions need to be written in linear inequalities.
This paper demonstrates how to use IP software systems and formulate real applications into IP models.
}
\ekeywords{Combinatorial optimization, Linear Programming, Integer Programming, \linebreak
	Mathematical optimization}

\headauthor{梅谷}
\headtitle{組合せ最適化入門：線形計画から整数計画まで}

\affilabel{Author}{大阪大学大学院情報科学研究科}{Graduate School of Information Science and Technology, Osaka University}



\begin{document}
\maketitle


\section{はじめに\label{sec:introduction}}
線形計画問題において全てもしくは一部の変数が整数値を取る制約を持つ（混合）整数計画問題は，産業や学術の幅広い分野における現実問題を定式化できる汎用的な最適化問題の1つである．
近年，整数計画ソルバー（整数計画問題を解くソフトウェア）の進歩は著しく，現在では数千変数から数万変数におよぶ実務上の最適化問題が次々と解決されている．
また，商用・非商用を含めて多数の整数計画ソルバーが公開されており，整数計画問題を解くアルゴリズムを知らなくても定式化さえできれば整数計画ソルバーを利用できるようになったため，数理最適化以外の分野においても整数計画ソルバーを利用した研究が急速に普及している．

最適化問題は，与えられた制約条件の下で目的関数$f(\bm{x})$の値を最小にする解$\bm{x}$を1つ求める問題であり，線形計画問題は，目的関数が線形で制約条件が線形等式や線形不等式で記述される最も基本的な最適化問題である．
通常の線形計画問題では，全ての変数は連続的な実数値を取るが，全ての変数が離散的な整数値のみを取る線形計画問題は整数（線形）計画問題と呼ばれる．
また，一部の変数が整数値のみを取る場合は混合整数計画問題，全ての変数が$\{0,1\}$の2値のみを取る場合は 0-1 整数計画問題と呼ばれる．
最近では非線形の問題も含めて整数計画問題と呼ばれる場合が多いが，本論文では線形の問題のみを整数計画問題と呼ぶ．
また，混合整数計画問題や 0-1 整数計画問題も区別せずに整数計画問題と呼ぶ．
整数変数は離散的な値を取る事象を表すだけではなく，制約式や状態を切り替えるスイッチとして用いることが可能であり，産業や学術の幅広い分野における現実問題を整数計画問題に定式化できる．
組合せ最適化問題は，制約条件を満たす解の集合が組合せ的な構造を持つ最適化問題であり，解が集合，順序，割当て，グラフ，論理値，整数などで記述される場合が多い．
原理的に，全ての組合せ最適化問題は整数計画問題に定式化できることが知られており，最近では，整数計画ソルバーの性能向上とも相まって，整数計画ソルバーを用いて組合せ最適化問題を解く事例が増えている．

現実問題を線形計画問題や整数計画問題に定式化する際には，線形式のみを用いて目的関数と制約条件を記述する必要がある．
こう書くと，扱える現実問題がかなり限定されるように思われる．
実際に，線形計画法の生みの親であるDantzigもWisconsin大学で講演をした際に「残念ながら宇宙は線形ではない」と批判を受けている\cite{KonnoH2005}．
しかし，正確さを失うことなく現実問題を非線形計画問題に定式化できても最適解を求められない場合も多く，逆に非線形に見える問題でも変数の追加や式の変形により等価な線形計画問題や整数計画問題に変換できる場合も少なくない．
そのため，現実問題を線形計画問題や整数計画問題に定式化してその最適解を求めることは，実用的な問題解決の手法として受け入れられている．

現在では，整数計画ソルバーは現実問題を解決するための有用な道具として数理最適化以外の分野でも急速に普及している．
一方で，数理最適化の専門家ではない利用者にとって，線形式のみを用いて現実問題を記述することは容易な作業ではなく，現実問題を上手く定式化できずに悩んだり，強力だが専門家だけが使う良く分からない手法だと敬遠している利用者も少なくない．
そこで，本論文では，数理最適化の専門家ではない利用者が，現実問題の解決に取り組む際に必要となる整数計画ソルバーの基本的な利用法と定式化の技法を解説する．
なお，最近の整数計画ソルバーはアルゴリズムを知らなくても不自由なく利用できる場合が多いため，本論文では，線形計画法，整数計画法の解法および理論に関する詳しい説明は行わない．
線形計画法については\cite{ChvatalV1983,KonnoH1987}，整数計画法については\cite{KonnoH1982,NemhauserGL1988,WolseyLA1998}が詳しい．
また，線形計画法，整数計画法の発展の歴史については\cite{AchterbergT2013,AshfordR2007,BixbyR2007,KonnoH2005,KonnoH2014,LodiA2010}が詳しい．


\section{線形計画問題と整数計画問題}
\label{sec:fundamental}

線形計画問題は，目的関数が線形で制約条件が線形等式や線形不等式で記述される最適化問題であり，一般に以下の標準形で表される．
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{j=1}^n c_j x_j &\\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n a_{ij} x_j \ge b_i, & i=1,\dots,m,\\
& x_j \ge 0, & j=1,\dots,n.
\end{array}
\end{equation}
ここで，$a_{ij}$, $b_i$, $c_j$は定数，$x_j$は変数である．
制約式を全て満たす変数値の組を実行可能解と呼び，実行可能解全体の集合を実行可能領域と呼ぶ．
実行可能解の中で目的関数の値を最小にする解が最適解であり，このときの目的関数の値を最適値と呼ぶ．
線形計画問題は$\min\{ \bm{c}^T \bm{x} \mid \bm{A} \bm{x} \ge \bm{b}, \bm{x} \ge \bm{0} \}$と記述される場合も多い．
ここで，各変数の非負条件$x_j \ge 0$を（非負）整数条件$x_j \in \mathbb{Z}_+$（$\mathbb{Z}_+$は非負整数集合）に置き換えると整数計画問題となる．

線形計画問題では効率の良いアルゴリズムが開発されており，一番最初に単体法\footnote{1965年にNelderとMeadが非線形計画問題に対して単体法と呼ばれるアルゴリズムを提案しているが，名前が同じというだけで全く異なるアルゴリズムである．}が1947年にDantzigによって提案されている．
単体法は実用的には優れた性能を持つが，理論的には多項式時間アルゴリズムではない．
その後，初めての多項式時間アルゴリズムとなる楕円体法が1979年にKhachiyanに，さらに実用的にも高速な内点法が1984年にKarmarkarによって提案されている．
現在では，単体法と内点法が実用的なアルゴリズムとして広く使われている．
性能では内点法の方が優れているが，単体法は制約式や変数を追加して解き直す再最適化を効率良く実行できるため，単体法を用いた再最適化は整数計画問題を解く上で重要な役割を担っている．

整数計画問題は実行可能解の数が有限となる場合が多く，理論上は全ての実行可能解を列挙すれば最適解が求められる．
しかし，この種の列挙法は問題の規模の増加とともに走査する解の個数が急激に増加（組合せ的爆発）するため実用的ではない．
整数計画問題はNP困難と呼ばれる問題のクラスに属することが計算の複雑さの理論により知られている．
詳しい説明は省略するが，NP困難問題の最適解を求めようとすると，最悪の場合に全ての実行可能解を列挙するのと本質的に変わらない計算時間が必要であろうと予想されている\footnote{この予想が正しいかどうかは未解決で$\textnormal{P} \not= \textnormal{NP}$予想として有名である．}．

整数計画問題では，分枝限定法と切除平面法が代表的なアルゴリズムとして知られている．
分枝限定法は，直接解くことが難しい問題をいくつかの小規模な部分問題に分解する分枝操作と，生成された部分問題のうち何らかの理由で最適解が得られないと判定されたものを除く限定操作の2つの操作を繰返し適用するアルゴリズムで，整数計画問題以外にも多くの最適化問題で使われている．
整数計画問題に対する分枝限定法は1960年にLandとDoigによって提案されており，暫定解（これまでの探索で得られた最良の実行可能解）から得られる最適値の上界値と，線形計画緩和問題（各変数の整数条件を緩和して得られる線形計画問題）を解いて得られる最適値の下界値を利用した限定操作で無駄な探索を省くアルゴリズムである．
切除平面法は1958年にGomoryによって提案されており，線形計画緩和問題から始めて，切除平面（実行可能な整数解を残しつつ線形計画緩和問題の最適解を除去する制約式）を組織的に生成し，線形計画緩和問題に逐次追加することで最終的に整数最適解を得るアルゴリズムである．
切除平面法は単体では実用的なアルゴリズムではなく，現在では，分枝限定法の内部で切除平面を逐次追加し，変数値の固定や部分問題に対する下界値の改善を実現する分枝切除法が大きな成功を収めている．


\section{整数計画問題の応用事例}
\label{sec:application}

これまで，産業や学術の幅広い分野における多くの現実問題が整数計画問題に定式化されてきた．
ここでは自然言語処理の応用事例として文書の自動要約\cite{FilatovaE2004,GillickD2009,HiraoT2009,McDonaldR2007,NishikawaH2013,TakamuraH2008}と文の対応付け\cite{NishinoM2013,NishinoM2014}を紹介する．


\subsection{文書の自動要約}
\label{sec:document-summarization}

文書の自動要約は与えられた単数もしくは複数の文書から要約を生成する問題であり，与えられた文書から必要な文の組合せを選択する手法が知られている．
文書要約の問題には，1つだけの文書が与えられる単一文書の要約と，同じトピックについて記述した複数の文書が与えられる複数文書の要約がある\footnote{単一の文書に類似した内容の文は含まれないと仮定する．}．

まず，単一文書の要約を考える．
$m$個の概念と$n$個の文と要約長$L$が与えられる．
概念$i$の重要度を$w_i$ ($> 0$)，文$j$の長さを$l_j$，文$j$に含まれる概念$i$の数を$a_{ij} \in \{ 0,1 \}$と表す．
$x_j$は変数で，文$j$が要約に含まれるならば$x_j=1$，そうでなければ$x_j=0$の値を取る．
文$j$に含まれる概念の重要度の合計$p_j = \sum_{i=1}^m w_i a_{ij}$はあらかじめ計算できるので，要約長$L$を超えない範囲で重要度の合計が最大となる要約を構成する問題は以下の通りに定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{maximize} & \displaystyle\sum_{j=1}^n p_j x_j & \\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n l_j x_j \le L,\\
& x_j \in \{ 0, 1 \}, & j=1,\dots,n.
\end{array}
\end{equation}
この問題はナップサック問題と呼ばれるNP困難のクラスに属する組合せ最適化問題であるが，動的計画法や分枝限定法に基づく効率良いアルゴリズムが知られている\cite{KellererH2004,KorteB2012}．

次に複数文書の要約を考える．
複数の文書に類似した内容の文が含まれる場合はこれらの文が同時に選択され，生成された要約の中に類似した内容が繰返し現れる恐れがある．
そこで，概念$i$が要約に含まれているならば$z_i=1$，そうでなければ$z_i=0$の値を取る変数$z_i$を導入すると以下の通りに定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{maximize} & \displaystyle\sum_{i=1}^m w_i z_i & \\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n a_{ij} x_j \ge z_i, & i=1,\dots,m,\\
& \displaystyle\sum_{j=1}^n l_j x_j \le L, \\
& x_j \in \{ 0, 1 \}, & j=1,\dots,n,\\
& z_i \in \{ 0, 1 \}, & i=1,\dots,m.
\end{array}
\end{equation}
1番目の制約条件は，左辺の値に関わらず$z_i=0$の値を取れば必ず制約条件が満たされるため，最適解において概念$i$を含む文$j$が要約に含まれているにも関わらず$z_i=0$の値を取る場合があるように思われる．
しかし，目的関数は最大化で各変数$z_i$の係数$w_i$は正の値であり，このような場合には$z_i=1$の値を取れば改善解が得られるため，最適解では概念$i$を含む文$j$が要約に含まれていれば必ず$z_i=1$の値を取ることが分かる．
この定式化では，重要度の高い概念が要約の中に繰返し現れても目的関数は増加しないので，冗長性を自然に抑えることができる．
一方で，この問題は（ナップサック制約付き）最大被覆問題と呼ばれるNP困難のクラスに属する組合せ最適化問題であり，大規模な問題例では最適解を効率良く求めることは難しい．
複数文書の要約を求める問題は，この他にも施設配置問題\cite{TakamuraH2010}や冗長制約付きナップサック問題\cite{NishikawaH2013}などに定式化されている．


\subsection{文の対応付け}
\label{sec:alighnment}

統計的機械翻訳では，対訳コーパスにおいて原言語文と目的言語文の対応付けが与えられている前提の下で処理が適用される．
しかし，実際の対訳コーパスでは，文書同士の対応付けは行われていても，それらの文書に含まれる文同士の対応付けは行われていない場合が多い．
そのため，対訳文書の間で文同士の正しい対応付けを求めることは，統計的機械翻訳の精度を上げるための重要な前処理となる．

\cite{MaX2006,MooreRC2002}などは，対訳文書間で対応する文の出現順序が大きく入れ替わらないという前提で動的計画法に基づく文の対応付けを提案している．
すなわち，対訳文書の組$F$，$E$が与えられたとき，$F$の$i$番目の文と$E$の$j$番目の文が対応するならば，$F$の$i+1$番目の文に対応する$E$の文は，（存在するならば）$j$番目の近くにあるという前提で文の対応付けを行っている．
しかし，文の出現順序が大きく入れ替わらないという前提はどの文書でも成り立つ性質ではない．

まず，文書$F$と$E$の任意の文を出現順序に関わらず自由に対応付けても良い場合を考える．
$n_f$個の文を含む文書$F$と$n_e$個の文を含む文書$E$が与えられる．
文書$F$の$i$番目の文と文書$E$の$j$番目の文が対応付けられたときのスコアを$s_{ij}$と表す．
$x_{ij}$は変数で，文書$F$の$i$番目の文と文書$E$の$j$番目の文が対応付けられるならば$x_{ij}=1$，そうでなければ$x_{ij}=0$の値を取る．
このとき，文書$F$の文は文書$E$の高々1つの文にしか対応付けられない（その逆も同様）という制約を課すと，スコアの合計が最大となる文の対応付けを求める問題は以下の通りに定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{maximize} & \displaystyle\sum_{i=1}^{n_f} \sum_{j=1}^{n_e} s_{ij} x_{ij} & \\
\textnormal{subject to} & \displaystyle\sum_{j=1}^{n_e} x_{ij} \le 1, & i = 1, \dots, n_f,\\
 & \displaystyle\sum_{i=1}^{n_f} x_{ij} \le 1, & j = 1, \dots n_e,\\
 & x_{ij} \in \{ 0, 1 \}, & i = 1, \dots, n_f, \; j = 1, \dots, n_e.
\end{array}
\end{equation}
この問題は（2部グラフの）最大重みマッチング問題と呼ばれる組合せ最適化問題であり，ハンガリー法など効率良いアルゴリズムが知られている\cite{KorteB2012}．

文書$F$と$E$の任意の文を対応付けても良いという前提では，それぞれの文書において前後の文との繋がりを無視した対応付けを行うことになるため，段落のような文の系列（連続する文のまとまり）を単位として順序が入れ替わる場合には正しい順序付けができない可能性が高い．
そこで，図\ref{fig:alignment}に示すように，文書$F$と文書$E$をそれぞれ同数の文の系列に分割し，文の系列について一対一の対応付けを求めることを考える．
文書$F$の$i$番目から$j$番目までの文の系列を$F[i,j]$($1 \le i \le j \le n_f$)，文書$E$の$k$番目から$l$番目までの文の系列を$E[k,l]$($1 \le k \le l \le n_e$)とする．
文$p \in F[i,j]$の文$q \in E[k,l]$の対応付けでは出現順序の入れ替わりはないとすると，\cite{MooreRC2002}の手法を適用することで文$p \in F[i,j]$と文$q \in E[k,l]$の最適な対応付けとスコアの合計$w_{ijkl}$を計算できる．
考えられ得る全ての文の系列の組$(F[i,j],E[k,l])$に対して，それらの系列に含まれる文同士の最適な対応付けとスコアの合計$w_{ijkl}$をあらかじめ計算する．
$x_{ijkl}$は変数で，文の系列$F[i,j]$と$E[k,l]$が対応付けられると$x_{ijkl}=1$，そうでなければ$x_{ijkl}=0$の値を取る．
各文$p \in F$, $q \in E$が対応付けられたいずれかの文の系列$F[i,j]$, $E[k,l]$にちょうど1回ずつ含まれるという制約条件を用いて文の系列を一対一に対応付ける．
このとき，スコアの合計が最大となる文の系列の対応付けを求める問題は以下の通りに定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{maximize} & \displaystyle\sum_{1 \le i \le j \le n_f} \sum_{1 \le k \le l \le n_e} w_{ijkl} x_{ijkl} & \\
\textnormal{subject to} & \displaystyle\sum_{i \le p \le j} \sum_{1 \le k \le l \le n_e} x_{ijkl} = 1, & p = 1,\dots,n_f,\\
& \displaystyle\sum_{1 \le i \le j \le n_f} \sum_{k \le q \le l} x_{ijkl} = 1, & q = 1,\dots,n_e,\\
& x_{ijkl} \in \{ 0, 1 \}, & 1 \le i \le j \le n_f, \; 1 \le k \le l \le n_e.
\end{array}
\end{equation}
この問題は集合分割問題と呼ばれるNP困難のクラスに属する組合せ最適化問題であり，大規模な問題例では最適解を効率良く求めることは難しい．

\begin{figure}[t]
\begin{center}
\includegraphics{21-5ia4f1.eps}
\end{center}
\caption{出現順序の入れ替わりを考慮した文の系列の対応付け}
\label{fig:alignment}
\vspace{-0.5\Cvs}
\end{figure}

統計的機械翻訳では，この他にもフレーズ（連続する単語列）の対応付けを求める問題が整数計画問題に定式化されている\cite{DeNeroJ2008,KoshikawaM2010}．


\section{整数計画ソルバーを利用する}
\label{sec:solver}

前節で紹介したように，実際に多くの現実問題が整数計画問題として定式化できる．
一方で，整数計画問題を含む多くの組合せ最適化問題はNP困難のクラスに属することが計算の複雑さの理論により明らかにされている．
こう書くと，多くの現実問題に対して最適解を求めることは非常に困難であるように思われるが，計算の複雑さが示す結果の多くは「最悪の場合」であり，全ての入力データに対して最適解を求めることは困難でも，多くの入力データに対して現実的な計算時間で最適解を求められる問題は少なくない．
また，整数計画ソルバーは探索中に得られた暫定解を保持しているので，与えられた計算時間内に最適解が求められなくても，精度の高い実行可能解が求まれば，利用者によっては十分に満足できる場合も多く，整数計画ソルバーはそのような目的にも使われる．

\begin{table}[b]
\caption{代表的な整数計画ソルバー}
\label{tab:solver}
\input{04table01.txt}
\end{table}

表\ref{tab:solver}に示すように，現在では，商用・非商用を含めて多数の整数計画ソルバーが利用可能である\cite{AtamturkA2005,LinderothJT2006,FourerR2013,MittelmannHD-Web}．
商用ソルバーを利用するためには，数十万〜数百万円のライセンス料金が必要となる場合が多いが，無償の試用ライセンスや無償〜数十万円のアカデミックライセンスが用意されている場合も少なくない．
一般的に，非商用ソルバーより商用ソルバーの方が性能は高いが，実際には商用ソルバーの中でもかなりの性能差がある．
整数計画ソルバーのベンチマーク問題例に対する最新の実験結果\cite{MittelmannHD-Web}によると，商用ソルバーでは，先に挙げたXpress Optimization Suite, Gurobi Optimizer, CPLEX Optimization Studioの3つが，非商用ソルバーではSCIPが最も性能が高いようである．
整数計画ソルバーを選ぶ際には，性能以外にも，扱える問題の種類\footnote{最近では非線形の整数計画問題を扱えるソルバーも増えている．}，扱える問題の記述形式，インターフェースなどを考慮して，各自の目的に合った整数計画ソルバーを選ぶことが望ましい．
利用可能な整数計画ソルバーについては\cite{FourerR2013,MittelmannHD-Web}が詳しい．

まず，整数計画ソルバーを用いて以下の問題例を解くことを考える．
\begin{equation}
\label{eq:sample}
\begin{array}{ll}
\textnormal{maximize} & 2 x_1 + 3 x_2 \\
\textnormal{subject to} & 2 x_1 +  x_2 \le 10,\\
& 3 x_1 + 6 x_2 \le 40,\\
& x_1, x_2 \in \mathbb{Z}_+.
\end{array}
\end{equation}
整数計画ソルバーの主な利用法には，(1)コマンドラインインターフェースを通じてソルバーを実行する方法，(2)最適化モデリングツールを通じてソルバーを実行する方法，(3)他のソフトウェアからAPI\footnote{APIは``Application Programming Interface''の略．}を通じてソルバーを実行する方法の3通りがある．

\begin{figure}[b]
\begin{center}
\includegraphics{21-5ia4f2.eps}
\end{center}
\caption{問題例(\ref{eq:sample})のLP形式による記述}
\label{fig:lp-sample}
\end{figure}

1番目は，問題例をLP形式\footnote{LPは``Linear Programming''の略．}，MPS形式\footnote{MPSは``Mathematical Programming System''の略．}などで記述された入力ファイルを用意して整数計画ソルバーを実行する方法である．
図\ref{fig:lp-sample}は問題例(\ref{eq:sample})をLP形式で記述したものである．
目的関数や制約条件の部分は，数式をほぼそのまま記述しているだけである\footnote{図\ref{fig:lp-sample}では非負制約を記述しているが，LP形式では何も指定しなければ各変数$x_j$の非負制約$x_j \ge 0$は自動的に設定される．}．
\texttt{maximize}, \texttt{subject to}, \texttt{bounds}, \texttt{general}, \texttt{end}は予約語で，変数値の上下限や整数制約などをこれらの予約語を用いて記述している．
LP形式は文法が平易で可読性が高く，多くの整数計画ソルバーが対応している．
図\ref{fig:mps-sample}は問題例(\ref{eq:sample})をMPS形式で記述したものである．
MPS形式は1960年代にIBMによって導入された形式で，現在も標準的に使われているが可読性は低い．
LP形式やMPS形式はプログラミング言語の配列のように変数をまとめて扱う記述ができない．
つまり，LP形式やMPS形式で$\sum_{j=1}^{100} x_j \le 3$の数式を記述するには，\texttt{x1 + x2 + (中略) + x100 <= 3}と書くしか方法がない．
よって，大きな問題例を記述する場合には，適当なプログラム言語を用いてLP形式やMPS形式のファイルを生成するプログラムを作成する必要がある．

\begin{figure}[t]
\begin{center}
\includegraphics{21-5ia4f3.eps}
\end{center}
\caption{問題例(\ref{eq:sample})のMPS形式による記述}
\label{fig:mps-sample}
\end{figure}

2番目は，最適化モデリングツールが提供するモデリング言語で問題例を記述し，最適化モデリングツールを通じて整数計画ソルバーを実行する方法である．
商用の最適化モデリングツールが提供するモデリング言語では，AIMMS, AMPL, GAMSなど，非商用では，Math Prog, ZIMPLなどが知られている．
図\ref{fig:mod-sample}は問題例(\ref{eq:sample})をMath Prog形式で記述したものである．
多くのモデリング言語では，モデル部分とデータ部分を分離して記述できるため，数式を直感的にモデルに書き換えることが可能である．
例えば，$\sum_{j=1}^{100} x_j \le 3$の数式は，\texttt{sum(i in 1..100)(x[i]) <= 3}と記述できる．
現実問題を最適化問題に定式化できればすぐに整数計画ソルバーを利用できるので効率良いプロトタイピングが可能となる．
一方で，最適化モデリングツールの購入とモデリング言語の習得が必要で，1番目の方法に比べると汎用性に欠ける．

3番目は，整数計画ソルバーが提供するC, C++, Java, Python, Matlab, Excelなどのライブラリやプラグインを通じて整数計画ソルバーを実行する方法である．
部分問題を解くためのサブルーチンとして整数計画ソルバーを利用する場合や，整数計画ソルバーの挙動を細かく制御したい場合はこの方法が効率的である．
ただし，整数計画ソルバーやそのバージョン毎にライブラリやプラグインの仕様が異なるため汎用性と保守性に欠ける．

最適化ソルバーの利用者にとって，与えられた問題例がどの程度の計算時間で解けるかを事前に見積ることは重要である．
線形計画問題では，一部の特殊な問題を除けば変数や制約式の数を計算時間の目安にして差し支えない場合が多い．
一方で，整数計画問題では，\cite{KochT2011}で報告されているように，10万変数，10万制約式で最適解を効率良く求められる問題例がある一方で，1,000変数程度でも最適解を求められない問題例があり，変数や制約式の数だけでは計算時間を見積れないことが知られている．

\begin{figure}[t]
\begin{center}
\includegraphics{21-5ia4f4.eps}
\end{center}
\caption{問題例(\ref{eq:sample})のMath Prog形式による記述}
\label{fig:mod-sample}
\end{figure}

整数計画ソルバーの現状や利用法については\cite{BertholdT2012,FujieT2011,MiyashiroR-Web,MiyashiroR2012,MiyashiroR2006}が詳しい．


\section{線形計画問題に定式化する}
\label{sec:lp-model}

線形計画問題では，数百万変数，数百万制約式の大規模な問題例でも現実的な計算時間で最適解を求められるが，線形式のみを用いて目的関数と制約条件を記述する必要があるため，数理最適化の専門家ではない利用者にとって，現実問題を線形計画問題に定式化することは容易な作業ではない．
しかし，一見すると非線形計画問題に見える問題も変数の追加や式の変形により等価な線形計画問題に変換できる場合は少なくない．
現実問題を線形計画問題を定式化する際には，与えられた現実問題を線形計画問題で正確に記述できるか，または満足できる程度に近似できるか良く見極める必要がある．
ここでは，一見すると非線形に見える最適化問題を線形計画問題に定式化するいくつかの方法を紹介する．


\subsection{凸関数最小化問題}
\label{sec:convex-piecewise-liear}

凸関数最小化問題は線形計画問題に近似できる．
ここでは，図\ref{fig:nonlinear1}に示すように，1変数の凸関数$f(x)$を区分線形関数$g(x)$で近似する方法を考える．
凸関数$f(x)$上の$m$個の点$(a_1,f(a_1)),\allowbreak \dots, \allowbreak (a_m,f(a_m))$を適当に選んで線分で繋ぐと区分線形関数$g(x)$が得られる．
この区分線形関数$g(x)$は凸関数なので，各区分を表す線形関数を用いて，
\begin{equation}
g(x) = \max_{i=1,\dots,m-1} \left\{ \displaystyle\frac{f(a_{i+1}) - f(a_i)}{a_{i+1} - a_i}(x - a_i) + f(a_i) \right\}, \quad a_1 \le x \le a_m,
\end{equation}
と記述できる．
このとき，各区分を表す線形関数の最大値を表す変数$z$を用意すると，区分線形関数$g(x)$の最小化問題は以下の線形計画問題に定式化できる．
\begin{equation}
\label{eq:nonlinear1}
\begin{array}{ll}
\textnormal{minimize} & z\\
\textnormal{subject to} & \displaystyle\frac{f(a_{i+1}) - f(a_i)}{a_{i+1} - a_i}(x - a_i) + f(a_i) \le z, \quad i=1,\dots,m-1,\\
 & a_1 \le x \le a_m.
\end{array}
\end{equation}
多変数の凸関数最小化問題でも，直線の集合の代わりに超平面の集合で凸関数を近似すれば同様に定式化できる．

\begin{figure}[b]
\begin{center}
\includegraphics{21-5ia4f5.eps}
\end{center}
\caption{凸関数の区分線形関数による近似}
\label{fig:nonlinear1}
\end{figure}


\subsection{連立1次方程式の近似解}
\label{sec:linear-equations}

全ての制約式を同時には満たせない連立1次方程式に対して，できる限り多くの制約式を満たす近似解を求める問題は目標計画法と呼ばれる\cite{CharnesA1961}．
連立1次方程式
\begin{equation}
\sum_{j=1}^n a_{ij} x_j = b_i, \quad i=1,\dots,m,
\end{equation}
に対して，その誤差
\begin{equation}
z_i = \left| b_i - \sum_{j=1}^n a_{ij} x_j^{\ast} \right|, \quad i=1,\dots,m,
\end{equation}
をできる限り小さくする近似解$\bm{x}^{\ast} = (x_1^{\ast},\dots,x_n^{\ast})$を求める問題を考える．
このとき，平均2乗誤差$\frac{1}{m}\sum_{i=1}^m z_i^2$，平均誤差$\frac{1}{m}\sum_{i=1}^m z_i$，最悪誤差$\max_{i=1,\dots,m} z_i$などが評価基準として考えられる．
これらの評価基準は，それぞれ誤差ベクトル$\bm{z} = (z_1,\dots,z_m)$の$L_2$ノルム，$L_1$ノルム，$L_\infty$ノルムを最小化する近似解$\bm{x}^{\ast}$を求めることに対応する．
応用事例では，誤差の分布がガウス分布に近いことを前提に，平均2乗誤差を評価基準として最小2乗法を用いて近似解を求める場合が多い．
しかし，実際には外れ値が多いなど誤差の分布がガウス分布と全く異なる場合も少なくない．
このような場合は，外れ値の影響を受けにくい平均誤差や最悪誤差を評価基準として近似解を求める方法が考えられる．

平均誤差を最小化する近似解$\bm{x}^{\ast}$を求める問題は，制約式を持たない以下の最適化問題に定式化できる．
\begin{equation}
\begin{array}{ll}
\textnormal{minimize} & \displaystyle\sum_{i=1}^m \left| b_i - \sum_{j=1}^n a_{ij} x_j \right|.
\end{array}
\end{equation}
これは一見しただけでは線形計画問題に見えないが以下の線形計画問題に変換できる．
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{i=1}^m z_i & \\
\textnormal{subject to} & b_i - \displaystyle\sum_{j=1}^n a_{ij} x_j \ge -z_i, & i=1,\dots,m,\\
 & b_i - \displaystyle\sum_{j=1}^n a_{ij} x_j \le z_i, & i=1,\dots,m,\\
 & z_i \ge 0, & i=1,\dots,m.
\end{array}
\end{equation}

この方法で線形回帰問題を解くこともできる．
$m$個のデータ$(\bm{x}_1,y_1),\dots,(\bm{x}_m,y_m)$が与えられる．
これを$n$個の関数$\{ \phi_1(\bm{x}_i), \dots, \phi_n(\bm{x}_i) \}$の線形結合を用いて$y(\bm{x}_i) \approx w_0 + w_1 \phi_1(\bm{x}_i) + \dots + w_n \phi_n(\bm{x}_i)$と近似する問題を考える．
各データ$(\bm{x}_i,y_i)$に対する平均誤差を最小にするパラメータ$w_0, \dots, w_n$を求める問題は以下の最適化問題に定式化できる．
\begin{equation}
\begin{array}{ll}
\textnormal{minimize} & \displaystyle\sum_{i=1}^m \Bigl| y_i - \left( w_0 + w_1 \phi_1(\bm{x}_i) + \dots + w_n \phi_n(\bm{x}_i) \right) \Bigr|
\end{array}
\end{equation}
$i$番目のデータに対する誤差を表す変数$z_i$を用意すると以下の線形計画問題\footnote{$\bm{x}_i$は与えられたデータなので$\phi_1(\bm{x}_i), \dots, \phi_n(\bm{x}_i)$は定数となる．}に定式化できる．
\pagebreak
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{i=1}^m z_i & \\
\textnormal{subject to} & y_i - \left( w_0 + w_1 \phi_1(\bm{x}_i) + \dots + w_n \phi_n(\bm{x}_i) \right) \ge -z_i, & i=1,\dots,m,\\
& y_i - \left( w_0 + w_1 \phi_1(\bm{x}_i) + \dots + w_n \phi_n(\bm{x}_i) \right) \le z_i, & i=1,\dots,m,\\
& z_i \ge 0, & i=1,\dots,m.
\end{array}
\end{equation}

最悪誤差を最小化する近似解$\bm{x}^{\ast}$を求める問題も制約式を持たない以下の最適化問題に定式化できる．
\begin{equation}
\begin{array}{ll}
\textnormal{minimize} & \displaystyle\max_{i=1,\dots,m} \left| b_i - \sum_{j=1}^n a_{ij} x_j \right|.
\end{array}
\end{equation}
これも一見すると線形計画問題に見えないが以下の線形計画問題に変換できる．
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & z & \\
\textnormal{subject to} & b_i - \displaystyle\sum_{j=1}^n a_{ij} x_j \ge -z, & i=1,\dots,m,\\
 & b_i - \displaystyle\sum_{j=1}^n a_{ij} x_j \le z, & i=1,\dots,m,\\
 & z \ge 0. &
\end{array}
\end{equation}

この方法で$k$個の目的関数$\sum_{j=1}^n c_{1j} x_j, \allowbreak \sum_{j=1}^n c_{2j} x_j, \allowbreak \dots, \allowbreak \sum_{j=1}^n c_{kj} x_j$を同時に最小化する多目的最適化問題も解くことができる．
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle \left\{ \sum_{j=1}^n c_{1j} x_j, \dots, \sum_{j=1}^n c_{kj} x_j \right\} & \\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n a_{ij} x_j \ge b_i, & i=1,\dots,m,\\
 & x_j \ge 0, & j=1,\dots,n.
\end{array}
\end{equation}
まず，これらの目的関数の線形和を最小化する定式化が考えられる．
しかし，いくつかの目的関数が極端に大きな値となる解が求まってしまう場合が少なくないため，全ての目的関数をバランス良く最小化することは容易ではない．
そこで，これらの目的関数の最大値を最小化する定式化を考える．
新たに目的関数の最大値を表す変数$z$を導入すると，この問題は以下の線形計画問題に変換できる．
\pagebreak
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & z & \\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n c_{hj} x_j \le z, & h=1,\dots,k,\\
 & \displaystyle\sum_{j=1}^n a_{ij} x_j \ge b_i, & i=1,\dots,m,\\
 & x_j \ge 0, & j=1,\dots,n.
\end{array}
\end{equation}


\subsection{比率の最小化}
\label{sec:ratio}

2つの関数の比を目的関数に持つ最適化問題は分数計画問題と呼ばれる．
以下の2つの線形関数の比を目的関数に持つ分数計画問題を考える．
\begin{equation}
\begin{array}{ll}
\textnormal{minimize} & \displaystyle\frac{\displaystyle\sum_{j=1}^n c_j x_j}{\displaystyle\sum_{j=1}^n d_j x_j}\\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n a_{ij} x_j = b_i, \quad i=1,\dots,m.\\
\end{array}
\end{equation}
ただし，$\sum_{j=1}^n d_j x_j > 0$とする．
ここで，新たな変数$t = 1 / \sum_{j=1}^n d_j x_j$と$y_j = t x_j$ ($j=1,\dots,n$)を導入すると，この問題は以下の線形計画問題に変換できる．
\begin{equation}
\begin{array}{ll}
\textnormal{minimize} & \displaystyle\sum_{j=1}^n c_j y_j\\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n a_{ij} y_j - b_i t = 0, \quad i=1,\dots,m,\\
 & \displaystyle\sum_{j=1}^n d_j y_j = 1.
\end{array}
\end{equation}
この変換は$\sum_{j=1}^n d_j x_j$が常に同じ符号で0にならない場合のみ成立するので，必要があれば$\sum_{j=1}^n d_j x_j \ge \varepsilon$ （$\varepsilon$は十分に小さな正の定数）などの制約式を追加すれば良い．


\section{整数計画問題に定式化する}
\label{sec:mip-model}

整数計画問題は整数変数を含む線形計画問題であるが，線形計画問題の方が整数計画問題よりもはるかに解き易い事実を考慮すれば，現実問題において離散値を取る量を決定するという理由だけで安易に整数変数を用いるべきではない．
例えば，自動車や機械部品の生産数を決定する問題を整数計画問題に定式化することは必ずしも適切ではない．
このような場合は，各変数の整数条件を取り除いた線形計画問題を解いて実数最適解を得た後に，その端数を丸めて最も近い整数解を求めれば十分に実用的な解となる場合が多い．
実際に，多くの現実的な整数計画問題では，yes/noの決定や離散的な状態の切り替えを記述するために2値変数（$\{0,1\}$の2値のみを取る整数変数）を用いていることに注意する必要がある．

ここでは，代表的な組合せ最適化問題を例に整数計画問題の基本的な定式化の技法を紹介する．
もちろん，いくつかの組合せ最適化問題では効率良いアルゴリズムが知られているが，現実問題が既知の組合せ最適化問題と一致することは稀であり，これらの効率良いアルゴリズムをそのまま適用できるとは限らない．
一方で，整数計画ソルバーであれば定式化を少し変形するだけで適用できる場合が多い．
このように，代表的な組合せ最適化問題に対する整数計画問題の定式化を知れば，それらを雛形として変形もしくは組合せることで多種多様な現実問題を整数計画問題に定式化できるようになる．


\subsection{整数性を持つ整数計画問題}
\label{sec:unimodular}

整数計画問題は一般にはNP困難のクラスに属する計算困難な問題であるが，いくつかの特殊な整数計画問題は効率良く解けることが知られている．
ここでは，制約行列$\bm{A}$が完全単摸行列である整数計画問題$\min\{ \bm{c}^T \bm{x} \mid \bm{A} \bm{x} \ge \bm{b}, \bm{x} \in \mathbb{Z}_+^n \}$を紹介する．
任意の小行列式が$0$, $1$, $-1$のどれかに等しい行列$\bm{A}$は完全単摸行列と呼ばれる．
$\bm{A}$が整数行列，$\bm{b}$が整数ベクトルである線形計画問題$\min\{ \bm{c}^T \bm{x} \mid \bm{A} \bm{x} \ge \bm{b}, \bm{x} \ge \bm{0} \}$について，$\bm{A}$が完全単摸行列で（実数）最適解が存在するならば，単体法を適用すると常に整数最適解$\bm{x} \in \mathbb{Z}_+^n$が得られる．

有向グラフが与えられたとき，点の番号を行番号，辺の番号を列番号とする行列$\bm{A}$で，辺$e = (i,j)$に対応する列が$a_{ie}=1$, $a_{je}=-1$（その他は0）で与えられる行列は接続行列と呼ばれる．
任意の有向グラフに対して，その接続行列は完全単摸行列となる．
また，無向グラフの接続行列では辺に対応する列が$a_{ie} = a_{je} = 1$（その他は0）で与えられる．
無向グラフでは2部グラフであるときに限り，その接続行列は完全単摸行列となる．

以下では，完全単摸行列を制約行列に持つ整数計画問題の例として最短路問題と割当問題を紹介する．


\paragraph{最短路問題：}
有向グラフ$G=(V,E)$と各辺$(i,j) \in E$の長さ$d_{ij}$が与えられる．
$x_{ij}$は変数で，辺$(i,j) \in E$が経路に含まれるならば$x_{ij}=1$，そうでなければ$x_{ij}=0$の値を取る．
このとき，与えられた始点$s \in V$から終点$t \in V$に至る最短路を求める問題は以下の通りに定式化できる．
\pagebreak
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{(i,j) \in E} d_{ij} x_{ij} & \\
\textnormal{subject to} & \displaystyle\sum_{j:(s,j) \in E} x_{sj} = 1, & \\
 & \displaystyle\sum_{i:(i,t) \in E} x_{it} = 1, & \\
 & \displaystyle\sum_{i:(i,k) \in E} x_{ik} - \sum_{j:(k,j) \in E} x_{kj} = 0, & k \in V \setminus \{ s, t \},\\
 & x_{ij}\in \{ 0, 1 \}, & (i,j) \in E.
\end{array}
\end{equation}
1番目と2番目の制約式は，始点$s$から出る辺と終点$t$に入る辺がちょうど1本ずつ選ばれることを表す．
3番目の制約式は，訪問する頂点$k$では出る辺と入る辺がちょうど1本ずつ選ばれ，それ以外の頂点では辺は選ばれないことを表す．


\paragraph{割当問題：}
$m$人の学生を$n$個のクラスに割り当てる．
クラス$j$の受講者数の下限を$l_j$，上限を$u_j$，学生$i$のクラス$j$に対する満足度を$p_{ij}$とする．
$x_{ij}$は変数で，学生$i$がクラス$j$に割当てられれば$x_{ij}=1$，そうでなければ$x_{ij}=0$の値を取る．
このとき，学生の満足度の合計が最大となる割当てを求める問題は以下の通りに定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{maximize} & \displaystyle\sum_{i=1}^m \sum_{j=1}^n p_{ij} x_{ij} &\\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n x_{ij} = 1, & i=1,\dots,m,\\
& \displaystyle l_j \le \sum_{i=1}^m x_{ij} \le u_j, & j=1,\dots,n,\\
 & x_{ij} \in \{ 0, 1 \}, & i=1,\dots,m, \; j=1,\dots,n.
\end{array}
\end{equation}
1番目の制約式は，各学生$i$がちょうど1つのクラスに割当てられることを表す．
2番目の制約式は，各クラス$j$に割当てられる学生の数が受講者数の上下限内に収まることを表す．

最短路問題，割当問題はそれぞれダイクストラ法やハンガリー法など効率良いアルゴリズムが知られている\cite{KorteB2012}．
しかし，現実問題では実務上の要求から生じる制約条件が追加される場合が多いため，これらの効率良いアルゴリズムがそのまま適用できるとは限らない．
一方で，与えられた現実問題を完全単摸行列に近い形の制約行列を持つ整数計画問題に定式化できる場合は，線形計画緩和問題から良い下界値が得られることが期待できるため，整数計画ソルバーを用いて現実的な計算時間で最適解を求められる場合は少なくない．
完全単摸行列の性質については\cite{KorteB2012,SchrijverA1998}が詳しい．


\subsection{論理的な制約条件}
\label{sec:logic}

現実問題が既知の組合せ最適化問題と一致することは稀であり，実務上の要求から生じる制約条件が追加される場合が多い．
ここでは，ナップサック問題を例にいくつかの論理的な制約条件とその記述を紹介する．

\paragraph{ナップサック問題：}
1つの箱と$n$個の荷物が与えられる．
箱に詰込める重さ合計の上限を$c (> 0)$，各荷物$j$の重さを$w_j (< c)$，価値を$p_j$とする．
$x_j$は変数で，荷物$j$を箱に詰めるならば$x_j=1$，そうでなければ$x_j=0$の値を取る．
このとき，価値の合計が最大となる荷物の詰込みを求める問題は以下の通り定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{maximize} & \displaystyle\sum_{j=1}^n p_j x_j & \\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n w_j x_j \le c, & \\
 & x_j \in \{ 0, 1 \}, & j=1,\dots,n.
\end{array}
\end{equation}
ちなみに，複数の制約式を持つナップサック問題は多制約ナップサック問題と呼ばれ，投資計画やポートフォリオ最適化などの応用を持つ．
ナップサック問題については\cite{KellererH2004}が詳しい．

以下に，いくつかの論理的な制約条件とその記述を示す．
\begin{enumerate}
\item 詰込む荷物の数は高々$k$個．
\begin{equation}
\sum_{j=1}^n x_j \le k.
\end{equation}

\item 荷物$j_1, j_2$の少なくとも一方は詰込む．
\begin{equation}
x_{j_1} + x_{j_2} \ge 1.
\end{equation}

\item 荷物$j_1$を詰込むならば荷物$j_2$も詰込む．
\begin{equation}
x_{j_1} \le x_{j_2}.
\end{equation}

\item 詰込む荷物の数は0または2．
\begin{equation}
\sum_{j=1}^n x_j = 2y, \; y \in \{ 0,1 \}.
\end{equation}
もしくは$y$を使わずに，以下の通りにも記述できる．
\pagebreak
\begin{equation}
\left\{
\begin{array}{l}
+x_1 +x_2 + \dots +x_n \le 2,\\
-x_1 +x_2 + \dots +x_n \ge 0,\\
+x_1 -x_2 + \dots +x_n \ge 0,\\
\dots,\\
+x_1 +x_2 + \dots -x_n \ge 0.
\end{array}
\right.
\end{equation}
2番目以降の制約式は$\sum_{j=1}^n x_j = 1$を満たす解を除外しており，図\ref{fig:logic1}に示すように，これらの制約式は実行可能解全体の凸包（全ての実行可能解を含む最小の凸多面体）から得られる．
\end{enumerate}


\begin{figure}[b]
\begin{center}
\includegraphics{21-5ia4f6.eps}
\end{center}
\caption{$x_1 + x_2 + x_3 = 0$または$2$を満たす全ての解を含む凸包}
\label{fig:logic1}
\end{figure}


\subsection{固定費用付き目的関数}
\label{sec:fixed-cost}

生産計画や物流計画など多くの現実問題では，取り扱う製品量によって生じる変動費用と段取替えなど所定の作業によって生じる固定費用の両方を考慮する場合が多い．
例えば，$x$を単位費用$c_1$で生産される製品の生産量とする．
もし，その製品が少しでも生産されれば初期費用$c_2$が生じるとすると，総費用$f(x)$は以下に示す非線形関数となる（$C$は製品の生産量の上限とする）．
\begin{equation}
f(x) = \left\{
\begin{array}{ll}
0 & x=0 \\
c_1 x + c_2 & 0 < x \le C.
\end{array}
\right.
\end{equation}
そこで，少しでも製品を生産するならば$y=1$，
\pagebreak
そうでなければ$y=0$の値を取る2値変数$y$を導入すると，総費用$f(x)$は以下の通りに記述できる．
\begin{equation}
f(x) = \left\{ c_1 x + c_2 y \mid x \le C y, 0 \le x \le C, y \in \{ 0,1 \} \right\}.
\end{equation}

以下では，固定費用を持つ整数計画問題の例としてビンパッキング問題を紹介する．

\paragraph{ビンパッキング問題：}
十分な数の箱と$n$個の荷物が与えられる．
箱に詰込める荷物の重さ合計の上限を$c (> 0)$，各荷物$j$の重さを$w_j (< c)$とする．
$x_{ij}$と$y_i$は変数で，荷物$j$が箱$i$に入っていれば$x_{ij}=1$，そうでなければ$x_{ij}=0$，箱$i$を使用していれば$y_i=1$，そうでなければ$y_i=0$の値を取る．
このとき，使用する箱の数が最小となる荷物の詰込みを求める問題は以下の通りに定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{i=1}^n y_i & \\
\textnormal{subject to} & \displaystyle\sum_{j=1}^n w_j x_{ij} \le c y_i, & i=1,\dots,n,\\
 & \displaystyle\sum_{i=1}^n x_{ij} = 1, & j=1,\dots,n,\\
 & x_{ij} \in \{ 0,1 \}, & i=1,\dots,n, \; j=1,\dots,n,\\
 & y_i \in \{ 0,1 \}, & i=1,\dots,n.
\end{array}
\end{equation}
1番目の制約式は，箱$i$が使用されている場合は詰込まれた荷物の重さ合計が上限内に収まることを，箱$i$が使用されていない場合は荷物が詰込めないことを表す．
2番目の制約式は，各荷物$j$がちょうど1つの箱に詰込まれることを表す．


\subsection{離接した制約式}
\label{sec:disjunction}

一般に，最適化問題では全ての制約式を同時に満たすことを求められるが，現実問題では$m$本の制約式のうちちょうど$k$本だけを満たすことを求められる場合も少なくない．
これは離接した制約式と呼ばれ，選択や順序付けなどの組合せ的な制約条件を記述する場合に用いられる．

例えば，2つの制約式$\sum_{j=1}^n a_{1j} x_j \le b_1$と$\sum_{j=1}^n a_{2j} x_j \le b_2$ ($0 \le x_j \le u_j$, $j=1,\dots,n$)の少なくとも一方が成立するという場合は，各制約式に対応する2値変数$y_1, y_2$を導入すれば以下の通りに記述できる．
\begin{equation}
\left\{
\begin{array}{l}
\displaystyle\sum_{j=1}^n a_{1j} x_j \le b_1 + M(1 - y_1),\\
\displaystyle\sum_{j=1}^n a_{2j} x_j \le b_2 + M(1 - y_2),\\
y_1 + y_2 = 1,\\
y_1, y_2 \in \{ 0,1 \}.
\end{array}
\right.
\end{equation}
ここで，$M$は
\begin{equation}
M \ge \max \left\{ \sum_{j=1}^n a_{1j} x_j - b_1, \sum_{j=1}^n a_{2j} x_j - b_2 \; \middle| \; 0 \le x_j \le u_j, j=1,\dots,n \right\}
\end{equation}
を満たす十分に大きな定数（big-$M$と呼ばれる）である．
$y_i=0$の場合は，制約式の右辺は$b_i+M$と十分に大きな値を取り，各変数$x_j$の取る値に関わらず必ず満たされる．

以下では，離接した制約式を持つ整数計画問題の例として1機械スケジューリング問題と長方形詰込み問題を紹介する．

\paragraph{1機械スケジューリング問題：}
$n$個の仕事とこれらを処理する1台の機械が与えられる．
機械は2つ以上の仕事を同時には処理できないものとする．
仕事$i$の処理にかかる時間を$p_i (> 0)$，納期を$d_i (\ge 0)$とする．
$s_i$と$x_{ij}$は変数で，$s_i$は仕事$i$の開始時刻，$x_{ij}$は仕事$i$が仕事$j$に先行するならば$x_{ij}=1$，そうでなければ$x_{ij}=0$の値を取る．
このとき，仕事の納期遅れの合計が最小となる処理スケジュールを求める問題は以下の通りに定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{i=1}^n \max \left\{ s_i + p_i - d_i, 0 \right\} & \\
\textnormal{subject to} & s_i + p_i \le s_j + M(1 - x_{ij}), & i=1,\dots,n, \; j\not=i,\\
 & x_{ij} + x_{ji} = 1, & i=1,\dots,n, \; j\not=i,\\
 & x_{ij} \in \{ 0,1 \}, & i=1,\dots,n, \; j\not=i,\\
 & s_i \ge 0, & i=1,\dots,n.
\end{array}
\end{equation}
納期遅れは仕事$i$の終了時刻$s_i+p_i$が納期$d_i$より後になる場合のみ生じるので，各仕事$i$に対する納期遅れは$\max\{ s_i + p_i - d_i, 0 \}$と記述できる．
1番目の制約式は，仕事$i$が仕事$j$に先行するならば仕事$i$の終了時刻が仕事$j$が開始時刻の前になることを表す．
2番目の制約式は，仕事$i$が仕事$j$に先行するかもしくはその逆が必ず成り立つことを表す．
目的関数が最大値の最小化なので，納期遅れを表す新たな変数$t_i = \max \left\{ s_i + p_i - d_i, 0 \right\}$を導入すると整数計画問題に変換できる．
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{i=1}^n t_i &\\
\textnormal{subject to} & s_i + p_i \le s_j + M(1 - x_{ij}), & i=1,\dots,n, \; j\not=i,\\
 & x_{ij} + x_{ji} = 1, & i=1,\dots,n, \; j\not=i,\\
 & s_i + p_i - d_i \le t_i, & i=1,\dots,n, \\
 & x_{ij} \in \{ 0,1 \}, & i=1,\dots,n, \; j\not=i,\\
 & s_i, t_i \ge 0, & i=1,\dots,n.
\end{array}
\end{equation}

\begin{figure}[b]
\begin{center}
\includegraphics{21-5ia4f7.eps}
\end{center}
\caption{長方形詰込み問題の例}
\label{fig:packing}
\end{figure}


\paragraph{長方形詰込み問題：}
図\ref{fig:packing}に示すように，幅が固定で十分な高さがある長方形の容器と$n$個の長方形の荷物が与えられる．
容器の幅を$W$，各荷物$i$の幅を$w_i$，高さを$h_i$とする．
荷物はその下辺が容器の下辺と平行になるように配置し，回転は許さないものとする．
ここで，全ての荷物を互いに重ならないように容器内に配置する．
$(x_i,y_i)$を荷物$i$の左下隅の座標を表す変数とすると（容器の左下隅を原点とする），問題の制約条件は以下の通りに記述できる．
\begin{description}
\item [制約条件1：] 荷物$i$は容器内に配置される．\\
これは，以下の2本の不等式がともに成り立つことと同値である．
\begin{equation}
\begin{array}{l}
0 \le x_i \le W - w_i,\\
0 \le y_i \le H - h_i.
\end{array}
\end{equation}

\item [制約条件2：] 荷物$i,j$は互いに重ならない．\\
これは，以下の4本の不等式のうち1本以上が成り立つことと同値であり，各不等式はそれぞれ荷物$i$が荷物$j$の左側，右側，下側，上側にあることを記述している．
\begin{equation}
\begin{array}{l}
x_i + w_i \le x_j,\\
x_j + w_j \le x_i,\\
y_i + h_i \le y_j,\\
y_j + h_j \le y_i.
\end{array}
\end{equation}
\end{description}
$z_{ij}^{\textnormal{{\tiny left}}}$, $z_{ij}^{\textnormal{{\tiny right}}}$, $z_{ij}^{\textnormal{{\tiny lower}}}$, $z_{ij}^{\textnormal{{\tiny upper}}}$は変数で，それぞれ荷物$i$が荷物$j$の左側，右側，下側，上側にあるならば$1$，そうでなければ$0$の値を取る．
このとき，制約条件を満たした上で必要な容器の高さ$H$を最小にする荷物の配置を求める問題は以下の通りに定式化できる．
\pagebreak
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & H & \\
\textnormal{subject to} & 0 \le x_i \le W - w_i, & i=1,\dots,n,\\
 & 0 \le y_i \le H - h_i, & i=1,\dots,n,\\
 & x_i + w_i \le x_j + M (1 - z_{ij}^{\textnormal{{\tiny left}}}), & i=1,\dots,n, j \not= i,\\
 & x_j + w_j \le x_i + M (1 - z_{ij}^{\textnormal{{\tiny right}}}), & i=1,\dots,n, j \not= i,\\
 & y_i + h_i \le y_j + M (1 - z_{ij}^{\textnormal{{\tiny lower}}}), & i=1,\dots,n, j \not= i,\\
 & y_j + h_j \le y_i + M (1 - z_{ij}^{\textnormal{{\tiny upper}}}), & i=1,\dots,n, j \not= i,\\
 & z_{ij}^{\textnormal{{\tiny left}}} + z_{ij}^{\textnormal{{\tiny right}}} + z_{ij}^{\textnormal{{\tiny lower}}} + z_{ij}^{\textnormal{{\tiny upper}}} = 1, & i=1,\dots,n, j \not= i,\\
 & z_{ij}^{\textnormal{{\tiny left}}}, z_{ij}^{\textnormal{{\tiny right}}}, z_{ij}^{\textnormal{{\tiny lower}}}, z_{ij}^{\textnormal{{\tiny upper}}} \in \{ 0,1 \}, & i=1,\dots,n, j \not= i.
\end{array}
\end{equation}


\subsection{非線形関数}
\label{sec:nonlinear}

\begin{figure}[b]
\begin{center}
\includegraphics{21-5ia4f8.eps}
\end{center}
\caption{非凸関数の区分線形関数による近似}
\label{fig:nonlinear2}
\end{figure}

非凸関数最小化問題は整数計画問題に近似できる．
図\ref{fig:nonlinear2}に示すように，非凸関数$f(x)$上の$m$個の点$(a_1,f(a_1)), \allowbreak \dots, \allowbreak (a_m,f(a_m))$を適当に選んで線分で繋ぐと区分線形関数$g(x)$が得られる．
区分線形関数上の点$(x,g(x))$はある線分上にある．
例えば，点$(x,g(x))$が$(a_i,f(a_i))$と$(a_{i+1},f(a_{i+1}))$で結ばれる線分上にある場合は以下の通りに記述できる．
\begin{equation}
\left\{
\begin{array}{l}
(x, g(x)) = t_i (a_i, f(a_i)) + t_{i+1} (a_{i+1},f(a_{i+1})),\\
t_i + t_{i+1} = 1,\\
t_i, t_{i+1} \ge 0.
\end{array}
\right.
\end{equation}
これを考慮すると一般の場合も以下の通りに記述できる．
\pagebreak
\begin{equation}
\left\{
\begin{array}{ll}
\displaystyle(x, g(x)) = \sum_{i=1}^m t_i (a_i, f(a_i)), & \\
\displaystyle\sum_{i=1}^m t_i = 1, & \\
t_i \ge 0, & i=1,\dots,m,\\
\textnormal{高々2つの隣り合う$t_i$が正}.
\end{array}
\right.
\end{equation}
ここで，2値変数$z_1,\dots,z_{m-1}$を導入すると「高々2つの隣り合う$t_i$が正」という制約条件は以下の通りに記述できる．
\begin{equation}
\left\{
\begin{array}{ll}
t_1 \le z_1, & \\
t_i \le z_{i-1} + z_i, & i=2,\dots,m-1,\\
t_m \le z_{m-1}, & \\
\displaystyle\sum_{i=1}^{m-1} z_i = 1, & \\
z_i \in \{ 0,1 \}, & i=1,\dots,m-1.
\end{array}
\right.
\end{equation}

次に，2値変数で定義される非線形関数を線形関数に変換する方法を紹介する．
まず，2値変数$x_1$と$x_2$の積$y= x_1 x_2$を考える．
このとき，$(x_1,x_2,y)$の実行可能解は$(0,0,0), \allowbreak (1,0,0), \allowbreak (0,1,0), \allowbreak (1,1,1)$の4通りなので以下の通りに記述できる．
\begin{equation}
\left\{
\begin{array}{l}
y \ge x_1 + x_2 - 1,\\
y \le x_1, \\
y \le x_2,\\
x_1, x_2 \in \{ 0,1 \}.
\end{array}
\right.
\end{equation}
これらの制約式は実行可能解全体の凸包から得られる．
同様に$k$個の2値変数の積$y=\prod_{i=1}^k x_i$も以下の通りに記述できる．
\begin{equation}
\left\{
\begin{array}{ll}
y \ge \displaystyle\sum_{i=1}^k x_i - (k-1), & \\
y \le x_i, & i=1,\dots,k,\\
x_i \in \{ 0,1 \}, & i=1,\dots,k.
\end{array}
\right.
\end{equation}


\subsection{グラフの連結性}
\label{sec:connectivity}

グラフにおける最適化問題では選択した部分グラフの連結性が求められる場合が少なくない．
ここでは，グラフの連結性を制約条件に持つ整数計画問題の例として最小全域木問題と巡回セールスマン問題を紹介する．


無向グラフ$G=(V,E)$の任意の頂点$i,j \in V$の間に路が存在するならば$G$は連結であると呼ぶ．
図\ref{fig:connect}は連結なグラフと非連結なグラフの例である．
これは，任意の頂点集合$S \subset V$ ($S \not= \emptyset$)に対して，$S$と$V \setminus S$の間を繋ぐ辺が少なくとも1本は存在するという制約条件に置き換えられる．

\begin{figure}[b]
\begin{center}
\includegraphics{21-5ia4f9.eps}
\end{center}
\caption{連結なグラフ（左）と非連結なグラフ（右）の例}
\label{fig:connect}
\end{figure}


\paragraph{最小全域木問題：}
無向グラフ$G=(V,E)$と各辺$(i,j) \in E$の長さ$d_{ij}$が与えられる．
閉路を持たない連結な部分グラフは木，全ての頂点を繋ぐ木は全域木と呼ばれる．
$x_{ij}$は変数であり，辺$(i,j)$は木に含まれるならば$x_{ij}=1$，そうでなければ$x_{ij}=0$の値を取る．
このとき，辺の長さの合計が最小となる全域木を求める問題は以下の通り定式化できる．
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{(i,j) \in E} d_{ij} x_{ij} & \\
\textnormal{subject to} & \displaystyle\sum_{i \in S} \sum_{j \in V \setminus S} x_{ij} \ge 1, & S \subset V, \; S \not= \emptyset\\
& \displaystyle\sum_{(i,j) \in E} x_{ij} = n-1, & \\
 & x_{ij} \in \{ 0,1 \}, & (i,j) \in E.
\end{array}
\end{equation}
1番目の制約式は，辺集合$T \subseteq E$が全ての頂点を連結することを表し，カットセット制約と呼ばれる．
2番目の制約式は，$|T|=n-1$を満たすことを表す．
これらの制約式は$T$が全域木となるための必要十分条件である．

\paragraph{巡回セールスマン問題：}
無向グラフ$G=(V,E)$の全ての頂点をちょうど1回ずつ通る閉路は巡回路と呼ばれる．
巡回路となるためには，各頂点$k$に接続する辺がちょうど2本でなければならない．
しかし，これだけでは不十分で，図\ref{fig:subtour}（左）に示すような部分巡回路を排除する必要がある．
これは，任意の頂点集合$S \subset V$ ($S \not= \emptyset$)に含まれる辺の本数が$|S|-1$以下であるという制約条件に置き換えられる．

無向グラフ$G=(V,E)$と各辺$(i,j) \in E$の長さ$d_{ij}$が与えられる．
$x_{ij}$は変数で，辺$(i,j) \in E$が巡回路に含まれるならば$x_{ij}=1$，そうでなければ$x_{ij}=0$の値を取る．
このとき，全ての頂点をちょうど1回ずつ訪問する最短の巡回路を求める問題は以下の通りに定式化できる．
\pagebreak
\begin{equation}
\begin{array}{lll}
\textnormal{minimize} & \displaystyle\sum_{(i,j) \in E} w_{ij} x_{ij} & \\
\textnormal{subject to} & \displaystyle\sum_{(i,k) \in E: i < k} x_{ik} + \sum_{(k,j) \in E: k < j} x_{kj} = 2, & k \in V,\\
 & \displaystyle\sum_{(i,j) \in E: i,j \in S} x_{ij} \le |S|-1, & S \subset V, \; S \not= \emptyset,\\
 & x_{ij} \in \{ 0,1 \}, & (i,j) \in E.
\end{array}
\end{equation}
1番目の制約式は，各頂点に接続する辺がちょうど2本となることを表す．
2番目の制約式は，部分巡回路を持たないことを表し，部分巡回路除去制約と呼ばれる．

\begin{figure}[t]
\begin{center}
\includegraphics{21-5ia4f10.eps}
\end{center}
\caption{部分巡回路（左）と巡回路（右）の例}
\label{fig:subtour}
\end{figure}

最小全域木問題のカットセット制約や巡回セールスマン問題の部分巡回路除去制約は，制約式の数が$\mathrm{O}(2^n)$と膨大で，全ての制約式を書き下して整数計画ソルバーに解かせるのは現実的ではないため，必要に応じて制約式を逐次追加する切除平面法が必要となる．

    グラフの連結性を制約条件に持つ整数計画問題の定式化と解法については (藤江 2011; 久保，ペドロソ，村松，レイス 2012)\nocite{FujieT2011,KuboM2012} が詳しく，
新たな変数を導入して必要な制約式の数を抑える方法が紹介されている．


\section{最適解が求められない場合の対処法}
\label{sec:hard-problem}

最近の整数計画ソルバーは非常に高性能ではあるものの，解候補を体系的に列挙する分枝限定法を探索の基本戦略とするため，与えられた問題例によってはいつまで待っても計算が終了しない場合が少なくない．
ここでは，目的関数の値を最小化する整数計画問題を考える．
分枝限定法は，整数計画問題を分枝操作によって小規模な部分問題に分解しつつ，各部分問題では，暫定解から得られる最適値の上界値と，線形計画緩和問題から得られる最適値の下界値を利用した限定操作によって無駄な探索を省いている．
そのため，いつまで待っても整数計画ソルバーの計算が終了しないならば，(1)線形計画緩和問題の求解に多大な計算時間を要する，(2)限定操作が効果的に働いていないことなどが原因として考えられる．
もちろん，整数計画ソルバーは分枝限定法以外にも多くのアルゴリズムを内包しているため，これだけが原因であると決めつけるべきではないが，対策を練る上でまず始めに確認すべき事項である．

(1)については，原問題から各変数の整数条件を取り除いた線形計画問題を整数計画ソルバーで解けば計算時間を見積もることができる．
実際には，整数計画ソルバーは再最適化と呼ばれる手法を利用するため，整数計画問題の各部分問題において線形計画緩和問題の求解に要する計算時間はもっと短くなる．
しかし，この方法で線形計画問題を1回解くのに要する計算時間が長いと感じるようであれば，問題例の規模が整数計画ソルバーで解くには大き過ぎると判断するのが妥当であろう．
ただし，集合被覆問題や集合分割問題などの線形計画緩和問題では，単体法と内点法で計算時間が大きく異なるため，（部分問題ではなく）原問題の線形計画緩和問題に適用するアルゴリズムを切り替えることで計算時間を大幅に削減できる場合もある．

(2)については，(i)暫定解から得られる最適値の上界値が悪い場合，(ii)線形計画緩和問題から得られる最適値の下界値が悪い場合，(iii)多数の最適解が存在する場合などが考えられる．
これらは，整数計画ソルバーの実行時に出力される最適値の上界値と下界値から確認できる．

まず，(i)暫定解から得られる上界値が悪い場合を考える．
これは，実行可能解が非常に少ないかもしくは存在しないため，整数計画ソルバーの実行時に良い実行可能解を発見できないことが原因として考えられる．
このような場合は，制約式を必ず満たさなければならない制約式（絶対制約）とできれば満たして欲しい制約式（考慮制約）に分けた上で，優先度の低い考慮制約を緩和する方法がある．
例えば，制約式$\sum_{j=1}^n a_{ij} x_j \ge b_i$を$\sum_{j=1}^n a_{ij} x_j \ge b_i - \varepsilon$（$\varepsilon$は適当な正の定数）に置き換える方法や，新しい変数$z_i (\ge 0)$とペナルティ係数$p_i (> 0)$を導入して$\sum_{j=1}^n a_{ij} x_j \ge b_i - z_i$に置き換えた上で目的関数に新たな項$+ p_i z_i$を加える方法などがある．
また，利用者の持つ先験的な知識を利用して容易に実行可能解を求められるならば，利用者が持つアルゴリズムで求めた実行可能解を初期暫定解として整数計画ソルバーに与えることも可能である．

次に，(ii)線形計画緩和問題から得られる最適値の下界値が悪い場合を考える．
図\ref{fig:polyhedron}に示すように，線形計画緩和問題の実行可能領域は，整数計画問題の実行可能解となる整数格子点のみを含む凸多面体となるため，同じ整数計画問題に対して線形計画緩和問題の最適値が異なる複数の定式化が存在する．
つまり，整数計画問題では最適値の良い下界値が得られる強い定式化と，そうでない弱い定式化が存在する．
ちなみに，最も強い定式化は整数計画問題の実行可能解全体の凸包を記述することであるが，凸包を記述する全ての制約式を求めることは，最悪の場合には全ての実行可能解を列挙することに他ならないため現実的な方法ではない．
たしかに，制約式の数が少ない定式化の方が見栄えも良く，分枝限定法を適用した際にも各部分問題における線形計画緩和問題の求解に要する計算時間も短くなるように思われる．
しかし，最適値の上界値と下界値の差が広がれば分枝限定法で生成される部分問題の数は急激に増加するため，安易に制約式を減らすべきではない．
一方で，多くの整数計画ソルバーは冗長な制約式を前処理で除去するため，制約式が多少増えても計算時間にはあまり影響しない場合が多い．
例えば，与えられた現実問題を完全単摸行列に近い形の制約行列を持つ整数計画問題に定式化できる場合は，線形計画緩和問題から良い下界値が得られることが期待できる．

\begin{figure}[t]
\begin{center}
\includegraphics{21-5ia4f11.eps}
\end{center}
\caption{整数計画問題の実行可能解を含む凸多面体の例}
\label{fig:polyhedron}
\end{figure}

最後に，(iii)多数の最適解を持つ場合を考える．
最適値の上界値と下界値の差が小さいにも関わらず，いつまで待っても整数計画ソルバーの計算が終了しないならば，整数計画問題が多数の最適解を持っている可能性がある．
このような場合は，目的関数や制約式を変更して最適解の数を減らす方法がある．
例えば，\ref{sec:fixed-cost}節で紹介したビンパッキング問題の定式化では，使用する箱の数が最小であれば使用する箱の組合せは何でも構わないため多数の最適解が生じる．
そこで，必ず番号の小さい箱から順に使用するという制約式を追加すると最適解の数を減らすことができる．
\begin{equation}
\begin{array}{ll}
y_i \ge y_{i+1}, & i=1,\dots,n-1.
\end{array}
\end{equation}
また，\ref{sec:linear-equations}節で紹介した多目的最適化問題の定式化では，1変数からなる目的関数を持つ整数計画問題に変換するとやはり多数の最適解が生じる．
このような場合は，いつまで待っても整数計画ソルバーの計算が終了しないならば線形和を最小化する定式化に変更した方が良い．
また，目的関数$\sum_{j=1}^n c_j x_j$の各項の係数$c_j$が全て同じ値を取る場合も多数の最適解が生じ易いため，可能ならば各項の係数$c_j$をいろいろな値に変えて最適解の数を絞り込む方が良い．

最後に，いつまで待っても整数計画ソルバーの計算が終了しない場合には，最適解を求めることを諦めるのも1つの手である．
整数計画ソルバーは探索中に得られた暫定解を保持しているので，与えられた計算時間内に最適解が求められなくても良い実行可能解が求まれば，利用者によっては十分に満足できる場合も多い．
また，整数計画ソルバーは線形計画緩和問題を解いて得られる最適値の下界値も保持しているので，事後にはなるが得られた暫定解の精度も評価できる．
実際に，整数計画ソルバーは近似解法としても高性能であり，メタヒューリスティクスなどの発見的解法を利用もしくは開発する前に，整数計画ソルバーで良い実行可能解が得られるかどうか確認するべきである．
最適解が求められない場合の対処法については\cite{MiyashiroR-Web,MiyashiroR2006}が詳しい．


\section{おわりに}
\label{sec:conclusion}

本論文では，数理最適化の専門家ではない利用者が，現実問題の解決に取り組む際に必要となる整数計画ソルバーの基本的な利用法と定式化の技法を解説した．
整数計画ソルバーの解説は本論文が初めてではなく，オペレーションズ・リサーチの分野では同じ趣旨の解説がいくつか発表されている\cite{FujieT2012,MiyashiroR2006,MiyashiroR2012}．
また，現実問題を線形計画問題や整数計画問題に定式化する技法については\cite{KuboM2012,WilliamsHP2013}が詳しい．
これらの文献は，本論文では取り上げていない多くの内容を含んでいるので，整数計画ソルバーに興味を持たれた読者にはぜひ一読をお勧めする．



\bibliographystyle{jnlpbbl_1.5}
\begin{thebibliography}{}

\bibitem[\protect\BCAY{Achterberg \BBA\ Wunderling}{Achterberg \BBA\
  Wunderling}{2013}]{AchterbergT2013}
Achterberg, T.\BBACOMMA\ \BBA\ Wunderling, R. \BBOP 2013\BBCP.
\newblock \BBOQ Mixed Integer Programming: Analyzing 12 Years of
  Progress.\BBCQ\
\newblock In J{\"u}nger, M.\BBACOMMA\ \BBA\ Reinelt, G.\BEDS, {\Bem Facets of
  Combinatorial Optimization---Festschrift for Martin Gr{\"o}tschel},
  \mbox{\BPGS\ 449--481}. Springer.

\bibitem[\protect\BCAY{Ashford}{Ashford}{2007}]{AshfordR2007}
Ashford, R. \BBOP 2007\BBCP.
\newblock \BBOQ Mixed Integer Programming: A Historical Perspective with
  Xpress-MP.\BBCQ\
\newblock {\Bem Annals of Operations Research}, {\Bbf 149}, \mbox{\BPGS\
  5--17}.

\bibitem[\protect\BCAY{Atamt{\"u}rk \BBA\ Savelsbergh}{Atamt{\"u}rk \BBA\
  Savelsbergh}{2005}]{AtamturkA2005}
Atamt{\"u}rk, A.\BBACOMMA\ \BBA\ Savelsbergh, M.~W.~P. \BBOP 2005\BBCP.
\newblock \BBOQ Integer-programming software systems.\BBCQ\
\newblock {\Bem Annals of Operations Research}, {\Bbf 140}, \mbox{\BPGS\
  67--124}.

\bibitem[\protect\BCAY{Berthold, Gleixner, Heinz, Koch, \BBA\ Shinano}{Berthold
  et~al.}{2012}]{BertholdT2012}
Berthold, T., Gleixner, A.~M., Heinz, S., Koch, T., \BBA\ Shinano, Y. \BBOP
  2012\BBCP.
\newblock SCIP Optimization
  Suiteを利用した混合整数（線形／非線形）計画問題の解法.\
\newblock \JTR, Zuse Institute Berlin.

\bibitem[\protect\BCAY{Bixby \BBA\ Rothberg}{Bixby \BBA\
  Rothberg}{2007}]{BixbyR2007}
Bixby, R.\BBACOMMA\ \BBA\ Rothberg, E. \BBOP 2007\BBCP.
\newblock \BBOQ Progress in Computational Mixed Integer Programming---A Look
  Back from the Other Side of the Tipping Point.\BBCQ\
\newblock {\Bem Annals of Operations Research}, {\Bbf 149}, \mbox{\BPGS\
  37--41}.

\bibitem[\protect\BCAY{Charnes \BBA\ Cooper}{Charnes \BBA\
  Cooper}{1961}]{CharnesA1961}
Charnes, A.\BBACOMMA\ \BBA\ Cooper, W.~W. \BBOP 1961\BBCP.
\newblock {\Bem Management Models and Industrial Applications of Linear
  Programming}.
\newblock John Wiley \& Sons.

\bibitem[\protect\BCAY{Chvatal}{Chvatal}{1983}]{ChvatalV1983}
Chvatal, V. \BBOP 1983\BBCP.
\newblock {\Bem Linear Programming}.
\newblock W.H.Freeman \& Company.

\bibitem[\protect\BCAY{DeNero \BBA\ Klein}{DeNero \BBA\
  Klein}{2008}]{DeNeroJ2008}
DeNero, J.\BBACOMMA\ \BBA\ Klein, D. \BBOP 2008\BBCP.
\newblock \BBOQ The Complexity of Phrase Alignment Problems.\BBCQ\
\newblock In {\Bem Proceedings of 46th Annual Meeting of the Association for
  Computational Linguistics: Human Language Technology, Short Papers},
  \mbox{\BPGS\ 25--28}.

\bibitem[\protect\BCAY{Filatova \BBA\ Hatzivassiloglou}{Filatova \BBA\
  Hatzivassiloglou}{2004}]{FilatovaE2004}
Filatova, E.\BBACOMMA\ \BBA\ Hatzivassiloglou, V. \BBOP 2004\BBCP.
\newblock \BBOQ A Formal Model for Information Selection in Multi-Sentence Text
  Extraction.\BBCQ\
\newblock In {\Bem Proceedings of Coling 2004}, \mbox{\BPGS\ 397--403}.

\bibitem[\protect\BCAY{Fourer}{Fourer}{2013}]{FourerR2013}
Fourer, R. \BBOP 2013\BBCP.
\newblock \BBOQ Linear programming.\BBCQ\
\newblock {\Bem OR/MS Today}, {\Bbf 40}  (3), \mbox{\BPGS\ 40--53}.

\bibitem[\protect\BCAY{藤江}{藤江}{2011}]{FujieT2011}
藤江哲也 \BBOP 2011\BBCP.
\newblock 最近の混合整数計画ソルバーの進展について.\
\newblock \Jem{オペレーションズ・リサーチ}, {\Bbf 56}  (5), \mbox{\BPGS\
  263--268}.

\bibitem[\protect\BCAY{藤江}{藤江}{2012}]{FujieT2012}
藤江哲也 \BBOP 2012\BBCP.
\newblock 整数計画法による定式化入門.\
\newblock \Jem{オペレーションズ・リサーチ}, {\Bbf 57}  (4), \mbox{\BPGS\
  190--197}.

\bibitem[\protect\BCAY{Gillick \BBA\ Favre}{Gillick \BBA\
  Favre}{2009}]{GillickD2009}
Gillick, D.\BBACOMMA\ \BBA\ Favre, B. \BBOP 2009\BBCP.
\newblock \BBOQ A Scalable Global Model for Summarization.\BBCQ\
\newblock In {\Bem Proceedings of the Workshop on Integer Programming for
  Natural Language Processing at the North American Chapter of the Association
  for Computational Linguistics: Human Language Technologies}, \mbox{\BPGS\
  10--18}.

\bibitem[\protect\BCAY{平尾\JBA 鈴木\JBA 磯崎}{平尾 \Jetal }{2009}]{HiraoT2009}
平尾努\JBA 鈴木潤\JBA 磯崎秀樹 \BBOP 2009\BBCP.
\newblock 最適化問題としての文書要約.\
\newblock \Jem{人工知能学会論文誌}, {\Bbf 24}  (2), \mbox{\BPGS\ 223--231}.

\bibitem[\protect\BCAY{Kellerer, Pferschy, \BBA\ Pisinger}{Kellerer
  et~al.}{2004}]{KellererH2004}
Kellerer, H., Pferschy, U., \BBA\ Pisinger, D. \BBOP 2004\BBCP.
\newblock {\Bem Knapsack Problems}.
\newblock Springer.

\bibitem[\protect\BCAY{Koch, Achterberg, Andersen, Bastert, Berthold, Bixby,
  Danna, Gamrath, Gleixner, Heinz, Lodi, Mittelmann, Ralphs, Salvagnin, Steffy,
  \BBA\ Wolter}{Koch et~al.}{2011}]{KochT2011}
Koch, T., Achterberg, T., Andersen, E., Bastert, O., Berthold, T., Bixby,
  R.~E., Danna, E., Gamrath, G., Gleixner, A.~M., Heinz, S., Lodi, A.,
  Mittelmann, H., Ralphs, T., Salvagnin, D., Steffy, D.~E., \BBA\ Wolter, K.
  \BBOP 2011\BBCP.
\newblock \BBOQ MIPLIB2010: Mixed Integer Programming Library version 5.\BBCQ\
\newblock {\Bem Mathematical Programming Computation}, {\Bbf 3}  (2),
  \mbox{\BPGS\ 103--163}.

\bibitem[\protect\BCAY{今野}{今野}{1982}]{KonnoH1982}
今野浩 \BBOP 1982\BBCP.
\newblock \Jem{整数計画法と組合せ最適化}.
\newblock 日科技連.

\bibitem[\protect\BCAY{今野}{今野}{1987}]{KonnoH1987}
今野浩 \BBOP 1987\BBCP.
\newblock \Jem{線形計画法}.
\newblock 日科技連.

\bibitem[\protect\BCAY{今野}{今野}{2005}]{KonnoH2005}
今野浩 \BBOP 2005\BBCP.
\newblock \Jem{役に立つ1次式---整数計画法「気まぐれな王女」の50年}.
\newblock 日本評論社.

\bibitem[\protect\BCAY{今野}{今野}{2014}]{KonnoH2014}
今野浩 \BBOP 2014\BBCP.
\newblock \Jem{ヒラノ教授の線形計画法物語}.
\newblock 岩波書店.

\bibitem[\protect\BCAY{Korte \BBA\ Vygen}{Korte \BBA\ Vygen}{2012}]{KorteB2012}
Korte, B.\BBACOMMA\ \BBA\ Vygen, J. \BBOP 2012\BBCP.
\newblock {\Bem Combinatorial Optimization: Theory and Algorithms (5th
  edition)}.
\newblock Springer.

\bibitem[\protect\BCAY{越川\JBA 内山\JBA 梅谷\JBA 松井\JBA 山本}{越川 \Jetal
  }{2010}]{KoshikawaM2010}
越川満\JBA 内山将夫\JBA 梅谷俊治\JBA 松井知己\JBA 山本幹雄 \BBOP 2010\BBCP.
\newblock 統計的機械翻訳におけるフレーズ対応最適化を利用した N-best
  翻訳候補のリランキング.\
\newblock \Jem{情報処理学会論文誌}, {\Bbf 51}  (8).

\bibitem[\protect\BCAY{久保\JBA J.~P.\JBA 村松\JBA A.}{久保 \Jetal
  }{2012}]{KuboM2012}
久保幹雄\JBA J.~P.ペドロソ\JBA 村松正和\JBA A.レイス \BBOP 2012\BBCP.
\newblock \Jem{あたらしい数理最適化 --- Python言語とGurobiで解く}.
\newblock 近代科学社.

\bibitem[\protect\BCAY{Linderoth \BBA\ Ralph}{Linderoth \BBA\
  Ralph}{2006}]{LinderothJT2006}
Linderoth, J.~T.\BBACOMMA\ \BBA\ Ralph, T.~K. \BBOP 2006\BBCP.
\newblock \BBOQ Noncommercial Software for Mixed-Integer Linear
  Programming.\BBCQ\
\newblock In Karlof, J.~K.\BED, {\Bem Integer Programming---Theory and
  Practice}, \mbox{\BPGS\ 253--303}. Taylor \& Francis.

\bibitem[\protect\BCAY{Lodi}{Lodi}{2010}]{LodiA2010}
Lodi, A. \BBOP 2010\BBCP.
\newblock \BBOQ Mixed Integer Programming Computation.\BBCQ\
\newblock In J{\"u}nger, M., Liebling, T., Naddef, D., Nemhauser, G.,
  Pulleyblank, W., Reinelt, G., Rinaldi, G., \BBA\ Wolsey, L.\BEDS, {\Bem 50
  Years of Integer Programming 1958-2008}, \mbox{\BPGS\ 619--645}. Springer.

\bibitem[\protect\BCAY{Ma}{Ma}{2006}]{MaX2006}
Ma, X. \BBOP 2006\BBCP.
\newblock \BBOQ Champollion: A Robust Parallel Text Sentence Aligner.\BBCQ\
\newblock In {\Bem Proceedings of 5th International Conference on Language
  Resources and Evaluation}, \mbox{\BPGS\ 489--492}.

\bibitem[\protect\BCAY{McDonald}{McDonald}{2007}]{McDonaldR2007}
McDonald, R. \BBOP 2007\BBCP.
\newblock \BBOQ A Study of Global Inference Algorithms in Multi-Document
  Summarization.\BBCQ\
\newblock In {\Bem Proceedings of the European Conference on Information
  Retrieval (ECIR)}, \mbox{\BPGS\ 557--564}.

\bibitem[\protect\BCAY{Mittelmann}{Mittelmann}{2014}]{MittelmannHD-Web}
Mittelmann, H.~D. \BBOP 2014\BBCP.
\newblock \BBOQ Decision Tree for Optimization Software.\BBCQ\
  \texttt{http://\linebreak[2]plato.\linebreak[2]asu.\linebreak[2]edu/\linebreak[2]guide.html}.

\bibitem[\protect\BCAY{宮代}{宮代}{2012}]{MiyashiroR2012}
宮代隆平 \BBOP 2012\BBCP.
\newblock 整数計画ソルバー入門.\
\newblock \Jem{オペレーションズ・リサーチ}, {\Bbf 57}  (4), \mbox{\BPGS\
  183--189}.

\bibitem[\protect\BCAY{宮代}{宮代}{2014}]{MiyashiroR-Web}
宮代隆平 \BBOP 2014\BBCP.
\newblock 整数計画法メモ.\
  \texttt{http://www.tuat.ac.jp/{\textasciitilde}miya/ipmemo.html}.

\bibitem[\protect\BCAY{宮代\JBA 松井}{宮代\JBA 松井}{2006}]{MiyashiroR2006}
宮代隆平\JBA 松井知己 \BBOP 2006\BBCP.
\newblock ここまで解ける整数計画.\
\newblock \Jem{システム／制御／情報}, {\Bbf 50}  (9), \mbox{\BPGS\ 363--368}.

\bibitem[\protect\BCAY{Moore}{Moore}{2002}]{MooreRC2002}
Moore, R.~C. \BBOP 2002\BBCP.
\newblock \BBOQ Fast and Accurate Sentence Alignment of Bilingual
  Corpora.\BBCQ\
\newblock In {\Bem Machine Translation: From Research to Real Users},
  \mbox{\BPGS\ 135--144}. Springer.

\bibitem[\protect\BCAY{Nemhauser \BBA\ Wolsey}{Nemhauser \BBA\
  Wolsey}{1988}]{NemhauserGL1988}
Nemhauser, G.~L.\BBACOMMA\ \BBA\ Wolsey, L.~A. \BBOP 1988\BBCP.
\newblock {\Bem Integer and Combinatorial Optimization}.
\newblock John Wiley \& Sons.

\bibitem[\protect\BCAY{西川\JBA 平尾\JBA 牧野\JBA 松尾\JBA 松本}{西川 \Jetal
  }{2013}]{NishikawaH2013}
西川仁\JBA 平尾努\JBA 牧野俊朗\JBA 松尾義博\JBA 松本裕治 \BBOP 2013\BBCP.
\newblock 冗長性制約付きナップサック問題に基づく複数文書要約モデル.\
\newblock \Jem{自然言語処理}, {\Bbf 20}  (4), \mbox{\BPGS\ 586--612}.

\bibitem[\protect\BCAY{西野\JBA 平尾\JBA 永田}{西野 \Jetal
  }{2013}]{NishinoM2013}
西野正彬\JBA 平尾努\JBA 永田昌明 \BBOP 2013\BBCP.
\newblock 集合パッキング問題に基づく文アラインメントのモデル化.\
\newblock \Jem{言語処理学会第 19 回年次大会発表論文集}, \mbox{\BPGS\ 932--935}.

\bibitem[\protect\BCAY{西野\JBA 鈴木\JBA 梅谷\JBA 平尾\JBA 永田}{西野 \Jetal
  }{2014}]{NishinoM2014}
西野正彬\JBA 鈴木潤\JBA 梅谷俊治\JBA 平尾努\JBA 永田昌明 \BBOP 2014\BBCP.
\newblock 列生成法を用いた高速なアラインメント.\
\newblock \Jem{言語処理学会第20回年次大会発表論文集}, \mbox{\BPGS\ 364--367}.

\bibitem[\protect\BCAY{Schrijver}{Schrijver}{1998}]{SchrijverA1998}
Schrijver, A. \BBOP 1998\BBCP.
\newblock {\Bem Theory of Linear and Integer Programming}.
\newblock John Wiley \& Sons.

\bibitem[\protect\BCAY{高村\JBA 奥村}{高村\JBA 奥村}{2008}]{TakamuraH2008}
高村大也\JBA 奥村学 \BBOP 2008\BBCP.
\newblock 最大被覆問題とその変種による文書要約モデル.\
\newblock \Jem{人工知能学会論文誌}, {\Bbf 23}  (6), \mbox{\BPGS\ 505--513}.

\bibitem[\protect\BCAY{高村\JBA 奥村}{高村\JBA 奥村}{2010}]{TakamuraH2010}
高村大也\JBA 奥村学 \BBOP 2010\BBCP.
\newblock 施設配置問題による文書要約のモデル化.\
\newblock \Jem{人工知能学会論文誌}, {\Bbf 25}  (1), \mbox{\BPGS\ 174--182}.

\bibitem[\protect\BCAY{Williams}{Williams}{2013}]{WilliamsHP2013}
Williams, H.~P. \BBOP 2013\BBCP.
\newblock {\Bem Model Building in Mathematical Programming (5th edition)}.
\newblock John Wiley \& Sons.

\bibitem[\protect\BCAY{Wolsey}{Wolsey}{1998}]{WolseyLA1998}
Wolsey, L.~A. \BBOP 1998\BBCP.
\newblock {\Bem Integer Programming}.
\newblock John Wiley \& Sons.

\end{thebibliography}

\begin{biography}
\bioauthor{梅谷俊治}{
1998年大阪大学大学院基礎工学研究科博士前期課程修了．
2002年京都大学大学院情報学研究科博士後期課程指導認定退学．
豊田工業大学助手，電気通信大学助教を経て，2008年より大阪大学大学院情報科学研究科准教授，現在に至る．博士（情報学）．
専門は組合せ最適化，アルゴリズム．
日本オペレーションズ・リサーチ学会，情報処理学会，人工知能学会，INFORMS，MOS各会員．
}
\end{biography}

\biodate



\end{document}
