Repozytorium stworzone na potrzeby projektu w ramach przedmiotu "Grafy i sieci: projekt" prowadzonego w sem. letnim 2020 na Wydziale Matematyki i Nauk Informacyjnych PW.
Autorami projektu są:
Projekt skupia się na badaniu możliwości poprawy algorytmu MODA przez zastąpienie jego pierwszego etapu wersją algorytmu FASCIA z wczesnym stopowaniem opartym o testy statystyczne.
Dokumentacja wstępna opisująca badane zagadnienie znajduje się w pliku Dokumentacja.pdf. Dokumentacja końcowa opisująca uzyskane wyniki i wnioski z badania znajduje się w pliku Raport.pdf.
Katalog Wizualizacje
zawiera wszystkie pliki potrzebne do odtworzenia wizualizacji użytych w raporcie końcowym.
Wymagane narzędzia:
CMake
w wersji >= 3.9- Kompilator C++ wspierający OpenMP (np. standardowe dystrybucje
clang
lubgcc
)
W przypadku korzystania z kompilatora gcc
, musi być on co najmniej w wersji 9.
Aby zbudować programy wymagane do odtworzenia eksperymentów (implementacji algorytmu FASCIA oraz generatora sieci podobnych) należy wykonać
cmake .
wewnątrz głównego katalogu. Na systemach unixopodobnych wygeneruje to plik Makefile
, dzięki któremu
poleceniem make
można zbudować pliki wykonywalne. W przypadku systemu Windows programy można zbudować w środowisku WSL.
Katalog FASCIA
zawiera wersję algorytmu zmodyfikowaną tak, aby wypisywała wartość poszczególnych zliczeń na standardowe wyjście.
Oryginalne repozytorium znajduje się tutaj.
Instrukcje na temat używania programu znajdują się w pliku FASCIA/index.html
.
Program fascia
z flagą -m
musi być wykonywany w tym samym katalogu co folder motif
.
Folder sieci
zawiera sieci używane w eksperymentach. Pliki z rozszerzeniem .graph
zawierają grafy w formacie
przeznaczonym do wykorzystania przez algorytm FASCIA, a .txt
– algorytm MODA. To repozytorium nie zawiera
implementacji programu MODA. Można ją znaleźć tutaj. Skrypt moda2fascia.py
pozwala na konwersję z formatu plików .txt
do .graph
.
Katalog motif
zawiera zgrupowane względem liczby wierzchołków pliki z opisami drzew wykorzystywanych jako kandydaci na motywy
w badanych sieciach.
Folder src
zawiera plik źródłowy programu generującego sieci podobne do zadanej.
Uruchomienie przygotowanych skryptów wymaga systemu unixopodobnego oraz następujących programów:
- programów
bin/fascia
orazbin/ensemble
zbudowanych w poprzednim kroku - powłoki
bash
- programu pozwalającego na zmianę buforowania std. wyjścia –
stdbuf
- interpretera Pythona,
python3
, z bibliotekami pandas, numpy, scipy, matplotlib - opcjonalnie - środowiska
jupyter notebook
do odtworzenia wizualizacji przy użyciu notatnika resultsCalc
Należy przy tym pamiętać, że system Windows może wymusić DOS-owski format końca linii w plikach .sh
. Jeśli
skrypty bashowe zwracają błędy o nieznanej komendzie \r
, należy najpierw przepuścić je przez program dos2unix
.
Po skompletowaniu wymaganych programów można przejść do odtworzenia eksperymentów wykonanych na potrzeby
projektu. Głównym skryptem przygotowanym z myślą o użytkowniku końcowym jest filter.sh
. Skrypt zawiera dokumentację
na temat schematu użycia.
>> ./filter.sh
Usage: filter.sh <network file> <max. motif size> [<strat>] [<model>]
Arguments:
motif size must range from 3 to 9
strat: "positive" or "nonnegative" - whether to return all templates that were
not discarded or just the ones that were predicted to be a motif by FASCIA.
Defaults to "nonnegative"
model: "meanRandom" or "expER" - a model for calculating max. number of iterations
FASCIA tries before giving up.
Defaults to "meanRandom"
This script emits debug info to stderr. To get a list of probable motifs redirect
output to a file like so: "./filter.sh path/to/file.graph 6 positive > motifs.txt"
Skrypt ten wykorzystuje inne skrypty i programy, łącząc je w potok przetwarzania będący kluczowym elementem naszego podejścia do wykorzystania algorytmu FASCIA w ocenie potencjału danego drzewa na bycie motywem w zadanej sieci.
Wszystkie zawarte w tym repozytorium skrypty i programy generują i korzystają z plików tymczasowych tworzonych w obrębie katalogu głównego.
Poniżej znajduje się opis działania skryptów pomocniczych, oraz pozostałych, które zostały użyte do wygenerowania danych do opracowania końcowego.
run_motif.sh
- dla danej sieci, poddrzewa i innych parametrów generuje wykres rozkładów wystąpień poddrzewa w tej sieci oraz w populacji sieci losowych (przy użyciu skryptuwykres.py
). Parametry skryptu można ustawiać za pomocą zmiennych na jego początku.niter.py
- oblicza maks. liczbę iteracji, którą może wykonać alg. FASCIA dla danej sieci. Korzysta z pliku tymczasowegolosowe.csv
generowanego przy zliczaniu liczby wystąpień danego motywu w populacji sieci losowych.script.py
- agreguje kolejne otrzymane na wejsciu zliczenia i wykonuje dla nich testy statystyczne. Jest ostatnim w kolejności skryptem potoku prztwarzania, dzięki czemu kończąc działanie po wykryciu odpowiedniej istotności statystycznej może zatrzymać działanie pozostałych programów.srednia_losowych.sh
,fascia_wszystkie.sh
- generują wyniki działania alg. FASCIA dla wszystkich sieci w folderzesieci
i wszystkich poddrzew do rozmiaru 6 włącznie, odpowiednio dla populacji generowanych sieci losowych i dla samych sieci wejściowych.srednia_losowych.py
,srednia_fascii.py
- wersje skryptuscript.py
przygotowane na potrzeby powyższych.