MIt hoz a következő 50 év? – NJSZT jubileumi konferencia

njszt_50_logo2

njszt_50_logoA Neumann János Számítógép-tudományi Társaság (NJSZT) 2018. október 17-én tartotta a Magyar Tudományos Akadémia (MTA) 2. emeleti dísztermében 50. jubileumi konferenciáját. A Társaság méltó helyszínen, nagyszerű programmal készült a szép számban megjelent tagságnak és vendégeknek.

Az előadások

A konferencián előadó matematikusok és mérnökök nagyszerű, magukkal ragadó előadásokkal tették emlékezetessé az NJSZT 50. jubileumi konferenciáját. „Magas szinten könnyedén” (ahogy az LSI Kiadó tankönyvsorozatának címe is mondta) adtak áttekintő képet a rendezvényre választott témájukról, mutattak hozzá példákat kutatásaikból, és természetesen vázolták, hogy hol tartunk most és merre fejlődik világunk az Ő tudományterületükről nézve. Előadásaikat 10-10 oldalban is nehéz lenne összefoglalni, ezért csak pár, engem megragadó gondolatot elemek ki.

Lovász László: Kell-e matematika a számítógép-tudományhoz?

Lovász László, az idén 70 éves, energikus matematikus, egyetemi tanár, az MTA rendes tagja előadását „Kell-e matematika a számítógép-tudományhoz?” címmel tartotta. Lovász tanár úr fő területe a gráfelmélet, amelynek gyakorlatbeli alkalmazásában is számos területen részt vett (közlekedés, távközlési hálózatok, munkaszervezés).

Előadásában áttekintő képet adott a gráfelméleti kérdések kapcsán matematikai, bonyolultság-elméleti kérdésekről. Ezen a területen az egyik alapvető fogalom a polinomiális idő. Már Neumann János felvetette egy 1951-es előadásában egy játékelmélettel kapcsolatos algoritmusáról, hogy polinomiális idejű. (Egy algoritmus polinomiális idejű, ha lépésszáma korlátozható egy nk függvénnyel, ahol k rögzített szám.)

Lovász László

Lovász László egyik záró gondolata az utóbbi hónapokban hallott egy kijelentéshez kapcsolódott: „A mélytanulás ma már olyan gyors, hogy nem érdemes a matematikájával bajlódni.” Úgy tűnik, hogy a mélytanulás mélyén is gráfokra vonatkozó tétel van, a Szemerédi-féle regularitási lemma (sejtése).

Szász Domonkos: Neumann János egy kedves eredménye, az ergod-tétel

A második előadó Szász Domonkos matematikus, egyetemi tanár, akadémikus volt, aki lelkesedéssel és 77 éve tudásával beszélt Neumann János egy kedves eredményéről, az ergod-tételről. Az ergod-elmélet a XVII. századi fizikából származik, a nyomás és a térfogat szorzata konstans (pV = k) összefüggésből. Ezt a fenomelógiai tételt (közvetlenül észlelhető leírást) a nagy fizikusok igyekeztek aztán pontosan megfogalmazni. Neumann 1932-ben tette közzé ergod-elméleti tételét, amelynek a statisztikus fizika matematikai megalapozása szempontjából alapvető jelentősége van. Az ergod-tétel a nagy számok törvényének általánosítása, valamint az is érdekes, hogy a káoszelmélethez, az időjárási jelenségek vizsgálatához és a pillangóhatáshoz is elvezetett. (A pillangóeffektus kifejezés a kiindulási tényezők fontosságát foglalja magába a káoszelméletben.)

Bár az ergod-tételt nem Neumann publikálta először az Akadémiai Közleményekben, hanem Birkhof rövidebb cikkben és más érveléssel, általános pontokra bizonyítva. Később Neumann több írásában elemezte az ergod-tétel fontosságát.

Szász Domonkos

Az előadó Szász Domonkos is foglalkozott a tétellel. Ennek kapcsán például a statisztikus fizika egyik alapjaként szolgáló Boltzmann–Sinai ergodikus hipotézis igazolásában ért el áttörést. Eszerint egy dinamikai rendszer időbeli fejlődése során a fázistér szinte minden pontjába eljut.

Charaf Hassan: A mesterséges intelligencia kihívásai

