16. AUTOMATATANULÁS ALGORITMUSA
Három művelet ismétlése
o Split: Inkonzisztens állapotok szétválasztása
o Merge: Hasonló állapotok összevonása
-
-
b
+
+
a
a
-b
+
+
a
a
-b +
a
17. AUTOMATATANULÁS ALGORITMUSA
Három művelet ismétlése
o Split: Inkonzisztens állapotok szétválasztása
o Merge: Hasonló állapotok összevonása
o Color: Állapot véglegesítése
18. AUTOMATATANULÁS ALGORITMUSA
Három művelet ismétlése
o Split: Inkonzisztens állapotok szétválasztása
o Merge: Hasonló állapotok összevonása
o Color: Állapot véglegesítése
Művelet kiválasztása: metrika
o A művelet eredménye alapján
Művelet kiválasztása
Split
végrehajtása
Merge
végrehajtása
Color
végrehajtása
20. ÉRDEKES LEKÉRDEZÉSEK
Sokszor használt WHERE NOT
Merge
o Összevonandó állapotok tranzitív lezártja
Split: kategóriasorolás/részfamásolás
o Merge miatt több origNext él is lehet
o Melyik alapján soroljunk kategóriába?
21. WHERE NOT «MINTA»
Útvonal végének megtalálása
WHERE NOT (v)-[:NEXT]->()
:NEXT :NEXT
… …v :NEXT
22. WHERE NOT «MINTA»
Útvonal végének megtalálása
WHERE NOT (v)-[:NEXT]->()
:NEXT :NEXT
… …v :NEXT
23. WHERE NOT «MINTA»
Útvonal végének megtalálása
Útvonal elejének megtalálása
WHERE NOT (v)-[:NEXT]->()
WHERE NOT ()-[:NEXT]->(root)
:NEXT :NEXT
… …:NEXT
root
24. WHERE NOT «MINTA»
Útvonal végének megtalálása
Útvonal elejének megtalálása
WHERE NOT (v)-[:NEXT]->()
WHERE NOT ()-[:NEXT]->(root)
:NEXT :NEXT
… …:NEXT
root
27. MERGE +
-
:indexPair
:indexPair
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
:indexPair
:indexPair
+
-:NEXT
:NEXT
while (driver.run(createIndexPairs, mergeMap))
28. MERGE +
-
:indexPair
:indexPair
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
:indexPair
:indexPair
+
-:NEXT
:NEXT
MATCH (s1:IndexedMerge)-[:IndexPair*..]-(s2:IndexedMerge),
s1p = (s1)-[:NEXT*0..]->(s12:State), s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
WITH s12, s22, s1p, s2p,[s1r IN rels(s1p) | s1r.symbol] AS s1ss, [s2r IN rels(s2p) | s2r.symbol] AS s2ss,
[s1r IN rels(s1p) | s1r.Tmin] AS s1mins, [s2r IN rels(s2p) | s2r.Tmin ] AS s2mins,
[s1r IN rels(s1p) | s1r.Tmax] AS s1maxs, [s2r IN rels(s2p) | s2r.Tmax ] AS s2maxs
WHERE s1ss = s2ss AND s1mins = s2mins AND s1maxs = s2maxs
WITH collect([s12, s22]) as pairs
MATCH ()-[ip:IndexPair]->()
WITH max(ip.index) + 1 as nextIndex, pairs
UNWIND range(0, length(pairs)-1) as idx
WITH pairs[idx][0] as s12, pairs[idx][1] as s22, idx + nextIndex as edgeIndex
CREATE (s12)-[:IndexPair {index: edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
while (driver.run(createIndexPairs, mergeMap))
30. MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p = (s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
31. MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p = (s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
Ellenőrzés szempontjából
kritikus állapotpárok
32. MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p = (s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
s1 s1
s2 s2
Ellenőrzés szempontjából
kritikus állapotpárok
33. MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p = (s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
s1 s1
s2 s2
WITH s12, s22, s1p, s2p,
[s1r IN rels(s1p) | s1r.symbol] AS s1ss, [s2r IN rels(s2p) | s2r.symbol] AS s2ss,
[s1r IN rels(s1p) | s1r.Tmin] AS s1mins, [s2r IN rels(s2p) | s2r.Tmin ] AS s2mins,
[s1r IN rels(s1p) | s1r.Tmax] AS s1maxs, [s2r IN rels(s2p) | s2r.Tmax ] AS s2maxs
WHERE s1ss = s2ss AND s1mins = s2mins AND s1maxs = s2maxs
...
Ellenőrzés szempontjából
kritikus állapotpárok
34. MERGE
MATCH (s1:IndexedMerge)-[:IndexPair*]-(s2:IndexedMerge),
s1p = (s1)-[:NEXT*0..]->(s12:State),
s2p = (s2)-[:NEXT*0..]->(s22:State)
WHERE id(s1) > id(s2) AND length(s1p) = length(s2p)
AND NOT (s12)-[:IndexPair*0..]-(s22)
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXT
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
s1 s1
s2 s2
WITH s12, s22, s1p, s2p,
[s1r IN rels(s1p) | s1r.symbol] AS s1ss, [s2r IN rels(s2p) | s2r.symbol] AS s2ss,
[s1r IN rels(s1p) | s1r.Tmin] AS s1mins, [s2r IN rels(s2p) | s2r.Tmin ] AS s2mins,
[s1r IN rels(s1p) | s1r.Tmax] AS s1maxs, [s2r IN rels(s2p) | s2r.Tmax ] AS s2maxs
WHERE s1ss = s2ss AND s1mins = s2mins AND s1maxs = s2maxs
...
• Ugyan olyan hosszú útvonal
• Ugyan olyan események
• Stb.
Ellenőrzés szempontjából
kritikus állapotpárok
35. MERGE
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
36. MERGE
CREATE (s12)-[:IndexPair {index: edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
37. MERGE
CREATE (s12)-[:IndexPair {index: edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
Új megtalált indexpárok
megjelölése
38. MERGE
CREATE (s12)-[:IndexPair {index: edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
:indexPair :indexPair
Új megtalált indexpárok
megjelölése
39. MERGE
CREATE (s12)-[:IndexPair {index: edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
:indexPair :indexPair
Új megtalált indexpárok
megjelölése
while (driver.run(createIndexPairs, mergeMap))
40. MERGE
CREATE (s12)-[:IndexPair {index: edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
:indexPair :indexPair
Új megtalált indexpárok
megjelölése
while (driver.run(createIndexPairs, mergeMap))
Java kódból hívva
ciklikusan
41. MERGE
CREATE (s12)-[:IndexPair {index: edgeIndex}]->(s22)
SET s12:IndexedMerge, s22:IndexedMerge
Probléma
o Nem érzékel inkonzisztenciát
Megoldás
o Tranzitív lezárt
+
-
:indexPair
:indexPair
:indexPair
:indexPair
+
-:NEXT
:NEXTs1 s1
s2 s2
:indexPair :indexPair
Új megtalált indexpárok
megjelölése
while (driver.run(createIndexPairs, mergeMap))
Java kódból hívva
ciklikusan
44. SPLIT
Szétválasztás
o Egy élet szétvág
o Időpont alapján: 5
• Eredeti átmeneten
o Két végpont
• Kisebb: < t
• Nagyobb: ≥ t
o Eredmény
[1,4]
[5,6]
+
-
45. SPLIT
Probléma
o a csúcs összevonás eredménye
o b csúcsból újragenerált részfa
• Nagyobb részfába 6 miatt
• Kisebb részfába 1 miatt
:Origin
:Origin :Origin
[1,6]
1
6
b
6
:Origin :Origin
…
a
46. Megoldás
o „Legrövidebb” úton elérve a-t
o Utolsó szám alapján: 6
SPLIT
:Origin
:Origin :Origin
[1,6]
1
6
b
6
:Origin :Origin
…
MATCH (r:Red)-[n:NEXT]->(b:Blue)
WITH r, b, n.Tmax as Tmax, n.Tmin as
Tmin, n.symbol as symbol
UNWIND range(Tmin, Tmax-1) AS t
MATCH (b)-[:NEXT*0..]->(s1:State)-
[:Origin]->(so1:OrigState),
trace1=(so1)<-[OrigNext*0..]-
(redOrigNext:OrigState), (redOrigNext)<-
[no1:OrigNext]-(redOrig:OrigState)<-
[:Origin]-(r)
WHERE none(x IN nodes(trace1) WHERE
(x)<-[:Origin]-(r))
WITH r, b, t, Tmin, Tmax, symbol, s1,
no1, so1
a
47. Megoldás
o „Legrövidebb” úton elérve a-t
o Utolsó szám alapján: 6
SPLIT
:Origin
:Origin :Origin
[1,6]
1
6
b
6
:Origin :Origin
…
MATCH (b)-[:NEXT*0..]->(s1:State)-
[:Origin]->(so1:OrigState),
trace1=(so1)<-[OrigNext*0..]-
(redOrigNext:OrigState), (redOrigNext)<-
[no1:OrigNext]-(redOrig:OrigState)<-
[:Origin]-(r)
WHERE none(x IN nodes(trace1) WHERE
(x)<-[:Origin]-(r)) AND
toInteger(no1.time)>t
WITH r, b, t, metric, Tmin, Tmax,
symbol, collect(so1) as so1s
MATCH (b)-[:NEXT*0..]->(s2:State)-
[:Origin]->(so2:OrigState),
trace2=(so2)<-[OrigNext*0..]-
(redOrigNext:OrigState), (redOrigNext)<-
[no2:OrigNext]-(redOrig:OrigState)<-
[:Origin]-(r)
WHERE none(x IN nodes(trace2) WHERE
(x)<-[:Origin]-(r)) AND
toInteger(no2.time)<=t
RETURN r, b, t, metric, Tmin, Tmax,
symbol, so1s, collect(so2) as so2s
a
48. SPLIT
:Origin
:Origin :Origin
[1,6]
1
6
6
:Origin :Origin
…
a s2
ao
an
b
Megoldás
o „Legrövidebb” úton elérve a-t
o Utolsó szám alapján: 6
MATCH
(a)-[:NEXT*0..]->(s2:State)-[:Origin]->(b:OrigState),
trace=(b)<-[OrigNext*0..]-(an:OrigState),
(an)<-[no:OrigNext]-(ao:OrigState)<-[:Origin]-(a)
Szétvágandó él az
eredeti lefutásokban
49. SPLIT
Szétvágandó él az
eredeti lefutásokban
:Origin
:Origin :Origin
[1,6]
1
6
6
:Origin :Origin
…ao
a
an
s2
b
MATCH
(a)-[:NEXT*0..]->(s2:State)-[:Origin]->(b:OrigState),
trace=(b)<-[OrigNext*0..]-(an:OrigState),
(an)<-[no:OrigNext]-(ao:OrigState)<-[:Origin]-(a)
Megoldás
o „Legrövidebb” úton elérve a-t
o Utolsó szám alapján: 6
50. SPLIT
WHERE none(x IN nodes(trace) WHERE (x)<-[:Origin]-(a))
Legrövidebb lehetséges út
keresése, olyan node, amiből
csak közvetlenül lehet elérni
az „a” csúcsot.
Megoldás
o „Legrövidebb” úton elérve a-t
o Utolsó szám alapján: 6
:Origin
:Origin :Origin
[1,6]
1
6
6
:Origin :Origin
…
a s2
ao
b
an
MATCH
(a)-[:NEXT*0..]->(s2:State)-[:Origin]->(b:OrigState),
trace=(b)<-[OrigNext*0..]-(an:OrigState),
(an)<-[no:OrigNext]-(ao:OrigState)<-[:Origin]-(a)
53. Vizualizáció
Adatmodell könnyen fejleszthető
o Új címkék, tulajdonságok, csúcsok
o Nem kell sémát definiálni előre
NEO4J ELŐNYEI
54. Vizualizáció
Adatmodell könnyen fejleszthető
o Új címkék, tulajdonságok, csúcsok
o Nem kell sémát definiálni előre
Gráfműveletek magasszintű leírása Cypher nyelven
NEO4J ELŐNYEI
67. TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
RETURN *
dummy
1
1
68. TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
RETURN *
dummy
1
1
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
MATCH (n)
RETURN *
node dummy
:Red {prop1: "val1"} 1
:Red {prop1: "val2"} 1
:Green {value: 13} 1
:Red {prop1: "val1"} 1
:Red {prop1: "val2"} 1
:Green {value: 13} 1
69. TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
RETURN *
dummy
1
1
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH 1 AS dummy
MATCH (n)
RETURN *
node dummy
:Red {prop1: "val1"} 1
:Red {prop1: "val2"} 1
:Green {value: 13} 1
:Red {prop1: "val1"} 1
:Red {prop1: "val2"} 1
:Green {value: 13} 1
Descartes-szorzat
minden sor
kétszer jelenik meg
70. TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
RETURN *
dummy
2
71. TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
RETURN *
dummy
2
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
MATCH (n)
RETURN *
node dummy
:Red {prop1: "val1"} 2
:Red {prop1: "val2"} 2
:Green {value: 13} 2
72. TÖBB LEKÉRDEZÉS ÖSSZEFŰZÉSE
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
RETURN *
node
:Red {prop1: "val1"}
:Red {prop1: "val2"}
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
RETURN *
dummy
2
MATCH (node:Blue)
REMOVE node:Blue
SET node:Red
WITH count(*) as dummy
MATCH (n)
RETURN *
node dummy
:Red {prop1: "val1"} 2
:Red {prop1: "val2"} 2
:Green {value: 13} 2
Pontosan 1 sor
eredmény
második lekérdezésben
nem lesz ismétlődés
90. LEKÉRDEZÉSEK FUTTATÁSA
Információ átadása lekérdezések között?
Csúcs címkézése
Új csúcs ideiglenes információval
Embedded használat esetén
eredmény továbbadása paraméterként
91. LEKÉRDEZÉSEK FUTTATÁSA
Információ átadása lekérdezések között?
Csúcs címkézése
Új csúcs ideiglenes információval
Embedded használat esetén
eredmény továbbadása paraméterként
redNode num
:Red {prop1: "val1"} 1
92. LEKÉRDEZÉSEK FUTTATÁSA
Információ átadása lekérdezések között?
Csúcs címkézése
Új csúcs ideiglenes információval
Embedded használat esetén
eredmény továbbadása paraméterként
redNode num
:Red {prop1: "val1"} 1
Pontosan 1 sor
eredmény
93. LEKÉRDEZÉSEK FUTTATÁSA
Információ átadása lekérdezések között?
Csúcs címkézése
Új csúcs ideiglenes információval
Embedded használat esetén
eredmény továbbadása paraméterként
redNode num
:Red {prop1: "val1"} 1
WITH $redNode AS redNode
MATCH (g:Green {num: $num})
CREATE (redNode)-[:Edge]->(g)
Pontosan 1 sor
eredmény
94. CIKLUS
Sok „ciklus jellegű” probléma megoldható listákkal:
o List comprehension [x IN xs WHERE condition | f(x)]
o Reduce: reduce(acc = "", x IN list | acc + x.prop)
95. CIKLUS
Sok „ciklus jellegű” probléma megoldható listákkal:
o List comprehension [x IN xs WHERE condition | f(x)]
o Reduce: reduce(acc = "", x IN list | acc + x.prop)
De ciklusra szükség lehet
o Java kódból lekérdezések futtatása
while (gds.execute(conditionQuery).hasNext()) {
gds.execute(step1Query);
gds.execute(step2Query);
}
96. CIKLUS
Sok „ciklus jellegű” probléma megoldható listákkal:
o List comprehension [x IN xs WHERE condition | f(x)]
o Reduce: reduce(acc = "", x IN list | acc + x.prop)
De ciklusra szükség lehet
o Java kódból lekérdezések futtatása
o Ciklusfeltétel az eredmény sorainak száma alapján
while (gds.execute(conditionQuery).hasNext()) {
gds.execute(step1Query);
gds.execute(step2Query);
}
100. IMPORT-EXPORT
Algoritmus állapotának Գé
APOC* GraphML import-export
*Awesome Procedures on Cypher
// save
CALL apoc.export.graphml.all('my.graphml',
{storeNodeIds:true, readLabels:true, useTypes:true})
// load
MATCH (n) // delete all
DETACH DELETE n
WITH count(*) AS dummy //-----------------
CALL apoc.import.graphml('my.graphml',
{storeNodeIds:true, readLabels:true, useTypes:true})
YIELD nodes, relationships
WITH count(*) AS dummy //-----------------
MATCH (n) RETURN n // show all
107. VISSZALÉPÉSES KERESÉS (BACKTRACKING)
Ha vissza kell tudni állni egy korábbi állapotra
és onnan folytatni
Megoldások:
o Import-export
?
Metrika: 5 12 8
108. VISSZALÉPÉSES KERESÉS (BACKTRACKING)
Ha vissza kell tudni állni egy korábbi állapotra
és onnan folytatni
Megoldások:
o Import-export
o Tranzakció meghiúsulása
• Csak egy szintű visszalépésre
?
Metrika: 5 12 8
110. HIBAKERESÉS
Futtatás során állapotok rögzítése és visszajátszása
o Visszajátszásnál előző állapot külön csúcsban tárolva
111. HIBAKERESÉS
Futtatás során állapotok rögzítése és visszajátszása
o Visszajátszásnál előző állapot külön csúcsban tárolva
o Mentett lekérdezés a léptetésre
112. HIBAKERESÉS
Futtatás során állapotok rögzítése és visszajátszása
o Visszajátszásnál előző állapot külön csúcsban tárolva
o Mentett lekérdezés a léptetésre
115. HIBAKERESÉS
Bonyolult hibáknál
o Hibamintát Cypherben felírni
o Kódban breakpoint, ha megtalálta
MATCH (node:Faulty)
RETURN node
if (gds.execute(query).hasNext())
// breakpoint
116. HIBAKERESÉS
Bonyolult hibáknál
o Hibamintát Cypherben felírni
o Kódban breakpoint, ha megtalálta
o Adott állapot betöltése
o Léptetés az állapotok között
MATCH (node:Faulty)
RETURN node
if (gds.execute(query).hasNext())
// breakpoint
124. TDK ÉS SZAKDOLGOZATOK
Gujgiczer Anna:
Időzített rendszerek tanulás alapú analízise.
BSc szakdolgozat
Elekes Márton:
Modellvezérelt automatatanulás.
BSc szakdolgozat
Elekes Márton, Gujgiczer Anna:
Modellalapú automatatanulás formális modellek szintéziséhez.
TDK dolgozat
127. A CYPHER KIFEJEZŐEREJE
A legtöbb lekérdezés P-beli
Két diszjunkt útvonal létezésének ellenőrzése már NP-teljes
A Cypher nyelv Turing-teljes
o Listanézetek, reduce
o A gráf szalagként használható
Cypher 9 (aktuális verzió)
Cypher 10 (multiple graph-ok támogatása)
128. ÖSSZEFOGLALÁS
Neo4j prototípus
o Gyors fejlesztés
o Specifikus problémákra APOC eljárások
Felmerülő problémák
o APOC bug
o Megjelenítőfelület hiányosságai
o Fixpont hiánya
Javasolt felhasználás
o Prototipizálás
o Utána újraírni imperatív kóddal
130. KÖSZÖNETNYILVÁNÍTÁS
Az Emberi Erőforrások Minisztériuma ÚNKP-17-1-I. kódszámú
Új Nemzeti Kiválóság Programjának támogatásával készült
Az MTA-BME Lendület Kiberfizikai Rendszerek Kutatócsoport
szakmai támogatásával készült