Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

[AVVISO] su esercizi poco algoritmici la valutazione dei tempi è abbastanza volubile, ci stiamo lavorando

andrea.sterbini (207940 points)
756 1270 2377
in Avvisi by (208k points)
closed by

Ci avete fatto notare che la valutazione dei tempi di esecuzione dei test è molto variabile, sia tra macchine, distribuzioni di python e sistemi operativi diversi, che tra diversi run effettuati da noi sulla stessa macchina, con lo stesso sistema operativo e distribuzione python (Anaconda 5.0), sullo stesso codice.
In particolare, mentre sul primo esercizio del primo homework, che contiene una fase di elaborazione in cui la scelta dell'algoritmo ha un impatto significativo sui tempi, sul secondo e terzo esercizio, in cui la parte di elaborazione è piccola, i tempi sembra che dipendano da parametri che non dipendono da come avete scritto il codice (potrebbero essere: il carico della macchina, la velocità dell'interprete a interpretare il sorgente, la memoria disponibile, la velocità del disco ...).

Per questo, soprattutto sui tempi degli esercizi 2 e 3, stiamo cercando il modo di fare una valutazione significativa, ad esempio eseguendo i test 10000 volte invece che 10 oppure lavorando su istanze di maggiori dimensioni (chiavi di crittazione di 20K, testi da codificare/decodificare da 100K, eccetera).

Insomma, si stiamo lavorando, anche noi vogliamo che la valutazione di "efficienza" abbia un significato utile al corso.

NOVITA'

Abbiamo studiato un po' di approcci per migliorare la misura dei tempi di esecuzione, questa notte farò rigirare i test con il comando (per X in 1,2,3)

  • python -B -m timeit -v -v -v -v -c -r 10 -s 'import grade0X' 'grade0X.runtests(grade0X.tests)'
    • che esegue per 10 volte (-r 10) un test progressivo (10, 100, 1000, .... volte) finchè il tempo supera i 2s, quindi su programmi molto veloci esegue da 1000 a 10000 test, con ovvio miglioramento della precisione della misura. Tra i 10 run sceglie il migliore.

Il timeout resta globale e varrà allungato opportunamente.

Contemporaneamente abbiamo aggiunto alcune nuove istanze di test al grader01, ne aggiungeremo entro stasera altre agli altri 2 grader.

Infine abbiamo migliorato testlib.py ed i grader per dare informazioni più precise sui test eseguiti:

  • tempo di esecuzione stimato
  • in caso di errore viene mostrato l'input del test e il nome della variabile che ha valore diverso da quello atteso

Non sono ancora riuscito a inserire il timeout a livello di singolo test, per cui NON VI ANSIFICATE se per ora i vostri test falliscono per il timeout globale. Non appena avrò messo il timeout sui singoli test li rieseguirò (anche se la scadenza fosse passata).

Dal log di esecuzione dei test avrete una idea abbastanza chiara di quali passereste con il timeout sul singolo test.

506 views
closed with the note: avviso

1 Answer

Auron (15880 points)
51 126 194
by (15.9k points)
Mai trovato corso più coerente finora, complimenti, davvero... E ho una triennale di Economia alle spalle!