2009-11-03 13 views
12

Chciałbym zasymulować niektóre scenariusze przy użyciu paragrafu multiagent i wydaje się, że najbardziej popularne narzędzia to NetLogo i Repast.NetLogo vs. Repast Simphony?

Chciałbym wiedzieć, czy ktoś miał jakiekolwiek doświadczenie z jednym z nich i mógł mi powiedzieć więcej o nich? Na przykład, zauważyłem, że istnieje opcja modelowania podobnego do fluxogramu dla Repast, ale uważam, że jest raczej ograniczona. Rozejrzałem się po tutorialach i dokumentacji na oficjalnej stronie, a dokumentacja wydaje się brakować. Chociaż istnieje kilka przykładów, powiedziałbym, że rozszerzam to, aby symulować otoczenie, które nie zostało specjalnie przygotowane, aby wydawać się obecnie nieosiągalnym celem, mimo że Repast jest oczywiście bardzo silny i najwyraźniej jest w stanie sobie z tym poradzić, biorąc pod uwagę jego znajomość.

Z drugiej strony, NetLogo ma więcej przykładów i ogólnie podobało mi się bardziej ze względu na swoją prostotę, ale wydaje się, że bardziej skupia się na symulowaniu propagacji chorób lub podobnych modeli. Znalazłem książkę o programowaniu uczącą się Logo, więc sądzę, że łatwiej byłoby zacząć z niej korzystać.

Obecnie myślę o symulowaniu botnets i IDS es jako multiagents. Problem polega jednak na tym, że musiałbym abstrahować warstwy sieci i transportu w takim stopniu, aby móc to zrobić, a także generować ruch między węzłami. Repast jest podobno bardziej odpowiedni do tego, ale biorąc pod uwagę jego złożoność i brak dokumentacji, myślę o używaniu NetLogo. Chociaż istnieją przykłady NetLogo z tradycyjnymi aplikacjami (np. Tetris lub Pac-Man), nie jestem pewien, jaki byłby odpowiedni dla tego.

Odpowiedz

1

Można symulować ruch za pomocą typu agenta o nazwie "pakiet", który zostanie utworzony i wysłany od agenta o nazwie "bot" do innego agenta o nazwie "bot" lub "serwer". Zamiast wysyłać pakiety na adres IP, wysyłałbyś je do pary współrzędnych X i Y.

Netlogo ma przykład tego, jak wirus rozprzestrzenia się w sieci, może to być dobry punkt wyjścia.

2

