Formula di punteggio (Weighted Priority Score)
// Pesi calibrati sperimentalmente
function computeScore(Task $task): float {
$w1 = 0.35; // importanza (asse Eisenhower)
$w2 = 0.35; // urgenza (asse Eisenhower)
$w3 = 0.20; // bonus deadline ravvicinata
$w4 = 0.10; // penalità durata (favorisce task brevi)
$deadlineBonus = calcDeadlineBonus($task->deadline); // 0–5
$durationNorm = min($task->duration / 120.0, 1.0);
return $w1 * $task->importance
+ $w2 * $task->urgency
+ $w3 * $deadlineBonus
- $w4 * $durationNorm * 5;
}
// Greedy scheduler: ordina per score ↓, inserisci se entra nella finestra
foreach (sortByScore($tasks) as $task) {
if ($cursor + $task->duration <= $mustEndBy)
schedule($task, $cursor);
}