1) Quando si genera l'orario, implementare una routine parallela che salva ogni nuovo orario generato (il migliore possibile) sovrascrivendo quello precedente e le attività più difficili compresa quella che ha bloccato, in questo modo, in caso di crash del computer comunque rimangono dei dati utili sui quali ragionare e lavorare.
2) Creare la possibilità di mettere più attività contemporaneamente in una classe (basta aggiungere nella descrizione delle classi un prametro che indichi il numero massimo di attività contemporanee possibili), in alternativa si potrebbe permettere di chiamare più classi con lo stesso nome.
3) Più complesso... immettere la possibilità di avere più attività contemporanee, ma a scelta in un gruppo di esse, cioè dare la possibilità di dire quali attività debbano svolgersi contemporaneamente a due a due o a tre a tre ecc. a scelta all'interno di un gruppo di esse. Ad esempio: setto come attività contemporanee a 2 a 2 le attività A, B, C e D, il programma mi gestirà l'orario scegliendo liberamente le coppie di attività contemporanee AB, AC, AD, BC, BD e CD per ogni ora; con la possibilità di sceglierle anche a 3 a 3 (ABC, ABD, ACD, ecc.) o tutte e 4 (come è possibile ora).
Questa possibilità aggiunta alla precedente permetterebbe di gestire non soltanto le classi che si suddividono in sottogruppi per percorsi paralleli, ma anche la compresenza di classi nella stessa aula (ad esempio la palestra) imponendo che siano ad esempio dello stesso grado (tutte terze o tutte quarte) o della stessa sezione ecc.
Spero di non aver detto bestiate ;)