AILab - scripting language for Artificial Intelligence - Soft - Valcea - 2011 Nationala

Informatii generale

  • Categorie: Soft
  • Judetul: Valcea

Descriere

AILab este un limbaj de scripting ce permite crearea rapida de aplicatii care contin Inteligenta Artificiala. Software-ul contine cateva paradigme ale AI-ului:
-Retele neuronale(MLP,Kohonen,Carpeter,Hopfield)
-Algoritmi genetici
-Tehnici fuzzy
-Programare logica

Se poate folosi AILab intr-o gama larga de aplicatii precum: Procesarea imaginilor, clasificarea imaginilor, eye-tracking, pattern recognition, forecastig(vreme, financial, energetic), signal processing, robot-control, expert system si orice aplicatie a modele conexioniste.

AILab va permite ca intr-o “singura linie” sa reproduca zeci de lini scrise in C, Pascal - pentru a reproduce aceeasi functie. Soft-ul este orientat catre crearea rapida de aplicatii care sa contina Inteligenta Artificiala. Pentru a demontra capacitatea limbajului am creat mai multe exemple: -Speech recognition, Face recognition, Vocal User Interface(care vorbeste in Romana), Thief recognition, Recunoasterea amprentei spectrale a unui zgomot produs de un flex, Web browser care se reconfigureaza dupa clasificarea fetelor umane, clusterizare, si alte exemple cu algorimi geneitici(gasirea valori minime dintr-o functie, path-finding, aproximari de imagini) si programae logica(momentan nu e implementat)

Limbajul permite usor analiza codului, contine arbore sintactic, watch, step by step, breakpoints, run to cursor pentru debug, intellisense, help si alte facilitati. Codul rezultat poate fi usor utilizat in alte limbaje de programare.

Tehnologii

Borland Delphi, BusinessSkin

Cerinte sistem

Una bucata Windows

Realizatori

Budisteanu Ionut

  • Scoala: Colegiul National Mirceal cel Batran
  • Clasa: X
  • Judet: Valcea

Screenshots



Interesant :smiley:

Vezi ca ai scris “GIA-software” si oricum nu e platit host-ul :smile:) .

Ai refolosit ceva si din NeurosLab in crearea programului sau ai facut iara totul de la 0?

Multumesc pentru raspuns,

Bun venit la infoeducatie 2011. :smile:

Giga-Software o sa fie activ pana la concurs. Nu mai are hosting de o luna.
NeurosLab facea antrenarea si simularea retelei MLP si exportarea intr-un DLL a retelei MLP - topologia acesteia(straturi, functii de activare),weight, bias iar invatarea se face in NeurosLab. AILab este un limbaj de scripting care permite inlantuirea mai multor paradigme ale inteligentei artificiale si inglobarea lor intr-o aplicatie de programare procedurala. Algoritmi de invatare si simulare pentru MLP sunt similari cu cei folositi in NeurosLab, totusi foarte multe exemple pe care le-am facut in NeurosLab, le-am rescris in noul limbaj AILab. Practic bucati de cod care in partea cealalta se gaseau in sute sau chiar mii de lini aici se gasesc ca exemple sub forma unor functii, putandu-le inlantui cu procesari de imagini, inlantuindu-le cu alte paradigme exemplu Algoritmi Genetici.

Multumesc pentru postare

Legat de procesari de imagini, a fost acum un concurs pe topcoder organizat de NASA in care se impunea detectarea unor cratere dintr-o imagine. Ma apucasem si eu sa fac , insa a trebuit sa plec si am renuntat. Facusem destul de mult la program, insa oricum nu aveam sanse la premiu :smile:. Stiai de concurs? Ai participat?

Concursul: http://www.topcoder.com/tc?module=MatchDetails&rd=14570

Da, in mare parte asa facusem si eu insa mi-era destul de greu pentru ca nu am mai facut procesare de imagini inainte si invatam in timp ce implementam. Probabil cand o sa mai am timp o sa continui proiectul, insa nu prea ma pasioneaza :smiley: . Si oricum, nu cred ca aveam sanse sa iau chinezii de pe primele locuri :smile:)