A szünet után Charaf Hassan, a BME Automatizálási és Alkalmazott Informatikai Tanszék tanszékvezetője, egyetemi tanára a mesterséges intelligencia (MI) kihívásairól tartotta igen tempós előadást. Bevezetőjében áttekintést adott az MI mindössze 70 éves evolúciójáról: Artifical Intelligence, Machine Learning, Deep Learning, amely kiegészült aztán a Data Mininggel, Data Science-szel és Big Data-val.

A gartneri hájpolt ciklus (Gartner Hype Cycle) szerint az MI területén már a vállalatirányítás intelligens gépi irányítása van soron, mindenüvé beférkőzik életünkbe, azonnali (real-time) eredményekre van szükség, a neurális hálózatokkal mélytanulás zajlik stb. Mi is tapasztalhatjuk, hogy egyre „intelligensebb” a használt keresőmotor és a fényképezőgépünk, hogy emberi beszéddel (angolul) adhatunk parancsokat a navigációs stb. alkalmazásnak, használhatjuk multifunkciós nyomtatónkban a karakterfelismerő programot stb.

Az MI-ben mindehhez adott a folyamatos, nagy mennyiségű, sok fajta adat az egyre több kézi számítógépből, szenzorokból, közösségi oldalakról. Csökken az adattárolás költsége; a számolási költség (gondoljunk például a GPU-kra [Graphics Processing Unit]). Az igények növekednek, a nagy IT cégek fejlesztései gyorsak. A CISCO szerint 2022-re 50 millió mobileszköz lesz a Földön, amelyek képességei is nőnek. Továbbá erősödnek a felhőszolgáltatások, valamint az IoT használata (de már ma is része lehet otthonainknak). Az ipar a 4.0 verziójánál tart, amely az automatizálási és adatcsere a gyártási technológiákban. (Az ipar 3.0 a számítógépesítés és automatizálás volt; az ipar 2.0 a tömeggyártás, szerelőszalag, elektromosság; az ipar 1.0 a mechanizáció, a víz- és gőzerő használata.)

Charaf Hassan

A gépi tanulás célja például ma már, hogy olyan gépeket alkossunk, amelyek saját tapasztalatikból indulnak ki. Intenzíven kutatják például a kognitív intelligencia területén a beszéd- és képfeldolgozást, a természetes nyelveket, az emberi szokások megtanulását, a cikkek hangulatának megállapítását, a környezetérzékelést. Fontos területet képeznek az orvosi alkalmazások, például a stroke és infarktus megelőzéséhez vagy a szemfenékvizsgálathoz. Természetesen hallottunk példákat a BME-n folytatott számos MI alap-, alkalmazott és szakterület-specifikus kutatásból is.

És a jövő? Mutatja a gartneri hájpolt ciklus. Charaf Hassan előadása végén az XAI-t (Explanainable AI vagy Transparent AI), magyarul a megmagyarázható vagy más kifejezéssel átlátszó mesterséges intelligenciát emelte ki. Ennek az MI-nek az akciói könnyen érthetőek az ember számára. Bár még a tervezők sem tudják, hogyan és miért jutott az MI az adott döntéshez. A cél, hogy pontosabb eredményeket adjon. Kihívások az XAI-t tekintve a költségek, a kultúra a technológiaválasztáshoz, illetve a pontos célok meghatározása. Szerencsére Magyarországon is van kutatására állami támogatás, bár hiányzik még a nemzetközi összefogás.

A több szemeszternyi tananyag igen dinamikus összefoglalása után végül Hassan a „The Future of Machine Intelligence”, nem rég megjelent könyvet ajánlotta.

Kroó Norbert: A nanotechnológiától a kvantumtechnológiákig

Az utolsó előadó Kroó Norbert elismert szilárdtestfizika kutató, az MTA rendes tagja volt. A 84 éves kutató rengeteg képpel, ábrával és animációval illusztrált diasora mentén a tranzisztoroktól a nano- és kvantumtechnológiáig tekintette át a fejlődést, és tett összehasonlításokat. Például az 1947-ben létrehozott tranzisztortól mára eljutottunk a szembe ültethető chipekig. Célunk az agyi működéshez jobban hasonlító technológiák létrehozása. Az IBM 2014-ben készített TrueNorth chipje például neuromorf CMOS integrált áramkör.

