fbpx

NetworKit бол том хэмжээний сүлжээний шинжилгээнд зориулагдсан өсөн нэмэгдэж буй нээлттэй эхийн хэрэгсэл юм. Үүний зорилго нь мянгаас тэрбум ирмэг хүртэлх хэмжээтэй том сүлжээнүүдэд дүн шинжилгээ хийх хэрэгслээр хангах явдал юм. Үүний тулд үр дүнтэй график алгоритмуудыг хэрэгжүүлдэг бөгөөд тэдгээрийн ихэнх нь олон цөмт архитектурыг ашиглахтай зэрэгцэн ажилладаг. Эдгээр нь зэрэглэлийн дараалал, кластерын коэффициент, төвлөрсөн байдлын хэмжүүр зэрэг сүлжээний шинжилгээний стандарт хэмжүүрүүдийг тооцоолоход зориулагдсан болно. Энэ тал дээр NetworKit нь параллелизм, өргөтгөх чадварт анхаарлаа төвлөрүүлдэг ч NetworkX зэрэг багцуудтай харьцуулах боломжтой юм. NetworKit нь алгоритмын инженерчлэлийн туршилтын хэрэгсэл бөгөөд саяхан хэвлэгдсэн судалгааны шинэ алгоритмуудыг агуулдаг (Хэвлэлүүдийн жагсаалтыг харна уу).

NetworKit нь C++ болон Python кодоор бүтээгдсэн эрлийз юм: Үүний үндсэн функцийг гүйцэтгэлийн үүднээс C++ хэл дээр хэрэгжүүлсэн бөгөөд дараа нь Cython хэрэгслийн сүлжээг ашиглан Python-д зориулж ороосон. Энэ нь бидэнд өндөр үзүүлэлттэй зэрэгцээ кодыг ердийн Python модуль болгон харуулах боломжийг олгодог. Өнгөц харахад NetworKit нь яг ийм бөгөөд үүний дагуу импортлох боломжтой:

Энэ тэмдэглэлийн дэвтэр нь зарим схемүүдийг үүсгэдэг. Тэдгээрийг дэвтэрт харуулахын тулд matplotlib-г импортлох шаардлагатай бөгөөд бид matplotlib-ийн шугаман горимыг идэвхжүүлэх хэрэгтэй.

python code
%
matplotlib inline import matplotlib.pyplot as plt
import networkit as nk
 

Унших, бичих

Диск дээрх файлаас сүлжээг уншиж эхэлцгээе: PGPgiantcompo.graph network. Энэхүү сургалтын явцад бид зангилаа нь PGP түлхүүр, ирмэг нь нэг товчлуураас нөгөө товчлуурын гарын үсгийг илэрхийлдэг нийгмийн сүлжээ/итгэлцлийн вэб болох PGPgiantcompo сүлжээн дээр ажиллах болно. Үүнийг сайн эхлэх цэг болгон NetworKit-ээр түгээдэг. Дээд талын нэрийн талбарт оролтын форматыг тааж, тохирох уншигчийг сонгохыг оролддог тохиромжтой функц байдаг:

G = nk.readGraph("../input/PGPgiantcompo.graph", nk.Format.METIS)

График өгөгдлийг файлд хадгалах олон төрлийн формат байдаг. NetworKit-ийн хувьд одоогоор хамгийн сайн дэмждэг формат бол METIS залгаа формат юм. Энэ форматтай янз бүрийн жишээ графикуудыг эндээс олж болно. ReadGraph функц нь уншигчдын төрөл бүрийн ангиудад зориулсан ухаалаг боодол байхыг хичээдэг. Энэ жишээнд бусад уншигчдын хамт graphio дэд модульд байрлах METISGraphReader-ийг ашигладаг. Эдгээр ангиудыг мөн тодорхой ашиглаж болно:

G = nk.graphio.METISGraphReader().read("../input/PGPgiantcompo.graph")

График нь NetworKit-ийн төв class юм. Энэ төрлийн объект нь чиглүүлээгүй, сонголттойгоор жинтэй сүлжээг илэрхийлдэг. class ийн өгсөн хэд хэдэн аргыг авч үзье.

Зангилаанууд нь зүгээр л бүхэл тооны индексүүд бөгөөд ирмэгүүд нь ийм индексүүдийн хосууд юм.

жишээ 1

for u in G.iterNodes():
    if u > 5:
        print('...')
        break
    print(u)

жишээ 2

0
1
2
3
4
5
...
i = 0
for u, v in G.iterEdges():
    if i > 5:
        print('...')
        break
    print(u, v)
    i += 1

жишээ 3

0 141
1 3876
1 7328
1 7317
1 5760
2 1929
...
i = 0
for u, v, w in G.iterEdgesWeights():
    if i > 5:
        print('...')
        break
    print(u, v, w)
    i += 1
0 141 1.0
1 3876 1.0
1 7328 1.0
1 7317 1.0
1 5760 1.0
2 1929 1.0
...

Зангилааны зэрэг буюу зангилаанд холбогдсон ирмэгүүдийн тоо нь сүлжээний хамгийн их судлагдсан шинж чанаруудын нэг юм. Сүлжээний төрлүүд нь ихэвчлэн зангилааны градусын хуваарилалтаар тодорхойлогддог. Бид жишээ сүлжээнийхээ түвшний тархалтыг дараах байдлаар олж авч дүрсэлдэг.

import numpy
dd = sorted(nk.centrality.DegreeCentrality(G).run().scores(), reverse=True)
degrees, numberOfNodes = numpy.unique(dd, return_counts=True)
plt.xscale("log")
plt.xlabel("degree")
plt.yscale("log")
plt.ylabel("number of nodes")
plt.plot(degrees, numberOfNodes)
plt.show()

Leave a Reply