割当て問題 • 割当問題の記法・定式化 • 拡張 • 特殊ケース(マッチング) • 3種類のものを割当てる問題 割当て問題とは 端的に言えば、制約条件を満たすように、人を仕事に割り 振る問題 割当て問題(基本のもの) • それぞれの人は、できる仕事とできない仕事がある • それぞれの人は、同時に受け持てる仕事の上下限がある • それぞれの仕事は、受け持つ人の最低人数がある 担当者数 の上下限 担当仕事数 の上下限 受け持てない 割当て問題(基本のもの) これらを満たす、人 対 仕事の割当を見つける問題 また、人 i が仕事 j を受け持つときに費用 aij がかかるとす ると、総コストが最小な割り当て方を求める問題 割当て問題:記法 仕事をする人: 1,2,…,n 仕事: 1,2,…,m 人 i が仕事 j を受け持つときにかかる費用: aij 人 i が仕事 j をできる: aij < +∞ 人 i が仕事 j をできない: aij = +∞ 人 i が受け持つ仕事数の上下限: ui, li 仕事 j を受け持つ人数の上下限: u'j, l'j 割当て問題:定式化 変数: xij :人 i が仕事 j を受け持つとき 1、そうでないとき 0 目的関数: Σ aij xij 制約条件: li ≦ Σj=1,…,m xij ≦ ui l‘j ≦ Σi=1,…,n xij ≦ u'j xij ∈ { 0, 1 } 01整数計画問題になる 割当て問題:線形化 01制約を、線形緩和した線形計画を作る 目的関数: 制約条件: Σ aij xij li ≦ Σj=1,…,m xij ≦ ui l‘j ≦ Σi=1,…,n xij ≦ u'j 0 ≦ xij ≦ 1 「単体法(シンプレックス法)で得られる最適解は、かならず 01解になっている」という良い性質がある 割当て問題:拡張 • 各人が、各仕事に何時間かの時間を割く、という問題を考える xij :人 i が仕事 j に割く時間 人 i が仕事 j に割く時間の上下限: ui, li 仕事 j を必要な総時間数の上下限: u'j, l'j 目的関数: 制約条件: Σ aij xij li ≦ Σj=1,…,m xij ≦ ui l‘j ≦ Σi=1,…,n xij ≦ u'j 0 ≦ xij ≦ 最長労働時間 • この問題も「単体法(シンプレックス法)で得られる最適解は、 (条件の係数が整数なら)必ず整数解になっている」 割当て問題:拡張 (2) • 拡張した割当問題は、輸送問題の特殊ケース - 人 工場 - 仕事 小売店 という対応を考えると、 • 人 i が仕事 j を k 時間受け持つ 工場 i から小売店 j へ製品を k 個輸送する となり、そのまま輸送問題になる シンプレックス法で解いた場合、解の整数性が保障される 割当て問題:さらなる拡張 • 各個人に、それぞれの仕事の得意度のようなものがある場合 を考えよう。つまり - 人 i が仕事 j をするときの効率を fij とする (つまり、単位時間働くと仕事が fij 進むということ) - 仕事 j は、合計で lj 以上 uj 以下の働きが必要 • 仕事に関する制約条件が l’j ≦ Σi=1,…,n fij xij ≦ u’j となる。相変わらず線形計画だが、整数最適解が得られるとは 限らない • 最小費用流とは異なる問題となる (一般化フロー問題、と呼ばれる問題と、等価) 最適マッチング • グラフ G = (V,E) と、枝の重み w:E →R が与えられたとき、互 いに隣接しない枝集合で、枝重み和が最大(最小)なものを 求めよ という問題が最適マッチング問題 • 最適マッチングは、O(|V||E|) 時間で求められる • 最大マッチング(枝数が最も多いマッチング)は、 O(|V|1/2|E|) 時間で求められる 最適マッチング (2) グラフが2部グラフのとき、マッチング問題は割当問題になる • 人集合を頂点集合1に、仕事集合を頂点集合2に対応させる • 人 i が受け持つ仕事数を 0,1 に 仕事 j を受け持つ人数を 0,1 に制限する • グラフで枝がある組のコストを枝重み 枝がないところに +∞ のコストを与える 人 仕事 最適マッチングの求め方 交互パス・サイクル: マッチングの枝とそうでない枝が交互になっているもの • 交互パス・サイクルを入替ると、異なるマッチングが得られる • 2つのマッチングの対称差は、交互パス・サイクルの集合になる 定理: 枝集合が最大(重み)マッチング (本数・重みの)増加パス・サイクルがない 証明 最適マッチングの求め方 (2) 1. 空集合のマッチングからスタート 2.重みの増加する交互パス・サイクルを見つけては入替える (グラフ探索で O(|E|+|V|) 時間で見つけられる) • 毎回、枝の本数が増える交互パスの中で、最も重みが増加する ものを見つけるようにすると、極大になったところで最適になる (最大 |V| 回、O(|V||E|) 時間で見つけられる) • 最大マッチングの場合は、毎回、見つけられる だけ増加交互パスを見つけるようにすると、 最大 √|V| 回、O(√|V| |E|) 時間になる 交互パス・サイクルを見つける • マッチングの枝に頂点集合1から頂点集合2への向きを、そうで 各枝には反対の向きをつける 頂点集合1 頂点集合2 交互パス・サイクルを見つける (2) • マッチングの枝に頂点集合1から頂点集合2への向きを、そうで ない枝には反対の向きをつける 有向グラフができる 頂点集合1 頂点集合2 • 交互○○と、有向グラフの有向○○の間に対応ができる - 交互サイクル 有向サイクル - 交互パス 有向パス - 増加パス (端点がマッチング枝に接続しない)有向パス 交互パス・サイクルを見つける (3) • 交互サイクルを見つける 有向サイクルを見つければよい • 交互パスを見つける 有向パスを見つける ただし、交互パスは入れ替えてマッチングにならないものもある (パスの端点が、パスに含まれないマッチングの枝に接続してると) t 有効な交互パスを 見つけるために、 頂点 s,t と/枝を追加 s 交互パス・サイクルを見つける (4) • s から t への有向パスで、 -茶色の枝に始まり、茶色の枝で終わるもの 増加交互パス -橙の枝に始まり、橙の枝で終わるもの 減少交互パス -始まりの枝と終りの枝の色が異なるもの 増減無し交互パス t s どのタイプの交互 パスも、グラフ探 索で線形時間で 見つけられる 3種類のものを割当る • 「人と仕事」だけでなく、「人と仕事と道具」といった、3種類以 上のものを割り当てる問題を考える 人 i が仕事 j を道具 k を使って行うとき 1 となる変数 xijk 使っ て定式化する 目的関数: Σ aijk xijk 制約条件: li ≦ Σj,k xijk ≦ ui l‘j ≦ Σi,k xijk ≦ u'j l''k ≦ Σi,j xijk ≦ u''k xijk ∈ { 0, 1 } 残念ながら • xijk が0,1 でなくて良い状況なら(例えば人 i が仕事 j のために道 具 k を使って xijk 時間働く、というような場合)線形計画になる 目的関数: Σ aijk xijk 制約条件: li ≦ Σj,k xijk ≦ ui l‘j ≦ Σi,k xijk ≦ u'j l''k ≦ Σi,j xijk ≦ u''k 0 ≦ xijk ≦ 1 残念ながら、必ず整数最適解がある、というわけにはいかない しかし、いろいろな使い道がある 予備校の時間割作成 • 予備校の授業時間割を作りたい 月曜1時限 中1国語 田村 中2英語 山本 ... 月曜2時限 中1英語 鈴木 中3英語 田中 ... 火曜1時限 中2数学 加藤 中3国語 山田 ... 3種類の割当て • 教師と科目と時間の割当てが時間割である 教師 科目 時間 中1国語 月曜1時限 中1英語 月曜2時限 中2数学 火曜1時限 ・・・ ・・・ 予備校時間割の定式化 • 教師 i が授業 j を k 時限目に行うとき 1 となる変数 xijk (全部並べて、月曜の最初1時限、金曜の最後 n 時限、とする) 制約 • 教師は、行う授業の数に上下限がある • どの授業も、必ず、ちょうど 1 回(あるいは複数回)行われる • 同時に行える授業は h 個 • 教師は、同時に2つ以上の授業を行わない 予備校時間割の制約条件 • 教師 i の行う授業数 = 各 j,k について xijk を足す l ≦ Σjk xijk ≦ u for ∀i • 授業 j が行われる回数 = 各 i,k について xijk を足す Σik xijk = c for ∀j • k 時限目の授業数 = 各 i,j について xijk を足す Σij xijk ≦ h for ∀k • k 時限目に教師 i の行う授業数 = 各 j について xijk を足す Σj xijk ≦ 1 for ∀i,k 学校の時間割 • 教師(科目)とクラスと時間の割当てが時間割である 教師(科目) クラス 時間 1年A組 月曜1時限 1年B組 月曜2時限 2年A組 火曜1時限 ・・・ ・・・ 学校の時間割定式化 教師 i の授業を、クラス j が k 時限目に行うとき 1 となる変数 xijk (全部並べて、月曜の最初1時限、金曜の最後 n 時限、とする) 制約 • 教師は同時に2つの授業はできない • 各クラスはそれぞれの授業をちょうど何回かする • 各クラスは同時に2つの授業を受けない 予備校バージョンと同じように制約式が作れる 基本的な制約 教師 i の授業を、クラス j が k 時限目に行うとき 1 となる変数 xijk • 教師は同時に2つの授業はできない 0 ≦ Σj xijk ≦ 1 for ∀i,k • 各クラスは各科目のどれかの先生の授業をちょうど何回か受ける Σk,i∈C xijk = ci for ∀j • 各クラスは同時に2つの授業を受けない 0 ≦ Σj xijk ≦ 1 for ∀j,k その他の制約 • 1時間目、午後にしない授業 • 連続で行う授業の制約 • 同じ科目は、なるべく離して配置 • 同じ年度のクラスは連続して行いたい授業 などなど •以上、数理的な条件として表せるので、数理計画として解ける。 まとめ • 基本的な割り当て問題、各人が仕事に割く時間を考えた割り当 て問題は、線形計画で整数解が得られる • 仕事の能率の要素を入れても線形計画で解けるが、整数解が 得られるとは限らない • 割り当て問題の特殊ケースであるマッチング問題は簡単に解 ける • 授業の時間割作成問題は3つのものを割り当てる問題になる
© Copyright 2024 ExpyDoc