Slide 1

Slide 1 text

整数計画問題とその定式化 ⼤阪⼤学 ⼤学院情報科学研究科 梅⾕ 俊治 2020年11⽉10⽇

Slide 2

Slide 2 text

組合せ最適化問題とその応⽤事例 • 組合せ最適化問題︓最適解を含む解の集合(探索領域)が,集合, 順列,割当て,ネットワーク,論理,整数など組合せ的な構造を 持つ最適化問題. 2 多くの現実問題が組合せ最適化問題に定式化できる

Slide 3

Slide 3 text

組合せ最適化問題の難しさ • NP困難問題︓厳密な最適解を求めるのに必要な計算時間が最悪で ⼊⼒サイズの指数関数になると多くの研究者が考えている問題. • 都市をちょうど1回ずつ訪問する最短の巡回路を求める巡回セー ルスマン問題の解候補を列挙すると 通り. 3 Newsweek, July 26, 1954 PCB3038 D15112 都市数 巡回路の総数 計算時間(秒) 6 60 4.32×10-10 8 2520 3.23×10-8 10 1.81×105 3.63×10-6 15 4.36×1010 1.96 20 6.08×1016 4.87×106 約56⽇ 25 3.10×1023 3.88×1013 約122万年 30 4.42×1030 7.96×1020 約25233億年 100TFlopsのコンピュータを⽤いて 巡回路を列挙したときの計算時間 ⼤規模な巡回セールスマン問題を 解く必要が⽣じることは少なくない 組合せ最適化問題の全ての解を列挙することは⾮常に困難

Slide 4

Slide 4 text

計算困難な問題に対するアプローチ • 厳密解法と近似解法(発⾒的解法) ü 厳密解法︓最悪の場合に指数時間かかっても最適解を求める. ü 近似解法(発⾒的解法)︓現実的な計算時間で良い実⾏可能解を求める. • 汎⽤解法と専⽤解法 ü 汎⽤解法︓整数計画問題などに定式化して汎⽤ソルバーを適⽤する. ü 専⽤解法︓個々の問題の特徴を利⽤した専⽤ソルバーを開発する. 4 問題の特徴が利⽤できず⾼性能な アルゴリズムの実現が困難 アルゴリズムが適⽤可能な 範囲が狭く汎⽤性に⽋ける 多様な問題に適⽤可能な 汎⽤性の⾼いアルゴリズム 個々の問題の特徴を利⽤した ⾼性能なアルゴリズム a 整数計画問題 分枝限定法 b c d e 現実世界 a b c d e 現実世界 問題 a 問題 b 問題 e アルゴリズム a アルゴリズム b アルゴリズム e 「汎⽤的」かつ「⾼性能」なソルバーの実現は困難

Slide 5

Slide 5 text

現実問題に対するアプローチ • 汎⽤の数理最適化ソルバーを利⽤ ü 現実問題が既知の最適化問題と完全に⼀致することは稀. ü 専⽤ソルバーが利⽤可能な状態で公開されていることは稀. ü 整数計画問題に定式化して汎⽤の数理最適化ソルバーを適⽤する. ü 現実的な計算時間で解ける問題の規模が限られる場合が多い. • 専⽤アルゴリズムを開発 ü 汎⽤の数理最適化ソルバーでは解けない⼤規模・複雑な問題. ü 問題構造を上⼿く利⽤すれば効率的なアルゴリズムが開発可能. ü ⼗分な知識・技術と開発期間が必要. 5 a 整数計画問題 b c d e 現実世界 a b c d e 現実世界 問題 b 専⽤アルゴリズム 汎⽤の数理最適化 ソルバー 最適化問題の定式化などの⼯夫で解決できることも多い

Slide 6

Slide 6 text

現実問題に対するアプローチ • ⼀度も修正なしに妥当な最適化モデルが得られることはまずない. • アルゴリズムの開発・修正には⾮常に⼿間がかかる. • 妥当な最適化モデルが得られるまでは,汎⽤の数理最適化ソルバーを ⽤いて,アルゴリズムの開発・修正に要する⼿間を削減する. 6 ソルバーの適⽤ 現 実 問 題 最 適 化 モ デ ル ( 近 似 ) 最 適 解 解 決 策 定式化 分析・検証 最適化モデルの修正 アルゴリズムの 開発と適⽤ 現 実 問 題 最 適 化 モ デ ル ( 近 似 ) 最 適 解 解 決 策 定式化 分析・検証 汎⽤の数理最適化ソルバーを⽤いて検討した後に 専⽤アルゴリズムの開発を検討する

