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.
25-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 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.
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.
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!
... fins el 31-Mar
Implementa la pràctica de cerca local.
(enunciat).
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) i, especialment, el que s'espera que implementis (Cap. 3.5). També, com has d'estructurar els experiments (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.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. 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, 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. 3.3)
Crea un nou projecte al teu IDE. No comencis des de les fonts de l'AIMA.src.gz. Aprofita si vols l'esquelet de l'exercici AIMA. Recupera les classes Board, GoalTest, HeuristicFunction, Main, SuccessorFunction, deixa-les buides i comença a partir d'aquí.
Abans de programar el teu codi, experimenta amb les classes de la llibreria RedSensores i entén quines dades generen. Llegeix el javadoc. Evita reimplementar funcions que ja estan disponibles en aquesta llibreria.
Les úniques dues llibreries que necessitaràs són AIMA.jar i RedSensores.jar. Està permès fer servir altres llibreries externes, 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. 7). 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
Fes l'experiment extra per a aconseguir un punt addicional a la teva nota (Cap. 3.5.8), data límit 23/3 23:59. No et costa res enviar-lo i després agrairàs el punt extra.
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 en RedSensores / Java. Amb un 99% de probabilitat el problema està en el teu codi. Prova el següent:
Llegeix bé la documentació de RedSensores. 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 -Xmx256m
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.
Sí existeix un bug conegut a l'AIMA: la variable stiter del SA no té efecte. Però això no té impacte a la pràctica. Tu has d'optimitzar k i λ.
Què he de fer amb les classes de RedSensores? RedSensores és una llibreria creada amb l'objectiu de que no hagueu de perdre temps creant les estructures de dades i la generació aleatòria d'objectes per a experiments. Llegeix el javadoc. Sensores() serveix per a crear una llista de sensors amb valors aleatoris, i CentrosDatos() genera una llista de centres de dades. 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ó.
L3: Sistemes Basats en el Coneixement
1-Abr: CLIPS
Després de l'entrega de la pràctica anterior, tens uns dies per a agafar aire, però no t'adormis.
Si fas servir Linux, instal·la el paquet clips. Jo et recomano que treballis amb la versió de Windows corrent sobre wine, per a disposar de la GUI, que és molt útil per a debugar.
A Windows, el nom de la GUI és clipside.exe
Tant en Windows com amb wine, la GUI comença a resultar molt lenta quan hi ha moltes regles i instàncies. Fes servir la GUI per a desenvolupar, i executa les teves proves amb la línia de comandes.
Busca per internet els elements i conceptes que necessitaràs per a crear l'ontologia.
Fes la primera versió de la teva ontologia. Aquí tens un document que t'explica com, que de fet és molt similar a les diapositives de classe.
... fins el 26-Mai
Implementa la pràctica de sistemes basats en el coneixement. 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ò 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.
Exemple: Problema Smart Move
Si recordes, la tercera sessió de laboratori vas implementar l'exercici de les monedes per a familiaritzar-te amb l'entorn de la pràctica de cerca local. De la mateixa manera, pots fer un altre exercici per a familiaritzar-te amb la pràctica de SBC.
Comença la teva pràctica dibuixant les quatre caixes que has vist a teoria: problema concret, problema abstracte, solució abstracta, solució concreta. El teu objectiu és omplir-les, identificant quins elements van a quina caixa.
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.
Estic intentant executar l'exemple auto.clp i el load em dóna un error amb els println. El codi conté crides a println i print que no són vàlides. Aquí tens una versió corregida d'auto.clp que substitueix aquestes crides per printout t
Darrera actualització: dimarts, 22 d'abril de 2025, 11:08