ESERCIZIO
In una sessione uno studente ha un insieme ESAMI all’interno del quale può scegliere gli esami da sostenere. Lo studente decide di preparare almeno N degli esami previsti ma vuole studiare il meno possibile. Ha a disposizione un vettore NUMERO_ORE che ad ogni esame associa il numero di ore necessario per prepararlo. Quindi lo studente deve scegliere quali esami sostenere tenuto conto che ne vuole preparare almeno N e che vuole impiegare il minor numero possibile di ore. Costruire un modello AMPL per questo problema.
SOLUZIONE
L’unico insieme utilizzato nel modello è l’insieme ESAMI che verrà dichiarato nel modo seguente
set ESAMI ;
Tra i parametri abbiamo un vettore di parametri NUMERO_ORE che associa un valore ad ogni elemento dell’insieme ESAMI
param NUMERO_ORE{ESAMI} >0;
ed un parametro singolo N che indica il numero minimo di esami da sostenere param N >0;
Abbiamo una variabile del problema per ogni elemento dell’insieme ESAMI. La variabile consiste nel decidere se sostenere o non sostenere un esame ed è quindi binaria
var x{ESAMI} binary ;
Il solo vincolo è che si vogliono sostenere almeno N esami subject to ALMENO_N_ESAMI : sum{i in ESAMI} x[i] >= N ; L’obiettivo è quello di minimizzare il numero totale di ore di studio
minimize TOTALE_ORE_STUDIO : sum{i in ESAMI} NUMERO_ORE[i]*x[i] ; Si noti che il problema è in realtà banale e non richiede l’uso di tecniche di Ricerca
Operativa (è sufficiente ordinare gli esami in ordine non decrescente di ore di studio richieste e prendere i primi N esami dell’ordinamento). Lo scopo dell’esercizio è solo quello di verificare l’abilità nella costruzione di un modello di un problema.