プロが教えるわが家の防犯対策術!

 100人を対象に5講座開講します。1講座の最大は25人,受講者にはあらかじめ1~5希望まで順位を付けてもらっています。

 これまで,エクセルに希望順位を入力し,並べ替えと人数のカウントを繰り返し,何となく編制してきました。これを数学的に合理的に編制する方法はないでしょうか。

 一人一人の決定講座の希望順位の合計が最小になり,1講座の人数<=25 という制約の中で式を解けばよいのでしょうが,具体的なやり方が分かりません。エクセルのソルバーという機能をうまく使うことはできませんか。高校の教科書で「線形計画法」なるものを習った記憶があるのですが,その応用問題ととらえることはできますか。

 よいアイディアがあったら教えてくださると助かります。

A 回答 (2件)

#1です。



第1希望から順に埋めていくのはいいが、抽選では問題があるということでしょうか?


落選者を決める方法として簡単な方法として抽選と書きましたが、抽選でまずければ落選者の決め方を工夫すればいいでしょう。
例えば、第2希望の講座が定員未満だったら優先的に落選対象にするとか。


気になったのは、全員の決定講座の希望順位の和が最小になるように決めると、必ずしも第1希望が優先されるとは限らないことです。
例えば、3人いて、「2人が第1希望、もう一人が第4希望」の場合と「3人とも第2希望」の場合を較べると後者のほうになる可能性もでてきます。
また、「自分は第1希望の講座を落選したのに、その講座に第2希望で受けている人がいる」ということもありえます。これは受講者から見たらあまり気分のいいものではないでしょう。

そう考えると、やはり第1希望から順に埋めていくのがいいのではないでしょうか。

この回答への補足

 再度のお返事ありがとうございます。
 全員の決定講座の希望順位の和の最小値を探すと御指摘のような問題が起こりますね。御指摘ありがとうございました。

 さて,私がやりたいことは第2希望の講座が定員未満だったら優先的に落選対象になるようにして第1希望から順に埋めていきたいのです。この優先的に落選対象とすることを含めて,並べ替えるなどの作業をしないで自動的に決定するような仕組みをエクセルで表現できないかと考えました。よいアイディアはあるでしょうか。

補足日時:2011/07/28 16:06
    • good
    • 0
この回答へのお礼

 なかなか回答がつきませんので,締め切らせていただきます。お答えいただいた方ありがとうございました。

お礼日時:2011/08/02 09:35

これはソルバーや線形計画にはそぐわないような気がします。


単純に第1希望から順に埋めていけばいいのではないですか。

手順としては、

(1) 全員を第1希望の講座に振り分ける。定員をオーバーした講座は、抽選で落選者を決める。

(2) 落選者全員を第2希望の講座に振り分ける。定員をオーバーした講座は、第2希望者の中から抽選で落選者を決める。(すでに定員に達している講座は必然的に全員が落選となる)

(3) 落選者全員を第3希望の講座に振り分ける。定員をオーバーした講座は、第3希望者の中から抽選で落選者を決める。


というように決めていけば5回目までには全員がどれかの講座に決まるはずです。

この回答への補足

 早速の御回答ありがとうございました。
 回答者様の方法はこれまでに行ってきた方法と同一ですし,有効な方法の一つだと思います。しかし,抽選という手段は次のような問題があります。

 例えば,ABCDと4つの講座が次のような希望状況と仮定します。

A(30/25),B(25/25),C(20/25),D(20/25)

 このときBCDを第1希望にした人は決定できます。問題はAを選んだ人ですが,希望順位が高いものから,ABCDと選んだ人と,ACBDと選んだ人がいたとします。
 ABCDと選んだ人が抽選で落ちた場合,第3希望のCに回ることになります。ACBDを選んだ人が抽選で落ちた場合,第2希望までに収まります。
 つまり,抽選は公平で単純ではありますが,できる限り希望順位が高い講座に収まるように最適化することができません。今回は,できる限り全員の希望順位を高くするという要求を満たしたいのですが,それが可能かどうかを聞いているのです。

 言い換えれば,上記の例の場合は,ABCDの人はA講座(第1希望)に決定し,ACBDの人はC講座(第2希望)に決定となる処理です。

 ソルバーを使うと言ったのは,(使い方をよく知らないのですが)全員の決定講座の希望順位の和が最小 各講座の人数<25 全員の決定講座を順にA~Dまで順に入れていけば適する解が見つかるのではないかと考えました。ただし,(講座数×人数)回の計算をしてその中から最小値を探すというのは計算量が膨大になりそうで,よい方法を思い付きませんでした。これが質問の意図です。

補足日時:2011/07/27 09:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!