A miniatürizálást a „The Scale of Things – Nanometers and More” képpel is érzékeltette Kroó Norbert. A jövő, amelynek kutatása már folyik, kiterjed többek között a molekuláris elektronikára, a karbon felhasználására, a spintronikára, a kvantum- és az optikai nanotechnológiára. Ezután hallottunk többek között a plazmonikáról, amely a plazmonokkal foglalkozó tudomány. A kutatók a fény segítségével a fémfelületen lévő ún. vezetési elektronokat hullámszerű mozgásra kényszerítik. A mozgásban sűrűsödések és ritkulások váltják egymást, amelyek hullámhossza rövidebb a gerjesztő fény hullámhosszánál. Ennek az új típusú fénynek a neve felületi plazmon. Kroó Norbert maga is készített mikroszkópot a plazmonok vizsgálatához.

Ezután áttekintést kaptunk a kvantumforradalmakról: az első a múlt században volt, amikor megfogalmazták az alapjelentéseit és megalkották valószínűségi elméletét; a második ebben a században, amikor megtanultuk manipulálni a kvantummechanikai folyamatokat. Ő is megjegyezte, hogy most sem kell attól tartania az embernek, hogy nem lesz munkája az új technológiák miatt, mert magasan képzett szakemberekre bőven lesz szükség. Említésre került a kvantumkriptográfiai is, valamint hogy mesterséges leveleket készítenek kvantum fotoszintézishez, amelyek lényegesen jobb hatásfokkal működnek, mint a mai áramtermelésre használt technológiák.

Kroó Norbert

Kroó Norbert előadását azzal zárta, hogy a vörösbegy vándorlása során navigációjához kvantummechanikával leírható jelenségeket is használ. Ennek mechanizmusa nagy vonalakban úgy zajlik, hogy a szemében lévő kriptokróm molekulák kémiai tulajdonságait közvetve befolyásolják a Föld mágneses mezejének finom változásai, mert eltéríthetik az elektronok kvantum-állapotát (spinjét). (Speciális kalitkába zárva madarakat és mérve a körülöttük lévő mágneses tér frekvenciáját, erejét, polaritását, a kutatók azt állapították meg, hogy a Föld mágnesesmező-erejének akár már 3000-ed része is megváltoztatta repülési irányukat, ami pedig csak az atomoknál is kisebb részecskék kvantumfolyamataival magyarázható.) És minden bizonnyal agyunk is kvantummechanikus…

Az NJSZT rendezvények ajánlása

Én évente több NJSZT rendezvényre elmegyek, amelyeken színvonalas tudományos, illetve ismeretterjesztő előadásokat hallhatok impozáns környezetekben – bár kétségtelen, hogy az MTA dísztermei kiemelkednek közülük. Ajánlom e blogbejegyzés olvasóinak is, hogy látogassanak el a közeljövőben valamelyik NJSZT-konferenciára.

Stream API lambda kifejezésekkel

lambda kifejezés logo

lambda kifejezés logoKorábban blogoltunk már a Stream API-ról és a lambda kifejezésekről: Ismerkedjünk lambda kifejezésekkel! Most másképpen közelítve újra foglalkozunk a témával.

Tanfolyamainkon szinte minden adatszerkezethez, tömbhöz, kollekcióhoz, fájlkezeléshez kötődő témakörben használjuk mindkettőt. Áttekintjük az ezekhez szükséges minimális verziószámot, a szintaktika fejlődését, az együttes használat elvi és gyakorlati lehetőségeit. A szükséges alapfogalmakat definiáljuk: hozzárendelési szabály, funkcionális interfész, metódus referencia, alapértelmezett metódusok, típus kikövetkeztetés képessége, generikus és funkcionális programozás. párhuzamos adatfeldolgozás lehetőségei.

Összehasonlításokat is végzünk: a lambda előtti verziók lehetőségei, korlátai, tipikus lambda hibák, mikor mit érdemes és mit nem érdemes használni, paraméterek típusait megadjuk vagy elhagyjuk, hagyományos kollekciós műveletek (azért a generikusság előtti időkre már nem térünk ki) és folyam feldolgozás (adatforrás meghatározása, közbenső és végső műveletek).

