Viel-Handelnden-Gebilde

Wat is en Multiagentensystem? Da stellen wa uns ma janz dumm und saagen:

Ein Agent soll soetwas sein, wie ein eigenständig laufendes Programm, das von sich aus bestimmte Aktionen durchführt. Klingt nach KI, künstlicher Intelligenz. Ich bin SEHR skeptisch bei solchen Begriffen. Es KANN etwas mit dem zu tun haben, was in dem Forschungsgebiet untersucht wird, welches diesen Begriff als Namen trägt. Ein Agent könnte aber auch einfach ein Programm sein, das jede E-Mail ausdruckt, die man empfängt. Nicht besonders intelligent, die ganzen Viagra-Angebote auch noch auf Papier zu bannen… Tatsächlich ist der Begriff „Agent“ nirgends scharf definiert, jeder versteht ein bisschen was anderes darunter. Und neu ist das auch nicht wirklich, schon ewig gibt es Programme, die im Hintergrund laufen und scheinbar „selbstständig“ irgendwelche Aktionen ausführen.

Was zur Hölle ist dann ein MULTIagentenSYSTEM? Nunja, im Grunde genommen ein Programm, das aus vielen kleinen Programmen besteht, die alle mehr oder weniger selbstständig ihre Aufgaben versehen. Und diese Agenten arbeiten dabei zusammen und versuchen eine gemeinsame Aufgabe zu erfüllen.

Was soll der Quatsch? Dann kann man doch auch direkt nur ein Programm entwickeln, wozu viele kleine? Sicher kann man. Aber das wird ZIEMLICH schwierig zu durchschauen. Je komplexer die Aufgabe, desto komplexer wird auch das Programm, um sie zu lösen. Und wie schon erläutert ist die Aufgabe „Einen Containerhäfen darstellen“ schon ziemlich komplex. Der Trick ist also „divide et impera“: Die Aufgabe aufteilen in viele kleine Aufgaben und diese dann an mehrere kleinere, einfacher zu durchschauende Programme verteilen, eben diese Agenten. Dabei kann es passieren, dass Ergebnisse entstehen, die man überhaupt nicht erwartet oder einprogrammiert hat, die Agenten zeigen ein emergentes Verhalten.

Auch nichts neues, mag der eine oder andere einwerfen. Threadprogrammierung gibt es auch schon ewig. Dabei versucht man eben das zu tun, was zu erläutern ich mich soeben bemüht habe: Ein Programm in mehrere kleine unterteilen, die parallel und unabhängig voneinander ausgeführt, also auch an mehrere Prozessoren verteilt werden können. Diese arbeiten dann gleichzeitig und die modernen Multiprozessor-Systeme spielen erst ihre wahre Stärke aus. Schließlich ist dem Lager, das grade den besten Standplatz für einen Container sucht, ziemlich egal, was gleichzeitig der Kran treibt.

Stimmt, gibt es auch schon ewig, aber ein Problem entsteht dabei immer: Die einzelnen Threads müssen synchronisiert werden, d.h. an bestimmten Stellen im Programmablauf müssen sie aufeinander warten, z.B. weil ein Zwischenergebnis von dem einen Programm an das andere weitergegeben werden muss. Das ist nun relativ kompliziert und findet meistens direkt im Quellcode beim Programmieren von Hand statt. Was fehleranfällig und aufwändig ist. Ein Multiagentensystem (oder besser ein vorgefertigtes Framework dafür, so wie JADE) fungiert jetzt als Abstraktionsschicht. Der Programmierer (also z.B. im Moment ich) muss sich relativ wenig Gedanken um die Synchronisierung machen, das übernimmt JADE. Und noch einen weiteren Vorteil gibt es: Man kann sehr einfach mehrere Computer zu einem System zusammenschließen und dann z.B. den Lageragenten auf dem einen und den Kranagenten auf einem anderen Computer ausführen. Die Agenten merken davon nichts, denn sie unterhalten sich nur über Nachrichten. Die Zustellung übernimmt das Framework, und ob die Nachricht jetzt von einem anderen Computer kommt oder nicht ist dem Agenten herzlich egal.

Soviel dazu. Aber da war doch noch so ein anderes komisches Wort. Ornitologie? Dazu mehr beim nächsten Mal.

Leave a Reply