Project Voorstel 2de Kan info: 2de semeseter S. Casteleyn, J. De Beule, A. Defaweux, B. Jansens 9 maart 2004
1
Opgave
Vanaf volgend jaar wordt het programma van de opleiding aangepast naar een Bachelor/master (BAMA) systeem. Dit houdt een flexibilisering van de opleidingen in, waarbij gemakkelijker kan overgestapt worden van 1 richting naar een andere. Een student moet dan wel vanaf het begin de goeie optie(s) kiezen om in de laatste jaren de gewenste richtingen te kunnen volgen. Vanaf volgend jaar zal een opleiding dus als volgt ineen zitten: • Je kiest een richting (=Bachelor) die je wil volgen (bijv. ”Bachelor in Informatica”); officieel heet dit dan e¨ en bachelor met als major Informatica”. Binnen iedere Bachelor zijn er een aantal verplichte vakken en mogelijk een aantal studiepunten vrij te kiezen • Je kiest, binnen je bachelor (in het 2de jaar), een minor die je wil volgen (bijv. minor ”Artificiele Intelligentie”, ”Filosofie”, ...); binnen zo’n minor zijn er mogelijk een aantal verplichte vakken, een aantal optionele vakken (aantal studiepunten te kiezen uit een opgegeven lijst van vakken). • Na 3 jaar studeer je af. Je bezit dan bijv. een ”Bachelor in Informatica”met als minor ”filosofie”. Je kan nu een master aanvatten ofwel in de informatica, ofwel in de filosofie. Dit kan, zolang je de juiste prerequisites hebt (m.a.w. de juiste vakken gevolgd hebt) die nodig zijn voor de master die je kiest (de ’juiste’ keuzevakken kiezen zodanig dat alle prerequisites voldaan zijn om een andere master aan te vatten zal niet altijd mogelijk zijn, doch voor sommige bachelor-master combinaties wel). • Masters zijn gelijkaardig ingedeeld als Bachelors: een aantal verplichte vakken en mogelijk een aantal studiepunten vrij te kiezen. Binnen de Masters (2 jaar) zijn er ’profielen’, die in het eerste jaar gekozen worden en over de 2 jaar lopen (in werkelijkheid zullen waarschijnlijk ook 1-jarige master mogelijk zijn, doch voor dit project dient hier geen rekening mee gehouden te worden). Verder bevatten de profielen, net zoals de minors, een aantal verplichte vakken en een aantal optionele vakken (aantal studiepunten te kiezen uit een opgegeven lijst van vakken). In de masters zullen, net zoals in de huidige licentie jaren, typisch veel meer vakken kunnen gekozen worden! De opgave van het project bestaat eruit een programma te schrijven dat de studenten moet helpen de juiste opties te kiezen om hun curriculum op te stellen. Met dit programma moet het voor de gebruiker mogelijk zijn om bijv. op te geven dat hij ”Master in Informatica”wil worden, met een profiel ”Artificiele Intelligentie”. Het programma moet hem vervolgens de mogelijkheden geven om dit te bereiken (e.g. welke bachelor dient gekozen te worden, welke keuzevakken, etc.). Het moet voor de gebruiker ook mogelijk zijn om hierbij enkele vakken aan te geven die hij zeker wil volgen.
1
2
Relatie met XML
XML is ideaal om data in neer te schrijven, zodat het door verschillende systemen behandeld kan worden. Jullie kunnen de XML parser van het eerste semester gebruiken om de informatie in scheme in te lezen. Bijgevolg is er een groot stuk van het project reeds opgelost. Jullie krijgen van ons een XML file met DTD, die alle bachelors en masters van de VUB voorstelt. Als voorbeeld data is in de XML file alle data voor de Bachelors in Informatica beschreven (i.e. dit is een vrij definitieve versie van het eigenlijke programma dat vanaf volgend jaar zal gebruikt worden). Het is de bedoeling dat jullie de XML file uitbreiden, zodat er ook masters toegevoegd worden. Masters volgen zoals reeds vermeld hetzelfde principe als Bachelor: er zijn ’profielen’ ipv minors, en ieder jaar bevat verplichte vakken. Voor het toevoegen van een profiel kan je het principe ”voor de meeste minors, zal er ook een profiel zijn”gebruiken. Voor de minor ”Minor Bioinformatica”zal er dus een ”Profiel Bioinformatica”zijn. Sommige minors zullen geen gelijknamig profiel hebben. De prerequisites voor een master zullen bestaan uit de verplichte vakken uit de bachelor en (een aantal van) de gelijknamige minor, en evt. keuzevakken van de minor. Het is uiteraard wel mogelijk om bijv. een Master ”Artificiele Intelligentie”te volgen, terwijl men een minor ”Teleinformatica”gevolgd heeft (zolang men maar de juiste keuzevakken gekozen heeft tijdens de bachelor, zodat men aan alle prerequisites voldoet). Het is zelfs mogelijk een master uit een ander departement te volgen, zolang men maar aan de prerequisites voldoet (het zou bijv. mogelijk zijn bepaalde ”Masters in Wiskunde”te volgen, nadat men een Bachelor in Informatica gevolgd heeft, met bijv. als minor ”Wiskunde”.
3
Vrijheid in het oplossen van de opgave
De opgave is bewust vrij open gebleven zodat jullie de vrijheid krijgen om die in een of andere richting te sturen. Het is dus de bedoeling dat jullie aan ons laten zien dat jullie kunnen programmeren, en zelfstandig oplossing kunnen bedenken voor problemen. Telkens de simpelste oplossing kiezen, en er voor te zorgen dat de opgave zo simpel mogelijk wordt gehouden, is natuurlijk geen goeie manier om dit te gaan doen. Jullie moeten in ieder geval aan deze minimale vereisten voldoen: • Het ingeven van ’wat men wenst’ moet dynamisch zijn; het systeem moet hieruit de mogelijkheden berekenen. Dwz dat de gebruiker de velden ”bachelor, minor, master, profiel”moet kunnen ingeven (hij mag een of meerdere ingeven), en eventueel bepaalde vakken kunnen vastleggen die hij zeker wil volgen. Het systeem moet aan de hand van deze informatie berekenen of zo’n combinatie mogelijk is, en zo ja welke keuzes er moeten of kunnen gemaakt worden voor de open velden • Er moet een user interface geschreven worden (mag simpel gehouden worden) • Naast de constraints die in het systeem reeds aanwezig zijn (nl. de prerequisites), moeten jullie ten minste 2 extra mogelijkheden tot extra constraints implementeren. Je kan hiervoor kiezen uit de volgende lijst: – geen lessen volgen die overlappen qua uren – bepaalde ’tijdsblokken’ vrijlaten (bijv. geen les op vrijdag-namiddag; 1 dag per week week vrij; niet voor/na een bepaald uur; niet na een bepaald uur; etc.) – geen hxi uur practica of theorie na elkaar – bepaalde titularisen mijden 2
– constraints op studiepunten (geen vakken van 8, enkel vakken van 5, etc) – niet meer dan hxi uur per dag – ... Het is ook mogelijk om zelf een extra constraint te definieren. Je dient hiervoor dan wel goedkeuring te krijgen van de verantwoordelijke assistenten. Hoewel je maar 2 extra constraints moet definieren, is het wel degelijk de bedoeling na te denken over een generische oplossing, waar extra constraints makkelijk zouden kunnen toegevoegd worden. Hard coding van de prerequisite constraint, en 2 andere constraints, is niet de bedoeling. Om aan vereisten te voldoen, is het sterk aangeraden om zich te documenteren (bijvoorbeeld bestaande technieken om constraint checking te doen; in het bijzonder in de AI zijn ’constraint solving’ en ’constraint satisfaction’ onderzoeksgebieden op zich). Die documentatie zal besproken worden tijdens jullie evaluatie op het einde (de “het was gemakkelijker zo” uitleg die we vaak horen is uiteraard geen voldoende motivatie. Anderzijds is het natuurlijk wel zo dat jullie vrij zijn hoe het probleem aan te pakken, welke constraints juist te implementeren, hoe dat juist te doen, etc. Het komt er voor jullie dus op aan om creatief te zijn, maar toch getoetste en gekende oplossingen voor de type-problemen in het project niet te negeren.
4
Kwaliteitseisen
Het project wordt geevalueerd met criteria die moeten voldaan zijn op einde van een tweede kandidatuur. Betreffende de programeerstijl, refereren we naar de al lang bekende kwaliteitseisen, te vinden op de site voor het project. Ook het project moet goed opgebouwd zijn: de keuzes die je maakt qua design en qua implementatie moeten goed gemotiveerd zijn en de alternatieven moeten afgewogen zijn. Verder wordt er gevraagd om een deftig proper afgewerkt project af te geven, alsof het een ’echt’ project zou zijn dat je later als informaticus zal schrijven. M.a.w. geen amateurisme in de afgegeven document, geen onleesbare code vol met debuginformatie, een propere demo enz. . .
5
Grondiger uitleg gegeven XML file
Een korte uitleg bij de gegeven XML file: • COURSE LIST: bevat een lijst van alle vakken (courses). De sub-elementen van de courses zelf zijn triviaal • PREREQ LIST: bevat PREREQUISITE elementen met attribuut ID, die het vak voorstelt voor prerequisites zijn. Zo’n PREREQUISITE element bevat op zijn beurt 1 of meerdere REQUIRE elementen, die verwijzen naar vakken die noodzakelijk reeds moeten gevolgd zijn alvorens men het PREREQUISITE vak kan volgen. De attributen van het REQUIRE element kunnen genegeerd worden: iedere prerequisite kan als noodzakelijk beschouwd worden. • BAMA LIST: bevat de Bachelors die kunnen gekozen worden. Iedere Bachelor (BACHELOR) heeft een jaar (1ste, 2de of 3de) en bestaat uit een verwijzing naar vakken (COURSE) die verplicht binnen deze bachelor gevolgd moeten worden, en evt. een aantal te kiezen studiepunten (OPTION) en een verwijzing naar het aantal studiepunten toegekend aan de minor. • MINOR LIST: bevat de minors die kunnen gekozen worden, met verplichte vakken (COURSE) en evt. keuze keuzevakken voor een aantal studiepunten te kiezen uit een vaste lijst (OPTION LIST) 3
Het is toegelaten deze XML file, en de bijhorende DTD, aan te passen naar goeddunken. Dit zal bijv. al zeker nodig zijn om (enkele fictieve) masters toe te voegen (hoe jullie dat doen, manueel of genereren, is voor ons niet belangrijk; zolang de geimplementeerde functionaliteit maar kan gedemonstreerd worden). Het spreekt bovendien vanzelf dat de gegeven XML file slecht een *voorbeeld* is. Jullie programma moet werken met alle XML files die aan de DTD (mogelijk door jullie veranderd) voldoen. Zo kan bijv. een andere universiteit afkomen met een XML file die voldoet aan jullie DTD, met daarin hun BAMA informatie. Jullie programma moet evenzeer met deze XML file omkunnen. Het is toegelaten om DATA met elkaar uit te wisselen. Je mag dus fictieve masters van je medestudenten gebruiken, of extra bachelors, minors en vakken (als dit bijv. beter de werking van je programma aantoont) maken (let echter wel op dat je ervoor zorgt dat de extra data consistent is met reeds bestaande informatie en constraints, meerbepaald de prerequisites). Voor alle duidelijkheid, jullie mogen ENKEL data uitwisselen. Het is NIET de bedoeling om samen te werken wat betreft uitbreiding DTD, en eveneens NIET de bedoeling om samen te werken voor de scheme code.
4
6
Deliverables & deadlines 1. Keuze welke 2 extra functionaliteiten geimplementeerd zullen worden: per email naar alle verantwoordelijk assistenten ten laatste maandag 22 maart 17 uur. 2. Een eindverslag, ten laatste maandag 31 mei voor 17h00 afgeven op het AI lab (papieren versie) • Detail van de geimplementeerde specificaties • Een gedetailleerd design van de implementatie. De gekozen abstracties en datastructuren moeten hier beschreven worden, tezamen met een motivatie van de gemaakte keuzes. • Een “verder werk” sectie die uitlegt hoe extra functionaliteiten of aanpassing kunnen toegevoegd worden (e.g. extra constraints). • Aan de hand van jullie verslag moeten wij een duidelijk beeld kunnen krijgen van wat jullie gedaan hebben, hoe het gedaan is, en waarom het zo gedaan is. M.a.w., het moet voor ons mogelijk zijn om aan de hand van jullie verslag zonder veel problemen jullie code te doorlopen, en te begrijpen. 3. De code, ten laatste vrijdag 4 juni voor 17h00 afgeven op het AI lab (papieren versie) • De code bundel moet genummered worden • Een index van de functies moet opgesteld worden • De code moet voldoen aan de kwaliteitseisen van het project 4. De demo (op de verdediging; tijdens de zittijd)
5