diff --git a/admin/tours_sa.php b/admin/tours_sa.php index 901df9a..1470f0a 100644 --- a/admin/tours_sa.php +++ b/admin/tours_sa.php @@ -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;