Executa les demos tant a partir de la llibreria, java -jar AIMA.jar com intentant compilar les fonts que has descarregat abans. Entén com funcionen les llibreries a Java.
Setmana 26-Feb: Exercici AIMA
Per tal d'aprendre a fer servir les classes de l'AIMA amb un problema petit, resol l'exercici proposat a classe. Et servirà per a entendre millor com has d'estructurar la pràctica.
Implementa les funcions necessàries per tal de que l'exercici funcioni. Entre d'altres, flip_it, heuristic, is_goal, SuccessorFunction. També necessitaràs crear alguna classe auxiliar per tal de crear una còpia de l'estat o per a encapsular millor el codi.
Pista: A SuccessorFunction, et recomano que li passis un string més informatiu que t'ajudi a entendre què està fent en cada iteració. Per exemple, pots passar-li el tauler sencer.
Pista: Si l'execució no acaba, assegura't de que el tauler inicial i el final compleixen la precondició que garanteix que el problema té solució.
Pista: La part algorísmica és molt senzilla. En una hora l'hauries de poder acabar. Si se't complica es que estàs fent alguna cosa malament.
També et recomano que aquesta setmana et llegeixis amb calma la pràctica. La documentació és bona però extensa, i has d'entendre molt bé el que cal fer i entregar.
Setmana 4-Mar: AIMA amb cerca local i començar la pràctica
Ara que saps fer servir AIMA amb algorismes d'heurística, en aquesta sessió aprendràs a implementar els algorismes de Hill Climbing i Simulated Annealing.
Explora l'implementació de les classes HC/SA per a entendre com s'executen, i les diferències respecte l'exercici de la sessió anterior
Llegeix amb deteniment els apartats 6.5 i 6.6 de l'enunciat de la pràctica. Entén com s'han executat els experiments, com funciona el Simulated Annealing, l'impacte dels paràmetres λ i k, i el concepte d'iteracions que calen per a convergir
Comença ja amb la pràctica!
Setmanes 10-Mar fins 11-Abr
Implementa la pràctica de cerca local. Algunes recomanacions:
Per a començar
Assegura't de llegir bé la documentació. Tot el text és important. Has d'entendre el problema (Cap. 3), el que s'espera que facis com a experimentació (Cap. 6) i el que has d'entregar en el teu informe (Cap. 7)
Revisa tots els consells del (Cap. 4) de l'enunciat.
Ja des del primer moment crea dos documents per a anar apuntant el teu progrés:
Un diari de bitàcora, estructurat més o menys com el document que entregaràs. Comença ni que sigui només amb els títols de les seccions, i ves escrivint els teus progressos a mesura que vagis avançant
Un full de càlcul amb tots els experiments que vagis executant, resultats de canviar les variables, l'estratègia per a trobar la solució inicial, i més. Per exemple, crea una pestanya per a cada experiment que se't demana al (Cap 3.6)
Recorda que l'entrega NO consisteix en el teu diari de progressos i les taules amb els resultats! Aquests documents t'ajudaran, però els hauràs de transformar en un document entregable. Llegeix el (Cap. 4, «Sexta semana»)
Codi
Aquesta és una pràctica d'experimentació. No hi ha un codi «final» que hagi de passar un joc de proves. Més que un resultat, has de crear un framework per a generar diferents resultats, i al final, quedar-te'n amb uns quants. A més, has de tenir en compte diferents criteris d'optimització (Cap. 3.3)
Crea un nou projecte al teu IDE, no comencis des de les fonts de l'AIMA.src.gz ni de l'exercici del vídeo 4. Pots aprofitar l'esquelet de les classes Board, GoalTest, HeuristicFunction, Main, SuccessorFunction d'algun dels exemples que ja has vist, però deixa-les buides i comença des de zero.
Abans de programar el teu codi, experimenta amb les classes del DistributedFS i entén quines dades generen, per a evitar implementar funcions que ja estan disponibles en aquesta llibreria.
Les úniques dues llibreries que necessitaràs són AIMA.jar i DistributedFS.jar. Està permès fer servir altres llibreries externes, però no hauria de ser necessari.
De cara a l'entrega
Llegeix-te molt bé la rúbrica (Cap. 7). El teu professor t'avaluarà fent servir exclusivament la rúbrica com a guia.
Assegura't només de respondre totes les qüestions plantejades a la pràctica. Però no t'allarguis: no se't valorarà per l'extensió. Tant per a tu com per al professor, com més concís, millor.
Fes l'experiment extra per a aconseguir un punt addicional a la teva nota (Cap. 3.6.9), data límit setmana 1-5 abril.
Preguntes típiques
El codi em peta. Crec que he trobat un bug en DistFS / Java. Amb un 99% de probabilitat el problema està en el teu codi. Prova el següent:
Llegeix bé la documentació de DistFS. No hauries d'accedir directament a les estructures internes. Fes servir les funcions proporcionades i esforça't en entendre les dades que et retornen els dos constructors Servers() i Requests().
Augmenta la memòria del heap de Java, tal i com s'indica a l'apartat 3.6.
Revisa el teu codi de generació de successors i les noves instanciacions d'objectes grans com ara Arrays o Lists. Comprova que no n'estiguis generant més del compte.
Fes servir un debugger, com el que porta incorporat Jetbrains. Posa breakpoints als llocs problemàtics del teu codi i analitza la pila i les variables.
He de generar a propòsit un estat inicial dolent (o un heurístic dolent), per a que contrasti amb la versió "bona" de l'algorisme? No. No se t'avaluarà per la diferència de rendiment entre les solucions. L'estat "dolent" pot ser un d'aleatori o una inicialització cega.
No entenc el primer criteri a optimitzar (Cap. 3.3). Imagina que estem intentant optimitzar la classificació de la lliga de futbol. El primer criteri et demana que facis guanyar sempre qui va últim. Un altre exemple: en una cursa de Mario Kart s'intenta afavorir sempre a qui va a la cua. Això pot fer que hi hagi un altre últim, diferent del que acabes d'optimitzar. No és cap problema: en tot rànking sempre hi ha d'haver algú que vagi l'últim.
En el segon criteri a optimitzar, com equilibro el temps total de transmissió amb la similitud entre temps de transmissió dels servidors?. Això és una de les coses que has de provar experimentalment, i decidir quina és la penalització imposada per la restricció de similitud, i fins a quin punt val la pena pagar-la. Lògicament, no la pots ignorar, ja que se't demana que la tinguis en compte. En cas de dubte, optimitza per a la restricció de similitud.
L3: Sistemes Basats en el Coneixement
Setmana 15-Abr: CLIPS
Després de l'entrega de la pràctica anterior, tens un parell de setmanes per a agafar aire, però no t'adormis.
Si fas servir Linux, instal·la el paquet clips, però et recomano que provis a treballar amb la versió de Windows corrent sobre wine, per a disposar de la GUI.
A Windows, el nom de la GUI és clipside.exe
NOU: La darrera versió (6.41) també és compatible amb Protégé 5.6. No hi ha moltes diferències amb la 6.31, per la qual cosa pots continuar amb la 6.31 si ja la tens instal·lada i no vols fer més canvis. En cas contrari, fes servir la darrera versió.
Instal·la Protégé. NOU: Fes servir la darrera versió (5.6). He pogut confirmar que també és compatible amb Clips 6.31 i et podràs beneficiar de més funcionalitats que la 3.5.
Posa't com a objectiu desenvolupar una primera versió executable de la pràctica el més aviat possible. Evidentment, serà molt bàsica, a l'ontologia li faltaran coses, i tindràs poques regles. No obstant, amb això ja tens assegurat el punt extra, i a més veuràs com és més fàcil anar ampliant una pràctica petita que ja funciona que arrencar des de zero una pràctica més grossa.
Comença dibuixant les quatre caixes que has vist a teoria: problema concret, problema abstracte, solució abstracta, solució concreta. El teu objectiu és omplir-les.
Fes una primera versió reduïda de cadascuna de les caixes, de l'ontologia, del sistema de regles, i crea una versió mínima funcional de la teva pràctica.