Slide 7

Slide 7 text

線形計画問題と整数計画問題 • 線形計画問題(Linear Program; LP) ü 線形制約の下で線形関数を最⼩化(最⼤化) • 整数計画問題(Integer Program; IP) ü 広義︓変数に整数条件の付いた最適化問題 ü 狭義︓線形計画問題+変数の整数条件 7 連続変数と整数変数が混 在する問題は,混合整数 計画問題(Mixed Integer Program; MIP) Jは整数変数の添字集合 ઢܗܭը໰୊ͷ࣮ߦՄೳྖҬ ੔਺ܭը໰୊ͷ࣮ߦՄೳྖҬ ࠞ߹੔਺ܭը໰୊ͷ࣮ߦՄೳྖҬ

Slide 8

Slide 8 text

整数計画ソルバーの現状 • 商⽤ソルバー ü Gurobi Optimizer (Gurobi Optimization) ü IBM ILOG CPLEX (IBM) ü FICO Xpress Optimization (FICO Corporation) ü Numerical Optimizer (NTTデータ数理システム) ü その他いろいろ. • ⾮商⽤ソルバー ü SCIP, CBC, GLPK, lp_solve, その他いろいろ. • 商⽤・⾮商⽤ソルバー性能の現状 ü 線形計画問題︓商⽤ ⾮商⽤ ü 整数計画問題︓商⽤ ⾮商⽤ 8 ⾮線形な整数計画問題にも対応可能な整数計画ソルバーも現れつつあるが,線形の整数計画問題に ⽐べると効率良く解ける問題の規模は⾮常に⼩さい. 整数計画を含めた最適化ソルバー全般は,H. D. Mittelmannの Decision Tree for Optimization Softwareが詳しい. (http://plato.asu.edu/guide.html)

Slide 9

Slide 9 text

整数計画ソルバーの現状 • 宮代隆平,ここまで解ける整数計画―近年の発展― (2008) • 整数計画ソルバーを途中で⽌めても,暫定解が取得できるので, 整数計画ソルバーを近似解法として利⽤することが多い. • 下界を利⽤すれば暫定解の精度も事後的に評価できることもある. 9 整数計画問題を解くソルバーの進歩は著しく「15年間で100万倍⾼速化した」 といわれる.この100万倍の内訳は,ハードウェアの⾼速化で1000倍,アル ゴリズムの⾼速化で1000倍である.この数字は数年前に⾔われていたもので あり,現在では「20年間で1000万倍(=3000倍×3000倍)」と⾔っても過⾔ ではない. (中略) どのぐらいの規模の問題を解けるのだろうか︖⼀概に⾔うことはできないが, 個⼈的には以下のような感覚を持っている. ü 変数が1000個未満︓何も考えずにソルバーで解かせる. ü 変数が5000固程度︓おそらく解ける. ü 変数が10000個程度︓最適性の証明が難しいこともある. ü 変数が50000個程度︓問題が簡単なら解ける. 個⼈⽤PCを利⽤ 整数計画問題の難しさは必ずしも⼊⼒サイズに⽐例しないので,⼩規模でも極めて難問であるという事 例は少なくない.

Slide 10

Slide 10 text

整数計画ソルバーの利⽤法 • lp_solve, GLPKなど数多くの⾮商⽤ソルバーが公開されている. • 多くの線形計画ソルバーはMPS形式とLP形式で記述された⼊⼒ ファイルを読み込める. • その他にもAMPL,GAMSなどのモデリング⾔語も知られている. • 多くの商⽤ソルバーと⼀部の⾮商⽤ソルバーは,C, C++, Java, Matlab, Python, Excelなどのインターフェースを持つ. • Pulp, Google OR-Toolsなどサードパーティによるインター フェースもある. 10 minimize 3 x1 + 4 x2 + 2 x3 subject to c1: 2 x1 <= 4 c2: x1 + 2 x3 <= 8 c3: 3 x2 + x3 <= 6 end 線形計画問題をLP形式で記述した例

Slide 11

Slide 11 text

整数計画ソルバーの利⽤法 • LP形式は⽂法が平易で可読性が⾼く,多くの整数計画ソルバーが 対応しているが,配列のように変数をまとめて扱う機能がない. • ⼤規模な問題例を扱いたい場合には, ü LP形式のファイルを出⼒するプログラムを作成 → 多くの線形計画ソルバーが使えるので保守性が⾼い ü モデリング⾔語を利⽤ → プログラムを書くようにモデルを書ける → 多くの線形計画ソルバーで使える標準的なモデリング⾔語がない ü インターフェースを利⽤ → 線形計画ソルバーを繰返し呼出すなど⼩回りが利く → インターフェースに依存するので保守性が低い 11 for(i = 0; i < 10; i++){ printf("+ x%d ",i); } printf("<= 3¥n"); + x0 + x1 + x2 + ... + x9 <= 3 sum(i in 0..9)(x[i]) <= 3

Slide 12

Slide 12 text

整数計画ソルバーの利⽤法 • ⾮商⽤ソルバーでは最も⾼速なものの⼀つ(いくつかの商⽤ソル バーよりも⾼速)であるSCIPを例に⼿順を⽰す. • SCIPのウェブサイト(https://www.scipopt.org/)から実⾏ファイ ルをダウンロード解きたい整数計画(線形計画)問題をLP形式で記述 したテキストファイルを⽤意する(hogehoge.lpとする) • SCIPを起動するとコマンド⼊⼒待ちとなるので,hogehoge.lpの 読み込み,最適化開始,解の出⼒のコマンドを順に⼊⼒する. 12 SCIP> read hogehoge.lp SCIP> optimize SCIP> write solution hogehoge.sol ←⼊⼒データの読み込み ←最適化の開始 ←解の出⼒ アカデミックユーザのみ無償利⽤可能ですが,ビジネスユーザでも評価のみの利⽤であれば無償で利⽤ 可能な場合もあるようです(要確認). SCIPの使⽤法の詳しい使⽤⽅法については以下の⽂献が詳しい. 宮代隆平,整数計画ソルバー⼊⾨,オペレーションズ・リサーチ,57(2012),183-189. T.Berthold, A.M.Gleixner, S.Heinz, T.Koch, 品野勇治, SCIP Optimization Suite を利⽤した 混合整数 (線形/⾮線形) 計画問題の解法, ZIB-Report 12-24, 2012, http://opus4.kobv.de/opus4-zib/frontdoor/index/index/docId/1559/

Slide 13

Slide 13 text

整数計画問題に定式化する • 離散的な状態の切り替えを記述するために離散変数を導⼊する. ü 集合,順序,割当,グラフ,論理などを記述する. ü ⼈数,台数,個数などデータの属性が整数値だからと整数変数を⽤ いる定式化が良いとは限らない. ü 変数の値が⽐較的⼤きな値を取る場合は連続変数として扱っても問 題ないことが多い. • 整数変数より{0,1}の2値変数で事⾜りることが多い. ü 数を表す→整数変数,状態・ラベルを表す→2値変数 ü 例えば,4つの状態・ラベルを切り替えたい場合は︖ 13

Slide 14

Slide 14 text

論理的な制約条件 • ナップサック問題︓1つの袋と 個の荷物が与えられる.袋に詰 込める荷物の重さ合計の上限を ,荷物 の重さを ,価値を とする.価値の合計が最⼤となる荷物の詰め合わせは︖ • 袋に詰め込める荷物は⾼々 個 • 荷物 または荷物 を詰め込む • 荷物 を詰め込むならば荷物 も詰め込む 14 荷物 の袋への詰め込み(変数)

Slide 15

Slide 15 text

論理的な制約条件 • 詰め込める荷物の数は0もしくは2 もしくは変数 を使わずに とも表せる. 15 制約条件を満たす解のみ を含む凸包を記述する

Slide 16

Slide 16 text

固定費⽤付き⽬的関数 • 取り扱う製品量と段取り替えなどの所定の作業により⽣じる固定 費⽤の両⽅を扱いたい. • 製品の⽣産量を ,単位量あたりの⽣産費を とする. • 少しでも製品を⽣産すれば初期費⽤ が⽣じる. • 総費⽤ を線形関数で表すには︖ 16 ならば

Slide 17

Slide 17 text

例︓施設配置問題 • ヶ所の候補地にいくつか⼯場を建設した後に,各候補地 に建 設した⼯場の⽣産量 を超えない範囲で,各顧客 の需要量 を 満たすように製品を輸送したい. • 候補地 の⼯場の建設費を ,候補地 に建設した⼯場から顧客 への単位量あたりの輸送費を とするとき,⼯場の建設費と輸送 費の合計が最⼩となる候補地の選択と輸送計画は︖ 17 候補地 から顧客 への輸送量(変数) 候補地 に⼯場を建設(変数)

Slide 18

Slide 18 text

例︓ビンパッキング問題 • ⼗分な数の箱と 個の荷物が与えられる.箱に詰め込める荷物の 重さの合計の上限を ,荷物 の重さを とする. • 使⽤する箱の数を最⼩にする荷物の詰め込みは︖ 18 箱 を利⽤する(変数) 荷物 を箱 に詰め込む(変数) ちなみに,ビン(bin)は⼤箱の意味であって瓶ではありません.

Slide 19

Slide 19 text

離接した制約条件 • 通常の最適化問題では全ての制約条件を満たす解を求める. • 本の制約条件のうち少なくとも 本の制約条件を満たすことを 求められる場合も少なくない. • これは離接した制約条件と呼ばれ,選択や順序付けなどの組合せ 的な制約条件を表す場合に⽤いられる. 19 8 > > > > > > > > < > > > > > > > > : n X j=1 a1j xj  b1 + M(1 y1 ), n X j=1 a2j xj  b2 + M(1 y2 ), y1 + y2 = 1, y1 , y2 2 {0, 1}. and ではなく or は⼗分に⼤きな定数 制約条件の実質的な 有無を表す0-1変数

Slide 20

Slide 20 text

例︓1機械スケジューリング問題 • 個の仕事を処理する1台の機械が与えられる.仕事 の処理時間 を ,納期を とする. • 機械は2個以上の仕事を同時に処理できず,中断もできないものと する.全ての仕事の納期遅れの合計を最⼩にする仕事の処理順は︖ 20 ࣌ࠁ 仕事 の開始時刻(変数) 仕事 が仕事 に先⾏する(変数) 線形関数ではない は⼗分に⼤きな定数

Slide 21

Slide 21 text

例︓1機械スケジューリング問題 • 個の仕事を処理する1台の機械が与えられる.仕事 の処理時間 を ,納期を とする. • 機械は2個以上の仕事を同時に処理できず,中断もできないものと する.全ての仕事の納期遅れの合計を最⼩にする仕事の処理順は︖ 21 ࣌ࠁ 仕事 の開始時刻(変数) 仕事 が仕事 に先⾏する(変数) 線形関数に書き換え は⼗分に⼤きな定数

Slide 22

Slide 22 text

例︓⻑⽅形詰込み問題 • 幅 が固定で⼗分な⾼さがある⻑⽅形の容器と 個の荷物が与え られる.各荷物 の幅を ⾼さを とする. • 全ての荷物を互いに重ならないように容器内に配置する.必要な 容器の⾼さ を最⼩にする荷物の配置は︖ 22

Slide 23

Slide 23 text

例︓⻑⽅形詰込み問題 • 荷物 の左下隅の座標を とする. • 制約条件1︓荷物 を容器内に配置する. • 制約条件2︓荷物 は互いに重ならない. 23

Slide 24

Slide 24 text

例︓⻑⽅形詰込み問題 • 荷物 が荷物 の左側,右側,下側,上側にあるならば1,そうで なければ0の値を取る変数 を導⼊する. 24 は⼗分に⼤きな定数

Slide 25

Slide 25 text

⾮凸な⾮線形関数の近似 • 分離可能で⾮凸な⾮線形関数の最⼩化問題を区分線形関数に近似する. • 区分線形関数 上の点は はいずれかの線分上にある. • を結ぶ線分上にある点は以下の通り表せる. • これを拡張すると は以下の通り表せる. 25 ⾼々2つの隣り合う が正 は点が 番⽬の線分上にあることを表す

Slide 26

Slide 26 text

2値変数で表される2次計画問題 • 例として2値変数からなる制約なし2次計画問題を考える. • 2値変数 の積 を考えると取り得る値の組合せは なので以下の通りに変形できる. 26

Slide 27

Slide 27 text

整数性を持つ整数計画問題 • 整数計画問題の制約⾏列 が完全単模⾏列ならば,変数 の整数条件 を緩和した線形計画問題の最適基底解は整数解になる. • 単模⾏列(unimodular matrix)︓⾏列式の値が の整数正⽅⾏列. • 完全単模⾏列(totally unimodular matrix)︓整数⾏列 の任意の正⽅ 部分⾏列 の⾏列式の値が となる. • 線形計画問題 の制約⾏列 が完全単模⾏列 かつ最適基底解 が存在すれば, は 整数⾏列なので最適基底解 は整数解となる. • 整数条件を緩和した線形計画問題に単体法を適⽤すれば元の整数計画 問題の最適解が得られる. 27 最⼤化

Slide 28

Slide 28 text

整数性を持つ整数計画問題 • 整数⾏列 の完全単模性を判定するのは簡単ではないが,いくつ かの⼗分条件が知られている*. • 任意の有向グラフの(点枝)接続⾏列は完全単模⾏列 → 最短路問題,最⼤流問題,最⼩費⽤流問題など • 2部グラフの無向グラフの(点枝)接続⾏列は完全単模⾏列 → 2部マッチング問題,割当問題など 28 多項式時間で判定可能であることは知られているが⼤きな⾏列の完全単模性を効率良く判定できるわけ ではない. M.Walter, K.Truemper, Implementation of unimodularity test, Mathematical Programming, 5 (2013), 57-73.

Slide 29

Slide 29 text

例︓最短路問題 • グラフ ,各辺 の⻑さ が与えられる. • 始点 から終点 への最短路は︖(単⼀点対最短路問題) • 最短路問題はダイクストラ法など効率的なアルゴリズムが知られて いる.しかし,現実問題では実務上の要求から⽣じる制約条件によ り,これらのアルゴリズムを適⽤できないことも少なくない. 29 辺 を通る(変数)

Slide 30

Slide 30 text

例︓割当問題 • ⼈の学⽣を 個のクラスに割り当てる.各クラス の受講者の 上限を ,各学⽣ を各クラス に割り当てたときの満⾜度を とする.学⽣の満⾜度を最⼤にするクラス編成は︖ • 割当問題はハンガリー法など効率的なアルゴリズムが知られてい る.しかし,現実問題では実務上の要求から⽣じる制約条件によ り,これらのアルゴリズムを適⽤できないことも少なくない. 30 学⽣ をクラス に割り当てる(変数) 学⽣ クラス

Slide 31

Slide 31 text

グラフの連結性 • 最⼩全域⽊問題︓グラフ ,各辺 ,の⻑さ が与えられる. • グラフ の全ての頂点をつなぐ最短の辺の部分集合 は︖ 31 最⼩全域⽊ 閉路を持つ辺集合 閉路を持つと距離の 和は最⼩にならない 全点を繋いでいない辺集合

Slide 32

Slide 32 text

グラフの連結性 • カット︓頂点集合 と をつなぐ辺集合. • 1番⽬の制約条件は,ちょうど 本の辺が選ばれることを表す. • 2番⽬の制約条件は,辺集合 が全ての頂点を連結することを表す. • 最⼩全域⽊問題はクラスカル法やプリム法など効率的なアルゴリズム が知られている.しかし,現実問題では実務上の要求から⽣じる制約 条件により,これらのアルゴリズムを適⽤できないことも少なくない. 32 辺 は⽊に含まれる(変数) 制約条件が 本と膨⼤な数になるため,その求解には制約条件を逐次的に追加する切除平⾯法が 必要になる. カットに含まれる辺 を少なくとも1本選ぶ

Slide 33

Slide 33 text

グラフの連結性 • グラフ を有向グラフ に変形する. • 適当な頂点 を選び根とする. • 根以外をつなぐ辺 を2本の有向辺 に置き換えて,その⻑さを とする. • 根 から頂点 にいたるまでに通る辺の本数を変数 とする. 33 辺 は⽊に含まれる(変数) 根 から頂点 までの辺数(変数) 頂点 に ⼊る辺が1本

Slide 34

Slide 34 text

例︓巡回セールスマン問題 • 都市の集合 と2都市 の距離 が与えられる. • 巡回路︓全ての都市1回ずつ訪問した後に出発した都市に戻る路. • 移動距離を最⼩にする巡回路は︖ • 1,2番⽬の制約条件は,都市 に出⼊りする辺を1本ずつ選ぶことを表す. • 3番⽬の制約条件は,部分巡回路を持たないことを表す. 34 制約条件が 本と膨⼤な数になるため,その求解には制約条件を逐次的に追加する切除平 ⾯法が必要になる. 都市 の次に都市 に 訪問する(変数)

Slide 35

Slide 35 text

例︓巡回セールスマン問題 • 適当な都市 を選び出発点とする. • 巡回路において都市 を訪問する順番を表す変数を とする. • 1,2番⽬の制約条件は,都市 に出⼊りする辺を1本ずつ選ぶことを表す. • 3番⽬の制約条件は,選ばれた辺集合が都市 を通らない閉路を持たな いことを表す. 35 都市 の次に都市 訪問する(変数) 都市 を訪問する順番(変数)

Slide 36

Slide 36 text

パターンの列挙 • 配送計画問題︓複数の⾞両を⽤いて ヵ所の顧客に荷物を配送する. 各⾞両はデポを出発していくつかの顧客を訪問した後にデポに戻る. • 1台の⾞両で配送できる経路を列挙したものを とする. 経路 が顧客 を訪問するならば とする. • 経路 の費⽤ の合計を最⼩にする全ての顧客に荷物を配送する経 路の組合せは︖ 36 顧客1 デポ 顧客2 顧客3 顧客4 顧客5 顧客6 1.5h 1.5h 1.5h 1.5h 1h 1h 1h 1h 1h 1h 1h 各列が経路に対応 経路 を選ぶ(変数)

Slide 37

Slide 37 text

整数計画問題を解く • 計算困難な最適化問題では最適値が簡単に求まらない. • 最適値の上界と下界を求めて最適値の取り得る範囲を限定する. • 緩和問題︓原問題の⼀部の制約条件を緩めた問題 ü 整数変数の整数条件を外す → 線形計画緩和計画問題 37 最 ⼩ 化 最適値 上界 下界 実⾏不可能 実⾏可能 整数計画問題 線形計画緩和問題 ⽬的関数値 線形計画緩和問題の実⾏可能領域 整数計画問題の実⾏可能領域

Slide 38

Slide 38 text

分枝限定法 • 最適化問題に対する汎⽤的な厳密解法. • 分枝操作︓実⾏可能領域を分割して部分問題を⽣成する. (緩和解が実数値を取る変数 を選んで, を追加した問題 と, を追加した問題に分割する) • 限定操作︓緩和問題から得られる下界値を⽤いて最適解が得られる⾒ 込みのない部分問題を省く. (分枝前の下界値 分枝後の下界値 ) 38 緩和解 緩和解の⽬的関数値 部分問題1の下界 部分問題2の下界 線形計画(LP)緩和問題の 最適解 LP緩和問題の 最適解

Slide 39

Slide 39 text

最適解が求まらないときは︖ • 整数計画問題は解候補を体系的に列挙する分枝カット法に基づく. • 整数計画ソルバーの計算が終了しない原因は︖ 39 ü 線形計画緩和問題の求解に多⼤な計算時間を要する → 変数から整数制約を取り除いた線形計画問題を解いても多くの計算時間 を要するならば問題の規模が⼤きすぎる → ⼊⼒データの数値の桁数が多い,数値の⼤⼩の極端な差など,数値計算 が不安定となることもある ü 限定操作が効果的に働いていない → 暫定解から得られる最適値の上界が悪い → 線形計画緩和問題の最適解から得られる最適値の下界が悪い → 多数の最適解が存在する 整数計画問題の解となる整数格⼦点のみ を含む凸多⾯体は⼀意ではない

Slide 40

Slide 40 text

参考⽂献 • 久保幹雄,J.P.ペドロソ,村松正和,A.レイス,あたらしい数理最適化 ̶ Python ⾔語とGurobiで解く,近代科学社,2012. • 藤江哲也,整数計画法による定式化⼊⾨,オペレーションズ・リサーチ,57 (2012),190-197. • 梅⾕俊治,組合せ最適化⼊⾨ ̶ 線形計画から整数計画まで,⾃然⾔語処理,21 (2014),1059-1090. • 宮代隆平,整数計画ソルバー⼊⾨,オペレーションズ・リサーチ,57 (2012), 183-190. • H.P.Williams, Model Building in Mathematical Programming (5th ed.), John Wiley & Sons, Ltd., 2013. 40