Gandeste-te la ideea ca se merge acum foarte mult spre portabilitate. Tu vii cu un (nou) limbaj, dedicat ce-i drept pentru AI, dar … e un ALT limbaj care trebuie invatat si un ALT IDE care trebuie instalat. Cum rezolvi asta?
Totusi, chiar e un nou limbaj pe care il compilezi? Sau te folosesti de altele si folosesti compilatoarele/debuggerele lor aferente?

Ok, am inteles. M-am uitat si peste documentatie.
Problema totusi e ca librariile tale sunt DLL, ceea ce le face dependente de platforma windows. Nu ar fi mai bine sa incerci sa le scrii in Java si sa creezi o librarie .jar + plugin pentru eclipse? Gandeste-te ca userii carora te adresezi sunt majoritari cercetatori si folosesc predominant linux, da, da, chiar si matematicienii! De asemenea, pentru ei timpul e CRUCIAL si invatarea folosirii unui ALT IDE (AILab, daca folosesc windows) va fi un mic drawback. Nu e nevoie de reply, doar vreau sa incerci poate sa creezi cumva o solutie pentru asta.
Apreciez faptul ca te-ai gandit si la Matlab.

Uita-te aici:
http://robotics.stanford.edu/~ronnyk/mlc.html
http://www.cs.waikato.ac.nz/ml/weka/

Pentru mine Linuxu este o mare enigma, deci cunostiintele mele sunt reduse inclusiv cele de Java. Mi-am impus ca target sa trec pe .Net in urmatoru an. Cat despre restul de utilizatori in pare rau, programul l-am scris pentru a-mi fi mie un tool util in a scrie aplicatii cu AI, cat si a dovedi mie insumi ca pot face o astfel de aplicatie.
Intrucat nu am blog si mi-am facut cont de facebuc dintr-un rămăşag voi posta aici multumirile mele celor care in decursul aniilor prin feedbackurile lor m-au ajutat sa-mi imbunatatesc lucrarile… tu te afli printre ei. Bafta la facultate. :smile:

Mda…

Oops! Google Chrome could not find www.gia-software.com

Aplicatia mea de la close pentru soft utilitar.

Se bazeaza pe o distanta Levensthein in ideea ca daca minimizez operatii de adaugare si stergere caractere de a transforma din stringul a in stringul b, astfel am cat mai multe caractere care se potrivesc fara operatii de inserare/stergere.

Un thread ofera managmentul care incearca sa calculeze potrivirea de surse, initial face un DFS dupa aceea citeste datele asincron din fisiere le salveaza, si dupa aceea incearca sa calculeze diffuri. Pentru a calcula mai intai se determina complexitatatea de a calcula diff-ul fisierului a.txt si b.txt si se ordoneaza cu bouble sort in functie de complexitate(ex. ca sa nu fie 2 threaduri unu care sta 2 milisecunde si unul de sta 5 minute). Si dupa aceea initial se baga primele threaduri intr-o coada… se asteapta procesarea lor si dupa ce se elibereaza primul se introduce din nou in coada de threaduri si tot asa pana se calculeaza toate. Memoria o folosesc pentru a putea recunostitui si a vedea care sunt caracterele de se potrivesc cel mai bine.

M-am gandit la o solutie pentru a reduce dimensiunea matricie, si nu am gasit o astfel de solutie intrucat pe mine ma intereseaza sa reconsitui si solutia, si facand o analiza a metodei de a reconstitui cel mai lung subsir comun cu doar 2 lini care are o complexitate de nlog m nu cred ca se poate aplica si la aceasta distanta.

A nu se pune fisire mai mari decat 20 K deoarece se creaza o matrice de dimensiunea de 20k
20k = 419430400 octeti = 409600 ko = 400 mb ram. Plus aceasta metoda asincrona incearca sa deschida mai multe threaduri care calculeaza diff-ul. Default e selectat pentru 4 adica daca initial face 4 Levensthein pe ceea mai mare

