Arxiu de la categoria: Joan Quintana

Curs d’Intel.ligència Artificial CSMM.101x finalitzat

Finalment ja he acabat el curs d’Intel·ligència Artificial. Aquestes últimes hores he fet l’examen final, tipus test. Quant tingui una mica de temps m’agradaria repassar algun concepte i tornar-me a mirar el projecte del Sudoku i els algorismes que allà hem utilitzat. I de cara aquest estiu rellegir el llibre Computational Beauty of Nature, on hi havia algun capítol sobre xarxes neuronals.

M’ha interessat sobretot la part del Machine Learning, i de cara el curs vinent m’agradaria fer algun curs en aquest àmbit. Temps al temps.

Construïnt el moble del Virtual Pinball

Mans a l’obra! Ja tinc les 200 taules configurades, tinc les dues pantalles, l’ordinador, botons, IPAC. He de pensar quin moneder fico, i m’agradaria ficar un plunger analògic. Però el cas és que ja puc començar a construir el moble.

De fet, aquest és un mini virtual pinball. És mini perquè les pantalles que utilitzo són de 24inch per al playfield, i de 17 inch per al backglass. Com que és la primera màquina que construeixo d’aquest tipus, la penso com una prova. La idea és ficar-li unes potes, però no tinc clar encara com fer-ho. Es poden comprar potes per Internet, però vull contenir al màxim el pressupost d’aquest projecte. Una altra possibilitat seria no ficar potes, i que reposi sobre una taula.

La primera vegada que construeixes una màquina és un aprenentatge sobre la marxa de les coses amb què ens podem trobar. S’ha de prendre moltes decisions: mides, posicionament dels components, materials,… És un procés de presa de decisions. Per tant, ens ho hem de prendre com un prototipus, i en el trajecte adquirim un know-how que ens servirà per a futures màquines (esperem que n’hi hagi més).

Per als vinils d’aquesta màquina encara no he pres cap decisió, segurament es basarà amb la taula Jacs to Open. Segurament no serà vinils, sinó que la pintaré amb plantilles, una tècnica que no he probat. Altres possibilitats de disseny que m’han agradat mentre probava les taules: Free Fall, Fast Draw, Harlem Globetrotters, Jumping Jack, King Rock, Star Trek.

200 taules de pinball B2S configurades i testejades

He aparcat un temps el projecte de la màquina de dards per dos motius. El primer que estic fent un curs de edx.org d’Intel·ligència Artificial. I després perquè tinc ganes d’acabar un virtual pinball de dues pantalles.

Ja tinc configurades 200 taules de pinball en mode B2S (Backglass to Screen). Això significa que tenim dues pantalles: el playfield (la pantalla principal); i la pantalla que fa de backglass, on hi ha el score i altres efectes visuals. He hagut de transformar totes les taules FS (FullScreen) que tenia a B2S, sempre que hagi estat possible. I he buscat d’altres taules xul·les per arribar a les 200.

La foto que he escollit per il·lustrar el post és la taula Centigrade 37, una taula Gottlieb de 1980 molt xul·la que he descobert.

D’altra banda ja estic construint el moble (ho ensenyaré en els propers posts), i em queda decidir quina taula escolliré per a les arts. També he de resoldre altres aspectes tècnics com el plunger analògic.

Curs d’Intel.ligència Artificial a edx.org

Estic fent el curs ColumbiaX: CSMM.101x d’Intel·ligència Artificial de edx.org. De fet. ja l’estic acabant. Ja estem a la última setmana, i per sort meva, l’últim projecte ja el tinc entregat i m’ha portat menys feina del que em pensava, sense especials contratemps. Ara només em falta fer l’examen final que serà el 23 d’abril, Sant Jordi.

Els projectes que s’han realitzat, tots ells amb Python, són:

  • Projecte 1: Search Algorythms. BFS, DFS,… Es va resoldre el 8-puzzle
  • Projecte 2: Adversarial Search and Games. S’ha resolt el joc del 2048, que de fet jo hi havia jugat bastant. Aquest projecte em va costar bastant, i efectivament vaig arribar a 2048 en una ocasió, combinant diferents heurístiques.
  • Projecte 3: Machine Learning. Hi havia tres problemes diferents: I. Perceptron Learning Algorithm; II. Linear Regression; III. Classification
  • Projecte 4: Constraint Satisfaction Problems. Aquí vam resoldre el joc del sudoku amb els algorismes del AC-3 i del backtracking.
  • Projecte 5: NLP, Natural Language Processing. Un projecte molt interessant. Hi havia un train data de 25000 comentaris de pel·lícules, valorades del 0 al 10. I després també hi havia un test data de 25000 comentaris que s’havien de valorar després d’entrenar el sistema.