Miałem mniej więcej ten sam problem kilka miesięcy temu, kiedy musiałem wybrać ramy dla mojej symulacji. Patrzę na Repast, NetLogo, Swarm i Jade. NetLogo było fajne i próbowałem napisać proste aplikacje testowe, ale ponieważ chciałem używać Java jako mojego języka programowania, NetLogo nie było najlepszym kandydatem. Repast ma prawie wszystko, czego potrzeba do tworzenia większych symulacji i istnieje wiele projektów (szczególnie w naukach społecznych), w których wykorzystywany jest program Repast. Moje problemy z repastami to: zła dokumentacja API, parametry przekazywane do metod lub konstruktorów, które nigdy nie są używane i które nie mają żadnego sensu (spójrz na kod źródłowy) i dużo kodu standardowego. Używam teraz Jade (http://jade.tilab.com/) i jestem z tego bardzo zadowolony. Społeczność jest dobra, a ich lista mailingowa jest BARDZO aktywna. Okay, Jade to tylko biblioteka i framework do modelowania opartego na agentach. Nie dostaniesz czegoś takiego, jak edytor wizualny w Repast, a będziesz musiał napisać własne narzędzie do wizualizacji wyników.

Cheers

0

nigdy nie próbowałem NetLogo, ale starałem repast-J i Simphony. Wygląda na to, że Simphony jest dobra, ale w tej chwili utknąłem na zmianę typu Edge z prostej na zakrzywioną. Brak wystarczającej dokumentacji i przykładów. Kiedyś wypróbowałem Mason, który jest oparty również na Javie. Jest podobny do Repast-J, ale był szybszy. Ale ostatnio w Masonie niewiele się dzieje. Chciałbym wypróbować Jade później.

12

Mam stronę z kilkoma drzemkami netlogo multiagent simulations.Używam netlogo do nauczania i odkryłem, że po przejściu przez krzywą uczenia się możesz niezwykle szybko przeprowadzić symulację. Rzeczy, które zajęłyby ci 80 godzin pracy w innych tak zwanych środowiskach agentów (Jade, Repast, które w rzeczywistości są głównie programowaniem bibliotek), można zrobić w ciągu 2 godzin.

Z drugiej strony netlogo nie jest dobre dla symulacji, które wymagają ogromnej ilości szczegółów, takich jak np. Symulacja sieci z TCP/IP do HTTP. Wymagałoby to tylko dużych ilości kodu, niezależnie od języka programowania, a netlogo jest na razie do bani, jeśli twój program kończy się ponad 10 stron. Powiedziawszy to, większość ludzi byłaby zdziwiona, co można zrobić na 10 stronach kodu netlogo.

10

Krótka odpowiedź: to zależy od paradygmatu programowania lub języka, którego chcesz użyć, a także projektowania chcesz dla agentów:

  • Jeśli chcesz low-entry -wysokiego języka sufitu umożliwiającego szybkie prototypowanie, ale wyrafinowane symulacje i są skłonne nauczyć się nowego paradygmatu (unikanie pętli) używają NetLogo. Dobra dokumentacja.

  • Jeśli chcesz mieć rzeczywisty aplikację do używania na wysoko parallelized klastrów lub po prostu chcesz używać Java Groovy lub potrzebujesz konkretnej biblioteki Java dla celów użyj repast lub lepiej Repast for High Performance Computing (ale uniknąć ReLogo który jest bardzo powolny). Łagodna dokumentacja.

  • Jeśli chcesz modelować czynniki poznawcze (zamiast reaktywnego) z komunikacji Fipa, lepiej użyć Jason lub lepiej JaCaMo który obsługuje AgentSpeak + Java (więc można również wykorzystać swoje ulubione bibliotek Java), i nie ma Groovy wymagane. Zła dokumentacja (wiele nieszczegółowych funkcji i poleceń oraz złe, zbyt złożone, nie skomentowane przykłady).

Długa odpowiedź: Zastrzeżenie: Jestem bardziej doświadczony z NetLogo ale kiedyś również posiłek i kilka innych, takich jak Jason.

Zasadniczo różnica między NetLogo i Repast polega na tym, że dzięki NetLogo będziesz miał prostsze ramy, ale będziesz musiał nauczyć się programowania w paradygmacie zorientowanym na żółwia i łatę, podczas gdy w Repast będziesz musiał dowiedz się, że + mechanizmy stojące za Java Groovy, ale ostatecznie uzyskasz większą elastyczność. Prędkość nie jest tu tak naprawdę kryterium (patrz poniżej).

Aby być bardziej zrozumiałym, można wydajnie programować w NetLogo, jeśli używa się maksymalnie funkcji natywnych dla żółwi i łatek. Na przykład, jeśli chcesz wdrożyć A *, zamiast wdrażać listę węzłów, należy użyć bezpośrednio patchs i filtrować je przy użyciu pasz tak:

ask patchs with [criteria1 = value and criteria2 = value2] [do-some-stuff] 
ask patchs with-min [criteria][do] 
let var [somevalue] of min-one-of patches [criteria] 

także, jeśli nie może znaleźć drogę do sprawnie rób to, co chcesz, sprawdź: if maybe an extension exists (sprawdź także here pod Bibliotekami i narzędziami) w twoim celu, tak jak teraz macierzyńskie rozszerzenie macierzy, które pozwoliło mi wykonać efficient neural network in NetLogo.

Z drugiej strony, Repast jest potencjalnie bardziej elastyczny niż NetLogo (ponieważ masz dostęp do całej gamy bibliotek Java), ale nieco bardziej skomplikowany, ponieważ musisz wiedzieć, jak obsługiwać Groovy.

Jeśli interesuje Cię wyłącznie szybkość, NIE używaj ReLogo (składnia podobna do NetLogo dla Repast), która okazała się być dużo wolniejsza od NetLogo (zobacz artykuł z 2012 roku poniżej). W każdym przypadku najlepiej jest wypróbować implementację za pomocą NetLogo, korzystając z powyższych sztuczek, lub jeśli chcesz użyć aplikacji na później, istnieje również dystrybucja o nazwie Repast for High Performance Computing, która usuwa większość przeciążenia, które pochodzą z żółwi i łatek obiektów, a zatem może być stosowany do rzeczywistych aplikacji. A similar extension exists for NetLogo do obliczania w klastrach z równoległością, ale nie jest to oficjalna dystrybucja.

Jeśli chcesz więcej info o różnorodnych platformach, tu jest ładny przegląd 2006:

Railsback, S. F., Lytinen, S. L., & Jackson, S. K. (2006). Agent-based Simulation Platforms: Review and Development Recommendations. SIMULATION, 82(9), 609-623.

i zaktualizowana wersja tego dokumentu w 2012 roku do czynienia z NetLogo vs ReLogo:

Lytinen, S. L., & Railsback, S. F. (2012, April). The evolution of agent-based simulation platforms: A review of netlogo 5.0 and relogo. In Proceedings of the Fourth International Symposium on Agent-Based Modeling and Simulation.

/EDYCJA: Zacytowałem Jason, ale nie podałem żadnych szczegółów. Jeśli chcesz modelować agenty poznawcze (zamiast agentów reaktywnych), możesz to zrobić w NetLogo używając nieoficjalnego BDI extension, który działa dobrze, ale jest nieco ograniczony (ale jest łatwy do rozszerzenia, ponieważ jest to czysty NetLogo), ale najlepiej jest użyć framework zaprojektowany specjalnie do modelowania agenta poznawczego z pełną obsługą agenta AgentSpeak.

Jason jest bardzo ładne, ponieważ masz dostęp do pełnego języka AgentSpeak + JAVA w celu wdrożenia strony technicznej. W rzeczywistości można wykonywać całe projekty przy użyciu tylko agenta AgentSpeak (co zrobiłem), ale można również tworzyć więcej wersji zorientowanych na język Java, to od ciebie zależy, jak chcesz zaprojektować program, a wynik będzie mniej więcej taki sam. Zapewnia to dużą elastyczność w obiegu pracy projektowej.

Porada: wyszukaj "Jason internal actions" w dokumentacji, aby uzyskać dokładny opis dostępnych poleceń programu AgentSpeak.

Również jeśli interesuje Cię Jason, możesz być zainteresowany JaCaMo (= Jason + Cartago + Moise), który jest wynikiem współpracy trzech autorów projektów, aby stworzyć pełnoprawną strukturę agenta poznawczego, która może również modelować złożone środowiska (z teorią artefaktów) i organizacje z wieloma agentami (role, grupy, misje itp.).

Ostatnią ramą, którą znam, ale nie miałem okazji spróbować, jest Mason, która obsługuje środowiska 2D i 3D. Nigdy nie miałem okazji wypróbować tego, więc nie wiem, jak to się ma do innych, ale możesz go wypróbować.

+0

Aby uzyskać więcej informacji o Jasonie, proponuję skorzystać z książki: Programowanie systemów wieloagentowych w AgentSpeak przy użyciu Jason http://jason.sourceforge.net/jBook/jBook/Home.html –

0

Jeśli możesz już kod w Javie, można również spojrzeć na poniższym artykule dla porównania repast, Swarm, Quicksilver i VSEit, różni się swobodnie dostępne programowania biblioteki dla wsparcia społecznego środek naukowa symulacja komputerowa oparta

Tobias, Robert, and Carole Hofmann. "Evaluation of free Java-libraries for social-scientific agent based simulation." Journal of Artificial Societies and Social Simulation 7.1 (2004).

repast jest zdecydowanie bardziej elastyczny niż NetLogo ale dokumentacja nie jest bardzo szczegółowy dla repast Symphony