Most azokat a Stream API-hoz és lambda kifejezésekhez kötődő bevezető mintapéldákat ismertetjük, amiket részletesen elemzünk tanfolyamaink szakmai moduljának kontakt óráin. Ezek közül közösen meg is írunk néhányat, kombinálunk is néhányat egy-egy összetett adatfeldolgozó művelet megvalósítása során. Programozási tételenként specifikáljuk a feladatokat és megmutatunk néhány megoldást.

1. Adatforrás

100 db olyan véletlen kétjegyű számot állítunk elő generikus listában, amelyek között biztosan előfordul legalább egyszer a 80.

2. Elemi programozási tételek

2.1. Sorozatszámítás

Kiírjuk, hogy mennyi a listában lévő számok összege:

2.2. Eldöntés

Két kérdésre adunk választ. Van-e a listába lévő számok között 35 (konkrét elem), illetve páros (adott tulajdonságú elem)?

2.3. Kiválasztás

Kiírjuk, hogy a biztosan előforduló (legalább 1 db közül balról az első) 80, hányadik helyen (index) található meg:

2.4. Keresés

Keressük a 35-öt az eldöntés és a kiválasztás összeépítésével:

2.5. Megszámolás

Kiírjuk, hogy hány db öttel osztható szám (adott tulajdonságú elem) található a listában:

2.6. Szélsőérték-kiválasztás

Kiírjuk a listában lévő legkisebb számot (értéket, nem indexet):

3. Összetett programozási tételek

3.1. Másolás

Készítünk egy másolatot a lista elemeiről (közben esetleg mindegyiket meg is változtathatjuk):

3.2. Kiválogatás

A listában lévő számok közül kiválogatjuk az öttel osztható számokat:

3.3. Szétválogatás

Külön-külön szétválogatjuk a listában lévő páros és páratlan számokat:

3.4. Unió

A korábban szétválogatott páros és páratlan számokat tartalmazó halmazok unióját állítjuk elő:

3.5. Metszet

A korábban szétválogatott páros és páratlan számokat tartalmazó halmazok metszetét állítjuk elő:

3.6. Összefésülés

A korábban szétválogatott páros és páratlan számokat összefésüljük:

4. A program eredménye a konzolon

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A feladat a Java SE szoftverfejlesztő tanfolyam, a Java EE szoftverfejlesztő tanfolyam és a Java adatbázis-kezelő tanfolyam szakmai moduljának több alkalmához és az orientáló moduljának 1-4. óra: Programozási tételek alkalmához is kötődik. A Stream API-val és a lambda kifejezésekkel sokszor foglalkozunk.

Korábban is blogoltunk már a Stream API-ról és a lambda kifejezésekről: Ismerkedjünk lambda kifejezésekkel!

Kígyókocka grafikus felületen

Kígyókocka

KígyókockaA JavaFX grafikus felhasználói felületének és eseménykezelésének megvalósítása némileg eltér más Java GUI implementációk működésétől, például swing vagy Java3D. Főként animációk során hasznos használni. Megközelítése természetesen objektumorientált: a térbeli objektumok koordinátái, viselkedésük, transzformációkkal valósul meg, és azok is objektumok. A korábban elkészített konzolos kígyókocka programot valósítjuk meg most JavaFX GUI-val.

Ez egy két részből álló blog bejegyzés 2. része. A blog bejegyzés 1. része itt található.

A program működése

Kígyókocka JavaFX grafikus felületen

A program megvalósítása

A start() JavaFX életciklust indító eljárás felépíti a createGridUI() függvényt meghívva felhasználói felületet (színpad/jelenet JavaFX-ben), beállítva a méreteket, címsort, és meghívja az eseménykezelésért felelős handleRotateButtons() eljárást.