El resum de les setmanes ha sigut el següent:

  • Week 1: Introduction to AI
  • Week 2: Intelligent Agents and Uniformed Search
  • Week 3: Heuristic Search
  • Week 4: Adversarial Search and Games
  • Week 5: Machine Learning I
  • Week 6: Machine Learning II
  • Week 7: Machine Learning III
  • Week 8: CSP
  • Week 9: Reinforcement Learning
  • Week 10: Logical Agents
  • Week 11: AI Applications: NLP

Per sort ja s’està acabant perquè m’ha agafat més temps del que tenia i del que volia dedicar-li. Però realment ha sigut interessant i exigent, i m’he hagut de posar les piles amb el Python. Realment el tema de les estructures de dades, i les diferents llibreries que s’han utilitzat amb Python, són molt potents.

Intentaré seguir llegint coses sobre Intel·ligència Artificial (IA) i Machine Learning (ML).

NOTA: encara no tinc acabat el projecte de la màquina de dards, i de fet me n’adono que el problema d’esbrinar on ha tocat el dard i quina puntuació té, a part d’un problema de CV (Computer Vision), també és un problema de ML (Machine Learning).

Llibre d’equacions diferencials. Capítol “La ciència de l’enamorament”

Vaig amb la idea d’escriure alguns articles sobre equacions diferencials, que podrien desembocar en un llibre. M’agradaria donar un to amè, centrant-me en aspectes pràctics, per demostrar que les equacions diferencials es poden aplicar a molts àmbits diferents. El títol podria ser alguna cosa com ara: Equacions diferencials per tot arreu: de com el càlcul infinitesimal resol problemes en tots els camps del coneixement

De fet he pensat un guió per al llibre, seria alguna cosa com ara:

Fı́sica

  • Problemes clàssics: la molla i el pèndol
  • Dinàmica de coets. Equació de Tsiolkovski
  • Isòtops radioactius

Biologıia

  • Ecologia de poblacions
  • Teorıia de l’evolució
  • Hàbits d’alimentació en poblacions animals

Sociologia

  • La ciència de l’amor
  • Sistemes de votació, dinàmica de partits polı́tics

Economia

  • Evolució dels preus
  • Crisi financera

Matemàtiques

  • Equació de la corda pesant: la catenària
  • La braquistòcrona i la tautòcrona

Medicina

  • Dinàmica dels tumors
  • Modelitzar el càncer: competència i selecció natural

Electrònica

  • Càrrega del condensador. Oscil·ladors LC, RLC
  • Unió PN, difusió de portadors

Quı́mica

  • Dinàmica de les reaccions quı́miques
  • Intercanvi de calor

Fluids

  • Llei de Torricelli
  • Mecànica de fluids. Coeficient de resistència

Sistemes complexos

  • Caos
  • Fractals

He estat treballant en varis capítol. Per exemple, en La ciència de l’enamorament s’analitza un cas de com una parella tenen un comportament diferent davant de l’enamorament, que es pot modelitzar amb una equació diferencial. I com a resultat de resoldre el problema, el resultat podria ser (en funció de les condicions inicials i del valor dels paràmetres), un estira-i-arronsa cíclic en la manera com senten l’atracció mútua.

En qualsevol cas el problema no és original (com els altres que es presenten en el guió que són, de fet, problemes bastant clàssics), però sí que se li vol donar un to personal, i a més es vol donar tot el codi python i la generació de les gràfiques que es presentaran en els articles.

Pots descarregar aquest capítol en el següent enllaç:

Equacions diferencials. MDF: Mètode de les diferències finites

En anàlisi numèrica, el mètode de les diferències finites és un mètode utilitzat per calcular de manera aproximada les solucions a les equacions diferencials usant equacions diferencials finites per aproximar derivades.

En aquest article hem fet una introducció i una exposició aclaridora sobre aquest mètode bàsic de càlcul numèric per a la resolució d’equacions diferencials, i ho hem aplicat a l’exemple de la balística, en tres supòsits: projectil sense fregament; fregament proporcional a la velocitat; i fregament proporcional al quadrat de la velocitat.

darts-machine v0.0.12. Avançant en el projecte

Espero que la versió 0.0.12 sigui la última abans de barrejar tot el codi amb la detecció i calibració dels dards, que utilitza dos càmeres web i la llibreria OpenCV.

La principal novetat de les darreres versions és que ara es pot rectificar una entrada dels dards. Malauradament, ara tinc clar que no es pot aconseguir una fiabilitat del 100% en la detecció dels dards, o sigui que més val pensar en la lògica que ens permetrà rectificar la puntuació dels dards. A més d’anular el punt i restablir l’estat anterior, es proposa els punts més propers, que són els més probables. Per exemple, si hem detectat D20 i és un error, els punts més probables són MISS, 20, D1 i D5.

