ゼミ配属を安定マッチングで! スクリプトで自動計算

日本の大学の多くは,特定の研究室に所属して卒論を仕上げます。どこの研究室に配属されるかは重要な問題です。
双方が良いな,と思っている組み合わせをできるだけ増やしたい。そして,公平で変な駆け引きをしなくて済むような方法がいいですよね。

そこで「安定マッチング」(stable matching)という組み合わせを求めることにします。

ここでの「安定マッチング」とは,「自分が入れる研究室の中で,最も希望順位の高いゼミに配属されている状態」です。これを導き出すことができれば「あっちの研究室に希望出しておけば入れたのにな・・・」なんてことが起きません。

これは別名「安定結婚問題」とも言われます。

この安定マッチングをを導く計算アルゴリズムがあります。gale-shapleyアルゴリズムです。
shapleyはこの功績で2012年のノーベル経済学賞を受賞しています。

このアルゴリズム,単純なもので,とても便利に思えるのですが・・・手計算で行うと大変ですし,計算ミスが起こると・・・面倒ですよね。そこでコンピューターに計算させたいのですが・・・自分でプログラム組まなくちゃなりません。

そこで,エクセル表に元データを入れておけば計算してくれるファイルメーカーのスクリプトを組みました。

20研究室まで対応します。学生数は数千人くらいならば,多分大丈夫。ちょっと手を加えれば,20研究室以上に改造することも簡単です。

学生の希望は,全ての研究室に希望順位をつけてもらいます。
研究室に入れるかどうかの判定は,「成績」と「面接点」加算した数値を使い,合計点で定員内に入るかどうかで行います。

成績は,学生固有の成績です。希望する教員に関係なく,一定ですね。
面接点は教員によって点数が変わります。生物の先生からは評価高いけど,数学の先生の評価は低い,なんてことが起こります。

成績と面接点の両方を足し合わせ,研究室ごとに順に並べ,定員内かどうかを調べます。
定員に入らなかったら,希望順位をひとつ落とした研究室で再度判定・・・全員が決まるまでこの作業を繰り返します。

単純に成績のみで判定したい場合は,面接点をゼロにすればOK。
逆に成績を考慮せずに,教員個別の判断だけで判定する場合は,成績をゼロにします。

希望調査は, google formを用いて行うと便利でミスも防げます。
タイムスタンプを利用すれば,同点だった場合,先着順にすることが容易です。
こんな感じ

さて,使い方ですが・・・エクセルファイル「basic_data.xlsx」を開き,4つのシートを完成させます。
黒いマス目は変更しないこと。灰色のマス目,白いマス目にはデータを入れてください。
研究室名(class_name)にスペルミスがあるとうまくいかないので,注意してください。日本語も使えますが,全角半角など注意してください。学生の数は,数千人までは可能だと思います。研究室数は20まで。20より少ない場合は,空欄にしておいてください。

入力が終わったら,filemakerのファイル,gs_argolism.fm12 を開きます。basic_data.xlsxと同じフォルダ階層にあることが条件です。
開くとボタン「calculate_start」が表示されているので,それをクリック。数秒で計算が終了して,結果が同じフォルダ階層に「output.xlsx」として出力されます。
10秒以上たっても,終わらない場合は,入力データに間違いがあるなどして,無限ループに陥っている可能性があります。特に定員や研究室名にご注意ください。

なお,このスクリプトでは,同点だった場合は先に読み込んだ学生が優先されます。ですので希望ゼミリストは,タイムスタンプでソートしておくことをオススメします。

肝心のファイルは,ここです。
ダウンロード

p.s.
ファイルメーカーを持っていない!という方は,
30日間使える体験版をファイルメーカーのサイトからダウンロードできますので,それを使ってみましょう。

アプリ形式(ランタイム版)もあるのですが,不特定多数への配布は禁止されているようですので,ここには置きません。連絡いただけば,個別にお渡しすることはあるかもしれませんが・・・期待しないでください。

 

 

ゼミ配属を安定マッチングで! スクリプトで自動計算」への1件のフィードバック

  1. さきほどメールをお送りしましたが、gs_argolismのcaluculate_startを押すと、「この検索条件に一致するレコードがありません」とでてきました。そのあと「続行」を3回おすと、outputファイルが作成され使用することができるようになりました。
    使わせていただきたいと思います。
    ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください