- Handle the case where a student doesn't use all their tour rankings.

This commit is contained in:
dave 2007-12-20 04:29:16 +00:00
parent 1dd573ab63
commit c8d01cb8fb

View File

@ -70,13 +70,26 @@ set_percent(0);
+5 - Noone from the same school
If ranked (rank=1,2,3,4,...):
+(rank*rank*5 - 5) = +0, +15, +40, +75
If not ranked:
If not ranked and max choices specified
+(max_choices*max_choices*5) (always greater than ranked)
else max choices not specified
+((max_choices-1)*(max_choices-1)*5)
- Foreach tour
+100 for each student above the capacity
+200 for each student below 1/4 the capacity,but
zero if the tour is empty
Notes:
- If a student doesn't fill in all their choices, we don't want to give
them an unfair scheduling advantage. They'll significantly increase
the cost if they don't get their chosen tour, whereas someone who
specifies all the choices will gradually increase the cost. So, we
want to make it "more ok" for the annealer to place someone who
hasn't ranked their max number of tours in any tour, and make it
"less ok" for someone who has specified all the rankings to be placed
anywhere.
*/
function tour_cost_function($annealer, $bucket_id, $ids)
{
global $config;
@ -118,8 +131,14 @@ function tour_cost_function($annealer, $bucket_id, $ids)
if($rank_tid != $tid) continue;
$rank_cost = ($rank * $rank * 5) - 5;
}
if($rank_cost == -1) {
$rank_cost = $config['tours_choices_max'] * $config['tours_choices_max'] * 5;
/* Coulnd't find tour id in the student ranks*/
if(count($s['rank']) < $config['tours_choices_max']) {
$rank_cost = ($config['tours_choices_max']-1) * ($config['tours_choices_max']-1) * 5;
} else {
$rank_cost = $config['tours_choices_max'] * $config['tours_choices_max'] * 5;
}
}
$cost += $rank_cost;