A createGridUI() függvény a grafikus felhasználói felület elemeit paraméterezi (szerepe szerint Factory metódus). Öt elemből álló rács ( GridPane osztályú grid nevű objektum) készül el, amelyre nyilakat tartalmazó nyomógombok (pl.: Button típusú btLeft objektum) kerülnek fel a négy égtájnak megfelelően, valamint rajta középen helyezkedik el a kígyókocka 3D megjelenítését megvalósító objektum. A nyilak entitásai az Unikód karaktertáblából származnak. A kígyókocka objektumot a meghívott createSnakeCube() függvény hozza létre. A Node osztályú snakeCube nevű objektum geometriai transzformációs objektumot is hozzá kell rendelni: ez most a négyirányú forgatást megvalósítani képes névtelen Rotate osztályú objektum lesz. A forgatást 5 paraméterrel célszerű beállítani (van rá megfelelő túlterhelt konstruktor), ezek rendre: szög, X, Y, Z tengely origója és a forgatás tengelye. Az objektumok tulajdonosi hierarchiája swing-es szemmel nézve szokatlannak tűnik, de szemléletben legalább azonos a Java3D és a JavaFX megvalósítás.

A createSnakeCube() függvény előállítja a színpadra/jelenetbe kikerülő kígyókockát Node osztályú objektumként. A konstans CUBE tömb egységvektor rendszerben tartalmazza a kígyót alkotó kockák középpontjait. Az első ciklus mindezt nagyítást alkalmazva skálázza. A második ciklus koordináta és pont transzformációk alkalmazásával ( moveToMidPoint: eltolás középre, rotateAroundCenter: forgatás a középpont körül) a kiinduló állapotnak megfelelő méretben és pozícióban elhelyezi a kígyó útvonalát mutató hengerobjektumokat. A konstrukciós és transzformációs műveletek esetén alkalmazkodni kell ahhoz, hogy a JavaFX koordinátarendszerben az X jobbra, az Y lefelé, a Z pedig befelé (a nézőponttól távolodva a térben) növekszik. A matematikai hátteret részletesen most nem magyarázzuk el.

A handleRotateButtons() eljárás a forgatás 4 nyíl eseménykezelésének hozzárendelést végzi el. A nyomógomb objektumok setOnAction() hozzárendelő metódusának paramétere EventHandler funkcionális interfésszel és lambda művelettel működik. A forgatás irányát hozzárendeljük a megfelelő nyomógombhoz. Ez még csak végrendelkezés a jövőre: csak definiáljuk, hogy minek kell majd történnie, ha bekövetkezik az esemény (valamelyik nyílra/nyomógombra kattint a felhasználó).

A rotateSnake() eljárás minden nyíl feliratú nyomógombra kattintva reagál a bekövetkezett eseményre. A rotateAxis objektum a forgatás tengelye, a paraméterként átvett direction enum-tól függ, szinkronban azzal a nyomógombbal, amelyikre kattintott a felhasználó.

Ötletek a továbbfejlesztésre

  • Lehetne többféle irány is, például a négy sarokba átlós vagy mélységi irányú elforgatással.
  • Beépülhetne többféle transzformáció is, például skálázás (kicsinyítés, nagyítás), eltolás (közelítés, távolítás).
  • A kígyó útvonalát mutató hengerobjektumok kirajzolásának sorrendjén lehetne változtatni, mert a megjelenítés nem tökéletes. Jelenleg néhány helyzetben lehetetlennek, Escher lehetetlen konstrukcióihoz hasonlónak tűnhet a kígyókocka. Ha a tér mélységéből a nézőpont felé közeledve rajzolnánk ki a hengerobjektumokat, akkor a 3D látvány nem sérülne.

Tanfolyamainkon JavaFX grafikus felülettel hangsúlyosan nem foglalkozunk, de egy-egy kész forráskódot közösen megbeszélünk, és össze is hasonlítjuk a swing-es változattal. Fejlesztünk játékprogramot, de inkább konzolosan, vagy swing-es ablakban, vagy webes alkalmazásként.

A grafikus felületek felépítésének megismerése fontos lépcső az objektumorientált programozás elmélyítéséhez, gyakorlásához. A grafikus felületekhez egy másik lényeges szemléletváltás is kapcsolódik, hiszen a korábbi algoritmusvezérelt megközelítést felváltja az eseményvezérelt (eseménykezelés).

Tudatosan hangsúlyozott MVC-s projektben megoldva a feladatot, a modell rétegben tárolhatnánk többféle kígyókocka megjelenítéséhez és animációjához szükséges adatszerkezetet és transzformációs objektumokat/metódusokat is és a nézet/vezérlő rétegekben biztosíthatnánk ezek közül a kijelölést/kiválasztást menüvel, ikonokkal, eszköztárral, gyorsbillentyűkkel.

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

