SignedNetworkGenerator

- autor: tsissput
  • Przemysław Wróblewski 89846
  • Marcin Wojdowski 89843

Program ma za zadanie generowanie sieci z wiązaniami ujemnymi i dodatnimi.

Program realizuje następujący scenariusz:

  1. Załadowanie danych konfiguracyjnych
  2. Pobranie z fabryki NetworkFactory2 głównego algorytmu przetwarzania, impl w pakiecie org.tsiss.sng.network.creators
  3. W zależności od głównego algorytmu przetwarzania klass wspierajacych przetwarzanie. Przykładowe wartości z pliku ApplicationContext:
    1.  ac.getProbability(); – zwraca model prawdopodobienstwa dla procesu tworzenia krawedzi wewnątrz grupy i na zewnątrz(osobne).
    2. ac.getGroupChooser(); – zwraca model wyboru grupy do przydziałów nowych elementów.
    3. ac.getExtNegativeEdge(); – zwraca model wyboru docelowego wierzchołka dla negatywnej zewnętrznej krawedzi
    4. ac.getExtPositiveEdge();- zwraca model wyboru docelowej grupy dla negatywnej zewnętrznej krawedzi
    5. ac.getNodeChooser();- zwraca model wyboru docelowego wierzchołka dla wybranej grupy
    6. ac.getAgeFunction();- zwraca funkcje postarzająca krawędzie.

Głównym plikiem konfiguracyjnym projektu jest plik sng.properties.

W środku znajdziemy następujące przykładowe parametry:

  • nodes=40 ­– ilośc węzłów
  • iterations=40000 – ilośc iteracji algorytmu
  • edges=220 – max ilość krawędzi
  • negative-edge=1 – możliwość tworzenia negatywnych krawedzi
  • bidirected=true – czy sieć jest skierowana
  • minimum-edge-weight=-5.0
  • maximum-edge-weight=5.0
  • output-file=d:\\sng\\sng.gdf – plik wyjsciowy
  • output-type=GDFFile – format wyjsciowy
  • groups=5 – ilość dostępnych grup
  • AgeFunction=LinearFunction – nazwa klasy użytej jako funkcja postarzania(pakiet: org.tsiss.sng.edge.age)
  • probability  = ParametrizedProbability – nazwa klasy użytej jako funkcji określającej możliwość powstania krawędzi (pakiet: org.tsiss.sng.probability.create.edge)
  1. — parametry specyficzne dla danej klasy
  2. ParametrizedProbability.createInternalEdgeProb=0.8
  3. ParametrizedProbability.createExternalEdgeProb=0.6
  4. ParametrizedProbability.isNegativeEdgeProb=0.5
  •  groupChooser=PopularPreference – nazwa klasy użytej jako funkcji wybierającej docelową grupę dla nowego obiektu (pakiet: org.tsiss.sng.probability.choose.group)
  •  nodeChooser  = NodeDegreePreference – nazwa klasy użytej jako funkcji wybierającej wierzchołek z podanego zbioru, np. Wybranej grupy (pakiet: org.tsiss.sng.probability.choose.node)
  1.  — parametry specyficzne dla danej klasy
  2. NodeDegreePreference.handicap = 2
  3. NodeDegreePreference.degreeWeight =1.5
  • externalNegativeEdge = GroupNegativePreferenceWithPositiveInfluence – nazwa klasy użytej jako funkcji wybierającej docelową grupę dla nowej negatywnej krawedzi (pakiet: org.tsiss.sng.probability.choose.group)
  1. — parametry specyficzne dla danej klasy
  2. GroupNegativePreference.handicap = 1
  • externalPositiveEdge = GroupPositivePreference – nazwa klasy użytej jako funkcji wybierającej docelową grupę dla nowej pozytywnej krawedzi (pakiet: org.tsiss.sng.probability.choose.group)
  1. — parametry specyficzne dla danej klasy
  2. GroupPositivePreference.handicap = 2

Jak widzimy po skompilowaniu projektu możemy zmieniać mechanizm działania aplikacji bez potrzeby ponownej przebudowy projektu.
Możliwości aplikacji możemy rozszerzać dodając nowe implementacje klas.
Należy jednak pamiętać,że wszystkie klasy utworzone w pakiecie org.tsiss.sng.probability.* i org.tsiss.sng.edge.age należy zarejestrować w odpowiedniej enumeracji w pakiecie org.tsiss.sng.enum.

Sytuacja jest podobna z formatami wyjściowymi utworzonej sieci (pakiet: org.tsiss.sng.outputs).
Niestety format UCINet wymaga poprawek.

Specyficzne parametry dla danych klas:

Jeżeli zaszłaby potrzeba pobrania z pliku konf. Specyficznego nowego parametru, zapisujemy go wg. schematu:

„NazwaKlasy.nazwaParametru=Wartość”

Po dodaniu parametru należy go zarejestrować w enumeracji org.tsiss.sng.enum.ApplicationOption.java, np:

AGE_FUNCTION(„ageFun”, „AgeFunction”,true,”Name algorithm used to determine age function”,”NoFunction”),

PARAM_NAME(„shortName”, „LongName”,true,”Description”,”DefaultValue”),

Jeżeli mamy już zarejstrowany parameter w klasie ApplicationContext dodajemy:

  1. pole przechowujace wartość naszego paramteru
  2. w metodzie setApplicationValue, dodajemy warunek case i metode konwersji naszego paramteru z klasy String
  3. utworzenie gettera dla pola z pkt 1.

To wszystko.

Jeżeli z jakiś względów użytkownik, nie może zarejestrować, dodać wpisu, może wykorzystać metode ApplicationContext.getProperty(String key, String defaultValue), by pobrać wartośc parametru prosto z pliku sng.properties. Jednak należy pamiętać, że powyższe rozwiązanie nie jest zalecane.

Źródła projektu dostępne pod adresem: http://sirius.cs.put.poznan.pl/~inf89843/tpd2/tsiss/sng.zip

Przykładowo wygenerowane sieci: http://sirius.cs.put.poznan.pl/~inf89843/tpd2/tsiss/sng_net.rar

Uruchamanie:

“java –jar SignedNetworkGenerator.jar plik_konf.properties”

Jako jedyny parametr funkcja przyjmuje relatywną ścieżkę do pliku konfiguracyjnego. Jeżeli użytkownik pominie parametr, aplikacja spróbuje załadować plik sng.properties z katalogu aplikacji.

Miłego korzystania:)

Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: