クラス編成問題 • • • • • • 総合講義のシステム 定式化:和の最大費用流 一番を100点に固定 やっぱり 7:3 に固定 情報科学演習第3 前期後期の組み分け 事の始まり:総合科目のクラス分け ・ 総合科目では、東工大の1年生全員をいくつかのクラス に分ける ・ 学生がどの講義を受けたいか、という希望を取る (第3希望まで調べる) ・ それぞれの講義には定員がある なるべく学生の希望が多くかなうようにクラス編成したい 歴史的な方法 1. 各学生の第1,2,3希望、を取り、それを札に書く 2. 各講義の紙を用意する 3. 定員の条件を満たすよに、エイヤと札を講義の紙に貼る 4. (うまく)希望どおりに分かれていたら終了 5. うんうんと考えて、札を入れ替え、 4 に戻る 手馴れた教授でも1日以上かかったそうな... マッチング問題として見ると ・ まずは簡単のため、3つの希望のうち1つがかなえば良い、 として考えて、希望がかなう学生の数を最大にする たんなる最大マッチング問題 ・最大マッチングを求めるアルゴリズムを使うと、 講義×定員 講義数を m、学生の人数を n として O(n5/2/m) の時間で解ける ・ 学生数が n=2000 、講義数が m =10 でも、 n5/2/m ≒ 200,000,000 (2億) 最近のパソコンなら、1,2分で解けそう 学生 最適マッチング ・ グラフ G = (V,E) と、枝の重み w:E →R が与えられたとき、 互いに隣接しない枝集合で、枝重み和が最大(最小)なもの を求めよ という問題が最適マッチング問題 ・ 最適マッチングは、O(|V||E|) 時間で求められる 最大マッチング(枝数が最も多いマッチング)は、 O(|V|1/2|E|) 時間で求められる 最大重みマッチングとして見る ・ まずは簡単のため、それぞれの枝に、学生の第1,2,3希望 に応じて重みをつけて、最大重みのマッチングを求める 第1希望が優先されるようになる ・ 講義数を m、学生の人数を n とすると、 O(n3/m) の時間で解ける ・ 学生数が n=2000 、講義数が m =10 でも、 n3/m ≒ 10000,000,000 (100億) ・それでも、最近のパソコンなら、1,2時間で解けるでしょう。 割当問題として見る ・ 1つの講義に対応する頂点がたくさんあって、これがなんと も無駄が多いので、割当問題で考える ・ 各仕事(講義)を受け持つ人(学生)の上下限 それぞれの講義の最低・最高受講者数 ・ 各人(学生)が受け持つ仕事(講義)の上下限 両方とも 1 ・ 各枝のコスト 学生の希望順位に応じてつける 割当て問題のおさらい ・ それぞれの人は、同時に受け持てる仕事の上下限がある ・ それぞれの仕事は、受け持つ人の最低人数がある ・ 人 i が仕事 j を受け持つときに費用 aij がかかる ・ これらを満たす、最低コストの、 人 対 仕事の割当を見つける問題 目的関数: 制約条件: Σ aij xij li ≦ Σj=1,…,m xij ≦ ui l'j ≦ Σi=1,…,n xij ≦ u'j ・ 「単体法(シンプレックス法)で得られる最適解は、(条件の 係数が整数なら)必ず整数解になっている」 割当問題の求解時間 ・ 割当問題を線形計画のソルバーで解くときの、計算時間を 算定しよう ・ 変数の数 = 枝の数 = 学生の数×希望数 ・ 制約条件の数 = 各頂点に対して3つ、各枝に対して2つ = (講義の数 + 学生の数 × (希望数+1 ) )× 2 ・ 学生数 n=2000 、講義数 m =100 でも、 - 変数の数 = 6000 - 制約条件の数 = 16100 ・ 最近のパソコンなら、10分で解けるでしょう 実際に解いてみると ・ ほとんどの場合、全ての学生は第3志望までの講義に割り 当てられる。つまり、「第3希望までのどこかに割り当てる問 題」と考えて差し支えない。 ・ 枝重みは: 第1希望:70 第2希望:30 第3希望: 0 として、最大コストの割り当てを線形計画ソルバーで求める 何時間もかかって、そこそこの割当てしか得られなかったものが、 1時間で(ある意味で)最適・公平なものが得られるようになった 重みの自由化 ・ 重みはこれでいいのか? ・ どっちでもいいから、と適当に選んでいる学生と、熱心に 「ここに行きたい」と思っている学生が、同じ扱いなのはおかしい ・ 第1希望 + 第2希望 = 100 となるように、自由に選べるようにする 強い希望が通りやすくなる 重みの自由化 (2) ・ そのうちに、まじめに考えて希望の配点をつける人が損を するようになった ・ 楽な単位を取りたい学生が、 第1希望 100 : 第2希望 0 と書いて、無理やり配属されるように仕組むようになった 70:30 と書いた人たちより優先される 第1希望=100、第2希望=0~100 とすることにした。 ( 100 : 100 というように書けるようになる) (学生の持ち点は固定でなくなるが、どのみち、学生は100 点以内しかもらえない) 重みの自由化 (3) ・ やっぱり、楽な単位を取りたい学生が、 第1希望 100 : 第2希望 0 と書いて、無理やり配属されるように仕組むようになった やっぱり、第1希望 =70、第2希望 =30 で 固定することにした ・ 新しいルールを作ると、そのルールの抜け穴を狙う人が出 る ・ 抜け穴を狙う人がでてくると、ルールが変わる ・ 最適化は、ルールがあるところで成り立つので、 ルールの変更や、抜け穴のレベルには関与できない 理学セミナー (旧) ・ 学生が研究室2箇所に仮所属する 総合科目と違うところは、 ・ 学生は3つの希望を出す。希望順位はなし ・ 前期・後期2つに分かれていて、各学生は希望の研究室に 前期か後期どちらかに所属する ・ 授業の内容から(どの本でゼミをするか決めるため)、各研 究室の前期と後期の人数はほぼ同じであってほしい 総合科目と同じように、クラス分けを数理的に行えるか 割り当て問題として、直接解く ・ A研究室を「前期のA研究室」「後期のA研究室」と2つのク ラスに分けて考えると、うまくいきそう ・ 同じ研究室に前期と後期に所属する学生が出てくる 可能性がある ・ 「研究室の、前期と後期の学生数がほぼ同じ」 という制約が守られない この2つの問題点をどのように解決するかが鍵 2段階でクラス分けする ・ 第1フェイズで、総合科目と同じ方法で、学生を希望が通る数を 最大にして、各研究室に割り振る。前期後期は考えない ・ 第2フェイズで、各研究室の学生を、前期後期に割り振る - 各学生が、前期に1つ、後期に1つ、 研究室に割り当てられるようにする - 前期と後期の人数がほぼ同じようにする 第2フェイズをどのように解くか、が問題 2部グラフの色分け ・ 学生と所属研究室を結んだ2部グラフを作る ・ このグラフを、サイクルと極大なパスに分解する ・ それぞれのパスとサイクルを、交互に2色で塗り分ける パスの端以外の頂点では、枝2本が2色に塗り分けられる ・ 塗り分けた色で、前期か後期かを決める (各枝は、学生・研究室の割当てに対応することに注意) 色分け法の正当性 ・ このグラフを、サイクルと極大なパスに分解する 学生頂点は、パスの端にならない 各研究室頂点を端とするパスは、高々1本 ・ それぞれのパスとサイクルを、交互に2色で塗り分ける 学生頂点に接続する枝は2色 研究室頂点に接続する枝は、両色同数か1つ異なる 計算時間 ・ グラフを、サイクルと極大なパスに分解する グラフ探索で、O( 枝数 +頂点数 )の時間でできる ・ それぞれのパスとサイクルを、交互に2色で塗り分ける 自明、O( 枝数 + 頂点数 )の時間でできる ※ たいした手間ではない まとめ ・ 総合科目のクラス分けは、線形計画法(割当て問題)で解 くと、すばやくできる ・ 学生の希望も、工夫すればうまく取り入れられるが、抜け 道ができてしまうようだ ・ 理学セミナー(旧)のクラス分け(前期後期がある)は、2段 階で分けるとうまくいく
© Copyright 2024 ExpyDoc