Tanfolyamaink orientáló moduljának 9-12. óra: Mesterséges intelligencia alkalmához kapcsolódóan a kígyókocka véletlenszerű előállítása helyett stratégiával rendelkező visszalépéses algoritmust specifikálhatunk és implementálhatunk.

Ez egy két részből álló blog bejegyzés 2. része. A blog bejegyzés 1. része itt található.

Hogyan értékeljük az online vizsgafeladatot?

értékelés

Tanfolyamaink követelményeinek teljesítéséhez több online tesztet kell kitölteni és egy komplex, online vizsgafeladatot kell megoldani.

A feladatspecifikáció mindig részletes, maximum 1 db A4-es oldal terjedelmű, folyó szövegben felsorolásokat is tartalmaz és szándékosan nincsenek benne ábrák. Törekszünk az egyértelmű megfogalmazása, de hagyunk mozgásteret egyéni értelmezésre is, amit – megfelelő indoklással – elfogadhatunk. Az online vizsgafeladat megoldásához bármilyen segédeszközt lehet használni.

Az online vizsgafeladat megoldásának tervezésére, implementálására, tesztelésére és dokumentálására és határidőre való feltöltésére körülbelül egy hét áll rendelkezésre. Közben online konzultációt biztosítunk, ahol megbeszéljük az ezzel kapcsolatos kérdéseket és rávezető (nem konkrét) segítséget biztosítunk.

vizsgafeladat értékelése

Figyelembe vett szempontok az online vizsgafeladat értékelése során

  • Objektumorientált szemléletmód alkalmazása
  • MVC architektúrális tervezési minta alkalmazása
  • Logikus MVC szeparáció
  • Egyértelműen elhatárolódó felelősségi kör: a modell, a nézet és a vezérlő azt és csak azt oldja meg, amit, ahogyan, amikor, ahányszor kell
  • Adatbázis-kapcsolatért felelős rész szeparációja
  • Vezérlésért felelős rész szeparációja
  • Megjelenítésért felelős rész szeparációja
  • MVC kommunikációs irányok betartása, megfelelő adatkonverzió
  • Szükség esetén singleton és factory típusú tervezési minta alkalmazása
  • Adatbázis-kapcsolat megfelelő menedzselése, nyitás, zárás, kivételkezelés
  • Szükséges adatbázis-karbantartó (CRUD) művelek megfelelő megvalósítása
  • Specifikáció pontos értelmezése
  • Specifikáció pontos megvalósítása
  • Specifikáció alapján tesztelés megvalósítása
  • Megfelelő GUI komponensek alkalmazása, elhelyezése, paraméterezése, kommuniká­ciója, eseménykezelése
  • Adatbázis olvasása során a keletkező eredménytábla és/vagy kivételobjektum megfelelően jut el a nézet réteghez
  • Modellvezérelt fejlesztés elveinek alkalmazása
  • Szükség esetén POJO és ezek adatszerkezeteinek konstrukciós és szelekciós műve­letei
  • Eseménykezelés logikus működésének megtervezése és megvalósítása
  • Extrém tesztadatokkal való hibakeresés, tesztelés
  • Felesleges forráskód-részletek nincsenek
  • Szintaktikai és/vagy szemantikai hibák nincsenek (Java, SQL, HQL oldalon egyaránt)
  • Projekt megfelelő elnevezése és szerkezete
  • Logikus és konvencióknak megfelelő elnevezések következetes alkalmazása
  • Algoritmusban, folyamatokban, saját modellekben való eligazodás, alkalmazkodás ké­pessége, ezek szintjei és megvalósulása
  • Szükséges programozási tételek felismerése, megvalósításuk, összeépítésük
  • Logikus gondolkodás és feladatmegoldás szintjei és alkalmazásuk
  • Hatékonysági szempontok ismerete és alkalmazása

Az online vizsgafeladatot – a tanfolyamot záró 53-56. óra: Összefoglalás alkalommal – közösen, részletesen meg is beszéljük: lépések, rétegek, funkciók, ellenőrzési/tesztelési lehetőségek, hibakeresés, tipikus problémák a megoldás során.

vizsgafeladat értékelése