analiza druŠtvenih mreŽa u deduktivnim jezicima
TRANSCRIPT
SVEUČILIŠTE U ZAGREBU
FAKULTET ORGANIZACIJE I INFORMATIKE
V A R A Ž D I N
Ivan Ivanović
ANALIZA DRUŠTVENIH MREŽA U DEDUKTIVNIM JEZICIMA
ZAVRŠNI RAD
Varaždin, 2013.
SVEUČILIŠTE U ZAGREBU
FAKULTET ORGANIZACIJE I INFORMATIKE
V A R A Ž D I N
Ivan Ivanović
Matični broj: 36017/07–I
Studij: Poslovni sustavi
ANALIZA DRUŠTVENIH MREŽA U DEDUKTIVNIM JEZICIMA
ZAVRŠNI RAD
Mentor:
Doc.dr.sc. Markus Schatten
Varaždin, lipanj 2013.
I
Sadržaj
1. Uvod .................................................................................... 1
2. Pregled literature .................................................................. 2
3. Teorija grafova .................................................................... 4
3.1. Pojam grafa ..................................................................................................................... 4
3.2. Planarnost grafa .............................................................................................................. 5
3.3. Usmjerenost grafa ........................................................................................................... 6
3.4. Stupanj čvora .................................................................................................................. 9
3.5. Povezivanje ................................................................................................................... 10
3.6. Ciklusi u grafu .............................................................................................................. 11
3.7. Stabla ............................................................................................................................ 13
3.8. Razapinjuća stabla ........................................................................................................ 14
3.9. Pretraživanje stabla ....................................................................................................... 14
3.10. Težinski grafovi ..................................................................................................... 16
4. Društvene mreže ................................................................ 17
4.1. Analiza mreža ............................................................................................................... 17
4.2. Kratki pregled povijesti razvoja društvenih mreža ....................................................... 17
4.3. Fenomen malog svijeta ................................................................................................. 20
5. Deduktivni jezici ................................................................ 22
5.1. XSB .............................................................................................................................. 23
5.2. Logika prvog reda ......................................................................................................... 23
6. Aplikacija .......................................................................... 25
7. Primjeri korištenja aplikacije ............................................. 30
8. Zaključak ........................................................................... 31
Abecedni popis korištene literature ....................................... 32
Prilog 1: Kod programa ........................................................ 33
1
1. Uvod
Društvene mreže kakve ih danas poznajemo pojavljuju se i šire usporedno s globalnom
internetizacijom. Iako sam početak razvoja društvenih mreža datira mnogo ranije, tek
razvojem on-line servisa socijalne interakcije započinje sve veća potreba za promatranjem,
analiziranjem i vizualiziranjem takvih mreža. Danas imamo razvijenu kompletnu znanost koja
proučava podatke o korisnicima, interakcije između korisnika, kvantificira podatke, te ih
vizualizira pomoću grafova.
U ovom radu autor će prikazati analizu društvenih mreža pomoću deduktivnih jezika.
Za početak će autor opisati osnovne pojmove, koje je prijeko potrebno shvatiti kako bi
provedba analize bila dovoljno jasna. Tako rad započinje poglavljem o teoriji grafova.
Prikazani su osnovni pojmovi vezani uz samu teoriju, te pomoću njih važniji pojmovi
neposredno vezani uz samu izradu aplikacije. Glavni pojam koji svakako dolazi do izražaja je
pojam pretraživanja prvo-u-širinu (eng. breath-first search, BFS). Nakon upoznavanja s
teorijom grafova bit će prikazan kratki osvrt na povijest razvoja društvenih mreža, kako bismo
vidjeli kako razvoj mreža, tako i razvoj samih sustava za analizu istih mreža. Nakon ovog
poglavlja prelazimo na upoznavanje s poviješću razvoja logičkog programiranja, te samog
programskog jezika Prolog, odnosno njegove implementacije XSB.
Nakon prikaza teoretske pozadine autor će prikazati aplikaciju za analizu društvenih
mreža. Prvenstveno to znači objasniti od kojih se dijelova i atributa aplikacija sastoji. Nakon
opisa aplikacije, te njenih datoteka bit će prikazani primjeri korištenja iste. Time će na
realnim primjerima biti vidljiva sama analiza društvene mreže.
2
2. Pregled literature
Tokom pisanja poglavlja o teoriji grafova autor se najviše oslanja na knjigu autora
K.Bogart i sur. pod naslovom Discrete mathematics for computer science iz 2005. godine.
Ovo djelo sastoji se od šest velikih poglavlja. Autori predstavljaju u prvom poglavlju teoriju
brojanja, a u drugom osnove kriptografije i teorije brojeva. U trećem poglavlju predstavljen je
pregled logike i dokaza, u četvrtom principi indukcije i rekurzije, a u petom vjerojatnosti.
Najvažnije poglavlje za ovaj rad je poglavlje 6: Grafovi. Unutar ovog poglavlja predstavljeni
su pojmovi vezani uz grafove, stabla, razapinjuća i korjenska stabla, Eulerovi i Hamiltonovi
grafovi, teorija sparivanja, te bojenje grafova. Najveću važnost unutar ovog poglavlja autoru
predstavljaju poglavlja pojmova vezanih uz grafove, te stabla, razapinjuća i korjenska stabla.
Drugo važno djelo na području teorije grafova svakako je knjiga Blaženke Divjak i
Alena Lovrenčića driskretna matematika s teorijom grafova iz 2005. godine. Ovo djelo sastoji
se od uvoda, poglavlja o matematičkoj logici, zatim poglavlje o diskretnoj matematici,
poglavlje o algoritmima, poglavlje o teoriji grafova, poglavlje o algebarskim strukturama, te
poglavlje o matematičkoj teoriji računalstva. Autoru je svakako najvažnije poglavlje o teoriji
grafova unutar kojeg se ističu dijelovi o osnovnim pojmovima vezanim uz grafove, stablima,
usmjerenim grafovima, bojenju grafova, te sparivanju unutar grafova. Autoru su od najveće
važnosti dijelovi koji opisuju osnovne pojmove vezane uz grafove, te potpoglavlje koje
opisuje stabla.
Osim prethodno predstavljenih djela autor tokom pisanja poglavlja o teoriji grafova
koristi i djelo R.Deinstel-a Graph Theory, 3rd electronic edition iz 2005. Unutar ove knjige
nalazi se potpuno opisana teorija grafova, no autor koristi najviše prvo poglavlje: Osnove.
Autor također koristi neke dijelove iz djela R.Sedgewick i K.Wayne Algorithms – fourth
edition iz 2011. Posebice se to odnosi na poglavlje 4: Grafovi, odnosno potpoglavlje o
usmjerenim grafovima.
Kada govorimo o poglavlju o društvenim mrežama autoru najviše koristi djelo M.E.J.
Newman-a Networks an Introduction, izdano 2010. godine. Djelo se sastoji od nekoliko
poglavlja. Unutar prvog poglavlja o empirijskim proučavanjima mreža autor najviše koristi
potpoglavlje o društvenim mrežama, posebice prikazujući povijest društvenih mreža, te
fenomen malog svijeta. Nadalje su u djelu prikazane osnove teorije mreža, računalni
algoritmi, mrežni modeli, te procesi na mrežama. Unutar zadnjeg dijela autor najviše koristi
poglavlje 19, opisujući prvenstveno Kleinbergov model.
Autoru je također iznimno važno istaknuti djelo P.Mika-e Social Networks and
Semantic Web. Ovo djelo sastoji se od dva osnovna dijela. Prvi dio predstavlja semantički
web, dok drugi, daleko važniji za ovaj rad predstavlja analizu društvenih mreža. Autoru
najviše koristi opis pojma analize društvenih mreža, te povijest njena razvoja, unutar drugog
poglavlja.
3
Na ovom je području također važno napomenuti djelo F.Karinthy-ja Everything is
different iz 1929. godine. Unutar ovog djela autor koristi članak Chains-Links. Sadržaj ovog
članka predstavlja začetke znanosti o društvenim mrežama.
Također je važno djelo J.Morena Who shall survive iz 1953. godine. Unutar ovog
djela Moreno prikazuje osnove Sociometrije, te svoja istraživanja. Autoru je od najveće
važnosti prva knjiga djela pod naslovom Sustav sociometrije.
Tokom pisanja poglavlja o deduktivnim jezicima autor za prikaz povijesti razvoja
koristi internetske izvore podataka, od kojih je posebno važno istaknuti djelo Rosebrugh.R.
dostupno na adresi http://www.mta.ca/~rrosebru/oldcourse/371199/prolog/history.html
(dostupno 28.05.2013.). Unutar ovog djela nalazimo kratki opis povijesti razvoja
programskog jezika Prolog, njegovog interpretera i prevodioca koda.
U drugom dijelu poglavlja nalazimo prikaz logike prvog reda, za što autor koristi djelo
M.Vukovića Matematička logika. Ovo djelo sastoji se od dva velika poglavlja. Prvo poglavlje
objašnjava klasičnu logiku sudova, dok drugo poglavlje, autoru važnije predstavlja logiku
prvog reda. Ovo poglavlje prikazuje teoritsku pozadinu i definicije vezane uz logiku prvog
reda, te primjere te teorije.
Tokom izrade programskog koda najviše koristi autor ima od XSB priručnika,
dostupnog na web stranici http://xsb.sourceforge.net/manual1/ (dostupno 03.06.2013.).
Priručnik služi kao potpora programerima, opisujući temeljne pincipe uporabe XSB-a. Unutar
priručnika opisana je okolina u kojoj radimo, odnosno izgled i rad interpretera i prevodioca.
Nadalje su prikazane osnove rada, tj. način pisanja programskog koda. U drugom dijelu
priručnika su objašnjeni načini rada s dodacima, odnosno bibliotekama i paketima, koje po
potrebi programer može uključivati u program.
4
3. Teorija grafova
3.1. Pojam grafa
K.Bogart, C.Stein i R.L.Drysdale u djelu Discrete mathematics for computer science
(2005:310) navode sljedeće:
Graf se sastoji od niza čvorova (eng. vertex, node) i niza bridova (eng. edge) i
ima svojstvo da svaki brid posjeduje dva (nije obvezno da su različiti) čvora.
Te čvorove, s kojima je brid povezan nazivamo krajnjim točkama (eng.
endpoints). Kažemo kako se brid pridružuje (eng. join) krajnjim točkama, te
kako su dvije krajnje točke susjedne (eng. adjacent) ako im je pridržen isti brid.
Ukoliko je čvor krajnja točka brida, tada kažemo kako su brid i čvor
incidentni.
Definicija 1: Graf je uređeni par G = (V, E). V predstavlja skup čvorova, dok E
predstavlja skup bridova grafa za koje vrijedi E V x V. Elementi E su dvoelementni
podskupovi od V. Također treba uzeti u obzir kako vrijedi E ∩ V = 0 (R.Diestel; Graph
Theory; Electronic edition; 2005:2, B.Divjak i A.Lovrenčić; Diskretna matematika s teorijom
grafova; 2005:193). Osnovne primjere grafova možemo vidjeti na slici 3.1.
Slika 3.1: Primjeri grafova
Definicija 2: Za par čvorova u i v kažemo da su susjedni ako postoji brid e koji ih
povezuje. Kažemo kako je brid e incidentan čvorovima u i v.
Bridovi e i f su susjedni ukoliko imaju barem jedan zajednički čvor (B.Divjak i
A.Lovrenčić; Diskretna matematika s teorijom grafova; 2005:194). Primjeri susjednih
čvorova i susjednih bridova ilustrirani su na slici 3.2.
5
Slika 3.2: Primjeri susjednih čvorova i susjednih bridova
B.Divjak i A.Lovrenčić u djelu Diskretna matematika s teorijom grafova (2005:194-
196) navode sljedeće:
Brid koji je incidentan samo s jednim jedinim čvorom naziva se petlja.
Graf G je konačan ako su oba skupa V i E konačni (V predstavlja skup čvorova
grafa, dok E predstavlja skup bridova grafa).
Graf je jednostavan ukoliko ne sadrži petlje i ukoliko ne postoje dva brida koji
spajaju isti par čvorova.
Pseudograf je graf koji može sadržavati petlje.
Jednostavni graf, u kojem je svaki par vrhova spojen jednim bridom nazivamo
potpuni graf (eng. complete graph).
Bipartitivni graf (eng. bipartite graph) je graf za čiji skup čvorova postoji
particija V = {X, Y} dva skupa X i Y, tako da svaki brid ima jedan kraj u X, a
drugi u Y.
Potpuni bipartitivni graf je bipartitivni graf kod kojeg je svaki vrh iz X spojen
sa svakim vrhom u Y točno jednim bridom.
Stupanj (valencija) čvora v je broj d(v) bridova of G incidentnih sa v.
3.2. Planarnost grafa
Definicija 3: Graf G je planaran (ravninski) ako se grafički može predočiti tako da se
bridovi sijeku samo u čvorovima (B.Divjak i A.Lovrenčić; Diskretna matematika s teorijom
grafova; 2005:194). Ovakav graf prikazan je na slici 3.3.
Ukoliko graf ne možemo preodčiti tako da se bridovi sijeku samo u čvorovima,
odnosno ukoliko imamo slučaj da se bridovi sijeku, a da njihovo sjecište nije čvor, tada
govorimo o neplanarnom grafu. Primjer takvog grafa imamo na slici 3.4.
6
Slika 3.3: Primjer planarnog grafa
Slika 3.4: Primjer neplanarnog grafa
Također je potrebno naglasiti, kada govorimo o grafovima u svrhu analiziranja
društvenih mreža, kako tada govorimo o kompleksnim grafovima, ponekad s tisućama
korisnika i interakcijama između njih. Tada najčešće nije moguće mrežu vizualizirati potpuno
planarno. U tom slučaju planarnost ne gledamo strogo teoretski, pa kažemo da ipak postoji
mogućnost planarnosti takvog grafa.
3.3. Usmjerenost grafa
U slučaju kada društvene mreže promatramo putem grafova, treba reći kako nam
najčešće čvorovi predstavljaju korisnike, dok bridovi prestavljaju veze (eng. relationships)
između korisnika. Simetrija veze predstavlja postojanost veza između između pojedina dva
čvora a i b, te ujedno i postojanost simetrične veze između b i a.
Pomoću simetrije veze dolazimo do pojma usmjerenosti grafa. Neusmjereni grafovi
sadrže svojstvo simetrije veze. S druge strane imamo usmjerene grafove (eng. directed
graphs; digraph) kod kojih svojstvo simetrije veze nije nužno (K.Bogart, C.Stein i
7
R.L.Drysdale;Discrete mathematics for computer science;2005:311). Primjer usmjerenog
grafa imamo na slici 3.5.
R.Sedgewick i K.Wayne u djelu Algorithms – fourth edition (2011) navode sljedeće:
Usmjereni graf (digraph) je skup čvorova i kolekcija usmjerenih bridova takva
da svaki brid spaja određeni par čvorova. Kažemo kako usmjereni brid
pokazuje od (eng. Points from) prvog čvora u paru i pokazuje na (eng. Points
to) drugi čvor u paru. Koristimo oznake od 0 do V-1 u V-čvornom grafu.
Slika 3.5: Primjer usmjerenog grafa
Definicija 4: Put (eng. path) u grafu je izmjeničan slijed čvorova i bridova, koji
započinje i završava s čvorem, svaki brid povezuje čvor sa sljedećim čvorem u nizu, te niti
jedan čvor se ne pojavljuje u nizu više od jednom.
Ukoliko je u nekom putu prvi čvor a, a poljednji čvor d, tada kažemo kako imamo put
od a do d.
Primjer puta: A {A, B} B {B, C} C {C, D} D. Ovakav primjer ilustriran je na slici
3.6.
Slika 3.6: Primjer puta u grafu
8
Duljina puta (eng. lenth of a path) je zbroj bridova koji se nalaze u putu. Duljina
najkraćeg puta između čvorova u grafu naziva se udaljenost (eng. distance) između čvorova.
Šetnja (eng. walk) u grafu je put kod kojega ne vrijedi uvjet da se jedan čvor ne
pojavljuje u nizu više od jednom. Duljina šetnje je broj bridova koje sadrži
Kažemo da ukoliko postoji šetnja između dva odabrama čvora a i d u grafu G, tada
postoji i put između čvorova a i d u grafu G (K.Bogart, C.Stein i R.L.Drysdale;Discrete
mathematics for computer science;2005:312).
9
3.4. Stupanj čvora
Definicija 5: Stupanj čvora u grafu je broj koji govori koliko je puta čvor incidentan s
bridovima grafa. Stupanj čvora x je broj bridova između čvora x i drugih čvorova plus
dvostruki broj petlji na čvoru x.
Ukoliko pretpostavimo kako graf ima konačan broj bridova, tada je suma stupnjeva
čvorova jednaka dvostrukom broju bridova (K.Bogart, C.Stein i R.L.Drysdale;Discrete
mathematics for computer science;2005:313).
Na slici 3.7. vidimo razlike u stupnjevima čvora. Na slici a vidimo kako čvor A ima
stupanj 1, jer je incidentan samo s jednim bridom. Na slici b vidimo da čvor A ima stupanj 2,
na slici c ima stupanj 3, dok na slici d ima stupanj 4.
a b
c d
Slika 3.7: Primjeri stupnjeva čvora
10
3.5. Povezivanje
K.Bogart, C.Stein i R.L.Drysdale u djelu Discrete mathematics for computer science
(2005:315) navode sljedeće:
Za graf kažemo kako je povezan ukoliko za svaki par čvorova grafa možemo
pronaći put između njih. Jednako tako, ukoliko u grafu postoji jedan ili više
čvorova za koje ne možemo pronaći put s ostalim čvorovima, tada kažemo kako
je graf nepovezan. Ukoliko imamo samo jedan čvor kojeg ne možemo povezati
s ostalim čvorovima u grafu, tada taj čvor nazivamo izolirani čvor (eng.
isolated vertex). Dva su čvora u grafu povezana ukoliko postoji put između
njih.
Na slici 3.8. možemo vidjeti primjere povezanih grafova, dok na slici 3.9. vidimo
primjer nepovezanog grafa. Na slici 3.10. vidimo imamo poseban slučaj nepovezanog grafa,
kod kojeg je od ostatka grafa izolirana jedna točka, odnosno točka G. Takav slučaj zovemo
izolirani čvor.
Slika 3.8: Primjeri povezanih grafova
Slika 3.9: Primjer nepovezanog grafa
11
Slika 3.10: Primjer izoliranog čvora; čvor G je izoliran
3.6. Ciklusi u grafu
B.Divjak i A.Lovrenčić u djelu Diskretna matematika s teorijom grafova (2005:200)
navode sljedeće:
Šetnja u grafu G je netrivijalni konačan niz, čiji u članovi naizmjence čvorovi i
bridovi. Čvorovi su na početku i na kraju šetnje.Čvorovi koji nisu ni na početku
ni na kraju šetnje nazivaju se unutarnji čvorovi. Duljina šetnje k je broj
bridova u šetnji. Ako su svi čvorovi u šetnji različiti, šetnju nazivamo put.
Šetnja je zatvorena ako joj se podudaraju početak i kraj.
Zatvorenu šetnju kod koje su početak i unutrašnji čvorovi različiti, zovemo
ciklus (eng. cycle). Ako ciklus ima r različitih bridova i r različitih čvorova,
govorimo o ciklusu duljine r ili r-ciklusu.
12
Slika 3.11: Primjer ciklusa u grafu
Na slici 3.11. vidimo primjer ciklusa u grafu. Očigledno je kako slika ne sadrži jedan
određen ciklus nego više njih, pa ćemo navesti samo neke:
Ciklus prvi: A a B b C c D d A
Ciklus drugi: A a B j F e E i A
Ciklus treći: A d D l H h E i A
Ciklus četvrti: E e F f G g H h E
(napomena: bridovi u grafu su označeni malim slovima a, b, c, d, e, f, g, h, i, j, k i l, dok su
čvorovi označeni velikim slovima A, B, C, D, E, F, G i H).
13
3.7. Stabla
B.Divjak i A.Lovrenčić u djelu Diskretna matematika s teorijom grafova (2005:214)
navode sljedeće:
Pojam stabla u 19. Je stoljeću prvi uveo Arthur Cayley proučavajući posebne
klase grafova, koji prikazuju određene kemijske spojeve. Ti su grafovi imali
jedno važno svojstvo: nisu sadržavali cikluse. Stabla imaju primjenu u
rješavanju problema kao što je povezivanje udaljenih lokacija mrežom.
Definicija 6: Stablo (eng. tree) je povezani graf koji ne sadržni niti jedan ciklus, dok
je šuma (eng. forest) graf koji ne sadrži niti jedan ciklus, ali nije nužno da je taj graf povezan.
Čvor se naziva listom (eng. leaf) stabla T = (V, E) ako ima jednog susjeda (K.Bogart, C.Stein
i R.L.Drysdale;Discrete mathematics for computer science;2005:317, R.Diestel; Graph
Theory; Electronic edition; 2005:13, B.Divjak i A.Lovrenčić; Diskretna matematika s
teorijom grafova; 2005:215).
Primjeri stabala, opisanih u prethodnoj definiciji ilustrirani su na slici 3.12., dok je
primjer šume prikazan na slici 3.13.
Slika 3.12: Primjeri stabala
Slika 3.13: Primjer šume
14
Nadalje K.Bogart, C.Stein i R.L.Drysdale u djelu Discrete mathematics for computer
science (2005:318) navode sljedeće:
Postoji točno jedan put između svakog para čvorova u stablu.
Ukoliko iz seta bridova stabla izbacimo jedan brid dobivamo graf s dvije
povezane komponente, od kojih je svaka stablo.
Stablo s v čvorova ima v – 1 bridova.
3.8. Razapinjuća stabla
K.Bogart, C.Stein i R.L.Drysdale u djelu Discrete mathematics for computer science
(2005:323) navode sljedeće:
Stablo kojemu je skup bridova podskup skupa bridova grafa G nazivamo
razapinjuće stablo od G, ukoliko stablo ima jednak skup čvorova kao i graf G.
Svaki konačan povezan graf ima razapinjuće stablo.
Graf može imati više razapinjućih stabala.
3.9. Pretraživanje stabla
Prilikom analize društvenih mreža, za koje je ranije rečeno kako ih promatramo
vizualno putem grafova, dolazimo do problema pretraživanja takvih grafova, odnosno mreža.
Pretraživanje nam je prijeko potrebno kako bismo odredili tko su sudionici mreže, kako su
povezani, kolika je interakcija. Na temelju tih podataka provodimo daljnje analize tih mreža.
Prethodno navedeni opisi i definicije dovode nas do mogućnosti rješenja ovog problema.
Ukoliko imamo zadatak pronaći sve čvorove grafa, prevenstveno je bitno odrediti početni
čvor, odnosno korijen. Smisao pretrage je da od odabranog čvora krenemo, te prelazeći
bridovima grafa posjetimo sve čvorove tog grafa. Važno je napomenuti kako tokom takve
pretrage i čvorovi i bridovi mogu biti posjećeni više nego jednom. Time dakle tvorimo
razapinjuće stablo odabranog grafa. Za ovaj postupak razvijene su dvije osnovne strategije.
Prva od njih je pretraga koja čim je dostupno prelazi na novi čvor, odnosno čvor nove razine.
Takvu pretragu nazivamo pretraga prvo u dubinu (eng. depth-first search) i označavamo
kraticom DFS. Suprotna metoda je metoda kod koje pretražujemo sve čvorove iste razine, te
nakon što završimo pretragu određene razine prelazimo na sljedeću razinu. Takvu pretragu
nazivamo pretraga prvo u širinu (eng. breadth-first search) i označavamo kraticom BFS. Na
15
slici 3.14. prikazan je redosljed prema kojem metoda DFS pretražuje stablo, dok na slici 3.15
vidimo kojim redosljedom metoda BFS pretražuje isto stablo.
Slika 3.14: Pretraživanje stabla DFS metodom
Slika 3.15: Pretraživanje stabla BFS metodom
16
3.10. Težinski grafovi
Definicija 7: Težinski (eng. weighted) graf je graf G čijem je svakom bridu pridružen
nenegativni broj w(e), kojeg zovemo težinom brida e (B.Divjak i A.Lovrenčić; Diskretna
matematika s teorijom grafova; 2005:208).
Najbolji primjer primjene ovakvih grafova su grafovi prometnica. Ukoliko dakle
imamo graf kod kojeg su imena gradova tvore skup čvorova grafa, a prometnice koje
povezuju te gradove tvore skup bridova, tada bi težina brida iznosila udaljenost između
pojedina dva grada u kilometrima. Najčešće je zadatak i svrha takvih grafova pronalazak
minimalne udaljenosti između pojedinih čvorova. Primjer težinskog grafa imamo na slici
3.16.
Slika 3.16: Primjer težinskog grafa
17
4. Društvene mreže
Definicija 8: Društvene mreže su mreže u kojima su čvorovi grafa ljudi ili ponekad
grupe ljudi, dok bridovi predstavljaju neku formu socijalne interakcije između tih ljudi, kao
što je prijateljstvo (M.E.J. Newman; Networks an Introduction; 2010:36).
4.1. Analiza mreža
P.Mika u svom djelu Social networks and the semantic web (2007:27-32) navodi
sljedeće:
Analiza društvenih mreža (eng. social network analysis, SNA) je proučavanje
društvenih odnosa nad skupom sudionika. Glavna razlika između analize
mreža i ostalih pristupa društvenim znanostima je fokus na odnose između
sudionika, radije nego na atribute individualnih sudionika. Analiza mreža
uzima u obzir globalni pregled društvenih struktura temeljeno na vjerovanju
kako se tipovi i uzorci odnosa pojavljuju kroz individualnu povezanost, te kako
prisutnost (ili izostanak) takvih tipova i uzoraka ima značajan utjecaj na mrežu
i njene sastavne dijelove. Mrežna struktura pruža mogućnosti i postavlja
ograničenja individualnim korisnicima definirajući protok resursa
(materijalnih ili nematerijalnih) kroz mrežu.
Analiza društvenih mreža predstavlja drukčiji pristup društvenim fenomenima i
ponajprije zahtjeva novi set koncepata i nove metode za prikupljanje podataka
i analizu. Analiza mreža osigurava jezik za opisivanje društvenih struktura,
pruža formalne modele koji sadrže karakteristike svih (društvenih) mreža i
skup metoda primjenjivih za analizu mreža općenito. Koncepti i metode analiza
mreža su temeljeni na formalnom opisu mreža kao grafova.
4.2. Kratki pregled povijesti razvoja društvenih mreža
Premda u današnje vrijeme kada gledamo pojam društvenih mreža pomislimo prvo na
online servise socijalne interakcije poput Facobook-a, MySpace-a ili Twitter-a, priča o
nastanku i razvoju samih društvenih mreža ne započinje s razvojem Interneta. Naime razvoj
samog pojma datira početkom dvadesetog stoljeća, kada znanstvenici, u okviru sociologije
kao znanosti započinju s promatranjem i opisivanjem ponašanja ljudi u nekakvim skupinama.
Začetke same znanosti o društvenim mrežama pripisujemo Frigyes Karinthyju. 1929.
Karinthy u svom djelu Everything is Different objavljuje priču Chains-Links. Unutar ove
priče Karinthy se osvrće na smanjenje svijeta, odnosno nešto što bismo danas nazvali
globalizacijom. Tako na samom početku djela navodi sljedeće: „Planet Zemlja nikad nije bio
18
tako sičušan kao danas. Smanjio se – relativno govoreći naravno, zbog ubrzavajućeg pulsa
fizičke i verbalne komunikacije.“(F.Karinthy; Everything is Different;1929). U nastavku
teksta Karinthy objašnjava kako zbog razvoja industrije i komunikacija možemo saznati sve o
svakomu i doći jednostavno do svakoga, odnosno stupiti u kontakt. Promatrajući stvari sa
socijalnog aspekta Karinthy postavlja tezu o pet poznanika. Naime, on tvrdi kako
posredstvom pet osoba može doći do bilo kojeg Nobelovca. Također kao drugi primjer, ne
tako kontroverzan za to vrijeme navodi kako posredstvom pet poznanika može doći do bilo
kojeg radnika u tvornici automobila Ford.
U daljnjem tekstu ćemo vidjeti kako upravo ovim izlaganjem Karinthy postavlja
temelje za istraživanje društvenih mreža, a posebice istraživanje fenomena malog svijeta,
kojim se tek tridesetak godina nakon ovog djela bavi Stanley Milgram.
Pravim osnivateljem područja društvenih mreža smatra se Jacob Moreno, rumunjski
psihijatar.
M.E.J. Newman u djelu Networks an Introduction (2010) navodi sljedeće:
Jacob Moreno tridesetih godina dvadesetog stoljeća postaje zainteresiran za
dinamiku socijalnih interakcija između grupa ljudi. Na medicinskoj
konferenciji u New Yorku u ožujku 1933. Predstavlja rezultate niza studija koje
danas smatramo prvim studijima na području analize socijalnih mreža. Godinu
dana kasnije Moreno objavljuje knjigu pod nazivo Who shall survive u kojoj
objavljuje temelje sociometrije koja kasnije postaje poznatija kao analiza
socijalnih mreža. Moreno naziva svoje dijagrame sociogrami, koje mi danas
jasno prepoznajemo kao mreže.
Sociometrija je matematička studija psiholoških kvaliteta populacija. To je
ekspeimentalna tehnika koja nastaje kao rezultat primjene kvantitativnih metoda. Postiže se
putem metoda koje zadiru u evoluciju i organizaciju grupe, te položaja koje individualci
zauzimaju unutar grupa (J.Moreno; Who shall Survive; 1953:51).
U svom istraživanju Moreno koristi i promatra interakcije učenika i učenica unutar
razreda. Unutar svih generacija, od djece vrtićke dobi do osmog razreda svakom djetetu daje
zadatak izabrati prijatelja s kojim bi želio sjediti i družiti se unutar istog razreda. Na temelju
rezultata ovih upita Moreno provodi analizu podataka. Dobivenim podacima kreira
sociograme, na kojima se vide interakcije između učenika koje nisu vidljive bez analize.
Moreno uočava razlike između pojedinih učenika. Dok su neki izolirani, neki su formirali
veze, parove, trokute ili lance, a neki se čak uzdigli u zvijezde. Također Moreno uočava kako
je razlika jednako vidljiva i ukoliko promatramo interakcije različitih generacija. Tako je
vidljivo da se uvelike razlikuju sociogrami djece u vrtiću, djece u trećem i djece u sedmom
razredu osnovne škole. Struktura vrtića prikazana je na slici 4.1., struktura trećeg razreda
osnovne škole prikazana je na slici 4.2., a struktura sedmog razreda osnovne škole prikazana
je na slici 4.3. (napomena: slika 4.1. preuzeta je iz djela J.Morena Who shall Survive (1953)
sa stranice 153; slika 4.2. iz istog djela sa stranice 156; slika 4.3. iz istog djela sa stranice
19
160). Na slikama možemo primjetiti dvije vrste čvorova. Trokuti predstavljaju dječake, dok
kružnice predstavljaju djevojčice.
Slika 4.1: Struktura vrtića
Slika 4.2: Struktura trećeg razreda osnovne škole
Slika 4.3: Struktura sedmog razreda osnovne škole
20
4.3. Fenomen malog svijeta
Ranih pedesetih godina dvadesetog stoljeća matematičar Manfred Kochen i politolog
Ithiel de Sola Pool objavljuju matematički rukopis Contact and Influence. 1978. ponovno
objavljuju prošireno izdanje istog djela, koje je i danas dostupno. U svom djelu ova dvojica
znanstvenika postavljaju temelje eksperimenta malog svijeta, oslanjajući se na Karinthy-eve
zaključke o malom svijetu. Po prvi put se bave istraživanjem stupnja čvora u mreži.
Također u ovom djelu Kochen i Pool postavljaju pitanja o interakcijama korisnika
mreže. Pitanje glasi koliko je vjerojatno da se dva korisnika mreže ukoliko ih odaberemo
nasumično poznaju? Ukoliko se pokaže da se korisnici ne poznaju, tada se postavlja pitanje
koliko je vjerojatno da imaju zajedničkog poznanika ili ukoliko to nije jedna osoba, koliki je
najmanji lanac poznanika putem kojih možemo doći od jedne osobe do druge?
Šezdesetih godina psiholog Stanley Milgram radi na svom eksperimentu malog
svijeta. On postaje zaokupljen kvantificiranjem uobičajene udaljenosti između sudionika
mreže. Na temelju eksperimenta saznajemo kako je ta udaljenost poprilično mala za većinu
čvorova u većini mreža. Naravno, za geodetsku udaljenost kažemo kako je to najmanji broj
veza koje je potrebno prijeći kako bismo stigli od jednog čvora u mreži do drugog. Milgram je
htio testirati ove teze u realnim okolnostima, u realnom svijetu.
Eksperiment započinje tako što Milgram prvenstveno bira željenu udaljenost. Za
početnu lokaciju bira nasumično ljude iz telefonskog imenika u gradu Omaha, u državi
Nebraska. Za cilj uzima prijatelja koji živi u Bostonu, država Massachusetts. Važno je
napomenuti kako je udaljenost ova dva grada veća od tisuću kilometara i predstavlja
udaljenost, kako geografsku, tako i sociološku. Milgram u Omahu nasumično šalje 96 paketa,
sa službenom porukom institucije u kojoj radi, Harvard. Također paket sadrži „putovnicu“, za
koju ljudi dobivaju instrukcije kako je treba poslati u Boston. Jedine informacije koje su
navedene o cilju su njegovo ime, adresa i njegovo zanimanje kao broker. Onima koji su dobili
pakete nije dozvoljeno da iste jednostavno pošalju na adresu, nego im je rečeno kako ih
trebaju poslati nekom drugom, za koga smatraju kako bi mogao imati najveće šanse da pozna
primatelja. Čitav postupak takvog prosljeđivanja putovnice odgovara kretanju po bridovima
mreže.
Rezultat ovog eksperimenta bilo je dokazivanje kako se može po lancu poznanika doći
od pošiljatelja do primatelja. Od 96 prvotno poslanih putovnica njih 18 je pronašlo svoj cilj.
Iako se ovo čini kao mala brojka, kasniji pokušaji ponavljanja eksperimenta su pokazali kako
je ustvari nevjerojatno velika. Treba napomenuti kako je Milgram od svih primatelja tražio da
zabilježe put kojim se kretala putovnica, odnosno od koga su je primili i kome je šalju.
Analizirajući rezultate Milgram dobiva prosječnu udaljenost od 5,9 koraka. Time se dokazuje
teza šest stupnjeva razdvajanja, odnosno kako je između bilo koje dvije osobe na svijetu šest
koraka ili šest poznanika. Svakako treba uzeti u obzir mogućnosti kako cilj eksperimenta,
21
broker možda nije dovoljno dobar uzorak ili činjenica da su sve putovnice poslane u jedan
grad.
Milgram analizom svih putovnica spoznaje još jednu zanimljivost. Naime, sve
putovnice koju su stigle do brokera su stigle putem samo tri njegova prijatelja. Time Milgram
definira postojanje superzvijezda u mreža, odnosno čvorova visoke integracije.
Na temelju ovog eksperimenta brojni znanstvenici kasnije temelje svoja istraživanja.
Najpoznatiji je među njima je Jon Kleinberg. On na temelju Milgramovog eksperimenta
donosi zaključke kako putevi kojima su se kretala pisma, odnosno putovnice u eksperimentu
nisu najkraći, ali svakako je zaslužna ljudska sposobnost da pronađu taj put. Na temelju toga
nastaje Kleinberg-ov model za prosljeđivanje poruka. On definira kako čvorovi u mreži od
pošiljatelja do primatelja tvore prsten, kojim se poruka može kretati. Također objašnjava kako
bridovi koji povezuju sve čvorove unutar mreže čine najduži put, a kraći putevi su prečice
unutar samog prstena mreže (M.E.J. Newman; Networks an Introduction; 2010:715).
22
5. Deduktivni jezici
Logičko programiranje je primjena matematičke logike u računalnom programiranju.
U računalnom programiranju razlikujemo četiri osnovna koncepta programskih jezika. Tako
imamo imperativne, deklarativne, funkcionalne (koje smatramo podskupom deklarativnih) i
objektno orjentirane jezike. Logičko programiranje pripada deklarativnom konceptu pristupa
programiranju, iako programski jezik Prolog sadrži pojedine elemente proceduralnog
programiranja. Logičko programiranje se temelji na logici prvog reda, a jezici poput Prologa i
Dataloga u potpunosti implementiraju logiku prvog reda.
Prolog (naziv programskog jezika predstavlja kraticu Programming in Logic, odnosno
logičko programiranje) je deklarativan programski jezik opće svrhe temeljen na logici prvog
reda i formalnoj logici. Prolog nastaje kasnih šezdesetih i ranih sedamdesetih godina na
sveučilištu Aix-Marseille. Tvorac jezika je Alain Colmerauer. Alain Colmerauer i Phillipe
Roussel u suradnji s Robertm Kowalskim kreiraju dizajn Prologa kakvog ga mi danas
poznajemo (prema http://www.mta.ca/~rrosebru/oldcourse/371199/prolog/history.html;
dostupno 28.05.2013.). Prema većini izvora 1972. godina se smatra godinom rođenja. Prvi
interpreter jezika Prolog razvio je Phillipe Roussel.
U programskom jeziku Prolog programska logika je izražena putem relacija, dok se
izvođenje programa potiče izvođenjem upita nad tim relacijama. Relacije i upite konstruiramo
koristeći pojam, jednostavan tip podataka Prologa. Relacije definiramo klauzulama. Kada
Prologu zadamo upit, on pokušava s negacijom upita pronaći refutaciju, čime se dokazuje
istinitost početnog upita.
Tipovi podataka u Prologu su pojmovi. Pojmove razlikujemo kao atome, brojeve,
varijable ili kombinacije pojmova.
U Prologu opisujemo relacije definirane značenjima klauzula. Razlikujemo dvije vrste
klauzula: činjenice i pravila. Pravila imaju sljedeći izraz:
Glava :- Tijelo.
Kažemo kako je glava pravila istinita ukoliko je tijelo istinito. Klauzule koje imaju
prazna tijela nazivamo činjenicama. Činjenice imaju sljedeći izraz:
Ime(Ivan).
Ovaj izraz je istovjetan sljedećem pravilu:
23
Ime(Ivan) :- true.
5.1. XSB
Godine 1983. David H. D. Warren, računalni znanstvenik, koji se bavi logičkim
programiranjem na sveučilištu u Edinburgu, a posebice programskim jezikom Prolog kreira
prvi prevodioc koda (eng. compiler) Prologa. On kreira apstraktan stroj za izršavanje Prologa
koji se sastoji od samostalne memorijske arhitekture i skupa instrukcija. Taj stroj poznat je
kasnije kao Warren Abstract Machine (WAM). WAM do današnjih dana ostaje standardan
prevodioc koda Prologa.
Po razvoju Prologa i WAM-a David Warren, Terrance Swift i Kostis Sagonas na
sveučilištu Stony Brook u New Yorku razvijaju novi programski jezik SB-Prolog. Upravo taj
je jezik preteča današnje poznate implementacije programskog jezika Prolog, XSB-a, koji se
razvija pod okriljem istih znanstvenika. XSB je dakle implementacija programskog jezika
Prologa. Osim toga XSB proširuje Prolog na HiLog, koji omogućuje uporabu logike višeg
reda u programiranju.
Danas XSB ima i sučelje k programskom jeziku Java.
5.2. Logika prvog reda
Klasična logika sudova predstavlja vrlo slabu teoriju, sama ne čini dovoljan oslonac za
pravilno zaključivanje. Mnoga logička zaključivanja, koja koristimo u svakodnevnom životu,
a posebice u matematici izlaze izvan konteksta logike sudova, tj. nemoguće ih je izraziti
pomoću logike sudova. Također veliki problem klasične logike sudova predstavlja formalni
zapis. Čak je i osnovne matematičke pojmove nemoguće zapisati koristeći samo klasičnu
logiku sudova. Upravo iz tog razloga je potrebno uvesti u zaključivanje logiku prvog reda. S
druge strane gledajući, uvodeći logiku prvog reda gubimo neka važna svojstva. Jedno tako
svojstvo je odlučivost. Naime dobra osobina klasične logike sudova je mogućnost provjere
svake napisane formule. Najčešće nam za to služe semantičke tablice, te rezolucija i glavni
test. U logici prvog reda ne postoji takav univerzalan algoritam provjere valjanosti. Također je
potrebno naglasiti kako logika prvog reda ipak ne može izraziti sve matematičke pojmove, pa
je ponekad potrebno pouzdati se u jače sustave logike, kao što je logika drugog reda,
beskonačne logike, itd.
24
Definicija 9: Alfabet neke teorije prvog reda je unija skupova gdje su redom
skupovi definirani s:
, prebrojiv skup čije elemente nazivamo individualnim varijablama.
, skup logičkih simbola, koje redom nazivamo: negacija,
konjunkcija, disjunkcija, kondicional, bikondicional, univerzalni i egzistencijalni
kvantifikator.
, skup čije elemente nazivamo relacijskim simbolima. Skup I je
neki podskup od N. Prirodan broj naziva se mjesnost relacijskog simbola. Pretpostavljamo
da ovaj skup sadrži barem jedan dvomjesni relacijski simbol.
, skup čije elemente nazivamo funkcijskim simbolima. Skup J je
neki podskup od N, možda i prazan. Prirodan broj naziva se mjesnost funkcijskog
simbola.
, skup čije elemente nazivamo konstantnim simbolima. Skup K je
neki podskup od N, možda i prazan.
( ) , skup pomoćnih simbola (lijeva i desna zagrada, te zarez), (M. Vuković;
Matematička logika (2009:109-110).
Obično se unija skupova relacijskih, funkcijskih i konstantskih simbola naziva skup ili
signatura.
25
6. Aplikacija
Aplikacija analize društvenih mreža, što je i glavna tema ovog rada, izrađena je u
programskom jeziku Prolog, odnosno njegovoj implementaciji XSB. Aplikacija se sastoji od
dvije odvojene datoteke. Od toga jedna sadrži programski kod, dok druga sadrži podatke, na
kojim se obavlja analiza. Unutar datoteke s podacima, isti su zapisani u obliku činjenica
programskog jezika Prolog, opisanih u poglavlju 5. Također, ukoliko ovaj zapis gledamo sa
stajališta teorije grafova, tada vidimo kako u zapisima podataka uređeni parovi predstavljaju
čvorove unutar mreže, dok sam pojedinačni zapis predstavlja brid, koji je pridružen upravo
tim čvorovima. Manji dio tih podataka izgleda ovako:
veza(1,2).
veza(1,4).
veza(1,8).
veza(1,16).
veza(1,18).
veza(1,21).
veza(2,6).
veza(2,7).
veza(2,21).
veza(3,1).
veza(3,2).
veza(3,4).
veza(3,6).
veza(3,7).
veza(3,8).
veza(3,9).
veza(3,10).
veza(3,11).
veza(3,12).
veza(3,14).
veza(3,17).
veza(3,18).
veza(3,20).
veza(3,21).
veza(4,1).
veza(4,2).
veza(4,6).
veza(4,8).
veza(4,10).
veza(4,11).
veza(4,12).
veza(4,16).
26
Prethodno prikazani podaci čine jedan dio mreže. Ta mreža, kako je ranije rečeno se
može prikazati vizualno putem grafa. Na slici 6.1. možemo vidjeti upravo taj graf mreže na
kojoj se obavlja analiza. Važno je napomenuti kako je graf netežinski i neusmjereni.
Slika 6.1: Grafički prikaz društvene mreže
Drugi dio aplikacije čini programski kod. Na samom početku programa potrebno je
pozvati predikate koji su nužni za rad s listama. Liste su potrebne kako bi podatke i rezultate
analize spremali, mogli doći do njih i pretraživali ih. U programu koristimo sljedeće
predikate:
Lenght nam predočava duljinu liste.
Member nam služi kako bismo provjerili da li je neki promatrani element član liste.
Append je predikat koja služi za spajanje dvije liste, s tim da se nova lista dodaje na
kraj postojeće.
Reverse je predikat koja služi za okretanje kompletne liste, tako da onaj element koji
je bio prvi u listi, nakon korištenja metode reverse biva zadnji u listi.
Također je potrebno pozvati podatke na kojima ćemo obaviti analizu. U programu to
izgleda ovako:
:- import length/2, member/2, append/3,reverse/2 from lists.
:-[podaci].
Na slici 6.2 prikazan je primjer liste. Pomoću ovog primjera prikazano je kako rade
predikati length i member. Vidljivo je kako prvim upitom tražimo duljinu liste, te program
vrača ispravnu duljinu, prema primjeru na slici 6.2. Također vidimo kako pomoću predikata
member, upitima provjeravamo je li element član liste (u prvom slučaju traženi element je
član liste i upit vrača odgovor true, dok u drugom vidimo kako traženi element nije član liste,
27
pa program vrača odgovor false). Na slici 6.3. možemo vidjeti primjer liste koju dobijemo
ukoliko na početnoj listi sa slike 6.2. primjenimo predikat reverse. Na slici 6.4.a vidimo
primjere dvaju lista, dok na slici 6.4.b vidimo kako se uporabom predikata append te dvije
liste spajaju u jednu, s tim se da druga lista dodaje na kraj prve liste.
Slika 6.2: Primjer liste
?- Length(L1,L).
L = 9.
?- Member(„B“,L1).
True
?- Member(„K“,L1).
False
Slika 6.3: Lista nakon primjene predikata reverse
a
28
b
Slika 6.4: Primjer izvođenja predikata append
Nakon ovog koraka u programu imamo pomoćni predikat dvosmjernosti veze. Njega
ne koristimo uvijek, jer stvara previše kombinacija. Činjenica da ne koristimo uvijek ovaj
predikat nam govori s aspekta teorije grafova kako ovdje radimo s usmjerenim grafovima.
Predikat izgleda u programu ovako:
veza2(X,Y):-veza(X,Y);veza(Y,X).
Nadalje u programu imamo predikat PrijateljPrijatelja. Da bismo dobili prijatelja od
prijatelja radimo vezu između njih preko zajedničkog prijatelja. Tako da bismo provjerili je li
Y prijatelj prijatelja od X uzimamo zajedničkog prijatelja Z i radimo provjeru postoji li veza
između njih. Predikat prijatelj prijatelja u programu izgleda ovako:
prijateljPrijatelja(X,Y):-
veza2(X,Z),
veza2(Z,Y).
Sljedeći vrlo bitan dio programa je provjera čvorova s visokim stupnjem, koje
nazivamo Superstars, te čvora s najmanjim stupnjem, kojeg nazivamo Loner. Da bismo
pristupili analizi potrebno je odrediti stupanj svakog čvora, što u programo radimo s
predikatom StupanjVrha, tako da provjeravamo sve ulazne i izlazne veze prema čvoru. Kada
smo to obavili, tada predikatima najveci i najmanji određujemo u listi koji čvorovi imaju
najveći, odnosno najmanji stupanj. Unutar predikata Superstar najveći element liste
izdvajamo kao Superstar. Unutar predikata Loner izdvajamo čvor s najmanjim stupnjem. U
kodu programa to je napravljeno na sljedeći način:
stupanjVrha(Cvor,cvor(Cvor,Broj)):-
setof(Cvor_,(veza2(Cvor,Cvor_)),Cvorovi),
length(Cvorovi,Broj).
superstar(Star):-
29
findall(Y,X^stupanjVrha(X,Y),Stars),
najveci(Stars,Star).
loner(Lone):-
findall(Y,X^stupanjVrha(X,Y),Loners),
najmanji(Loners,Lone).
najveci( [ X ], X ).
najveci( [ cvor(J,G) | T ], N ) :-
najveci( T, cvor(J1,G1) ),
(
G > G1 ->
N = cvor(J,G);
N = cvor(J1,G1)
).
najmanji( [ X ], X ).
najmanji( [ cvor(J,G) | T ], N ) :-
najveci( T, cvor(J1,G1) ),
(
G1 > G ->
N = cvor(J,G);
N = cvor(J1,G1)
).
Najvažniji dio programa je svakako dokaz eksperimenta malog svijeta, opisanog u
poglavlju 4.3. Unutar programa dokazivanje ovog eksperimenta sastoji se od mnoštva
predikata, kako bismo došli do prosječne duljine puta. Najvažniji od tih predikata je svakako
bfs, koji predstavlja breath-first search, metodu pronalaska najkraćeg puta u stablu opisanu u
poglavlju 3.9. Unutar programa koristimo činjenicu da BFS u usmjerenim netežinskim
grafovima daje najkraći put koji se mjeri u broju čvorova na tom putu. Sam predikat u
programu je implementiran na sljedeći način:
bfs(Start, Kraj, Put, Duljina) :-
bfs1([[Start]], Kraj, Putanja),
reverse(Putanja, Put),
length(Put,Duljina),
!.
bfs1([[Kraj|Put]|_], Kraj, [Kraj|Put]).
bfs1([Put|PreostaliPutevi], Kraj, Putevi) :-
prosiri(Put, NoviPutevi),
append(PreostaliPutevi, NoviPutevi, SviPutevi),
bfs1(SviPutevi, Kraj, Putevi).
30
7. Primjeri korištenja aplikacije
Do sada smo vidjeli kako je došlo do cijele priče oko same aplikacije, a sada ćemo
vidjeti kako ona uistimu radi. Pokazat ćemo najbitnije dijelove, analiza prijatelja od prijatelja,
superstar-loner, te dokaz fenomena malog svijeta.
Kod izvođenja predikata prijateljPrijatelja, zadajemo upit tako da zadamo čvor za
kojeg želimo saznati njegove prijatelje. Program nam odgovara koliko čvor ima prijatelja. Na
primjeru to izgleda ovako:
?- prijateljPrijatelja(1,X).
X = 6
yes
U sljedećem koraku ćemo vidjeti primjer izvođenja predikata superstar i loner. Kako je
već ranije rečeno superstar je čvor najvećeg stupnja, dok je loner čvor najmanjeg stupnja. U
našem primjeru pronalaženje superstar-a i loner-a izgleda ovako:
?- superstar(X).
X = cvor(2,32)
yes
?- loner(X).
X = cvor(1,24)
yes
ProsječnaDuljinaRuta je predikat koji ustvari predstavlja fenomen malog svijeta. To je
prosjek duljina puteva između pojedinih čvorova. Na realnom primjeru taj upit izgleda ovako:
?- prosjecnaDuljinaRuta(Duljina).
Duljina = 2.4880
31
8. Zaključak
Na temelju prikazanog u ovom radu mogu zaključiti kako su društvene mreže, kao i
analize istih područje znanosti koje je u ubrzanom procesu razvitka. Iako teoretski nastanak
društvenih mreža nije zanimao prosječne ljude, možemo zaključiti kako danas itekako svi
imaju interesa znati ponešto o društvenim mrežama. Upravo iz tog razloga se dosta
znanstvenika upušta u promatranje i analiziranje takvih mreža. Možemo samo pretpostaviti do
kolikih će razina analize mreža doći u budućnosti. Same te spoznaje ovu temu čine vrlo
zanimljivom i produktivnom.
Vrlo zanimljiva je povezanost teorije koja objašnjava društvene mreže s teorijom
grafova. Prihvaćanjem sudjelovanja matematike moguće je objasniti daleko više fenomena
vezanih za društvene mreže.
Danas je sve više prisutna pojava mreža i sustava nove generacije. Sama pojava
semantičkog weba predstavlja ogroman iskorak prema novoj razini globalnih mreža. Također
je vrlo važno pratiti razvoj programskih jezika više razine, poput Flore-2. Svi ovi pojmovi
svoje korjene imaju unutar Prologa, odnosno deduktivnih jezika. Upravo sve to čini dobar
razlog za proučavanje teme ovog rada.
32
Abecedni popis korištene literature
1. Knjige:
1. B.Divjak i A. Lovrenčić, Diskretna matematika s teorijom grafova, TIVA
Varaždin, 2005.
2. F. Karinthy, Članak Chains-links iz djela Everything is Different, s.l., 1929.
3. J. Moreno, Who shall survive, Beacon House, Beacon, N.Y., 1953.
4. K. Bogart, C. Stein, R.L. Drysdale, Discrete mathematics for computer
science, Key College Publishing, Emeryville, Canada, 2005.
5. M.E.J. Newman, Networks an Introduction, Oxford University Press, Oxford,
N.Y., 2010.
6. M. Vuković, Matematička logika, Element, Zagreb, 2009.
7. P. Mika, Social networks and the semantic web, Springer, N.Y., 2007.
8. R. Deinstel, Graph Theory, 3rd Electronic edition, s.l., 2005.
9. R. Sedgewick i K. Wayne, Algorithms – fourth edition, Addison-Wesley
Professional, 2011.
2. Internetski izvori:
1. Sourceforge: http://xsb.sourceforge.net/manual1/ (dostupno 03.06.2013.).
2. Rosebrugh.R.:
http://www.mta.ca/~rrosebru/oldcourse/371199/prolog/history.html (dostupno
28.05.2013.).
33
Prilog 1: Kod programa
:- import length/2, member/2, append/3,reverse/2 from lists.
:-[podaci].
veza2(X,Y):-veza(X,Y);veza(Y,X).
prijateljPrijatelja(X,Y):-
veza2(X,Z),
veza2(Z,Y).
put(X,Y):-
veza(X,Y).
put(X,Y):-
veza(X,Z),
put(Z,Y).
bfs(Start, Kraj, Put, Duljina) :-
bfs1([[Start]], Kraj, Putanja),
reverse(Putanja, Put),
length(Put,Duljina),
!.
bfs1([[Kraj|Put]|_], Kraj, [Kraj|Put]).
bfs1([Put|PreostaliPutevi], Kraj, Putevi) :-
prosiri(Put, NoviPutevi),
append(PreostaliPutevi, NoviPutevi, SviPutevi),
bfs1(SviPutevi, Kraj, Putevi).
prosiri([Start|Put], NoviPutevi) :-
bagof([NextStart,Start|Put],
((veza(Start,NextStart);veza(NextStart,Start)),not(member(NextStart,
Put))), NoviPutevi), !.
prosiri(_, []).
34
sviSudionici(D):-setof(X,veza2(X,_),D).
sveKombinacijeLjudi(L):-
sviSudionici(D),setof(X,kombinacije(2,D,X),L).
kombinacije(0,_,[]).
kombinacije(K,L,[X|Xs]) :- K > 0,
el(X,L,R),
K1 is K-1,
kombinacije(K1,R,Xs).
el(X,[X|L],L).
el(X,[_|L],R) :- el(X,L,R).
suma([],0).
suma([G|R],S):-
suma(R,S1),
S is S1+G.
prosjek([],0).
prosjek(L,P):-
suma(L,S),
length(L,B),
P is S/B.
najkracaRutaSvi(D):-
sveKombinacijeLjudi(L),
member([X,Y],L),
bfs(X,Y,_,D).
prosjecnaDuljinaRuta(D):-
findall(Duljina,najkracaRutaSvi(Duljina),Lista),
prosjek(Lista,D).
stupanjVrha(Cvor,cvor(Cvor,Broj)):-
setof(Cvor_,(veza2(Cvor,Cvor_)),Cvorovi),
length(Cvorovi,Broj).
35
superstar(Star):-
findall(Y,X^stupanjVrha(X,Y),Stars),
najveci(Stars,Star).
loner(Lone):-
findall(Y,X^stupanjVrha(X,Y),Loners),
najmanji(Loners,Lone).
najveci( [ X ], X ).
najveci( [ cvor(J,G) | T ], N ) :-
najveci( T, cvor(J1,G1) ),
(
G > G1 ->
N = cvor(J,G);
N = cvor(J1,G1)
).
najmanji( [ X ], X ).
najmanji( [ cvor(J,G) | T ], N ) :-
najveci( T, cvor(J1,G1) ),
(
G1 > G ->
N = cvor(J,G);
N = cvor(J1,G1)
).