Revisa les transparències i els enllaços de la web de l'assignatura,
secció "Sesión de presentación"
Si no tens grup per a fer les pràctiques, deixa un missatge al fòrum. També podràs trobar company a classe.
L2: Cerca local
Enguany els dies 11 i 25 són festius i caldrà concentrar tot el temari en la primera sessió del dia 18. És important que portis els vídeos vistos de casa per tal de poder aprofitar la classe. L'entrega de la primera pràctica és el 25/10 i si comences a mirar-te l'AIMA la classe del 2/10 no hi arribaràs a temps.
Obre un fitxer java a l'editor per a inicialitzar Java a l'IDE.
A la barra lateral, ves a la secció Java Projects. Fes scroll fins el final. Al costat de Referenced Libraries, fes clic a "+" i indica-li la ruta al jar que vols importar.
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.
18/9: Exercici AIMA de les monedes
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 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.
Algunes pistes per a començar:
Mira algun dels exemples de la setmana passada per a entendre com Java tracta els objectes i les còpies de l'estat. Si no, tindras problemes de casting entre classes.
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.
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ó: count(0, tauler inicial) % 2 == count(0, solució) % 2
La part algorísmica és molt senzilla. Cada funció no hauria de tenir més de 10 línies. Si se't complica es que estàs fent alguna cosa malament.
18/9: AIMA amb cerca local
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
Del 2/10 al 23/10: Pràctica de cerca local
Per començar
Assegura't de llegir bé la documentació. Tot el text és important. Has d'entendre el problema (Cap. 4) i, especialment, el que s'espera que implementis (Cap. 4.5). També, com has d'estructurar els experiments (Cap. 7) i el que has d'entregar en el teu informe (Cap. 8)
Revisa tots els consells del guió (Cap. 5) 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 4.5)
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. 5, «Sexta semana»)
Codi
Aquesta és una pràctica d'experimentació. No hi ha un codi «final» que hagi de passar un joc de proves, o un número d'iteracions correctes, o un cost mínim a assolir. 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. 4.3)
Crea un nou projecte al teu IDE. No comencis des de les fonts de l'AIMA.src.gz. Crea classes buides per Board, GoalTest, HeuristicFunction, Main, SuccessorFunction i comença a partir d'aquí.
Abans de programar el teu codi, experimenta amb les classes de la biblioteca CentralEnergia i entén quines dades generen. Llegeix el javadoc. Evita reimplementar funcions que ja estan disponibles.
La pràctica s'implementa en format línia de comandes. No has de programar cap interfície gràfica. És més, qualsevol sortida per pantalla de les teves funcions és només útil per a generar l'informe.
Les úniques dues biblioteques que necessitaràs són AIMA.jar i CentralEnergia.jar. Està permès fer servir altres biblioteques externes, per exemple per a pintar gràfiques, però no hauria de ser necessari.
Inclou sempre un README que expliqui com executar el codi.
Recomanacions per a preparar un bon informe
L'informe és la part més important de la pràctica. Llegeix-te molt bé la rúbrica (Cap. 8). El teu professor t'avaluarà fent servir exclusivament la rúbrica com a guia.
Les imatges que generis han d'estar situades just al damunt o al davall del text que les referencia. No les posis com a annex al final. Si fas servir Latex, assegura't de que no les col·loqui lluny del text.
A les gràfiques, tot el text ha de tenir prou tamany com per a poder-se llegir sense fer zoom, els eixos han d'estar etiquetats, i poder-se comparar entre gràfiques similars (p.ex. mateixa escala si vols comparar resultats entre HC i SA)
Numera les pàgines.
Si adjuntes traces o codi al document:
La tipografia ha de ser monoespaciada, legible, i del mateix tamany que la resta del text.
És millor copiar el text del terminal i enganxar-lo al document que no pas posar una captura de pantalla del terminal. Però si has de posar una captura de pantalla de text, el color del text ha de ser negre i el fons blanc. Si no, apareix com una taca i és difícil llegir-lo.
De cara a l'entrega
Assegura't 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.
Preguntes típiques
El codi em peta. Crec que he trobat un bug a CentralEnergia.jar / Java. Amb un 99% de probabilitat el problema està en el teu codi. Prova el següent:
Llegeix bé el javadoc. 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.
Augmenta la memòria del heap de Java: java -Xmx512m
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.
Què he de fer amb les classes de CenrtalEnergia.jar? CentralEnergia és una llibreria creada amb l'objectiu de que no hagis de perdre temps creant les estructures de dades i la generació aleatòria d'objectes per a experiments. Llegeix el javadoc. Crida-les i examina'n els resultats, quines estructures de dades són? Quins objectes? Aquest és el teu punt de partida per a començar la pràctica.
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.
Se m'han acudit diverses maneres de representar l'estat. Quina és la millor? En general, totes les opcions tenen pros i contres. N'hauràs d'escollir una i justificar-la. Si no ho tens clar, prova a executar els dos primers experiments amb dues representacions diferents i compara'n el temps d'execució, espai utilitzat, etc. Justifica la teva decisió.
Darrera actualització: dijous, 3 de setembre del 2026, 11:59