In legatura cu cautarea pe google a fost scos deoarece facea foarte mult lag. Codul a fost paralelizat

Nu nu am stiut de concurs, mai scap si eu din ele. :laughing:
Problema e ca nu daca se poate face ci cat este de performant. Probabil s-au trimis sute de solutii, ceva asemanator am avut eu in lucrarea de anul trecut.
http://infoeducatie.ro/2010/participanti.php?what=1159

Nu este o problema daca detectezi un crater, o persoana sau un mar dintr-o imagine, problema este aceeasi, iti trebuie un software tolerant la erori, si metoda clasica de a rezolva aceasta problema implica: Eliminare zgomot, imbunatatirea contrastului, egalizare de histograma, skeletizare/derivate ale imaginii sau eventual binarizare cu mai multe praguri, operatii morfologice(inchideri, deschideri etc)… Scopul este sa faci o segmetare a imagini in partile ei componente practic sa obtii informatii despre continutul imaginii, iar apoi elementele pe care le obtii din segmentare le poti face o clasificare pe baza raportului de aspect, al centroidului, al dimensiunilor sau o clasificare cu retele neuronale sau tehnici fuzzy. Probabil NASA nu dorea un pattern matching, sau o rezolvare cu AI clasica cum am scris eu, ci cautau cumva o noua idee, nu de geaba fac ei concursurile astea. :stuck_out_tongue:

AILab nu este un compilator, este un interpretor care prezinta o masina virtuala AILab, si da posibilitatea creeari de executabile pe masina sursa.

De exemplu Flash desi e o masina virtuala, reuseste sa creeze executabile pe acele calculatoare la care este instalat flash. Are un template de executabil si in capsuleaza(bindeaza) interpretorul de flash si codul sursa al aplicatii de flash.

Similar face si AILab, la mine masina virtuala se baga in executabil si nu intrebuie instalata pe fiecare calculator.

Ideea de a scrie un compilator la mine este foarte veche insasi bucati dintr-un compilator le-am scris in anii trecuti si le-am prezentat in diverse concursuri viewtopic.php?t=9324
Incearcari ale mele mai vechi de a scrie compilatoare au fost prezentate la concursul GrepIT cat si la Piatra Neamt, Timisoara etc… bine inteles ca am primit si feedbackuri de la profesori de “birotica” ca un compilator poate fi scris numai de Microsoft si alte firme… totusi am acasa carti de teoria compilarii in care profesorii ca Nicolae Tandareanu si Luca Serbanat predau cursuri de teoria compilarii si automate finite acum 25 de ani cand nu exista Windows, si calculatoarelor functionau cu cartela. In aceste carti teoria compilarii este prezentata intr-o forma foarte abstracta si matematicizata dar totusi imbracata in teoria limbajelor formale si automatelor finitie dar totusi pana la urma un compilator este o simpla translatare a aceleasi informatii in mai multe formate, terminand prin asocierea unui graf parcurgerea liniara a acestuia si translatarea intr-un cod asamblor prelucrarea codului binar obtinut si atasarea headerului de executabil iar acuma masina virtuala este direct micro procesorul.

AILab nu creeaza ultima translatare din graful echivalent in cod masina, dar si aceasta parte a fost scrisa intr-o aplicatie minimalista pentru html, in care niste instructiuni generau o secventa de cod html, practic un compilator genereaza dintr-o instructiune o secventa in cod asamblor, bine inteles obtimieazeaza etc… un nivel mai dificil de implementat.

Faptul ca AILab este un interpretor de AI nu ii reduce generalitatea , prin aceeasi metoda pot fi scrise compilatoare si interpretoare in orice domeniu, teoria compilarii este generala orice student la nivelul actual in urma cursului de teoria compilari este pus sa implementez un mic interpretor de cateva instructiuni respectand formalismul matematic respectat la curs.