He ficat colors en la consola, com es veu a la foto, doncs la idea és que en la màquina es podrà jugar en aquesta interfície de consola. Només falta barrejar el subsistema de detecció. Així doncs, la part gràfica, basada en SDL (ja he fet proves de la migració a SDL), i la interface dels botons que necessitaré, ho deixaré pel final de tot.

Els jocs implementats són el 301 (i les seves variants), Cricket, Count-Up, Halve It i Round the Clock. El codi està pensat per tal de què sigui fàcil afegir nous jocs de dard en el cas de què sigui necessari. Es pot jugar de 1 a 4 jugadors. El codi de moment no preveu jugar per equips, és una millora que es deixa per més endavant si fos necessari.

El projecte es troba al GitHub:

Detecció dels dards: Primeres proves

Ja tinc el prototipus del moble, i ja puc començar a fer proves per a detectar els dards. Com es veu al video, la detecció és molt bona. Si ens fixem en la configuració, la webcam està en el mateix pla XY que la diana. Això crec que té avantatges en la detecció del dard; i desavantatges: necessitaré 2 webcams, i possiblement 3 webcams per posicionar amb fiabilitat el dard en la diana.

Utilitzem la llibreria OpenCV sobre C++, i el flux bàsic consisteix en fer una captura de la webcam; llençar el dard; i fer una altra captura. Aleshores es fa la diferència de les imatges; es converteix a binari; s’aplica una màscara per eliminar bona part del dard. En aquest moment hem de veure la part de baix del dard, i ben clarament la punta. Tenim un número limitat de punts blancs. Amb aquests punts calculem el moment, que seria el centre de gravetat dels punts. I fent un bucle sobre tots els punts puc detectar el punt més inferior, que seria la punta del dard. Finalment, per eliminar possibles errors, calculo la distància entre la punta i el moment, que ha de ser un valor petit.

Encara queda molta feina per fer. D’una banda, s’ha de traduir la detecció del dard als possibles sectors on està el dard. Després afegir una altra webcam. I si afegeixo una tercera webcam, segurament necessitaré algun USB Hub. L’objectiu és utilitzar una sola Raspberry Pi 3 en tot el projecte.

Prototipus de diana de dards II

Fa uns dies vaig construir el primer prototipus de moble, i ja vam fer unes quantes proves per detectar els dards. He tret bastantes conclusions del primer prototipus, i he arribat a la conclusió de què s’ha de fer un nou moble, amb unes noves dimensions.

La primera consideració és la distància de la webcam a la diana. Amb la webcam amb què estic fent les proves (Creative Live! Cam Sync HD), la distància de la webcam al centre de la diana ha de ser com a mínim de 46 cm. Un altre tema important és que el pla de la càmera ha de coincidir exactament amb el pla XY de la diana (aquesta és la manera com jo abordo la posició de les càmeres, evidentment necessitaré dues càmeres, o potser tres). La il·luminació ha de ser uniforme, i sobretot, la construcció ha de ser sòlida. La clau està en què quan faig la sostracció entre una captura i la següent (en la què s’ha llençat un dard), la diferència entre les imatges ha de ser realment la detecció del nou dard (no ha d’haver-hi cap mena de soroll).

Ja he estat fent proves amb el nou prototipus, i val a dir que els resultats han estat molt bons (faré un post i un video properament), o sigui que puc afrontar amb optimisme la part més crítica del projecte.

Com es veu en la imatge, la idea que tinc del moble és integrar una pantalla de 15 polzades just a a sota de la diana, i ficar-hi també els tres o quatre botons que necessitaré per interactuar amb el software. La part del software la tinc bastant avançada, però ara m’he de centrar més en la detecció dels dards.

Un altre tema que he de fer els propers dies és convertir la posició del dard a la puntuació de la diana. No cal dir que amb una sola càmera (en el mateix pla XY que la diana) això és impossible, es necessitaran dues càmeres mínim.

Llaç groc: llibertat presos polítics

Finalment hem penjat el llaç groc des del nostre balcó fins al balcó del senyor Jaume, al bell mig del carrer Milà i Fontanals de Barcelona. Avui, 30 de gener de 2018, dia que no s’ha pogut celebrar el ple del parlament perquè el nostre president Puigdemont no pot venir a defensar la seva candidatura a la presidència de la Generalitat.

Cada dia recordem que hi ha presos polítics: Oriol Junqeras, Quim Forn, Jordi Sánchez i Jordi Cuixart, i gent que està a l’exili i que no pot tornar amb garanties. Delictes? El que és delicte és continuar sent súbdits del Regne d’Espanya. Algú dirà que no hi ha majoria per proclamar la idependència… doncs fem un referèndum.