Sonderdruck (PDF) - Institut für Automatisierungs- und ...
Sonderdruck (PDF) - Institut für Automatisierungs- und ...
Sonderdruck (PDF) - Institut für Automatisierungs- und ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
2003–04<br />
<strong>Automatisierungs</strong>technische<br />
Praxis<br />
Softwareagenten – Einführung <strong>und</strong><br />
Überblick über eine alternative Art<br />
der Softwareentwicklung<br />
<strong>Sonderdruck</strong><br />
Oldenbourg
Universität Stuttgart<br />
<strong>Institut</strong> für <strong>Automatisierungs</strong>- <strong>und</strong> Softwaretechnik<br />
Prof. Dr.-Ing. Dr. h. c. P. Göhner<br />
Agenten in der <strong>Automatisierungs</strong>technik<br />
Liebe Leser,<br />
die Entwicklung von Software für moderne <strong>Automatisierungs</strong>systeme<br />
ist eine beständige Herausforderung für<br />
Ingenieure <strong>und</strong> findet häufig im Spannungsfeld einer<br />
Reihe verschiedenster Anforderungen statt. Dazu gehören<br />
die zunehmende Dezentralisierung <strong>und</strong> komplexere<br />
Abläufe in <strong>Automatisierungs</strong>systemen sowie die Notwendigkeit<br />
zu mehr Flexibilität, Robustheit, Skalierbarkeit,<br />
Anpassbarkeit <strong>und</strong> Integrationsfähigkeit der <strong>Automatisierungs</strong>software.<br />
Um diese Anforderungen zukunftssicher bewältigen zu<br />
können, muss die <strong>Automatisierungs</strong>software flexibel <strong>und</strong><br />
ohne großen Aufwand an Änderungen des <strong>Automatisierungs</strong>systems<br />
oder seiner Umgebung anpassbar sein.<br />
Dabei besteht häufig die Schwierigkeit, die komplexen<br />
Abläufe <strong>und</strong> Verhaltensweisen eines solchen, flexiblen<br />
Systems zu beherrschen. Der Einsatz von Softwareagenten<br />
bietet viel versprechende Möglichkeiten, diesen Herausforderungen<br />
zu begegnen. Dabei handelt es sich um<br />
autonome Softwareeinheiten, die selbstständig innerhalb<br />
ihres Entscheidungsrahmens handeln <strong>und</strong> dabei vorgegebene<br />
Ziele verfolgen. Agenten können miteinander<br />
flexibel interagieren <strong>und</strong> durch Verhandlungen kooperieren,<br />
um ihre individuellen Ziele zu erreichen.<br />
Besonderes Potential beim Einsatz von Softwareagenten<br />
ist überall dort zu erwarten, wo in verteilten Strukturen<br />
lokale Dynamik <strong>und</strong> Selbstständigkeit von Bedeutung<br />
sind <strong>und</strong> zugleich vielfältige, systemübergreifende Abhängigkeiten<br />
zwischen Teilprozessen das Verhalten des<br />
Gesamtssystems wesentlich beeinflussen. Mit Hilfe von<br />
Agenten wird es möglich, die notwendige Flexibilität <strong>und</strong><br />
Anpassungsfähigkeit von <strong>Automatisierungs</strong>systemen<br />
systematisch zu entwerfen. Damit kann der längst fällige<br />
Paradigmenwechsel in der <strong>Automatisierungs</strong>technik vollzogen<br />
werden – weg von hierarchischen, statischen Systemen,<br />
hin zu flexiblen, dezentralen Netzwerken aus<br />
autonomen, kooperierenden Elementen.<br />
In den letzten Jahren haben Agenten in den verschiedensten<br />
Bereichen den Weg in konkrete Anwendungen<br />
gef<strong>und</strong>en, beispielsweise im E-Business, in der Telekommunikation<br />
oder in der Logistik. In der <strong>Automatisierungs</strong>technik<br />
werden die Vorteile agentenorientierter<br />
Systeme bisher noch kaum genutzt. Ein Gr<strong>und</strong> hierfür ist<br />
sicherlich, dass heute noch keine einheitliche Vorstellung<br />
darüber besteht, was Agenten genau ausmacht, <strong>und</strong> wie<br />
agentenorientierte <strong>Automatisierungs</strong>systeme systematisch<br />
entwickelt <strong>und</strong> realisiert werden können.<br />
Das <strong>Institut</strong> für <strong>Automatisierungs</strong>- <strong>und</strong> Softwaretechnik<br />
beschäftigt sich seit einigen Jahren mit dem Einsatz von<br />
Agenten in der <strong>Automatisierungs</strong>technik. Die vorliegende<br />
Beitragsreihe bietet einen Überblick über dieses spannende<br />
Thema. Der erste Teil gibt eine Einführung in die<br />
wesentlichen Merkmale von Agenten, beschreibt die<br />
Vorgehensweise bei der agentenorientierten Softwareentwicklung<br />
<strong>und</strong> zeigt die Vor- <strong>und</strong> Nachteile agentenorientierter<br />
Systeme – insbesondere im Hinblick auf die<br />
<strong>Automatisierungs</strong>technik – auf. Im zweiten Teil wird die<br />
Denk- <strong>und</strong> Vorgehensweise bei der agentenorientierten<br />
Softwareentwicklung an Hand der Modellierung eines<br />
technischen Anwendungsbeispiels veranschaulicht. Der<br />
dritte Teil diskutiert die Möglichkeiten zur Implementierung<br />
von Agentensystemen <strong>und</strong> verdeutlicht diese mit<br />
Hilfe des modellierten technischen Beispiels. Die drei<br />
Beiträge wurden in der atp, Hefte 10/2003, 11/2003 <strong>und</strong><br />
2/2004 veröffentlicht.<br />
Wenn Sie weitere Fragen zu diesem Thema oder zu<br />
den Forschungsarbeiten des <strong>Institut</strong>s für <strong>Automatisierungs</strong>-<br />
<strong>und</strong> Softwaretechnik auf dem Gebiet „Agenten in<br />
der <strong>Automatisierungs</strong>technik“ haben, freuen wir uns über<br />
Ihre Kontaktaufnahme. Sie finden unsere Kontaktadressen<br />
am Ende dieses Sonderheftes.<br />
Herzlichst, Ihr<br />
Prof. Dr.-Ing. Dr. h. c. P. Göhner
3<br />
Softwareagenten – Einführung <strong>und</strong><br />
Überblick über eine alternative Art der<br />
Softwareentwicklung<br />
Thomas Wagner, Paulo G. de A. Urbano <strong>und</strong> Peter Göhner<br />
Universität Stuttgart<br />
Agentenorientierte Softwareentwicklung<br />
Immer häufiger fällt im Zusammenhang mit moderner industrieller Software der Begriff des Agenten. Ob im<br />
Internet, E-Business, Telekommunikation, Logistik <strong>und</strong> teilweise bereits in der <strong>Automatisierungs</strong>technik, Software,<br />
die auf Agenten basiert, scheint die Herauforderungen an moderne Anwendungen besser <strong>und</strong> einfacher<br />
zu bewältigen. Häufig wird bei den vorgestellten Anwendungen aber nicht klar, um was es sich bei dem<br />
Begriff des Softwareagenten eigentlich handelt <strong>und</strong> warum damit Probleme besser gelöst werden sollen.<br />
Handelt es sich hierbei um eine Technologie, eine Architektur oder ein Programmierkonzept? In diesem Artikel<br />
wollen wir eine allgemeine Einführung in das Thema Softwareagenten aus der Sicht des Softwareentwicklers<br />
geben, die theoretischen Gr<strong>und</strong>lagen sowie die praktische Anwendung erläutern <strong>und</strong> verdeutlichen,<br />
bei welchen Problemen Softwareagenten überhaupt einen sinnvollen Lösungsansatz darstellen. Der<br />
Schwerpunkt liegt dabei auf Anwendungen in der <strong>Automatisierungs</strong>technik.<br />
Agent systems in industrial automation: Agent-oriented software engineering<br />
Evermore frequently, the term „agent“ is associated with modern industrial software.Whether in the Internet,<br />
e-business, telecommunications, logistics or even in the industrial automation area, software based on<br />
agents seems to make the challenges in modern applications easier to overcome effectively. However, in a<br />
particular application, it is often unclear what the function of the software agent is and why problems can<br />
be better solved with it. Is it concerning a technology, an architecture or a programming concept? In this article<br />
we intend to present a general introduction to the software agent subject from the software engineer's<br />
perspective, elucidating the theoretical basis in addition to the practical applications and clarifying to which<br />
type of problems software agents could represent a reasonable approach. The main focus therefore lies in<br />
industrial automation applications.<br />
1. Einführung<br />
Der Begriff des (Software-) Agenten existiert seit fast 40 Jahren<br />
in den verschiedensten Ausprägungen. Zunächst wurde<br />
die Idee des Agenten in der Science-Fiction Literatur 1964<br />
von Arthur C. Clarke in seinem Buch 2001 – Odyssee im Weltraum<br />
als künstliches, intelligentes Computerwesen HAL skizziert.<br />
In den achtziger Jahren entwickelte sich ein Forschungs-zweig<br />
der Informatik, der sich mit so genannten<br />
Agentensystemen beschäftigt <strong>und</strong> seinen Schwerpunkt<br />
zunächst im Bereich der künstlichen Intelligenz (KI) hatte.<br />
Hier wurden unter Agenten vorwiegend verteilte Problemlösungsprozesse<br />
verstanden.<br />
In den letzten 15 Jahren haben sich die Agenten 1 <strong>und</strong><br />
Agentensysteme zu einem wichtigen Forschungsbereich<br />
1<br />
Im Folgenden verwenden wir den Begriff Agent stets im Sinne von<br />
Softwareagent. Eine allgemeine Taxonomie des Begriffes Agent findet sich<br />
in [1].<br />
entwickelt. Auch bei industriell eingesetzter Software findet<br />
sich in den letzten Jahren vermehrt der Begriff des Agenten<br />
wieder, ausgehend von der Informationssuche im Internet,<br />
über E-Business <strong>und</strong> Supply Chain Management Systeme bis<br />
hin zu bestimmten Programmen in heutigen Windows-Betriebssystemen.<br />
Vielfach werden Agenten dabei als Mittel<br />
dargestellt, mit dem die Eigenschaften <strong>und</strong> Fähigkeiten von<br />
Software entscheidend verbessert werden können. Dies ist<br />
sicherlich zum einen auf die Tatsache zurückzuführen, dass<br />
sich der Forschungsbereich der Agentensysteme zunehmend<br />
etablieren konnte <strong>und</strong> immer mehr Synergien mit<br />
anderen Forschungsgebieten entstanden. Zum anderen ist<br />
der Begriff des Agenten aber wegen seiner unterschiedlichen<br />
umgangssprachlichen Bedeutung als Handels- <strong>und</strong> als<br />
Geheimagent ein schillernder Begriff, so dass er bestens als<br />
Werbeschlagwort geeignet ist, um alles <strong>und</strong> nichts zu<br />
bezeichnen. Von manchen Softwareherstellern wird heute<br />
selbst ein einfaches Makro als Agent bezeichnet, ohne dass<br />
sich seine Funktionalität dadurch geändert hätte.
4<br />
Es ist ein bekanntes Paradoxon in der Gemeinschaft der<br />
Agentenforscher, dass es trotz umfangreicher Entwicklungen<br />
auf diesem Gebiet bis hin zu real eingesetzten Systemen<br />
kein festgelegtes <strong>und</strong> allgemein akzeptiertes Verständnis<br />
darüber gibt, was ein Agent genau ist <strong>und</strong> welche<br />
gr<strong>und</strong>legenden Eigenschaften diesen Begriff charakterisieren.<br />
Nick Jennings, einer der bekanntesten Pioniere auf dem<br />
Gebiet der Agentenforschung, hat diese Tatsache auf den<br />
Punkt gebracht: „In particular, there is no real agreement<br />
even on the core question of exactly what an agent is.“ [2].<br />
Nach Parunak gibt es fast so viele Definitionen von Agenten<br />
wie Forscher auf diesem Gebiet [3]. Viele dieser Definitionen<br />
sind historisch entstanden <strong>und</strong> beziehen sich meist auf<br />
ein spezifisches Anwendungsgebiet. Beispiele hierfür sind<br />
der AIMA Agent [4], der Maes-Agent [5], der Hayes-Roth-<br />
Agent [6], weitere Beispiele unter [1]. Zwar bestehen die<br />
verschiedenen Definitionen häufig aus ähnlichen Kernbegriffen<br />
wie Autonomie, Reaktivität <strong>und</strong> Zielorientierung,<br />
diese werden aber unterschiedlich ausgelegt <strong>und</strong> gewichtet.<br />
Dieses Paradoxon führt zu einem gr<strong>und</strong>sätzlichen<br />
Dilemma in der Agentenforschung <strong>und</strong> -anwendung: Einerseits<br />
ist es nicht möglich, ohne allgemeine Definition Agentensysteme<br />
(auch: agentenorientierte Softwaresysteme) in<br />
vernünftiger Weise von anderen Arten von Softwaresystemen<br />
abzugrenzen. Andererseits ist es schwierig, ein agentenorientiertes<br />
Softwaresystem zu entwickeln, wenn die charakteristischen<br />
Eigenschaften eines solchen Systems – <strong>und</strong><br />
somit auch die Entwicklungsmethodik – nicht klar sind. Ein<br />
Softwaresystem kann herkömmlich entwickelt <strong>und</strong> auf Basis<br />
einer passenden Definition als Agentensystem bezeichnet<br />
werden. Dies ist sicherlich mit ein Gr<strong>und</strong> für den eingangs<br />
erwähnten Wildwuchs bei der Verwendung der Begriffe<br />
Agent <strong>und</strong> Agentensystem.<br />
Aus der Sicht des Anwenders ist Software stets ein mehr<br />
oder weniger gut funktionierendes Produkt. Aus der Sicht<br />
des Ingenieurs <strong>und</strong> Softwareentwicklers ist aber vielmehr<br />
von wesentlichem Interesse, wie dieses Produkt entsteht,<br />
welche Instrumente <strong>und</strong> Methoden bei seiner Entwicklung<br />
zum Einsatz kommen <strong>und</strong> wie einfach damit die gewünschte<br />
Funktionalität erreicht werden kann. In den letzten Jahren<br />
hat sich daher auch in der Gemeinde der Agentenforscher<br />
die Erkenntnis durchgesetzt, dass die Theorie der Agenten<br />
<strong>und</strong> Agentensysteme für eine breite industrielle Anwendbarkeit<br />
nicht nur aus der Sichtweise der Informatik, sondern<br />
vielmehr aus Sicht der Softwaretechnik betrachtet werden<br />
muss [7, 8].<br />
Eine Ursache für die vielfach bekannten Probleme in der<br />
heutigen Softwareentwicklung ist sicherlich die hohe Komplexität<br />
der Programme. In den letzten drei Jahrzehnten hat<br />
die Softwaretechnik ein zunehmend besseres Verständnis<br />
über die Eigenschaften <strong>und</strong> Zusammenhänge der Komplexität<br />
von Software erreicht. Heute ist es zunehmend anerkannt,<br />
dass Verteiltheit <strong>und</strong> Interaktion wohl die hervorstechendsten<br />
Merkmale komplexer Software sind [9, 10]. Es<br />
zeigt sich, dass aufgr<strong>und</strong> der zunehmenden Vernetzung<br />
zwischen <strong>und</strong> innerhalb von Systemen die meisten realen<br />
Anwendungen genau diese Eigenschaften von Komplexität<br />
aufweisen. Dies gilt für Internet- <strong>und</strong> Officeanwendungen<br />
gleichsam wie für automatisierungstechnische Systeme.<br />
Moderne Softwaresysteme bestehen häufig aus vielen<br />
dynamisch interagierenden Elementen, die getrennt<br />
voneinander ablaufen <strong>und</strong> untereinander in vielfältiger<br />
<strong>und</strong> komplexer Weise kommunizieren. Sie sind jedoch viel<br />
schwieriger zu entwickeln als diejenigen, die mit einer einzelnen<br />
Funktion Eingabewerte in Ausgabewerte überführen.<br />
Daher liegt der Schwerpunkt der Softwaretechnik<br />
zunehmend darin, Instrumente <strong>und</strong> Methoden zu entwickeln,<br />
mit denen diese Systeme besser verstanden, modelliert<br />
<strong>und</strong> implementiert werden können. Die Objektorientierung<br />
ist ein Beispiel dafür.<br />
Im Kontext dieser Entwicklungen kann man Agenten als<br />
neuen Ansatz im Sinne der Softwaretechnik unter zwei<br />
Gesichtspunkten betrachten: als Hilfsmittel für die Softwareentwicklung<br />
<strong>und</strong> als Technologie für die Implementierung<br />
von Softwaresystemen.<br />
1.1 Agenten als Instrument für die<br />
Softwareentwicklung<br />
Die Erfahrungen seit Beginn der Softwaretechnik haben<br />
gezeigt, dass ein Ansatz zur Entwicklung von Softwaresystemen<br />
nicht nur auf die Aspekte der Programmierung<br />
beschränkt sein darf, soll er umfassend für die systematische<br />
Entwicklung von Systemen anwendbar sein. Statt dessen<br />
müssen Hilfsmittel bereit gestellt werden, die den Softwareentwickler<br />
bei allen Schritten des Entwicklungsprozesses<br />
unterstützen – ausgehend von der Analyse der Problemstellung<br />
über den Entwurf des Systems bis hin zu seiner Implementierung.<br />
Das Konzept des Agenten ist ein solches Instrument<br />
für die Entwicklung von komplexen Systemen mit vielfältiger<br />
Funktionalität <strong>und</strong> verteilten, interagierenden<br />
Elementen [11]. Mit Hilfe von Agenten können verteilte Informationen,<br />
Funktionalität <strong>und</strong> Entscheidungsprozesse in<br />
einem Softwarekonstrukt integriert werden. Dieser Aspekt<br />
des Agentenbegriffes wird als agentenorientierte Softwareentwicklung<br />
bezeichnet <strong>und</strong> im ersten Teil des Artikels<br />
behandelt.<br />
1.2 Agenten als Technologie für die<br />
Implementierung<br />
Für die Implementierung eines agentenorientierten Softwareentwurfes<br />
in ein agentenorientiertes Softwaresystem –<br />
als Agentensystem bezeichnet – existieren eine Reihe von<br />
Technologien, welche die agentenorientierten Entwicklungskonzepte<br />
direkt auf Implementierungsebene umsetzen.<br />
Die agentenorientierten Technologien bieten dem Programmierer<br />
eine umfassende Unterstützung für die Implementierung<br />
einzelner Agenten, eines Agentensystems, der<br />
Interaktion von Agenten <strong>und</strong> agenteninternen Abläufen <strong>und</strong><br />
Abläufen zwischen Agenten. Zu diesen Technologien zählen<br />
agentenorientierte Programmiersprachen, Klassenbibliotheken,<br />
Entwicklungsumgebungen, Laufzeitumgebungen,<br />
Agentenarchitekturen. Diese Gesichtspunkte werden zusammen<br />
mit einem Modellierungs- <strong>und</strong> Implementierungsbeispiel<br />
aus der <strong>Automatisierungs</strong>technik in den folgenden<br />
zwei Teilen des Artikels vorgestellt.
5<br />
2. Wie entwickelt man eigentlich<br />
Software?<br />
Ausgangspunkt einer Softwareentwicklung<br />
ist immer eine konkrete Aufgabenstellung<br />
in Form einer Problembeschreibung.<br />
Ist die Aufgabenstellung<br />
klein <strong>und</strong> überschaubar genug, so kann ein Programmierer<br />
möglicherweise die gewünschte Funktionalität direkt in<br />
einer bestimmten Programmiersprache implementieren.<br />
Heutige Aufgabenstellungen sind aber häufig viel zu komplex<br />
<strong>und</strong> umfangreich, als dass sie für eine Einzelperson<br />
überschaubar <strong>und</strong> direkt implementierbar wären [12]. Daneben<br />
können allgemeine Qualitätsmerkmale von Software<br />
wie Robustheit, Änderbarkeit <strong>und</strong> Wiederverwendbarkeit<br />
mit dieser Vorgehensweise nur sehr begrenzt gewährleistet<br />
werden [13]. Vielmehr stellt sich die Frage: Wie muss ein realer<br />
Sachverhalt betrachtet werden, damit sich dessen Merkmale<br />
<strong>und</strong> die gewünschte Funktionalität am Ende im erstellten<br />
Softwaresystem widerspiegeln? Zur Beantwortung dieser<br />
Fragen stellt die Softwaretechnik Gr<strong>und</strong>sätze, Methoden,<br />
Konzepte <strong>und</strong> Notationen für die systematische Entwicklung<br />
von komplexen <strong>und</strong> umfangreichen Softwaresystemen<br />
bereit. Durch die systematische Betrachtung der Aufgabenstellung<br />
entsteht ein Modell 2 davon (siehe Bild 1), das die<br />
Spezifikation von Funktion, Struktur <strong>und</strong> Verhalten des Systems<br />
beinhaltet.<br />
Nach [15, 16] gibt es drei wesentliche Strategien bei der<br />
Softwareentwicklung, um die Komplexität der Aufgabenstellung<br />
zu bewältigen:<br />
Zerlegung (Modularisierung) der Aufgabe in kleinere, überschaubare<br />
Teilbereiche (Systemelemente), die relativ isoliert<br />
voneinander betrachtet werden können. Damit kann<br />
die Komplexität reduziert werden.<br />
Abstraktion der wesentlichen Merkmale des Sachverhalts<br />
<strong>und</strong> Unterdrückung nicht relevanter Eigenschaften.<br />
Dadurch kann das Modell wesentlich vereinfacht werden.<br />
Die Abstraktion ist abhängig vom Standpunkt des<br />
Betrachters, das heißt das gegenwärtige Ziel bestimmt,<br />
welche Merkmale von Bedeutung sind.<br />
Strukturierung (Organisation) durch geeignete Anordnung<br />
der Systemelemente (z. B. Hierarchisierung, Bildung<br />
von Subsystemen) <strong>und</strong> Beschreibung der Beziehungen<br />
zwischen den Systemelementen.<br />
Analyse & Entwurf<br />
Modell<br />
Bild 1: Vorgehensweise bei der Softwareentwickung.<br />
Implementierung<br />
Aufgabenstellung<br />
Softwaresystem<br />
In der Softwaretechnik gibt es eine ganze Reihe von<br />
unterschiedlichen Ansätzen zur Umsetzung dieser Strategien.<br />
Die dabei zum Einsatz kommenden Entwicklungskonzepte<br />
<strong>und</strong> -methoden unterscheiden sich in den Abstraktionsmöglichkeiten<br />
zur Beschreibung einer Systemkomponente<br />
[16]. Bei der Betrachtung eines Sachverhalts gibt es<br />
sehr verschiedene mögliche Blickwinkel, je nach Denkweise<br />
des Betrachters. Diese Tatsache soll allgemein am Beispiel<br />
eines Autos verdeutlicht werden: Ein K<strong>und</strong>e betrachtet das<br />
Auto beispielsweise unter den Gesichtspunkten Geschwindigkeit<br />
<strong>und</strong> Benzinkosten. Der Maschinenbauer betrachtet<br />
unter anderem die Bremsen <strong>und</strong> die Bremskraftverläufe. Der<br />
Elektroingenieur betrachtet das Auto als Netzwerk von Steuergeräten<br />
<strong>und</strong> die Software in den Steuergeräten. Jedem<br />
dieser Blickwinkel liegt eine andere Denkweise zu Gr<strong>und</strong>e,<br />
die unterschiedliche Merkmale des realen Sachverhalts auf<br />
unterschiedliche Weise hervorhebt <strong>und</strong> verschiedene Herangehensweisen<br />
bei der Betrachtung des Sachverhalts zur<br />
Folge hat. Diese Tatsache gilt insbesondere auch für die Entwicklung<br />
von Software. Hier sind mögliche Denkweisen<br />
unter anderem die strukturierte Entwicklung oder die Objektorientierung.<br />
In der Softwaretechnik werden solche Denkmuster, die<br />
dem jeweiligen Blickwinkel <strong>und</strong> der Herangehensweise zu<br />
Gr<strong>und</strong>e liegen, als Paradigma bezeichnet. Das Paradigma<br />
bestimmt die Art <strong>und</strong> Weise, wie ein Sachverhalt abstrahiert<br />
wird. Zu einem Paradigma der Softwaretechnik gehören<br />
Konzepte <strong>und</strong> Methoden. Konzepte bieten Hilfsmittel, auf<br />
deren Basis man einen Sachverhalt analysieren, abstrahieren<br />
<strong>und</strong> beschreiben kann, um ein Modell davon zu entwickeln<br />
[16]. Ein Beispiel ist das Konzept der Kapselung, das benötigte<br />
Daten mit den zugehörigen Operationen assoziiert. Methoden<br />
beschreiben auf Basis der Konzepte eine Vorgehensweise,<br />
mit der ein konkretes Problem am besten gelöst werden<br />
kann.<br />
Auf der Basis dieses Verständnisses der Softwareentwicklung<br />
wird deutlich, dass der Begriff des Agenten nicht nur<br />
eine Zusammenfassung von bestimmten Eigenschaften<br />
eines Softwaresystems sein kann. Russel <strong>und</strong> Norvig [4]<br />
haben dies bereits 1995 angemerkt:„The notion of an agent<br />
is meant to be a tool for analyzing systems, not an absolute<br />
characterization that divides the world into agents and nonagents.“<br />
Agenten sind also eine bestimmte Denk- <strong>und</strong><br />
Herangehensweise bei der Entwicklung von Software. Man<br />
spricht vom Paradigma der agentenorientierten Softwareentwicklung.<br />
2<br />
Ein Modell ist eine idealisierte, vereinfachte [. .] Darstellung eines Gegenstands,<br />
Systems oder sonstigen Weltausschnitts [14].<br />
3. Wie entwickelt man Software<br />
agentenorientiert?<br />
Gegenstand der agentenorientierten Softwareentwicklung<br />
sind Konzepte, Methoden, Vorgehensweisen <strong>und</strong> Werkzeuge<br />
für die Erstellung von agentenorientierter Software. Darunter<br />
versteht man Software, deren Struktur <strong>und</strong> Funktionalität<br />
unter dem Blickwinkel einer Menge von Agenten betrachtet<br />
wird [17]. Dabei wird das Verhalten eines Softwaresystems<br />
durch das Zusammenwirken komplex interagierender, autonomer<br />
Softwareeinheiten beschrieben. Die im vorhergehenden<br />
Abschnitt beschriebenen allgemeinen Strategien bei<br />
der Softwareentwicklung werden bei der agentenorientierten<br />
Softwareentwicklung wie folgt umgesetzt: Die Zerlegung
6<br />
eines Problems erfolgt in autonome Agenten als elementare<br />
Einheiten <strong>und</strong> die Abstraktion basiert auf agentenorientierten<br />
Konzepten. Bemerkenswert ist, dass die Strukturierung<br />
des Systems nicht explizit im Detail vorgegeben wird, sondern<br />
lediglich ein struktureller „Rahmen“ in Form von Organisationsmodellen<br />
festgelegt <strong>und</strong> die Art möglicher Beziehungen<br />
durch Interaktionsmodelle bestimmt wird. Damit<br />
wird eine dynamische Bildung von Strukturen zur Laufzeit<br />
ermöglicht.<br />
Um das Paradigma der agentenorientierten Softwareentwicklung<br />
genauer zu beschreiben <strong>und</strong> zu verstehen, sollen<br />
im Folgenden drei elementare Fragen beantwortet werden:<br />
Konzepte: Welche gr<strong>und</strong>legenden Konzepte stellt die<br />
agentenorientierte Denkweise für die Abstraktion eines<br />
realen Sachverhalts bereit? Diese Konzepte werden in<br />
Abschnitt 3.1 erläutert.<br />
Methoden: Wie sieht die systematische Vorgehensweise<br />
zur Anwendung der agentenorientierten Konzepte bei<br />
der Softwareentwicklung aus? Die Merkmale <strong>und</strong> Vorgehensweisen<br />
von agentenorientierten Methoden werden<br />
in Abschnitt 4 vorgestellt.<br />
Problembereich: Für welche gr<strong>und</strong>sätzlichen Probleme ist<br />
die agentenorientierte Denkweise geeignet? Dieser<br />
Punkt wird in Abschnitt 5 ausgeführt, sowie die Vor- <strong>und</strong><br />
Nachteile der Agentenorientierung diskutiert.<br />
3.1 Agentenorientierte Konzepte<br />
Zur Vorstellung des Ansatzes der agentenorientierten Softwareentwicklung<br />
werden zunächst die Konzepte erläutert,<br />
auf denen der Ansatz basiert. Dazu gehört zuerst das Konzept<br />
des Agenten selbst als zentrales Abstraktionsmittel bei<br />
der agentenorientierten Betrachtung eines Sachverhalts. Die<br />
folgende Definition ist angelehnt an die allgemein anerkannten<br />
<strong>und</strong> verwendeten Definitionen aus [2, 7, 18, 19] (für<br />
eine vergleichbare Definition in deutscher Sprache siehe<br />
[17]):<br />
In der agentenorientierten Softwareentwicklung ist das Konzept<br />
des Agenten eine abgrenzbare Softwareeinheit mit einem<br />
definierten Ziel. Ein Agent versucht, dieses Ziel durch autonomes<br />
Verhalten zu erreichen <strong>und</strong> interagiert dabei kontinuierlich<br />
mit seiner Umgebung <strong>und</strong> anderen Agenten.<br />
In dieser Definition sind die folgenden Gr<strong>und</strong>konzepte der<br />
Agentenorientierung enthalten (Bild 2):<br />
Kapselung: Zustand <strong>und</strong> Verhalten sind in einer Einheit,<br />
dem Agenten, zusammengefasst.<br />
Zielorientierung: Ein Agent orientiert sein Verhalten an<br />
einem bestimmten Ziel, das er zu erreichen versucht. Ziele<br />
können entweder vom Entwickler vorgegeben sein (z. B.<br />
den eigenen Zustand dauernd zu optimieren) oder zur<br />
Ausführungszeit von einem Benutzer in Form eines Auftrages<br />
übertragen werden.<br />
Reaktivität: Reaktivität (Reaktionsfähigkeit) ist die Fähigkeit,<br />
die Umwelt wahrzunehmen <strong>und</strong> darauf angemessen<br />
zu reagieren.<br />
Autonomie: Autonomie bedeutet die Kontrolle über den<br />
internen Zustand <strong>und</strong> das Verhalten. Das heißt zum<br />
einen, dass das Verhalten, mit dem ein Agent auf externe<br />
Stimuli reagiert, im Wesentlichen durch den Agenten<br />
Autonomie<br />
Interaktion<br />
Kapselung<br />
Agent<br />
Persistenz<br />
Bild 2: Die Gr<strong>und</strong>konzepte der Agentenorientierung.<br />
Zielorientierung<br />
Reaktivität,<br />
Proaktivität<br />
selbst bestimmt wird <strong>und</strong> nicht von „außerhalb“ festlegbar<br />
ist. Zum anderen ist Autonomie die Voraussetzung<br />
für Proaktivität.<br />
Proaktivität: Proaktivität bedeutet die Fähigkeit, ohne<br />
direkten Einfluss von außen, zielgerichtet <strong>und</strong> vorausschauend<br />
zu handeln (Eigeninitiative). Voraussetzung für<br />
Proaktivität ist die Existenz von Zielen (siehe Zielorientierung).<br />
Interaktion: Agenten treten untereinander auf hohem<br />
Niveau in Wechselwirkung (z. B. Verhandlungen). Die Basis<br />
für die Interaktionen zwischen Agenten ist ein zu Gr<strong>und</strong>e<br />
liegender organisatorischer Kontext [7]. Agenten interagieren<br />
miteinander, um individuelle Ziele zu erreichen<br />
oder um Abhängigkeiten untereinander zu handhaben.<br />
Persistenz: Ein Agent verfügt über einen fortlaufenden<br />
Kontrollfluss, der unabhängig ist von externer Aktivierung<br />
– also die Fähigkeit, seinen inneren Zustand während seines<br />
Lebenszyklus beizubehalten.<br />
Die Gr<strong>und</strong>konzepte der Agentenorientierung können je<br />
nach Ziel der Softwareentwicklung unterschiedlich stark<br />
ausgeprägt sein, so dass die Agentenartigkeit (engl. Agency)<br />
einer Softwareeinheit nicht zwingend vom Auftreten einer<br />
einzelnen Eigenschaft abhängig ist. Beispielsweise kann<br />
Aktivität im einfachsten Fall die simple Reaktion auf<br />
bestimmte Wahrnehmungen (Eingangssignale) oder – stärker<br />
ausgeprägt – die selbstständige Abarbeitung von Aufgaben<br />
bis hin zur autonomen Anpassung vorgegebener Ziele<br />
bedeuten. Neben diesen Gr<strong>und</strong>konzepten gibt es noch weitere<br />
Konzepte, um spezifische Anforderungen aus einem<br />
bestimmten Anwendungsbereich zu erfüllen. Dazu gehören:<br />
Mobilität: Mobilität ist die Fähigkeit zur Migration von<br />
einem Ort (Ausführungskontext) zu einem anderen –<br />
sowohl räumlich zwischen Plattformen als auch logisch<br />
zwischen Systemen. Sie ist dann erforderlich, wenn der<br />
Agent eine Aufgabe nur sinnvoll an einem bestimmten<br />
Ort lösen kann oder wenn zur Lastverteilung in einem<br />
Netzwerk die Verlagerung eines laufenden Prozesses von<br />
einem Rechner auf einen anderen erforderlich ist. Das<br />
Konzept der Mobilität entstand weitgehend unabhängig,<br />
so dass bei mobilen Agenten andere agentenorientierte<br />
Gr<strong>und</strong>konzepte häufig schwächer ausgeprägt sind [20].<br />
Problemlösendes Verhalten (Anpassungsfähigkeit) <strong>und</strong><br />
Intelligenz (Lernfähigkeit): Unter problemlösendem Verhalten<br />
versteht man die Fähigkeit eines Agenten, sein Verhalten<br />
aufgr<strong>und</strong> von Erfahrungen anzupassen. Ist er darüber<br />
hinaus in der Lage, ein internes Modell seiner Umwelt auf-
7<br />
zubauen, zu verfeinern <strong>und</strong> zu verbessern, spricht man<br />
von Lernfähigkeit bzw. Intelligenz. Intelligente Agenten<br />
für verteiltes Planen <strong>und</strong> Schlussfolgern sind ein wichtiger<br />
Forschungsbereich auf dem Gebiet der künstlichen Intelligenz.<br />
Die dabei zu Gr<strong>und</strong>e liegenden Theorien <strong>und</strong> Modelle,<br />
wie z. B. Wissensrepräsentation, mentale Zustände<br />
<strong>und</strong> Planungsalgorithmen, gehen jedoch über den Fokus<br />
dieses Artikels hinaus <strong>und</strong> werden im Folgenden nicht<br />
weiter betrachtet.<br />
3.2 Agenten im Vergleich zu Objekten <strong>und</strong><br />
Komponenten<br />
Die Verwandtschaft zwischen Agenten <strong>und</strong> Objekten wird<br />
stets intensiv diskutiert. Obwohl es offensichtliche Ähnlichkeiten<br />
zwischen der Objekt- <strong>und</strong> der Agentenorientierung<br />
gibt, sind Agenten dennoch keine Objekte. Dies wird besonders<br />
deutlich am Konzept der Autonomie. Obwohl Objekte<br />
ihre Identität („wer“), ihren Zustand („was“) <strong>und</strong> ihr vorgegebenes,<br />
passives Verhalten („wie, wenn aufgerufen“) kapseln,<br />
so haben sie dennoch keine Kontrolle über ihr Verhalten.<br />
Eine öffentliche Methode eines Objekts kann zu jeder Zeit<br />
aufgerufen werden <strong>und</strong> die festgelegten Aktionen werden<br />
stets ausgeführt. Agenten kapseln dagegen zusätzliche Freiheitsgrade<br />
in ihrer Aktionswahl <strong>und</strong> Interaktion („wann“,„mit<br />
wem“ <strong>und</strong> „ob überhaupt“) [21]. Sie besitzen somit die Autonomie,<br />
eine geforderte Leistung entsprechend ihrer aktuellen<br />
Situation zu erbringen. Bei der Interaktion zwischen<br />
Agenten handelt es sich also vielmehr um die Anfrage eines<br />
Dienstes als um den Aufruf einer Methode. Daneben können<br />
Agenten auch von sich aus aktiv werden. Im übertragenen<br />
Sinn ist ein Objekt vergleichbar mit einem Auto, ein Agent<br />
eher mit einem Taxi. Das Auto kann entweder den Fahrwunsch<br />
des Fahrers erfüllen oder es ist defekt. Ein Taxi ist<br />
nicht immer verfügbar, gegebenenfalls muss der Fahrgast<br />
auf das Taxi warten oder ein anderes Taxi nehmen. Darüber<br />
hinaus nimmt ein Taxi nicht immer den Weg, den der Fahrgast<br />
sich wünscht, sondern meist bestimmt der Taxifahrer<br />
den Weg (manchmal ist er sogar wirklich eine Abkürzung).<br />
Wichtig ist, dass es bei diesem Vergleich zwischen Agenten<br />
<strong>und</strong> Objekten nicht um die Frage<br />
geht, ob autonomes Verhalten mit<br />
objektorientierten Programmiersprachen<br />
implementiert werden kann. Entscheidend<br />
ist, dass in der Objektorientierung<br />
das Konzept der flexiblen Kontrolle<br />
eines Objekts über den Aufruf<br />
einer seiner Methoden nicht existiert.<br />
Komponenten weisen eine stärkere<br />
Kapselung, standardisierte Schnittstel-<br />
3 Eine Methode besteht aus (methodenspezifischen)<br />
Konzepten, Notation <strong>und</strong> methodischer<br />
Vorgehensweise [16].<br />
len, eine größere Granularität <strong>und</strong><br />
damit eine bessere Wiederverwendbarkeit<br />
als Objekte auf. In diesen Punkten<br />
sind Agenten mit Komponenten<br />
vergleichbar, integrieren jedoch zusätzlich<br />
Autonomie, Zielorientierung <strong>und</strong> Proaktivität. Darüber<br />
hinaus werden bei der komponentenbasierten Softwareentwicklung<br />
die Beziehungen zwischen den Systemelementen<br />
im Allgemeinen im Entwurf fest vorgegeben, während dies<br />
bei der agentenorientierten Softwareentwicklung nicht der<br />
Fall ist. Somit weisen Agenten im Vergleich zu Komponenten<br />
mehr Aktivität <strong>und</strong> Flexibilität auf.<br />
4. Agentenorientierte Methoden<br />
Die Aufgabe einer agentenorientierten Methode3 ist es, alle<br />
Phasen der Softwareentwicklung für ein agentenorientiertes<br />
System zu unterstützen, ausgehend von der agentenorientierten<br />
Analyse der Problemstellung über den Entwurf bis<br />
hin zur Implementierung. Obwohl seit eineinhalb Jahrzehnten<br />
umfangreiche Arbeiten im Bereich der Theorie von<br />
Agenten, Architekturen, Kommunikationsmechanismen usw.<br />
durchgeführt wurden, gab es weitaus weniger Entwicklung<br />
im Bereich der Spezifikation <strong>und</strong> Anwendung von Methoden<br />
zur agentenorientierten Entwicklung von Systemen. Das<br />
Fehlen einer umfassend evaluierten Methode einerseits <strong>und</strong><br />
der Unterstützung durch industriell einsetzbare CASE-Werkzeuge<br />
andererseits waren nach Ansicht vieler Autoren die<br />
hauptsächlichen Hemmnisse für den umfassenden Einsatz<br />
agentenorientierter Softwareentwicklung. In den letzten<br />
Jahren ist – aufgr<strong>und</strong> dieser Erkenntnis – die Entwicklung<br />
von Methoden, die speziell die Agentensicht unterstützen,<br />
immer mehr in den Mittelpunkt der Forschungstätigkeit<br />
gerückt. Inzwischen stehen eine Reihe von Entwicklungsmethoden<br />
zur Verfügung, die im Folgenden genauer betrachtet<br />
werden sollen.<br />
Nach [21] lassen sich die verfügbaren Entwicklungsmethoden<br />
nach ihren Ansätzen in drei Gruppen unterteilen:<br />
Erweiterungen von objektorientierten Methoden, Erweiterungen<br />
von Methoden aus dem Knowledge Engineering<br />
<strong>und</strong> Methoden, die auf eine rein agentenspezifische Sicht<br />
ausgelegt sind. Die Vor- <strong>und</strong> Nachteile der unterschiedlichen<br />
Ansätze werden in [22] diskutiert <strong>und</strong> sind in Tabelle 1<br />
zusammengefasst.<br />
Tabelle 1: Bewertung der Ansätze für agentenorientierte Methoden.<br />
Ansatz Vorteile Nachteile<br />
Erweiterungen • Konzeptionelle Gemeinsamkeiten • Spezifische Agentensichtweise<br />
objektorientierter zwischen OO <strong>und</strong> AO muss integriert werden<br />
Methoden (z. B. Kapselung) (z. B. Autonomie, Ziele,<br />
• Einfachere Erlernbarkeit<br />
organisatorische Aspekte)<br />
• Vorhandensein einer statischen • Agenteninteraktion findet<br />
<strong>und</strong> einer dynamischen Modellsicht auf höherer Abstraktionsebene<br />
als Methodenaufruf statt<br />
Erweiterungen von • Mittel zur Modellierung • Betrachtung als zentralisiertes,<br />
Knowledge kognitiver Fähigkeiten von wissensbasiertes System<br />
Engineering (intelligenten) Agenten • Keine Betrachtung der Aspekte<br />
Methoden • Mittel zur Modellierung der Verteilung, Organisation,<br />
Wissensbasis von (intelligenten) Interaktion <strong>und</strong> Zielorientierung<br />
Agenten<br />
Agentenspezifische • Schwerpunkt auf Agentenkonzepte • Hoher Einführungsaufwand<br />
Methoden <strong>und</strong> organisatorische Aspekte • Geringe Werkzeugunterstützung<br />
• Erfahrungen aus der Entwicklung • (Noch) keine Standardisierung<br />
realer Agentensysteme
8<br />
Analyse<br />
Damit die Agentenorientierung sich als eigenständiges<br />
Paradigma der Softwareentwicklung etablieren kann, sind<br />
Entwicklungsmethoden erforderlich, die speziell auf die<br />
agentenorientierten Konzepte angepasst sind [8]. Dabei<br />
stellt sich die Frage, wie eine Problemstellung betrachtet<br />
werden muss, um Konzepte wie Autonomie, Zielorientierung<br />
<strong>und</strong> Proaktivität integrieren zu können. Um dies zu erreichen,<br />
muss der Schwerpunkt einer agentenorientierten<br />
Methode auf den Prozessen <strong>und</strong> Abläufen liegen, die zwischen<br />
Agenten stattfinden [17]. Hierfür sind zusätzliche Analyse-<br />
<strong>und</strong> Entwurfskonzepte zur praktischen Unterstützung<br />
des Entwicklers erforderlich. Sie helfen dabei, eine Problemstellung<br />
so zu abstrahieren, dass ein Modell erstellt werden<br />
kann, das die agentenorientierten Gr<strong>und</strong>konzepte widerspiegelt.<br />
Agentenspezifische Methoden verwenden hierzu<br />
u. a. die Rollenanalyse, Use Cases <strong>und</strong> Zielanalyse. Die Rollenanalyse<br />
ist hierbei eine der wichtigsten Vorgehensweisen.<br />
Rollen leiten sich aus den Verantwortlichkeiten <strong>und</strong> Aufgaben<br />
ab, die eine Einheit innerhalb eines Systems übernimmt<br />
[23]. Die Identifikation von Agenten erfolgt dann über die<br />
Zusammenfassung mehrerer Rollen. Beispielsweise könnte<br />
in einem E-Businesssystem ein Agent sowohl die Rolle „Käufer“<br />
als auch „Anbieter“ wahrnehmen. Durch die aufgabenbetonte<br />
Sicht der Rollenanalyse werden bei der Abstraktion<br />
des realen Sachverhalts wieder mehr die „funktionalen“<br />
Aspekte eines Systems berücksichtigt als dies beispielsweise<br />
in der Objektorientierung der Fall ist (durch den erkennbaren<br />
Bruch zwischen Use Cases <strong>und</strong> Klassenidentifikation).<br />
Neben den unterschiedlichen Ansätzen für Analyse <strong>und</strong><br />
Entwurf unterscheiden sich verfügbare Methoden auch in<br />
der Unterstützung der verschiedenen Phasen im Entwicklungsprozess.<br />
In Bild 3 sind die vier Methoden PASSI, MaSE,<br />
Gaia <strong>und</strong> Agent-UML eingeordnet (siehe auch [24]). Die<br />
genannten Methoden werden im Rahmen dieses <strong>und</strong> des<br />
zweiten Teils des Artikels noch genauer betrachtet.<br />
Im Folgenden werden drei Methoden exemplarisch vorgestellt,<br />
welche die agentenorientierte Sichtweise in den<br />
Mittelpunkt stellen <strong>und</strong> die unserer Einschätzung nach gut<br />
verständlich <strong>und</strong> praktisch anwendbar sind. Alle drei Methoden<br />
werden gegenwärtig am <strong>Institut</strong> für <strong>Automatisierungs</strong><strong>und</strong><br />
Softwaretechnik eingesetzt <strong>und</strong> erprobt.<br />
4.1 Gaia<br />
Gaia<br />
Grobentwurf<br />
Ma SE<br />
PASS I<br />
Agent-UML<br />
Feinentwurf<br />
Implementierung<br />
Bild 3: Abdeckung des Entwicklungsprozesses durch verschiedene<br />
agentenorientierte Methoden.<br />
Die Gaia-Methode [8] wurde von Wooldridge, Jennings <strong>und</strong><br />
Kinny auf Basis ihrer langjährigen Erfahrungen bei der Entwicklung<br />
von Agentensystemen konzipiert. Gaia basiert auf<br />
der Abstraktion eines Agentensystems als ein organisatorisches<br />
Modell, bestehend aus verschiedenen interagierenden<br />
Rollen.<br />
Im Analyseprozess werden zunächst die einzelnen Rollen<br />
im System identifiziert <strong>und</strong> die Interaktionen zwischen diesen<br />
Rollen spezifiziert. Die Beschreibung einer Rolle enthält<br />
die Aufgabe der Rolle, ihre Rechte, Aktivitäten <strong>und</strong> verwendete<br />
Protokolle. In der Spezifikation der Aufgabe einer Rolle<br />
werden die möglichen Reihenfolgen <strong>und</strong> Zusammenhänge<br />
aller Aktivitäten sowie einzuhaltende Sicherheitsbestimmungen<br />
in Form von regulären Ausdrücken formal festgelegt.<br />
Aktivitäten sind interne Abläufe einer Rolle. Protokolle<br />
sind Interaktionsmechanismen, mit denen die Abhängigkeiten<br />
<strong>und</strong> Beziehungen zwischen verschiedenen Rollen<br />
beschrieben werden. In der Entwurfsphase werden Rollen zu<br />
Agententypen zusammengefasst. Weiter werden die möglichen<br />
Kommunikationspfade zwischen Agententypen <strong>und</strong><br />
alle Dienste, die mit jeder Rolle eines Agententyps zusammenhängen,<br />
festgelegt. Als Endergebnis liegt ein Systementwurf<br />
vor, der allerdings für eine Implementierung nicht ausreicht<br />
<strong>und</strong> noch mit anderen Methoden weiter verfeinert<br />
werden muss [25].<br />
Gaia ist leicht verständlich <strong>und</strong> daher gut für einen Einstieg<br />
in die agentenorientierte Softwareentwicklung geeignet.<br />
Eine Einschränkung von Gaia ist, dass die Beziehungen<br />
zwischen Agententypen festgelegt sind <strong>und</strong> sich nicht dynamisch<br />
verändern können.<br />
4.2 MaSE – Multiagent Systems Engineering<br />
Die MaSE-Methode [26, 27, 28] besteht aus sechs Analyse<strong>und</strong><br />
Entwurfsphasen, die eng miteinander verzahnt sind <strong>und</strong><br />
den gesamten Entwicklungszyklus abdecken.<br />
In der ersten Phase, der Zielerfassung, wird die Anforderungsbeschreibung<br />
in detaillierte Systemziele überführt. Die<br />
Systemziele werden nach Wichtigkeit strukturiert <strong>und</strong> in<br />
einem Zielhierarchiediagramm dargestellt (Bild 4 links).<br />
Dann werden die Ziele in Rollen übertragen. Dabei können<br />
Ziele mit hoher Kohäsion in einer Rolle zusammengefasst<br />
werden, oder ein Ziel auf mehrere Rollen aufgeteilt werden.<br />
Im zweiten Schritt werden Use Cases <strong>und</strong> Sequenzdiagramme<br />
verwendet, um die Interaktion der verschiedenen<br />
Rollen bei den einzelnen Anwendungsfällen des Systems zu<br />
ermitteln. In der dritten Phase werden aus den Ergebnissen<br />
der Phasen eins <strong>und</strong> zwei alle Rollen ermittelt, verfeinert <strong>und</strong><br />
gefestigt. Damit ist eine systematische Vorgehensweise zur<br />
Identifikation aller Rollen innerhalb des Systems gewährleistet.<br />
Ein Rollenmodell ist in Bild 4 rechts dargestellt: einzelnen<br />
Rollen (in Rechtecken) wurden die Ziele (durch Nummern)<br />
aus dem Zielhierarchiediagramm zugeordnet. Ovale stellen<br />
die Aufgaben einer Rolle dar <strong>und</strong> Pfeile weisen auf verwendete<br />
Kommunikationsprotokolle hin.<br />
In Phase vier werden Agententypen auf Basis von zusammenhängenden<br />
Rollen sowie die Kommunikationsbeziehungen<br />
zwischen den Agententypen ermittelt. In Phase fünf<br />
werden die Kommunikationsprotokolle auf Basis von<br />
Zustandsdiagrammen spezifiziert. Daneben wird die Architektur<br />
der einzelnen Agententypen erstellt. In der letzten<br />
Phase werden in einem Verteilungsdiagramm die Anzahl, die
9<br />
1. Überwache Pumpsystem<br />
<strong>und</strong> informiere Personal<br />
GrenzwertWächter<br />
1.1.1<br />
Temp.Melder<br />
1.1<br />
1.1 Überwache<br />
Temperatur <strong>und</strong><br />
melde Ereignisse<br />
1.2 Überwache<br />
Druck <strong>und</strong><br />
melde Ereignisse<br />
Ermittle<br />
Temperatur<br />
Prüfe<br />
Bereich Grenzwertüberschreitung<br />
Melde<br />
Ereignis<br />
Bild 4: MaSE Zielhierarchiediagramm<br />
(links) <strong>und</strong> Rollenmodell<br />
(rechts).<br />
1.1.1<br />
Überwache<br />
Grenzwerte<br />
1.1.2<br />
Überwache<br />
Schwankung<br />
1.1.3<br />
Informiere<br />
Personal<br />
…<br />
Personal<br />
Zeige An<br />
Ereignismelder<br />
1.1.3<br />
Informiere<br />
Personal<br />
Ereignismeldung<br />
Klassen <strong>und</strong> die Ausführungsorte der Agenten dargestellt.<br />
Als Endergebnis liegt ein detaillierter Systementwurf vor, der<br />
direkt implementiert werden kann.<br />
MaSE weist eine systematischere Vorgehensweise <strong>und</strong><br />
detailliertere Modellierung als Gaia auf. Die meisten Modelle,<br />
die in den einzelnen Phasen erstellt werden, sind dabei an<br />
die UML angelehnt. Allerdings steht durch die Ziel- <strong>und</strong> Rollenanalyse<br />
die Agentensicht stark im Vordergr<strong>und</strong>. Daher erscheint<br />
MaSE gut für den Einsatz in der Praxis geeignet, auch<br />
weil die Methode durch das Werkzeug agentTool unterstützt<br />
wird, das momentan allerdings nur als Prototyp verfügbar ist<br />
(weitere Informationen unter [29]). Die Einschränkungen bei<br />
MaSE sind ähnlich den Einschränkungen bei Gaia.<br />
4.3 PASSI – Process for Agent Societies<br />
Specification and Implementation<br />
Die PASSI-Methode [30] wurde in den letzten Jahren an der<br />
Universität Palermo entwickelt. Die Methode besteht aus<br />
fünf Entwicklungsphasen mit den jeweiligen Modellen <strong>und</strong><br />
unterstützt eine iterative Vorgehensweise.<br />
Bei PASSI handelt es sich ebenfalls um eine umfassende<br />
<strong>und</strong> detailliert ausgearbeitete Methode, die den gesamten<br />
Softwareentwicklungszyklus bis hin zur Implementierung<br />
abdeckt. Die Notation der einzelnen Modelle basiert auf der<br />
UML Notation, wobei die Modellelemente teilweise eine<br />
andere Bedeutung erhalten. Dies hat den großen Vorteil,<br />
dass für die PASSI-Methode ein Plugin für das UML Modellierungswerkzeug<br />
Rational Rose existiert (unter [31]), mit dem<br />
die verschiedenen Modelle <strong>und</strong> die Codegenerierung weitreichend<br />
unterstützt werden.<br />
Die Identifikation von Agenten erfolgt bei der PASSI<br />
Methode nicht wie bei Gaia <strong>und</strong> MaSE über eine Rollenanalyse,<br />
sondern durch Analyse der Systemfunktionalität mit<br />
Hilfe von Use Cases <strong>und</strong> Gruppierung in einzelne Agenten<br />
(Bild 5). Es ist noch zu evaluieren, ob dadurch agentenorientierte<br />
Aspekte ausreichend unterstützt werden können.<br />
Auch bei PASSI ist die Flexibilität der Beziehungen zwischen<br />
Agenten eingeschränkt.<br />
Generell ist bei den vorgestellten Methoden erkennbar,<br />
dass sie die agentenorientierten Gr<strong>und</strong>konzepte zur Erstellung<br />
flexibler, anpassungsfähiger Systeme noch nicht in vollem<br />
Umfang ausschöpfen. Hier besteht sicherlich noch Forschungsbedarf.<br />
Es muss weiter untersucht werden, welche<br />
Betrachtungs- <strong>und</strong> Vorgehensweisen bei der ingenieurmäßigen<br />
Softwareentwicklung tatsächlich agentenorientierte<br />
Konzepte wie Autonomie geeignet abbilden können. Insbesondere<br />
die Methoden MaSE <strong>und</strong> PASSI weisen jedoch<br />
bereits eine gute Unterstützung des Softwareingenieurs auf,<br />
so dass ein Praxiseinsatz durchaus möglich ist.<br />
Eine kommentierte Literaturübersicht über weitere aktuelle<br />
Methoden der agentenorientierten Softwareentwicklung<br />
findet sich in [21].<br />
5. Für welche Probleme ist agentenorientierte<br />
Softwareentwicklung geeignet?<br />
Bei der agentenorientierten Softwareentwicklung wird eine<br />
Aufgabenstellung in autonome Agenten zerlegt, die flexibel<br />
miteinander interagieren können. Diese Denkweise ist für<br />
bestimmte Arten von Problemstellungen besonders geeignet<br />
<strong>und</strong> sie bringt Vorteile, aber auch Nachteile mit sich. In<br />
diesem Abschnitt soll verdeutlicht werden, wann die Agentenorientierung<br />
allgemein nützlich ist <strong>und</strong> welche Eigenschaften<br />
einer Problemstellung auf eine sinnvolle agentenorientierte<br />
Lösung hinweisen.<br />
Im Allgemeinen sind Agenten am besten geeignet für<br />
Anwendungen, die modular, dezentral, veränderbar, unzureichend<br />
strukturiert <strong>und</strong> komplex sind [3]. Im Folgenden werden<br />
Kategorien von Systemen vorgestellt, denen diese<br />
Eigenschaften zugeordnet werden können. Eine reale<br />
Bild 5: Gruppierung<br />
von Use Cases zu<br />
Agenten bei der<br />
PASSI-Methode.<br />
<br />
HW-Schnittstelle<br />
<br />
<br />
Transportband<br />
Sensoren abfragen Aktoren ansteuern Werkstück transportieren
10<br />
Anwendung kann in eine oder mehrere<br />
dieser Kategorien fallen.<br />
5.1 Kategorien von<br />
Anwendungsbereichen<br />
Konventionell:<br />
Änderungen an einem<br />
Systemelement haben<br />
Auswirkungen auf das<br />
Gesamtsystem<br />
Ausführungssequenz<br />
Agentenorientiert:<br />
Unabhängigeres<br />
Hinzufügen, Entfernen<br />
<strong>und</strong> Ändern von<br />
Systemelementen<br />
5.1.1 Dezentrale, verteilte Systeme<br />
Dezentrale Systeme sind Systeme, die<br />
eine natürliche logische Verteilung aufweisen.<br />
Unter logischer Verteilung sind dabei Anwendungen<br />
zu verstehen, die in abgrenzbare „Prozesse“ aufteilbar sind,<br />
die jeweils unterschiedliche Aufgaben erfüllen. Dies fällt in<br />
vielen Fällen zusammen mit einer physikalischen Verteilung.<br />
Zentrale Ansätze für derartige Systeme bergen die Gefahr zu<br />
hoher Komplexität <strong>und</strong> geringer Flexibilität, Robustheit <strong>und</strong><br />
Änderbarkeit. Dezentrale Systeme weisen zudem meist die<br />
Eigenschaft der Modularität auf. Das heißt sie bestehen aus<br />
natürlich abgrenzbaren Teilen, die einen eigenen unabhängigen<br />
Zustand aufweisen. Beispiel hierfür sind industrielle<br />
Anwendungen im Allgemeinen, da sie häufig von Natur aus<br />
aus einzelnen physikalischen Einheiten (Geräten oder Systemteilen)<br />
bestehen.<br />
Bild 6: Größere Änderbarkeit <strong>und</strong> Wartbarkeit eines Agentensystems [3].<br />
Unter komplexen Systemen sind Systeme im Sinne von komplexen,<br />
variierenden Abläufen oder eines komplexen<br />
Gesamtverhaltens zu verstehen. Dabei wird als Maßstab für<br />
Komplexität die Anzahl von unterschiedlichen Verhaltensweisen<br />
genommen, die ein System beherrschen muss. Nach<br />
[3] wächst die Anzahl möglicher verschiedener Interaktionen<br />
zwischen den Elementen des Systems sehr viel schneller<br />
als die Anzahl der Elemente. Bei einer deterministischen<br />
Lösung wird es schnell schwierig, die Komplexität möglicher<br />
Abläufe zur Entwurfszeit zu beherrschen. Ein agentenorientierter<br />
Ansatz ist dann sinnvoll, wenn eine vollständige Festlegung<br />
des Systemverhaltens als Kette von Einzelschritten<br />
nicht praktikabel ist. Beispiele hierfür sind Roboter, Planungssysteme,<br />
Produktions- <strong>und</strong> Fertigungsautomatisierungssysteme.<br />
5.1.4 Kooperative Systeme<br />
5.1.2 Strukturell veränderbare Systeme<br />
Im Allgemeinen wird beim Softwareentwurf eine Architektur<br />
erstellt, in der beschrieben ist, welche Elemente miteinander<br />
interagieren <strong>und</strong> welche Schnittstellen für diese Interaktionen<br />
verwendet werden. Dies führt dann zu Problemen, wenn<br />
nicht alle möglichen Interaktionen <strong>und</strong> somit die erforderlichen<br />
Beziehungen zwischen den Elementen von vorne herein<br />
spezifizierbar sind. Agenten sind von Natur aus für solche<br />
Systeme geeignet. Beispiele sind Handels- <strong>und</strong> Wirtschaftssysteme,<br />
Transportsysteme, Verkehrssysteme <strong>und</strong> <strong>Automatisierungs</strong>anlagen.<br />
Auch wenn alle verfügbaren Strukturinformationen über<br />
das System zur Entwurfszeit vorhanden sind, sind manche<br />
Systeme während ihres Lebenszyklus besonders starken<br />
Änderungen unterworfen. Das bedeutet, ein ursprünglich<br />
wohlstrukturiertes System kann sich während des Lebenszyklus<br />
in ein unzureichend strukturiertes System verwandeln<br />
[3]. Strukturelle Änderungen während des Lebenszyklus<br />
haben beispielsweise ihre Ursache in einer Änderung der<br />
Anforderungen an das System, Änderung der Randbedingungen<br />
(z. B. eine veränderte Systemhardware), Änderung<br />
der Systemumgebung (z. B. externe Systeme). Deshalb kann<br />
es sinnvoll sein, auch bei ausreichender Verfügbarkeit struktureller<br />
Informationen diese nicht explizit in der Architektur<br />
festzulegen. Dadurch wird eine flexiblere Architektur <strong>und</strong><br />
somit größere Änderbarkeit <strong>und</strong> Wartbarkeit erreicht (siehe<br />
Bild 6).<br />
5.1.3 Komplexe Systeme<br />
Kooperative Systeme bestehen aus dynamisch interagierenden<br />
Elementen, zwischen denen umfangreiche, mannigfaltige<br />
Kommunikations- <strong>und</strong> Koordinationsprozesse erforderlich<br />
sind. Dies ist beispielsweise dann der Fall, wenn innerhalb<br />
des Systems individuelle <strong>und</strong> konfliktträchtige Ziele,<br />
Interessen oder Rechte vorliegen [17]. Dadurch werden<br />
Abstimmung, Verhandlung oder Kooperation notwendig.<br />
Beispiele hierfür sind wiederum Systeme aus dem Wirtschafts-<br />
<strong>und</strong> Handelsbereich, Börsensysteme, Beratungs<strong>und</strong><br />
Informationssysteme.<br />
5.2 Vorteile des agentenorientierten Ansatzes<br />
Sicherlich stellt sich in diesem Zusammenhang die Frage<br />
„Was ist das Besondere an der agentenorientierten Softwareentwicklung,<br />
was macht sie für die genannten Anwendungsbereiche<br />
vorteilhafter als andere Ansätze?“. Die Eignung<br />
eines Softwareparadigmas kann für gewöhnlich nicht<br />
quantitativ belegt werden, es gibt jedoch einige wichtige<br />
qualitative Merkmale.<br />
Betrachtet man die allgemeine Evolution der Denkansätze<br />
in der Softwareentwicklung, so kann die Agentenorientierung<br />
als ein natürlicher nächster Schritt betrachtet werden<br />
[7, 17]. Ausgehend von der maschinennahen monolithischen<br />
Programmentwicklung über die strukturierte <strong>und</strong> die<br />
objektorientierte Entwicklung bis hin zur Agentenorientierung<br />
zeigen sich zwei klare Tendenzen:<br />
Eine zunehmende Verschiebung der konzeptionellen<br />
Basis vom Lösungsbereich (der Rechnerarchitektur) hin<br />
zum Problembereich [7]. Die Agentenorientierung ist eine<br />
konsequente Fortsetzung dieser Tendenz <strong>und</strong> bietet<br />
daher geeignete Hilfsmittel zum Verständnis einer komplexen<br />
Aufgabenstellung.<br />
Eine zunehmende Lokalisierung <strong>und</strong> Kapselung der elementar<br />
notwendigen Entscheidungen zur Laufzeit der
11<br />
Tabelle 1. Zunehmende Lokalisierung [32].<br />
Wie verhält sich eine<br />
(Software-) Einheit?<br />
Monolithisches Strukturierte Objektorientierte Agentenorientierte<br />
Programm Entwicklung Entwicklung Entwicklung<br />
Extern Intern Intern Intern<br />
Welchen Zustand hat eine Einheit? Extern Extern Intern Intern<br />
Wann [<strong>und</strong> warum] läuft eine Extern Extern (Aufruf ) Extern (Nachricht) Intern (Ziele)<br />
Einheit ab?<br />
[Extern (Anfrage)]<br />
Software (Tabelle 2). Agenten vervollständigen diese Entwicklung<br />
durch Lokalisierung des „Zwecks“ einer Einheit<br />
in Form von eigenem Kontrollfluss <strong>und</strong> der Möglichkeit,<br />
das Verhalten selbst auszuwählen.<br />
Die Verteilung von Entscheidungsprozessen in autonome<br />
Softwareeinheiten entspricht häufig eher dem natürlichen<br />
Charakter vieler Systeme <strong>und</strong> führt zu einer geringeren<br />
Kopplung zwischen Systemelementen sowie zu einer<br />
Reduktion „zentraler“ Komplexität. Bei lokalen Problemen<br />
können Entscheidungen an der Stelle gefällt werden, wo die<br />
meiste Information über ein Problem vorliegt. Daneben können<br />
verschiedene Sichtweisen oder gegensätzliche Interessen<br />
der Realität besser im Softwaresystem widergespiegelt<br />
werden.<br />
Ein entscheidender Unterschied des agentenorientierten<br />
Ansatzes zur herkömmlichen Softwareentwicklung ist die<br />
Tatsache, das die Gesamtheit der Systemstruktur <strong>und</strong> des<br />
Systemsverhaltens nicht zwingend zur Entwurfszeit vollständig<br />
spezifiziert werden muss, sondern sich zur Laufzeit auf<br />
Basis der aktuellen Situation dynamisch bildet <strong>und</strong> Interaktionen<br />
flexibel im Rahmen festgelegter Variationen stattfinden<br />
können. Durch eine agentenorientierte Entwicklung<br />
kann die Berücksichtigung der Menge möglicher Abläufe<br />
aus der Entwurfsphase in die Laufzeit verschoben <strong>und</strong> dadurch<br />
die Komplexität des Entwurfes reduziert werden.<br />
Weiter wird auf Basis der abstrakten Interaktionen <strong>und</strong><br />
Kommunikationsprotokolle zwischen Agenten (so genannte<br />
Wissensebene statt Methodenaufruf ) die Integration von<br />
neuen, möglicherweise sogar vorher unbekannten Elementen<br />
zur Laufzeit erleichtert.<br />
Zuletzt sind Agenten Softwareeinheiten mit besonders<br />
„starker“ Kapselung. Deshalb folgt die Agentenorientierung<br />
in besonderem Maße dem allgemeinen Prinzip der Modularisierung<br />
<strong>und</strong> unterstützt somit auch allgemeine Qualitätsmerkmale<br />
von Software wie Robustheit, Skalierbarkeit,<br />
Änderbarkeit, Erweiterbarkeit <strong>und</strong> Wiederverwendbarkeit<br />
[7].<br />
5.3 Nachteile des agentenorientierten Ansatzes<br />
Die Flexibilität des Softwaresystems zur Laufzeit ist ein<br />
bedeutender Vorteil des agentenorientierten Ansatzes.<br />
Gleichzeitig ist dies aber auch ein inhärenter Nachteil aufgr<strong>und</strong><br />
der teilweisen Unvorhersagbarkeit des Verhaltens des<br />
Gesamtsystems zur Laufzeit. Die Verteilung von Entscheidungsprozessen<br />
in autonome Einheiten führt zu einer Variabilität<br />
im Verhalten des Systems, die nicht a priori vorhersagbar<br />
ist. Letztendlich wird dadurch die Komplexität des Systems<br />
aus den Abläufen in den einzelnen Elementen heraus<br />
in die Abläufe der Interaktion zwischen den Elementen verlagert.<br />
Die Struktur <strong>und</strong> das Ergebnis der Interaktionen zwischen<br />
Agenten sind nicht vollständig von vorne herein<br />
absehbar, sondern abhängig vom Zusammenspiel zwischen<br />
dem aktuellen internen Zustand der Agenten, ihrer aktuellen<br />
Umgebung (bzw. der Wahrnehmung derselben) <strong>und</strong> der<br />
aktuellen organisatorischen Struktur [7]. Die gr<strong>und</strong>legende<br />
Erkenntnis, dass das Ganze häufig mehr als die Summe seiner<br />
Einzelteile ist, gilt auch hier. Die bewusste Vermeidung<br />
von Festlegungen zur Entwurfszeit hat die Konsequenz, dass<br />
diese ad hoc zur Laufzeit getroffen werden müssen – <strong>und</strong><br />
dies beschränkt die Vorhersagbarkeit.<br />
In vielen Fällen ist diese Flexibilität zur Laufzeit sicherlich<br />
wünschenswert, beispielsweise um unvorhergesehenen<br />
Situationen dynamisch begegnen zu können. Gerade in<br />
technischen Systemen ist aber ein vorhersagbares Verhalten<br />
<strong>und</strong> die Einhaltung von globalen Anforderungen häufig bis<br />
zu einem gewissen Grad unabdingbar. Es gibt eine Reihe von<br />
Möglichkeiten, die Variabilität des Systemverhaltens in agentenorientierten<br />
Systemen zu beschränken <strong>und</strong> somit unerwünschten<br />
Effekten geeignet zu begegnen. Zum einen<br />
besteht die Möglichkeit, durch globale Beschränkungen in<br />
Form von Agenten übergeordnete Ziele vorzugeben. Zum<br />
anderen können mögliche Interaktionen zwischen Agenten<br />
durch strikte Interaktionsprotokolle sowie durch die Festlegung<br />
<strong>und</strong> Einschränkung möglicher organisatorischer Strukturen<br />
begrenzt werden. Weiter können Interaktionsprotokolle<br />
auch mit formalen Methoden spezifiziert werden, um<br />
somit die Korrektheit des Systems gegenüber bestimmten<br />
Anforderungen formal verifizieren zu können (durch Theorembeweise<br />
oder durch Modelchecking) [33, 34].<br />
6. Zusammenfassung<br />
Agentenorientierte Entwicklung ist eine alternative Art der<br />
Analyse, des Entwurfs <strong>und</strong> der Implementierung von Softwaresystemen.<br />
Dabei wird eine Problemstellung unter den<br />
Gesichtspunkten Autonomie, Interaktion, Zielorientierung,<br />
Reaktivität <strong>und</strong> Proaktivität in einzelne Agenten abstrahiert,<br />
um so z. B. verteilte Informationen, Funktionalität <strong>und</strong> Entscheidungsprozesse<br />
beschreiben zu können. Die agentenorientierte<br />
Softwareentwicklung stellt hierfür Konzepte,<br />
Methoden, Vorgehensweisen <strong>und</strong> Werkzeuge zur Verfügung.<br />
Agentenorientierte Softwareentwicklung ist insbesondere<br />
für Systeme geeignet, die von Natur aus eine logische<br />
Verteilung aufweisen, strukturellen Änderungen zur Laufzeit
12<br />
unterworfen sind, komplexe Abläufe bzw. Verhalten aufweisen<br />
oder umfangreiche Kommunikations- <strong>und</strong> Koordinationsprozesse<br />
erfordern. Auf Basis eines agentenorientierten<br />
Lösungsansatzes können flexible, anpassungsfähige Softwaresysteme<br />
entwickelt werden, welche die Verteilung von<br />
Aufgaben, Ressourcen oder Leistungen sowie verschiedene<br />
Sichtweisen oder gegensätzliche Interessen der realen Problemstellung<br />
im Softwaresystem widerspiegeln.<br />
Damit wird auch deutlich, dass die Agentenorientierung<br />
nicht prinzipiell für beliebige Arten von Problemen besser<br />
geeignet ist als andere Ansätze der Softwareentwicklung.<br />
Balzert hat diese Erkenntnis wie folgt zusammengefasst [16]:<br />
„Die in der Softwaretechnik existierenden Paradigmen sind<br />
nicht voneinander isoliert zu betrachten, sondern ergänzen<br />
sich gegenseitig. Letztendlich muss der Ingenieur entscheiden,<br />
welches Paradigma für welches Problem oder Teilproblem<br />
am besten geeignet ist.“ Es handelt sich hier also nicht<br />
um eine Frage des „Entweder-oder“, sondern vielmehr um<br />
ein „Sowohl-als-auch“. Zum Beispiel impliziert die Agentensicht<br />
quer über alle Phasen der Softwareentwicklung zahlreiche<br />
neue, etwa von der Objektsicht nicht abdeckte Anforderungen<br />
<strong>und</strong> Fragestellungen wie Koordination, Kooperation,<br />
dynamische Organisation <strong>und</strong> verteilte Kontrolle [17]. Die<br />
verschiedenen Perspektiven von Agenten- <strong>und</strong> Objektorientierung<br />
decken unterschiedliche Aspekte des Softwareentwurfs<br />
ab <strong>und</strong> können sich somit sinnvoll ergänzen.<br />
Die Agentenorientierung muss für eine breite industrielle<br />
Anwendbarkeit sicherlich noch weiter entwickelt werden.<br />
Theoretische Gr<strong>und</strong>lagen müssen abgegrenzt <strong>und</strong> f<strong>und</strong>iert<br />
werden, Methoden müssen die Agentensicht noch mehr in<br />
den Vordergr<strong>und</strong> stellen <strong>und</strong> praxistauglicher werden. Dennoch<br />
können agentenorientierte Lösungen heute schon<br />
einen wichtigen Beitrag zur Verbesserung der Situation in<br />
der <strong>Automatisierungs</strong>technik leisten, die geprägt ist durch<br />
zunehmende Heterogenität, zu geringe Flexibilität <strong>und</strong> mangelnde<br />
Integration.<br />
In den folgenden Teilen 2 <strong>und</strong> 3 dieses Artikels wird die<br />
agentenorientierte Softwareentwicklung an einem umfassenden<br />
Beispiel veranschaulicht sowie der interne Aufbau<br />
<strong>und</strong> die Realisierung von Agentensystemen erläutert.
13<br />
Agentensysteme in der <strong>Automatisierungs</strong>technik:<br />
Modellierung eines Anwendungsbeispiels<br />
Das Konzept von Agenten ist die Basis eines neuen Ansatzes für die Entwicklung von verteilten, komplexen<br />
<strong>und</strong> kooperativen Anwendungen, der zunehmend den Weg aus der Theorie in die industrielle Praxis findet.<br />
Auch in der <strong>Automatisierungs</strong>technik können Agenten für eine Vielzahl von Anwendungen hilfreich eingesetzt<br />
werden, z.B. in Produktionssystemen, Verkehrsleitsystemen, im Netzwerk- <strong>und</strong> Energiemanagement<br />
<strong>und</strong> in der Prozessautomatisierung. Autonomie, Interaktion, Reaktivität, Zielorientierung, Proaktivität <strong>und</strong><br />
Persistenz sind die zentralen Elemente des agentenorientierten Ansatzes. Es stellt sich jedoch die Frage, wie<br />
diese Konzepte für die praktische ingenieurmäßige Entwicklung von Software angewendet werden. Die Vorgehensweise<br />
bei der agentenorientierten Modellierung wird im vorliegenden Beitrag anhand eines technischen<br />
Anwendungsbeispiels demonstriert <strong>und</strong> erläutert.<br />
Agent systems in industrial automation: Modeling of an application example<br />
The agent concept is the basis of a new approach to the development of distributed, complex and cooperative<br />
applications, that increasingly finds its way out of theory to the praxis. Agents can also be usefully<br />
employed in a large number of applications in the industrial automation area, e.g. production and traffic<br />
engineering systems, network and energy management, and process automation. Autonomy, interaction,<br />
reactivity, goal-orientation, proactivity and persistence are the key points in the agent oriented approach.<br />
The question can remain about how these concepts could be applied in the practical, systematic development<br />
of software. The procedure in the agent oriented modeling is demonstrated and explained in the present<br />
article.<br />
1. Einführung<br />
Die Entwicklung von Software für moderne <strong>Automatisierungs</strong>systeme<br />
ist eine beständige Herausforderung für Ingenieure.<br />
Heutige <strong>Automatisierungs</strong>systeme stehen häufig im<br />
Spannungsfeld einer Reihe von Anforderungen. Dazu<br />
gehören zunehmende Dezentralisierung <strong>und</strong> komplexere<br />
Abläufe sowie die Notwendigkeit zu mehr Flexibilität,<br />
Robustheit, Skalierbarkeit, Anpassbarkeit <strong>und</strong> Integrationsfähigkeit.<br />
Zur Bewältigung dieser Anforderungen ist es notwendig,<br />
die Struktur der Software flexibel <strong>und</strong> ohne großen Aufwand<br />
an strukturelle Änderungen des <strong>Automatisierungs</strong>systems<br />
anpassen zu können. Daneben besteht häufig die Schwierigkeit,<br />
die komplexen Abläufe <strong>und</strong> Verhaltensweisen eines solchen<br />
Systems zu beherrschen, insbesondere, wenn diese zur<br />
Entwicklungszeit nicht vollständig vorhersagbar sind. Vielfach<br />
muss auch die Integration des <strong>Automatisierungs</strong>systems<br />
mit heterogenen Komponenten <strong>und</strong> externen Systemen<br />
bewerkstelligt werden. Aus diesen Gründen wird die<br />
Softwareentwicklung für <strong>Automatisierungs</strong>systeme immer<br />
komplexer <strong>und</strong> aufwändiger.<br />
Eine Alternative zu herkömmlichen Lösungen ist die<br />
agentenorientierte Softwareentwicklung (AOSE). Dabei wird<br />
ein System als eine Menge von autonomen Agenten<br />
betrachtet, die selbstständig innerhalb ihres Entscheidungsrahmens<br />
handeln <strong>und</strong> dabei vorgegebene Ziele verfolgen.<br />
Agenten können miteinander flexibel interagieren <strong>und</strong><br />
durch Verhandlungen kooperieren, um ihre individuellen<br />
Ziele zu erreichen. In der agentenorientierten Denkweise<br />
wird eine Problemstellung unter den Gesichtspunkten Autonomie,<br />
Interaktion, Reaktivität, Zielorientierung, Proaktivität<br />
<strong>und</strong> Persistenz in einzelne Agenten abstrahiert, um so z.B.<br />
verteilte Informationen, Funktionalität <strong>und</strong> Entscheidungsprozesse<br />
beschreiben zu können. Die agentenorientierte<br />
Softwareentwicklung stellt hierfür Konzepte, Methoden,Vorgehensweisen<br />
<strong>und</strong> Werkzeuge zur Verfügung [1].<br />
Die Agentenorientierung ist insbesondere für Systeme<br />
geeignet, die von Natur aus eine logische Verteilung aufweisen,<br />
strukturellen Änderungen zur Laufzeit unterworfen<br />
sind, komplexe Abläufe bzw. Verhalten aufweisen oder<br />
umfangreiche Kommunikations- <strong>und</strong> Koordinationsprozesse<br />
erfordern. Auf Basis eines agentenorientierten Lösungsansatzes<br />
können flexible, anpassungsfähige Softwaresysteme<br />
entwickelt werden, welche die Verteilung von Aufgaben,<br />
Ressourcen oder Leistungen sowie verschiedene Sichtweisen<br />
oder gegensätzliche Interessen der realen Problemstellung<br />
im Softwaresystem widerspiegeln [1].<br />
Um Software agentenorientiert zu entwickeln, ist eine<br />
gr<strong>und</strong>sätzlich andere Denkweise als bei herkömmlichen<br />
Methoden der Softwareentwicklung erforderlich. Der<br />
Schwerpunkt liegt dabei auf Prozessen <strong>und</strong> Abläufen, die<br />
zwischen den aktiven Elementen des Systems stattfinden. In<br />
diesem Beitrag wird die agentenorientierte Denkweise<br />
zunächst anhand einer Reihe von Beispielen aus der <strong>Automatisierungs</strong>technik<br />
verdeutlicht. Anschließend wird die<br />
systematische Vorgehensweise bei der agentenorientierten<br />
Analyse <strong>und</strong> dem Entwurf für ein technisches Anwendungs-
14<br />
beispiel veranschaulicht. Das Anwendungsbeispiel zeigt, wie<br />
die agentenorientierten Gr<strong>und</strong>konzepte Autonomie, Interaktion,<br />
Reaktivität, Zielorientierung, Proaktivität <strong>und</strong> Persistenz<br />
für die Modellierung einer flexiblen, anpassungsfähigen <strong>und</strong><br />
fehlertoleranten Lösung eingesetzt werden.<br />
2. Anwendungsbeispiele in der<br />
<strong>Automatisierungs</strong>technik<br />
Die folgenden Anwendungsbeispiele aus verschiedenen<br />
Bereichen der <strong>Automatisierungs</strong>technik verdeutlichen, wie<br />
neue Lösungen auf Basis eines agentenorientierten Ansatzes<br />
vorteilhaft zur Bewältigung der Herausforderungen in<br />
technischen Systemen eingesetzt werden können.<br />
2.1 Produktionssysteme<br />
Große Produktionsanlagen werden seit langem in der Industrie<br />
für die Fertigung der unterschiedlichsten Güter eingesetzt.<br />
In einem zunehmend dynamischer werdenden Produktionsumfeld<br />
gibt es bei der Entwicklung von Software<br />
zur Automatisierung dieser Anlagen besondere Herausforderungen<br />
[2, 3]. Heutige Produktionsanlagen sollen beispielsweise<br />
flexibel für verschiedene Produkte oder Fertigungsprozesse<br />
ausgelegt bzw. erweiterbar sein (Stückzahl<strong>und</strong><br />
Variantenflexibilität) <strong>und</strong> hohe Produktivität durch flexiblere<br />
Nutzung <strong>und</strong> Skalierung von Kapazitäten aufweisen.<br />
Daneben sollen sie eine hohe Verfügbarkeit durch Robustheit<br />
gegenüber Fehlern aufweisen. Fehler in einem Teil der<br />
Produktionsanlage sollen nicht automatisch zu einem Produktionsstillstand<br />
führen, sondern die Anlage selbst soll<br />
automatisch ihre Abläufe flexibel anpassen können.<br />
Die Steuerung herkömmlicher Produktionssysteme ist<br />
meist sehr stark planorientiert: Zuerst wird der Produktionsprozess<br />
im Detail geplant, dann werden die einzelnen<br />
Schritte ausgeführt [2]. Die strikte Trennung von Planung<br />
<strong>und</strong> Ausführung führt jedoch zu Unflexibilität <strong>und</strong> Störungsanfälligkeit<br />
im laufenden Betrieb. Beispielsweise führt ein<br />
linearer Ablauf im Fehlerfall in einer Produktionsstation oder<br />
bei Verzögerung eines Bearbeitungsschrittes durch lineare<br />
Fortpflanzung dieses unerwarteten Ereignisses zu einer<br />
geringeren Verfügbarkeit der gesamten Anlage. Ein weiterer<br />
Nachteil liegt in der Notwendigkeit der Modifikation des globalen<br />
Ablaufplans, sobald eine neue Produktvariante gefertigt<br />
werden soll.<br />
Produktionsziele<br />
Aufteilung<br />
Werkstück-Agent Station-Agent Transport-Agent Station-Agent<br />
Lokale Ziele<br />
Ausführung<br />
Überwachung<br />
Lokale Ziele<br />
Ausführung<br />
Überwachung<br />
Lokale Ziele<br />
Ausführung<br />
Überwachung<br />
Bild 1: Agentenorienterter Ansatz für Produktionssysteme.<br />
Ein agentenorientierter Ansatz bietet hier eine dezentrale<br />
Lösung der Ablaufplanung. Produktionsstationen, Werkstücke<br />
<strong>und</strong> Transporteinheiten können durch Agenten<br />
repräsentiert werden:<br />
Produktionsstation-Agenten haben lokales Wissen über<br />
Bearbeitungsgänge, Kapazitäten <strong>und</strong> Auslastungsgrad<br />
ihrer Station, steuern <strong>und</strong> überwachen diese autonom. Ihr<br />
Ziel ist ein hoher Auslastungsgrad.<br />
Ein Werkstück-Agent kennt alle notwendigen Bearbeitungsschritte<br />
des Werkstücks im Rahmen des Fertigungsprozesses<br />
<strong>und</strong> ihre möglichen Reihenfolgen. Ein Ziel des<br />
Werkstück-Agenten ist es, alle Bearbeitungsschritte möglichst<br />
schnell abzuschließen.<br />
Die Agenten der Transporteinheiten bieten Wege zwischen<br />
den Produktionsstationen an <strong>und</strong> kennen ebenfalls<br />
ihren Auslastungsgrad.<br />
Das Gesamtverhalten des Systems ergibt sich dann durch<br />
das dynamische Zusammenspiel der einzelnen Agenten, die<br />
sich über Ausschreibungen <strong>und</strong> Verhandlungen (Bild 1)<br />
abstimmen. Damit ist das System in der Lage, sich entsprechend<br />
der einlaufenden Werkstücke, dem Auslastungsgrad<br />
<strong>und</strong> Fehlerzustand der Anlage selbst zu organisieren. Tritt<br />
beispielsweise eine Verzögerung bei einem Bearbeitungsschritt<br />
auf <strong>und</strong> ein Synchronisierungspunkt kann nicht mehr<br />
erreicht werden, können alle von diesem Synchronisierungspunkt<br />
abhängigen Agenten informiert werden <strong>und</strong> ihre<br />
Abläufe neu koordinieren.<br />
Die Vorteile der Flexibilität einer agentenorientierten<br />
Steuerung können allerdings erst dann voll ausgeschöpft<br />
werden, wenn Entscheidungsalternativen in der realen<br />
Anlage existieren. Alternativen bestehen dort, wo Ressourcen<br />
(Produktionsstationen) mit überlappenden Fähigkeiten<br />
oder parallele Transportwege für Werkstücke vorhanden<br />
sind [2].<br />
Ansätze <strong>und</strong> Projekte zu agentenorientierten Produktionssystemen<br />
werden in [4, 5, 6] präsentiert. Ein Beispiel für<br />
die erfolgreiche industrielle Realisierung wird in [3] vorgestellt.<br />
2.2 Energiemanagement<br />
Wichtige Kriterien des K<strong>und</strong>en beim Kauf eines Automobils<br />
sind Komfort <strong>und</strong> Sicherheit. Durch die Einführung elektronischer<br />
Systeme <strong>und</strong> deren Vernetzung (z.B. mit Feldbussystemen<br />
wie CAN) konnten bestehende Funktionen wesentlich<br />
verbessert <strong>und</strong> neue Funktionen realisiert werden. Beispiele<br />
hierfür sind Kommunikations- <strong>und</strong><br />
Telematikfunktionen, passive Sicherheitssysteme<br />
sowie Komfortsitze.<br />
Die zukünftige Integration von<br />
sicherheitsrelevanten elektronischen<br />
Systemen (z.B. Brake-by-Wire) in Fahrzeugen<br />
erfordert eine zuverlässige<br />
Lokale Ziele<br />
Ausführung<br />
Überwachung<br />
elektrische Energieversorgung dieser<br />
Systeme. Dafür ist ein Energiemanagement<br />
erforderlich, welches die elektrischen<br />
Funktionen im Fahrzeug verwaltet<br />
<strong>und</strong> gegebenenfalls nicht sicher-
15<br />
heitsrelevante Funktionen deaktivieren kann. Es muss zu<br />
jeder Zeit sicherstellen, dass im Idealfall alle, aber vor allem<br />
die sicherheitsrelevanten Systeme im Fahrzeug mit Strom<br />
versorgt werden können. Gleichzeitig soll der Akkumulator<br />
geladen werden, so dass die Wiederstartfähigkeit nach dem<br />
Abstellen des Fahrzeuges gewährleistet ist.<br />
Herkömmliche Energiemanagementsysteme basieren auf<br />
einem zentral organisierten Bordnetzsteuergerät, welches<br />
den Zustand des Generators <strong>und</strong> des Akkumulators erfasst<br />
<strong>und</strong> anhand dieser Informationen je nach Auslastung Verbraucher<br />
ab- oder zuschaltet. Das Bordnetzsteuergerät ist<br />
dabei die zentrale Komponente – in ihm laufen die Informationen<br />
über die vorhandene Energie <strong>und</strong> die Zustände aller<br />
Verbraucher zusammen. Auf der Basis dieser Informationen<br />
werden Verbraucher gemäß einer statischen Prioritätenliste,<br />
in der alle Verbraucher eingeordnet sind, zu- oder abgeschaltet<br />
[7]. Diese zentrale Entscheidungsfindung bringt<br />
eine Reihe von Nachteilen mit sich. Der schwerwiegendste<br />
ist, dass das Bordnetzsteuergerät einen Single Point of Failure<br />
bildet. Es muss deswegen red<strong>und</strong>ant ausgelegt werden,<br />
was mit sehr hohem technischen <strong>und</strong> finanziellen Aufwand<br />
verb<strong>und</strong>en ist.<br />
Im Gegensatz dazu bietet ein agentenorientierter Ansatz<br />
eine Lösung mit dezentraler Entscheidungsfindung. Dabei<br />
wird zusätzlich zum Bordnetzsteuergerät jedes Verbrauchersteuergerät<br />
durch einen autonomen Agenten vertreten. Das<br />
Bordnetzsteuergerät stellt in diesem Falle zwar noch die<br />
aktuellen Informationen über den Zustand der Energieversorgung<br />
bereit, die Entscheidungen über die Aktivierung<br />
<strong>und</strong> Deaktivierung von Verbrauchern werden jedoch nicht<br />
mehr zentral <strong>und</strong> statisch gefällt, sondern sind das dynamische<br />
Ergebnis von Verhandlungen zwischen den verteilten<br />
Agenten. Das elektrische Engergiebordnetz wird dadurch<br />
zum virtuellen Markt, auf dem Energiekontigente verhandelt<br />
werden. Im Fall eines Ausfalles des Bordnetzsteuergerätes<br />
können die Agenten der Verbraucher mit Hilfe der noch vorhandenen<br />
Informationen <strong>und</strong> einer geeigneten Notlaufstrategie<br />
die Verfügbarkeit der elektrischen Energie für sicherheitsrelevante<br />
Funktionen gewährleisten. Damit kann ein<br />
Energiemanagement realisiert werden, das ohne die Notwendigkeit<br />
einer red<strong>und</strong>anten zentralen Entscheidungseinheit<br />
die erforderliche hohe Sicherheit der Energieversorgung<br />
bei gleichzeitiger großer Flexibilität gewährleistet [8].<br />
Zusätzlich wird eine bessere Skalierbarkeit des Systems für<br />
unterschiedliche Verbraucheranzahl <strong>und</strong> somit eine einfache<br />
Anpassung an die verschiedenen Ausführungsvarianten<br />
eines Fahrzeugs ermöglicht.<br />
2.3 Logistik<br />
In der Logistik sind häufig Aufgaben zu bewältigen, bei<br />
denen die Koordination gegensätzlicher Interessen oder verteilter<br />
Ressourcen erforderlich ist. Eine agentenorientierte<br />
Lösung ist hier sehr nahe liegend. Ein Beispiel ist der Personal<br />
Travel Assistant (PTA), der im Rahmen des Projekts MOTIV<br />
entwickelt wurde. Mit dem PTA können mehrere Reisende,<br />
Transportmedien <strong>und</strong> Verkehrsformationen koordiniert werden.<br />
So besteht nicht nur die Möglichkeit, die optimale Reiseroute<br />
zu ermitteln, sondern diese auch dynamisch, z.B. an<br />
die aktuelle Verkehrssituation anzupassen. In einem weiteren<br />
Projekt wurde ein Agentensystem für die Koordination<br />
<strong>und</strong> Führung mobiler Teams entwickelt, wie etwa Wartungsteams<br />
von Telekommunikationsunternehmen oder mobile<br />
Service-Teams des ADAC [9].<br />
Im Rahmen des DFG Schwerpunktprogramms „Intelligente<br />
Softwareagenten <strong>und</strong> betriebswirtschaftliche Anwendungsszenarien“<br />
werden eine Reihe von Themen aus der<br />
Logistik bearbeitet, insbesondere für die Organisation <strong>und</strong><br />
Terminplanung in Krankenhäusern sowie für das Supply<br />
Chain Management.<br />
2.4 Anlagenautomatisierungssysteme<br />
<strong>Automatisierungs</strong>systeme für den Einsatz in industriellen<br />
Anlagen sind komplexe, umfangreiche <strong>und</strong> langlebige Hardware-/Software-Systeme,<br />
deren Eigenschaften stark durch<br />
die zu steuernden technischen Prozesse gekennzeichnet<br />
sind. Die Softwarestrukturen in heutigen industriellen <strong>Automatisierungs</strong>systemen<br />
sind historisch gewachsen <strong>und</strong> zeichnen<br />
sich durch statische hierarchische Strukturen mit klar<br />
getrennten Aufgaben, <strong>Automatisierungs</strong>funktionen <strong>und</strong><br />
Informationsstrukturen aus – die so genannte <strong>Automatisierungs</strong>pyramide.<br />
Heutzutage stehen Anlagenautomatisierungssysteme<br />
jedoch neuen Herausforderungen gegenüber.<br />
Die gewünschte Funktionalität, Flexibilität <strong>und</strong> Verfügbarkeit<br />
der Systeme sowie die Notwendigkeit zur nahtlosen Integration<br />
mit anderen Unternehmensanwendungen (z.B. Warenwirtschaftssysteme)<br />
nimmt beständig zu. Daraus resultieren<br />
neben zunehmenden Kommunikationsanforderungen an<br />
das <strong>Automatisierungs</strong>system auch ein zunehmender Aufwand<br />
beim Engineering <strong>und</strong> Life-Cycle Management des<br />
<strong>Automatisierungs</strong>systems.<br />
Auch wenn dies nicht auf den ersten Blick offensichtlich<br />
erscheint, können agentenorientierte Lösungen durch ihre<br />
Flexibilität in Interaktion <strong>und</strong> Organisation einen ganz<br />
erheblichen Beitrag zur Verbesserung der Situation in der<br />
Anlagenautomatisierung leisten. Die gr<strong>und</strong>sätzlichen Möglichkeiten,<br />
Basisideen <strong>und</strong> Vorteile der Integration von Agenten<br />
in bestehende <strong>Automatisierungs</strong>strukturen werden in<br />
[10] <strong>und</strong> [11] diskutiert. Agenten bieten neue Lösungswege<br />
für effizientes, integriertes Engineering von Anlagen <strong>und</strong> für<br />
die nahtlose Interaktion mit Systemen aus anderen Unternehmensebenen<br />
[12]. Daneben sind Agenten ein viel versprechender<br />
Ansatz für die umfassende Diagnose von Anlagen<br />
durch den integrierten Einsatz verschiedener Diagnoseverfahren<br />
[13].<br />
3. Modellierungsbeispiel einer agentenorientierten<br />
Softwareentwicklung<br />
Nach den Beispielen für agentenorientierte Lösungen in der<br />
<strong>Automatisierungs</strong>technik soll nun die agentenorientierte<br />
Softwareentwicklung an einem umfassenden Modellierungsbeispiel<br />
veranschaulicht werden. Im Folgenden wird<br />
der vollständige Entwicklungsprozess bei agentenorientierter<br />
Analyse <strong>und</strong> Entwurf vorgestellt, zusammen mit Erläuterungen<br />
der wesentlichen Schritte <strong>und</strong> Entwurfsentscheidun-
16<br />
gen. Als Beispielanwendung dient die Steuerung einer Eisenbahn.<br />
Das Hauptziel dieses Anwendungsbeispiels ist, die<br />
praktische Anwendung der agentenorientierten Denkweise<br />
<strong>und</strong> Konzepte bei der Entwicklung eines Softwaresystems zu<br />
veranschaulichen, sowie diejenigen spezifischen Merkmale<br />
der Agentenorientierung herauszuarbeiten, die hier zu einer<br />
sinnvollen Lösung führen.<br />
3.1 Der Modellprozess Eisenbahn<br />
Der Modellprozess Eisenbahn wird am <strong>Institut</strong> für <strong>Automatisierungs</strong>-<br />
<strong>und</strong> Softwaretechnik (IAS) in Lehre <strong>und</strong> Forschung<br />
eingesetzt. In der Lehre dient die Eisenbahnanlage als Versuchsanlage<br />
für die internetbasierte Fernsteuerung eines<br />
technischen Prozesses. Die Fernsteuerung wird im Rahmen<br />
eines Online-Praktikumversuches im Fachpraktikum <strong>Automatisierungs</strong>technik<br />
eingesetzt. Daneben wird die Eisenbahnanlage<br />
als Demonstrations- <strong>und</strong> Versuchsmodell für<br />
das Forschungsgebiet „Agenten in der <strong>Automatisierungs</strong>technik“<br />
genutzt. Sie dient als anschauliches Beispiel eines<br />
<strong>Automatisierungs</strong>systems, das mit agentenorientierter Software<br />
gesteuert <strong>und</strong> überwacht werden kann.<br />
3.2 Aufgabenstellung<br />
Für unser Beispiel verwenden wir einen Ausschnitt der Eisenbahnanlage,<br />
bestehend aus den drei Bahnhöfen Stadtbahnhof,<br />
Landbahnhof <strong>und</strong> Hafenbahnhof. Zwischen Stadtbahnhof<br />
<strong>und</strong> Landbahnhof bestehen drei Gleisverbindungen <strong>und</strong><br />
zwischen Hafenbahnhof <strong>und</strong> Stadtbahnhof eine (Bild 2). In<br />
einem Betriebswerk können nicht benötigte oder defekte<br />
Züge abgestellt werden (Bild 2 rechts unten).<br />
3.3 Anforderungen an die Steuerung<br />
L<br />
K<br />
Landbahnhof<br />
= 60 Plätze (2x)<br />
= 30 Plätze (3x)<br />
S1<br />
Hafenbahnhof<br />
S2<br />
Stadtbahnhof<br />
18 min.<br />
360 Personen/St<strong>und</strong>e<br />
Bild 2: Schematische Darstellung der Eisenbahn.<br />
8 min.<br />
180 P./Std.<br />
Für die dargestellte Eisenbahnanlage soll ein Transportsystem<br />
mit folgenden Anforderungen realisiert werden:<br />
Die Bahnhöfe sind durch verschiedene S-Bahnlinien miteinander<br />
verb<strong>und</strong>en. Zwischen dem Stadt- <strong>und</strong> dem Landbahnhof<br />
verkehrt die S-Bahnlinie S1. Eine Anforderung an<br />
die Linie ist, dass jede St<strong>und</strong>e 360 Fahrplätze zur Verfügung<br />
stehen (180 von Land nach Stadt <strong>und</strong> 180 in die Gegenrichtung).<br />
Der zeitliche Abstand zwischen aufeinander folgenden<br />
Fahrten soll gleich groß sein <strong>und</strong> die Wartezeiten der<br />
Fahrgäste für Anschlusszüge sollen minimiert werden.<br />
Eine zweite S-Bahnlinie S2 verbindet den Stadtbahnhof<br />
mit dem Hafenbahnhof. Hier besteht die Anforderung, zu<br />
jeder St<strong>und</strong>e 180 Fahrplätze (90 von Stadt nach Hafen <strong>und</strong><br />
90 in die Gegenrichtung) anzubieten. In gleicher Weise wie<br />
bei S1 sollen die zeitlichen Abstände zwischen Fahrten<br />
gleich lang <strong>und</strong> Wartezeiten möglichst gering sein.<br />
Im Rahmen des Beispiels nehmen wir an, dass ein Zug<br />
unabhängig von seiner Länge 18 Minuten benötigt, um die<br />
Strecke zwischen Land <strong>und</strong> Stadt zurückzulegen <strong>und</strong> 8<br />
Minuten für die Strecke zwischen Stadt <strong>und</strong> Hafen. Für den<br />
Fahrbetrieb stehen folgende Züge zur Verfügung: Drei kurze<br />
Züge K1, K2 <strong>und</strong> K3, mit einer Kapazität von jeweils 30 Personen<br />
<strong>und</strong> zwei lange Züge, L1 <strong>und</strong> L2, mit einer Kapazität von<br />
je 60 Personen.<br />
Die Elemente der Eisenbahn mit sicherheitskritischen<br />
Anforderungen sind Streckenabschnitte <strong>und</strong> Weichen. Es<br />
muss sichergestellt werden, dass nicht zwei Züge gleichzeitig<br />
eine Strecke befahren. Deshalb müssen alle Streckenelemente<br />
(Streckenabschnitte <strong>und</strong> Weichen) vom Zug reserviert<br />
werden, damit ein exklusiver Zugriff gewährleistet ist.<br />
Basierend auf diesen exemplarischen Anforderungen soll<br />
eine automatisierte Steuerung des Fahrbetriebs der Eisenbahn<br />
entwickelt werden. Die Komplexität einer solchen<br />
Steuerung mit automatischer Streckenvergabe <strong>und</strong> Fahrplanverwaltung<br />
wird bereits in diesem einfachen Beispiel<br />
schnell ersichtlich. Während des Betriebes können im<br />
Wesentlichen drei unerwartete Fehlersituationen auftreten,<br />
auf welche die Steuerung dynamisch reagieren muss, um<br />
eine möglichst optimale Verfügbarkeit zu gewährleisten:<br />
Ein Zug hat Verspätung: Diese allen Bahnfahrern nur zu gut<br />
bekannte Situation muss im System propagiert <strong>und</strong> flexibel<br />
gehandhabt werden, um Anschlussverbindungen<br />
möglichst aufrecht zu erhalten.<br />
Ein Zug fällt aus: Andere Züge müssen neu dispositioniert<br />
werden, um die Transportkapazität einer Verbindung<br />
möglichst aufrecht zu erhalten; gegebenenfalls<br />
müssen Fahrpläne angepasst werden.<br />
Eine Strecke fällt aus: Hier muss – falls Ersatzstrecken zur<br />
Verfügung stehen – gleichfalls eine Neudisposition von<br />
Zügen erfolgen <strong>und</strong> evtl. Fahrpläne<br />
angepasst werden.<br />
Die Steuerung muss in der Lage sein,<br />
auf alle möglichen Kombinationen dieser<br />
Fehlersituationen so zu reagieren,<br />
dass zum einen die oben genannten<br />
Anforderungen an die Transportkapazität<br />
einer Verbindung möglichst optimal<br />
erfüllt <strong>und</strong> zum anderen die verfügbaren<br />
Ressourcen des Systems<br />
(Züge <strong>und</strong> Streckenelemente) bestmöglich<br />
verteilt werden.<br />
Es ist leicht ersichtlich, dass die<br />
Gesamtheit der Situationen, die<br />
während des Betriebs auftreten können,<br />
nicht vorhersagbar ist. Somit kann
17<br />
die optimale Auflösung einer bestimmten Fehlersituation<br />
nicht zur Entwurfszeit vollständig bestimmt werden. Durch<br />
einen agentenorientierten Ansatz kann eine Steuerung für<br />
die Eisenbahn entwickelt werden, die auf Basis einiger elementarer<br />
Strukturen, Mechanismen <strong>und</strong> Regeln zur Laufzeit<br />
dynamisch das der jeweiligen Situation angemessene Verhalten<br />
aufweist. Diese Basisstruktur des Systems wird im<br />
Rahmen der folgenden agentenorientierten Analyse <strong>und</strong><br />
des Entwurfs ermittelt <strong>und</strong> festgelegt.<br />
3.4 Agentenorientierte Analyse <strong>und</strong> Entwurf<br />
Für die Analyse <strong>und</strong> den Entwurf der Steuerung verwenden<br />
wir hier die agentenorientierte Methode Gaia [14]. Bei Gaia<br />
werden in der Analysephase ein Rollenmodell <strong>und</strong> ein Interaktionsmodell<br />
ermittelt. In der Entwurfsphase werden ein<br />
Agentenmodell <strong>und</strong> ein Organisationsmodell 1 erstellt. Jedes<br />
dieser Modelle werden wir für unser Beispiel systematisch<br />
entwickeln <strong>und</strong> beschreiben.<br />
3.4.1 Rollenmodell<br />
In der Analysephase betrachten wir zunächst das System<br />
"von außen", um seine Funktionen <strong>und</strong> Zusammenhänge zu<br />
ermitteln. Zu diesem Zweck identifiziert im ersten Schritt die<br />
Rollenanalyse die Verantwortlichkeiten <strong>und</strong> die Aufgaben,<br />
die durch das System gehandhabt werden müssen. Später<br />
werden diese identifizierten Rollen im laufenden System<br />
durch Agenten übernommen. Ein Agent kann während seines<br />
Lebenszyklus unterschiedliche Rollen übernehmen bzw.<br />
eine einzelne Rolle kann auch von mehreren Agenten wahrgenommen<br />
werden. Aufgr<strong>und</strong> dieser Durchgängigkeit des<br />
Rollenkonzeptes über den gesamten Entwicklungsprozess<br />
wird die Entwicklung eines Systems unterstützt, in dem sich<br />
die ursprünglich erkannten Aufgaben <strong>und</strong> Verantwortlichkeiten<br />
auch tatsächlich wieder finden. Bei Gaia wird eine textuelle<br />
Beschreibung einer Rolle verwendet, die folgende Elemente<br />
umfasst:<br />
Protokolle <strong>und</strong> Aktivitäten (Protocols and Activities) – Protokolle<br />
legen fest, wie verschiedene Rollen miteinander<br />
interagieren; Aktivitäten sind Aufgaben, die von einer<br />
Rolle ohne Interaktion erledigt werden. Zum Beispiel<br />
muss ein Zug mit einem Streckenabschnitt interagieren,<br />
um die Erlaubnis zu bekommen, diesen befahren zu dürfen.<br />
Seinen eigenen Fahrplan kann er ohne jegliche Interaktion<br />
ändern.<br />
Rechte (Permissions) – Hier werden die Rechte zum Lesen,<br />
Ändern <strong>und</strong> Erzeugen von Datenelementen spezifiziert.<br />
Wie hier bereits zu erkennen ist, besteht ein agentenorientiertes<br />
System nicht ausschließlich aus Agenten. Passive<br />
Elemente, wie Datenspeicher, müssen nicht als Agenten<br />
modelliert werden. Ein Beispiel für solche Elemente<br />
bei der Eisenbahn sind die Fahrpläne der Züge.<br />
Verantwortlichkeiten (Responsibilities) – Verantwortlichkeiten<br />
werden in zwei Kategorien unterteilt: Lebendigkeit<br />
(Liveness) <strong>und</strong> Sicherheit (Safety). Liveness beschreibt die<br />
Reihenfolge der Aufgaben, die von der Rolle realisiert<br />
werden müssen. Sie setzen sich aus den im ersten Bereich<br />
beschriebenen Protokollen <strong>und</strong> Aktivitäten zusammen.<br />
Safety sind Bedingungen (Invarianten), die eingehalten<br />
werden müssen, um unerwünschte oder sogar gefährliche<br />
Situationen zu vermeiden. Zur Vereinfachung haben<br />
wir die Safety Verantwortlichkeiten im Modell weggelassen.<br />
Bild 3 zeigt das vereinfachte Metamodell der Elemente<br />
bei der agentenorientierten Analyse <strong>und</strong> des Entwurfs mit<br />
Gaia. Damit werden die Zusammenhänge zwischen Agenten,<br />
Rollen, Protokollen, Aktivitäten, Rechten <strong>und</strong> Verantwortlichkeiten<br />
in UML-Notation beschrieben.<br />
Agent<br />
übernimmt ><br />
*<br />
1..*<br />
< interagiert mit<br />
*<br />
Rolle<br />
Protokoll<br />
* *<br />
*<br />
Rechte Verantwortlichkeiten Aktivitäten<br />
Bild 3. Metamodell der Elemente von Gaia.<br />
Wie können Rollen identifiziert werden? Aus der Anforderungsspezifikation<br />
des Transportsystems können direkt Verantwortlichkeiten<br />
abgeleitet werden, die einzelnen Bestandteilen<br />
des Systems zugeordnet sind. Zum Beispiel müssen<br />
die beiden S-Bahnlinien eine gewisse Transportkapazität<br />
<strong>und</strong> eine zeitlich gleichmäßige Verteilung der Fahrten anbieten.<br />
Die Erfüllung dieser Anforderungen impliziert eine<br />
Reservierung der Streckenabschnitte <strong>und</strong> unter Umständen<br />
den Einsatz von mehreren Zügen. Diese nicht-trivialen Aufgaben<br />
kennzeichnen S-Bahnlinien als gute Ansatzpunkte für<br />
die Modellierung von Rollen. Beispielsweise beschreibt die<br />
Rolle S1 die Verantwortlichkeiten der Züge, welche die Verbindung<br />
zwischen Landbahnhof <strong>und</strong> Stadtbahnhof befahren.<br />
Analog beschreibt S2 die Rolle der Züge, die zwischen<br />
Hafenbahnhof <strong>und</strong> Stadtbahnhof verkehren. Um den dynamischen<br />
Einsatz der Züge zu ermöglichen, ist eine weitere<br />
Rolle für Züge sinnvoll, die gerade nicht im Fahrbetrieb eingesetzt<br />
werden. Diese Rolle wird mit dem Namen IDLE<br />
bezeichnet.<br />
Die Sicherheit des Eisenbahnbetriebs hängt davon ab, wie<br />
die Reservierung von Streckenabschnitten <strong>und</strong> Weichen<br />
durch die Züge gehandhabt wird. Gleichzeitig sollte aber<br />
versucht werden, die Zeitspanne zu minimieren, in der ein<br />
Streckenelement unbenutzt reserviert ist, um die Gesamtverfügbarkeit<br />
des Systems zu erhöhen. Die Handhabung dieser<br />
konfliktträchtigen Anforderungen ist eine Aufgabe, welche<br />
die Modellierung von Streckenabschnitten <strong>und</strong> Weichen<br />
als Rollen (mit TSEG <strong>und</strong> TOUT bezeichnet) sinnvoll macht. Im<br />
Gegensatz dazu müssen Bahnhöfe nur die Informationen<br />
über Verspätungen auf einer S-Bahnlinie an Züge anderer<br />
Linien weiterleiten. Das ist eine einfache Aufgabe, für welche<br />
die Modellierung als Rolle nicht erforderlich ist.<br />
Damit haben wir folgende Rollen im System identifiziert:<br />
Die Rollen der S-Bahnlinien S1 <strong>und</strong> S2, die Rolle IDLE für freie<br />
Züge <strong>und</strong> die Rollen TSEG bzw. TOUT für Streckenabschnitte<br />
*
18<br />
bzw. Weichen. Im Folgenden werden die identifizierten Rollen<br />
des Systems detailliert beschrieben. Tabelle 1 zeigt die<br />
Rollenbeschreibung von S1 in Gaia Notation.<br />
In dieser Rollenbeschreibung sind zunächst alle Protokolle<br />
<strong>und</strong> Aktivitäten der Rolle S1 aufgelistet:<br />
FindTrack spezifiziert den Ablauf, wie ein Zug, der gerade<br />
die Rolle S1 wahrnimmt, mit Streckenelementen<br />
(Streckenabschnitte <strong>und</strong> Weichen) interagiert, um einen<br />
vollständigen Weg von seiner gegenwärtigen Position<br />
zum Zielbahnhof zu finden. Dieser Ablauf ist sinnvoll,<br />
denn wenn Streckenelemente nicht verfügbar sind, kann<br />
der Zug selbstständig eine Alternativroute finden.<br />
Um Unfälle zu vermeiden, reserviert der Zug ein Streckenelement,<br />
bevor er es befährt. Das Protokoll ReserveTrack<br />
legt die Interaktion zwischen Zügen <strong>und</strong> Streckenelementen<br />
während einer Reservierung fest.<br />
Die Aktivität DriveTrack repräsentiert die Fahrt eines<br />
Zuges durch ein zuvor reserviertes Streckenelement. Da<br />
hierfür keine Interaktionen benötigt werden, wird diese<br />
Aufgabe nicht als Protokoll modelliert.<br />
Anschließend wird das Streckenelement mit dem Protokoll<br />
ReleaseTrack wieder freigegeben.<br />
Die Aktivität InformDelay wird verwendet, um den Zielbahnhof<br />
zu informieren, wenn der Zug seinen Fahrplan<br />
ändert.<br />
Da die Kapazität eines einzelnen Zuges nicht immer ausreicht,<br />
um die geforderte Transportkapazität einer S-<br />
Bahnlinie zu erfüllen, müssen auch mehrere Züge zusammen<br />
eingesetzt werden können. Das bedeutet, dass mehr<br />
als ein Zug die Rolle der S-Bahnlinie übernimmt. Die Züge<br />
müssen dann ihre Aktionen abstimmen, um gemeinsam<br />
die Anforderungen der Linie zu erfüllen. Das Protokoll<br />
NegotiateGoals beschreibt diesen Ablauf.<br />
Weiter sollen zur optimalen Ressourcenausnutzung<br />
immer die am besten passenden Züge für eine S-Bahnlinie<br />
eingesetzt werden. Sieht sich ein Zug aufgr<strong>und</strong> seiner<br />
Kapazität als geeigneter für die Rolle einer S-Bahnlinie, so<br />
verhandelt er über das Protokoll NegotiateRole mit dem<br />
Zug, der momentan dieser Rolle zugeordnet ist, um die<br />
Rolle zu übernehmen.<br />
Die Rolle S1 greift auf folgende Datenelemente zu: Das<br />
Element TransportCapacity speichert die Information<br />
über die Transportkapazität eines Zuges mit der Rolle S1.<br />
Im Element RoleDB wird die Zuordnung von Rollen zu<br />
Zügen gespeichert. Damit ist RoleDB eine Art schwarzes<br />
Brett, über das ein Zug herausfinden kann, welcher<br />
andere Zug gerade welche Rolle wahrnimmt. Falls ein<br />
Zug sich bei der Interaktion in NegotiateRole entscheidet,<br />
seine Rolle zu ändern, modifiziert er die in RoleDB gespeicherte<br />
Zuordnung. Der Fahrplan der Züge auf der Linie S1<br />
wird im Element TimetableS1 gespeichert <strong>und</strong> von den<br />
der Rolle S1 zugeordneten Zügen modifiziert. Die Änderung<br />
von TimetableS1 kann notwendig werden aufgr<strong>und</strong><br />
von Fehlersituationen im Betrieb, an die sich der Zug<br />
anpassen muss.<br />
Verantwortlichkeiten beschreiben die Zusammenhänge<br />
<strong>und</strong> Abläufe der Protokolle <strong>und</strong> Aktivitäten von S1. In Gaia<br />
wird zur Beschreibung der Verantwortlichkeiten eine Notation<br />
benutzt, die auf regulären Ausdrücken basiert. Die<br />
Hauptverantwortlichkeit von S1 lautet:<br />
((DriveToStadt · DriveToLand) | NegotiateGoals | NegotiateRole)_<br />
Das ‘_’ am Ende zeigt eine endlose Wiederholung der aufgelisteten<br />
Aktivitäten an. Die einzelnen Aktivitäten werden<br />
alternativ (‘|‘)ausgeführt:<br />
Fahre von Land nach Stadt <strong>und</strong> zurück (DriveToStadt • DriveToLand)<br />
Verhandle Ziele mit anderen S1 zugeordneten Zügen<br />
(NegotiateGoals)<br />
Verhandle die Zuordnung zu einer Rolle (NegotiateRole)<br />
Die Aktivitäten DriveToStadt <strong>und</strong> DriveToLand sind weiter<br />
untergliedert in Unteraktivitäten: Das Finden eines Weges<br />
zum Zielbahnhof, die Reservierung der Streckenabschnitte<br />
<strong>und</strong> die Fahrt selbst:<br />
DriveToStadt = (FindTrack(Stadt) • ReserveTrack • Drive-<br />
Track • ReleaseTrack • [InformDelay])+<br />
Nachdem ein Weg von der gegenwärtigen Position zum<br />
Stadtbahnhof gef<strong>und</strong>en wurde, reserviert der Zug die<br />
Streckenabschnitte, die er zu durchfahren beabsichtigt <strong>und</strong><br />
beginnt seine Fahrt. Das ’+’-Symbol am Ende des Ablaufes<br />
zeigt an, dass diese Reihe von Aktivitäten mehrmals durchlaufen<br />
wird, bis der Zielbahnhof erreicht ist. Im Fall einer Fehlersituation<br />
(z.B. wenn ein Streckenelement des geplanten<br />
Wegs nicht mehr verfügbar ist) muss der Zug einen Alternativweg<br />
zum Zielbahnhof finden. Gleichzeitig informiert er<br />
den Bahnhof über die Verzögerung.<br />
Die Modellierung der Rolle von S-Bahnlinie S2 ist der von<br />
S1 sehr ähnlich <strong>und</strong> hat im Gr<strong>und</strong>e dieselben Aktivitäten <strong>und</strong><br />
Protokolle. Sie unterscheidet sich nur in den Zielbahnhöfen<br />
<strong>und</strong> in den benutzten Datenelementen.<br />
Die getrennte Modellierung von Zügen <strong>und</strong> S-Bahnlinien<br />
ist die Basis für den dynamischen Einsatz von Zügen im<br />
System, abhängig von der aktuellen Situation. Um den flexiblen<br />
Einsatz der Züge zu automatisieren, wird eine Rolle für<br />
Tabelle 1: Rollenbeschreibung von ‘S1’ .<br />
Role Schema: S1<br />
Description: S-Bahnverbindung zwischen Landbahnhof, Stadtbahnhof<br />
<strong>und</strong> zurück. Stellt eine Transportkapazität von 360 Personen pro<br />
St<strong>und</strong>e zur Verfügung (180 Personen pro St<strong>und</strong>e in jede Richtung der<br />
Verbindung).<br />
Protocols and Activities<br />
FindTrack, ReserveTrack, DriveTrack,InformDelay,NegotiateGoals,<br />
NegotiateRole<br />
Permissions<br />
Reads: TransportCapacity; Changes: RoleDB, TimetableS1<br />
Responsibilities - Liveness:<br />
S1 = ((DriveToStadt · DriveToLand) | NegotiateGoals | NegotiateRole)_<br />
DriveToStadt = (FindTrack(Stadt) · ReserveTrack · DriveTrack · Release-<br />
Track · [InformDelay])+<br />
DriveToLand = (FindTrack(Land) · ReserveTrack · DriveTrack) · Release-<br />
Track · [InformDelay])+
19<br />
freie Züge (IDLE) benötigt. Diese Rolle nehmen die gerade in<br />
keiner S-Bahnlinie eingesetzten Züge ein <strong>und</strong> suchen nach<br />
neuen Einsatzmöglichkeiten. Dazu überprüft der jeweilige<br />
Zug die gegenwärtigen Zuordnungen von Zügen zu S-Bahnlinien<br />
<strong>und</strong> vergleicht seine eigene Transportkapazität mit<br />
den Anforderungen der Linien. Dabei gibt es drei Kriterien:<br />
Die Rolle einer S-Bahnlinie ist gerade von keinem Zug<br />
übernommen.<br />
Es sind nicht genügend Züge dieser Rolle zugeordnet, um<br />
die geforderte Transportkapazität zu erreichen.<br />
Die eingesetzten Züge sind nicht die effizientesten für<br />
diese Aufgabe.<br />
Die erste Situation ist eindeutig: Falls kein Zug einer<br />
bestimmten Rolle zugeordnet ist, kann der unbenutzte Zug<br />
diese Rolle direkt übernehmen. Die zweite Situation tritt zum<br />
Beispiel auf, wenn nur ein langer Zug der Linie S1 zugeordnet<br />
ist. Da die Fahrt knapp 20 Minuten dauert, kann ein langer<br />
Zug maximal 180 Personen pro St<strong>und</strong>e befördern (3<br />
Fahrten pro St<strong>und</strong>e, 60 Personen pro Fahrt). In diesem Fall<br />
kann ein zweiter langer Zug zusätzlich die Rolle S1 übernehmen,<br />
um die Transportkapazität auf 360 Personen pro<br />
St<strong>und</strong>e zu erhöhen <strong>und</strong> somit die Anforderung der Rolle<br />
erfüllen.<br />
Ein Beispiel für die dritte Situation ist die bestehende<br />
Zuordnung eines langen Zuges zur Linie S2. Da die Fahrt<br />
knapp 10 Minuten benötigt, kann ein langer Zug etwa 360<br />
Personen pro St<strong>und</strong>e befördern (6 Fahrten pro St<strong>und</strong>e, 60<br />
Personen pro Fahrt). Dies ist viel mehr als auf der Linie<br />
benötigt wird <strong>und</strong> somit eine nicht optimale Verwendung<br />
von Ressourcen. Dagegen würde ein kurzer Zug 180 Personen<br />
pro St<strong>und</strong>e befördern (6 Fahrten pro St<strong>und</strong>e, 30 Personen<br />
pro Fahrt), genug, um die Anforderungen der Rolle zu<br />
erfüllen. Der kurze Zug würde die Rolle S2 in diesem Fall<br />
übernehmen <strong>und</strong> den langen für andere Aufgaben verfügbar<br />
machen. Tabelle 2 fasst die Beschreibung der Rolle IDLE<br />
zusammen.<br />
Die Aktivität CheckRoles der Rolle IDLE überprüft die Information<br />
über die Zuordnung von Zügen zu S-Bahnlinien, die<br />
im Element RoleDB gespeichert ist. Findet der Zug eine der<br />
drei oben genannten Situationen vor, übernimmt er entweder<br />
die Rolle direkt (wenn diese frei ist) oder er initiiert das<br />
NegotiateRole Protokoll. Übernimmt der Zug im Verlauf seiner<br />
Aktivitäten eine neue Rolle, wird RoleDB entsprechend<br />
geändert. Die Hauptverantwortlichkeit der Rolle IDLE<br />
besteht somit in der wiederholten Durchführung von<br />
CheckRoles <strong>und</strong> gegebenenfalls von NegotiateRole.<br />
Tabelle 2: Rollenbeschreibung von ‘IDLE’ .<br />
Role Schema: IDLE (Freier Zug)<br />
Description: Rolle eines Zuges, der keiner S-Bahnlinie zugeordnet ist.<br />
Protocols and Activities:<br />
CheckRoles, NegotiateRole<br />
Permissions:<br />
Reads: TransportCapacity, RoleDB; Changes: RoleDB<br />
Responsibilities - Liveness:<br />
IDLE = (CheckRoles · [NegotiateRole])_<br />
In der Rolle IDLE ist besonders deutlich die Umsetzung<br />
der abstrakten agentenorientierten Konzepte Zielorientierung<br />
<strong>und</strong> Proaktivität zu erkennen. Die Ziele der Steuerung –<br />
Erfüllung der Transportkapazitäten bei optimaler Ressourcenausnutzung<br />
– drücken sich in den Regeln aus, nach<br />
denen sich ein gerade nicht eingesetzter Zug neue Aufgaben<br />
sucht. Diese Suche führt er aus eigenem Antrieb aus,<br />
also proaktiv, um das System nach Möglichkeit in einen optimalen<br />
Zustand zu bringen.<br />
Die letzten beiden Rollen des Transportsystems sind die<br />
Rollen TSEG von Streckenabschnitten <strong>und</strong> TOUT von Weichen.<br />
Die Rolle TSEG eines Streckenabschnitts ist in Tabelle 3<br />
beschrieben.<br />
Tabelle 3: Rollenbeschreibung von ‘TSEG’.<br />
Role Schema: TSEG (Streckenabschnitt)<br />
Description: Bahnstrecken werden in einzelne Streckenabschnitte aufgeteilt,<br />
die nacheinander von einem Zug befahren werden.<br />
Protocols and Activities:<br />
ReserveTrack, CheckReservationTimeout, FindTrack, ReleaseTrack<br />
Permissions:<br />
reads: Station, TSEGReservation; changes: TSEGReservation; generates:<br />
TSEGReservation<br />
Responsibilities - Liveness:<br />
TSEG = (ReserveTrack | CheckReservationTimeout | FindTrack(Destination)<br />
| ReleaseTrack)_<br />
Der Streckenabschnitt interagiert über das ReserveTrack<br />
Protokoll mit den Zügen der S-Bahnlinien, um die exklusive<br />
Benutzung zu einem Zeitpunkt zu gewährleisten. Er kontrolliert<br />
seine eigene Reservierungsinformation in TSEGReservation<br />
<strong>und</strong> gibt, falls verfügbar, die Durchfahrerlaubnis für eine<br />
begrenzte Zeitdauer. Ist der Streckenabschnitt bereits reserviert,<br />
wird die Reservierungsanfrage des Zuges abgelehnt.<br />
Die Aktivität CheckReservationTimeout überwacht die Zeitdauer<br />
der Reservierungen für den Streckenabschnitt. Dieser<br />
Mechanismus erhöht die Verfügbarkeit des Systems, weil<br />
dauerhafte Blockierungen von Streckenabschnitten vermieden<br />
werden.<br />
Im Protokoll FindTrack reagiert der Streckenabschnitt auf<br />
die Weganfrage eines Zuges <strong>und</strong> versucht, einen Weg von<br />
seiner gegenwärtigen Position zum gewünschten Zielbahnhof<br />
zu finden. Falls sich der Streckenabschnitt an einem<br />
Bahnhof befindet, ist der Name des Bahnhofs im Element<br />
Station gespeichert.<br />
Die Modellierung der Rolle einer Weiche, TOUT genannt,<br />
ist der eines Streckenabschnitts sehr ähnlich, mit denselben<br />
Interaktionen für Reservierung <strong>und</strong> Wegfindung. Zusätzlich<br />
existiert die Aktivität ChangeDirection, um die Weichenstellung<br />
zu ändern.<br />
Im zweiten Schritt der agentenorientierten Analyse werden<br />
die Abläufe zwischen den Rollen genauer betrachtet.<br />
3.4.2 Interaktionsmodell<br />
Das Interaktionsmodell gibt eine Übersicht über die spezifizierten<br />
Protokolle auf einer abstrakten Ebene. Hier wird
20<br />
festgelegt, wie die einzelnen Rollen zur Bewältigung ihrer<br />
Aufgaben miteinander interagieren. In Gaia wird eine tabellarische<br />
Notation benutzt, die in Tabelle 4 dargestellt wird.<br />
Tabelle 4: Protokollspezifikation in Gaia.<br />
Name des Protokolls<br />
Auslöser<br />
Empfänger<br />
Beschreibung<br />
Tabelle 5 zeigt die Spezifikation des ersten Protokolls<br />
FindTrack. Das FindTrack Protokoll wird durch die Rollen S1<br />
oder S2 ausgelöst <strong>und</strong> von einer der Rollen TSEG oder TOUT<br />
beantwortet. Der Zug macht eine Anfrage, während er einen<br />
Weg von seiner gegenwärtigen Position zum Zielbahnhof<br />
(Destination) sucht. Die Anfrage wird zu den Streckenelementen<br />
in der direkten Nachbarschaft des Zuges geschickt<br />
<strong>und</strong> an alle weiter führenden Streckenelemente weitergeleitet.<br />
Jedes Streckenelement fügt seine ID zur Anfragenachricht<br />
hinzu, bevor diese weitergeleitet wird. Läuft die Nachricht<br />
in einer Schleife, das heißt erreicht sie ein Streckenelement<br />
mehr als einmal, wird sie vernichtet, um unnötige<br />
Anfragen zu vermeiden. Wird ein Streckenabschnitt erreicht,<br />
der im Zielbahnhof liegt, so wird eine Bestätigung entlang<br />
der Reihenfolge der in der Anfragenachricht gespeicherten<br />
IDs zurück zum Zug geschickt.<br />
Tabelle 5: Protokollspezifikation FindTrack.<br />
FindTrack<br />
S1, S2, TSEG, TOUT TSEG, TOUT<br />
(siehe Text)<br />
Tabelle 6 zeigt die Spezifikation des Protokolls Reserve-<br />
Track. Das ReserveTrack Protokoll wird wie bei FindTrack von<br />
S1 oder S2 ausgelöst <strong>und</strong> von TSEG oder TOUT beantwortet.<br />
Ein Zug, der durch ein Streckenelement fahren will, macht<br />
eine Reservierungsanfrage. Abhängig vom gegenwärtigen<br />
Reservierungsstatus wird die Erlaubnis zur Benutzung<br />
erteilt oder die Anfrage wird abgelehnt. Die Protokollspezifikation<br />
von ReleaseTrack entspricht der von ReserveTrack,<br />
wobei ein Streckenelement seine Freigabe lediglich<br />
bestätigt.<br />
Tabelle 6: Protokollspezifikation ReserveTrack.<br />
ReserveTrack<br />
S1, S2 TSEG, TOUT<br />
(siehe Text)<br />
Eingaben<br />
Ausgaben<br />
Destination<br />
Fo<strong>und</strong> | Forward (Add ID)<br />
Train ID<br />
Accept | Decline<br />
In Tabelle 7 ist die Spezifikation des Protokolls Negotiate-<br />
Goals dargestellt. Werden die Rollen S1 oder S2 von mehr als<br />
einem Zug gemeinsam übernommen, muss es einen<br />
Abstimmungsprozess zwischen den Zügen geben, um die<br />
Anforderungen der Rolle zu erfüllen. Jeder der Züge tauscht<br />
mit den anderen seine geplante Verwendung der Ressourcen<br />
(Resource utilization) aus, z.B. die der Streckenabschnitte.<br />
Nachdem die Pläne des anderen bekannt sind, werden<br />
solange neue Vorschläge gemacht, bis eine Strategie gef<strong>und</strong>en<br />
wurde, die von allen Zügen akzeptiert wird. Aufgr<strong>und</strong><br />
der zeitlichen Anforderungen des realen Systems, muss die<br />
Spezifikation dieses Protokolls eine kurze Konvergenzzeit für<br />
diesen Verhandlungsprozess sicherstellen.<br />
Tabelle 7: Protokollspezifikation NegotiateGoals.<br />
NegotiateGoals<br />
S1, S2 S1, S2<br />
(siehe Text)<br />
Die Spezifikation des Protokolls NegotiateRole ist in<br />
Tabelle 8 beschrieben. In NegotiateRole beginnt ein Zug in<br />
der Rolle IDLE eine Interaktion mit einem Zug, welcher der<br />
Rolle S1 oder S2 zugeordnet ist. Er hat das Ziel, dessen Rolle<br />
zu übernehmen. In einer ersten Anfrage sendet der Zug<br />
seine eigene Transportkapazität. Stellt der gegenwärtig der<br />
Rolle zugeordnete Zug die bessere Eignung des freien Zuges<br />
fest, so gibt er seine Rolle S1 oder S2 ab <strong>und</strong> nimmt die Rolle<br />
IDLE an.<br />
Tabelle 8: Protokollspezifikation NegotiateRole.<br />
NegotiateRole<br />
IDLE S1, S2<br />
(siehe Text)<br />
Bild 4 gibt einen Überblick über alle in der Analysephase<br />
im System identifizierten fünf Rollen <strong>und</strong> fünf Protokolle. Die<br />
einzelnen Rollen sind durch Rechtecke dargestellt, die Protokolle<br />
durch Verbindungen zwischen den Rollen. Rollen, welche<br />
die gleichen Protokolle verwenden, sind zur Vereinfachung<br />
zusammengefasst.<br />
3.4.3 Agentenmodell<br />
Resource utilization<br />
Resource utilization<br />
Request role (TransportCapacity)<br />
Accept | Decline<br />
In der Entwurfsphase von Gaia wird aus den Ergebnissen der<br />
Analysephase das Agentenmodell erstellt. Darin werden die<br />
Agententypen <strong>und</strong> die Anzahl der Agenten jedes Typs festgelegt.<br />
Agenten eines bestimmten Typs können eine oder<br />
mehrere der im Analyseprozess definierten Rollen annehmen<br />
(durch einen Pfeil dargestellt).<br />
In den bisher durchgeführten Analyseschritten waren die<br />
aktiven Elemente des Systems mit nicht-trivialen Aufgaben<br />
bereits gut zu erkennen. Es handelt sich um Züge, Streckab-<br />
Negotiate Goals<br />
S1<br />
S2<br />
TSEG<br />
TOUT<br />
Negotiate Role<br />
Find Track, Reserve Track, Release Track<br />
Find Track<br />
IDLE<br />
Bild 4: Übersicht über die Rollen <strong>und</strong> Protokolle der Eisenbahnsteuerung.
21<br />
schnitte <strong>und</strong> Weichen. Diese Elemente übernehmen die<br />
identifizierten Rollen im System. Daher ist es naheliegend,<br />
diese Elemente als Agenten zu modellieren. Bild 5 zeigt das<br />
Agentenmodell der Eisenbahnsteuerung, in dem die drei<br />
Agententypen dargestellt sind: der Agententyp Train für<br />
Züge, der Agententyp Track für Streckenabschnitte <strong>und</strong> der<br />
Agententyp Turnout für Weichen. Agenten vom Typ Train<br />
können die Rollen S1, S1 oder IDLE wahrnehmen. Agenten<br />
vom Typ Track übernehmen die Rolle TSEG <strong>und</strong> Agenten<br />
vom Typ Turnout die Rolle TOUT. Das ‘+‘ zeigt an, dass im<br />
System von jedem Typ mindestens ein Agent existiert.<br />
Flexible dynamische Zuordnung von Zügen zu S-Bahnlinien<br />
für eine möglichst optimale Ressourcenverteilung<br />
<strong>und</strong> Erfüllung der geforderten Transportziele.<br />
Dynamische Wegfindung <strong>und</strong> Streckenbelegung.<br />
Proaktives Suchen freier Züge nach neuen Einsatzmöglichkeiten,<br />
um die Transportkapazitäten oder den Einsatz<br />
der Züge zu optimieren.<br />
Selbstständige Koordination der Züge zur Anpassung an<br />
die aktuelle Betriebssituation.<br />
Das vollständige Modellierungsbeispiel findet sich im<br />
Internet unter der Adresse http://www.ias.unistuttgart.de/agenten.<br />
Train<br />
+<br />
Track<br />
+<br />
Turnout<br />
+<br />
4. Zusammenfassung<br />
S1 S2 IDLE TSEG TOUT<br />
Bild 5: Agentenmodell mit der Zuordnung von Rollen zu Agententypen.<br />
3.4.4 Organisationsmodell<br />
Das letzte Modell im Entwurf ist das Organisationsmodell.<br />
Hier wird festgelegt, welche Kommunikationsbeziehungen<br />
zwischen den Agenten bestehen. Damit wird keine statische<br />
Definition des Informationsflusses vorgegeben, sondern<br />
lediglich mögliche Beziehungen aufgezeigt. Bild 6 zeigt das<br />
Organisationsmodell des Transportsystems: Alle Agententypen<br />
können untereinander interagieren, Agenten vom Typ<br />
Train <strong>und</strong> Track können auch mit Agenten gleichen Typs<br />
interagieren.<br />
Mit dem Organisationsmodell ist die agentenorientierte<br />
Analyse <strong>und</strong> der Entwurf mit der Methode Gaia abgeschlossen.<br />
In den erstellen Modellen sind bereits die wesentlichen<br />
Merkmale der Eisenbahnsteuerung zu erkennen:<br />
Track<br />
Turnout<br />
Train<br />
Bild 6: Organisationsmodell mit möglichen Kommunikationsbeziehungen.<br />
In der <strong>Automatisierungs</strong>technik kann aus einem agentenorientierten<br />
Ansatz häufig eine vorteilhafte Lösung resultieren.<br />
Eine agentenorientierte Lösung ist dann sinnvoll, wenn ein<br />
System logisch verteilt ist, komplexes Verhalten aufweist,<br />
umfangreiche Koordinationsprozesse erfordert oder eine<br />
flexible Struktur benötigt. Viele Systeme in der heutigen<br />
<strong>Automatisierungs</strong>technik weisen diese Eigenschaften auf,<br />
z.B. in der Produktionstechnik, im Energiemanagement, in<br />
der Logistik, bei Verkehrssystemen <strong>und</strong> in der Anlagenautomatisierung.<br />
Im Zentrum dieses Beitrags steht die praktische Anwendung<br />
der agentenorientierten Denkweise für die systematische,<br />
ingenieurmäßige Entwicklung von Software. Das<br />
Modellierungsbeispiel der Eisenbahnsteuerung verdeutlicht,<br />
wie die agentenorientierten Gr<strong>und</strong>konzepte für die<br />
Analyse <strong>und</strong> den Entwurf einer realen Applikation angewendet<br />
werden. Der Schwerpunkt bei der Modellierung liegt auf<br />
der Betrachtung der Aufgaben (Rollen), die durch das<br />
System bewältigt werden müssen <strong>und</strong> der Interaktionen<br />
zwischen den verschiedenen Rollen zur Bewältigung dieser<br />
Aufgaben. Die Rollen werden von den aktiven Elementen<br />
des Systems, den Agenten, wahrgenommen. Durch diese<br />
Vorgehensweise kann ein Modell als Basis für ein agentenorientiertes<br />
System erstellt werden, das die erforderlichen<br />
Eigenschaften Flexibilität, Anpassungsfähigkeit, Robustheit<br />
<strong>und</strong> Fehlertoleranz aufweist.<br />
In der Fortsetzung dieses Beitrages wird die gr<strong>und</strong>sätzliche<br />
Struktur von Agentensystemen erläutert <strong>und</strong> ihre Implementierung<br />
anhand des Anwendungsbeispiels der Eisenbahnsteuerung<br />
demonstriert. Abschließend wird gezeigt,<br />
wie die Vorteile des agentenorientierten Modells der Eisenbahnsteuerung<br />
im Betrieb zum Tragen kommen.
22<br />
Agentensysteme in der <strong>Automatisierungs</strong>technik:<br />
Aufbau, Struktur <strong>und</strong> Implementierung an einem<br />
Anwendungsbeispiel<br />
Der vorliegende Beitrag behandelt zum Abschluss der Reihe über Softwareagenten in der <strong>Automatisierungs</strong>technik<br />
die Aspekte der Realisierung von Agentensystemen. Um eine agentenorientierte Lösung als lauffähiges<br />
Softwaresystem zu implementieren, ist zunächst eine gr<strong>und</strong>legende Struktur für die einzelnen Agenten<br />
<strong>und</strong> eine Basisarchitektur für Agentensysteme erforderlich, die die notwendige Infrastruktur für die Agenten<br />
zur Verfügung stellt. Daneben existiert eine Reihe von Technologien, die dem Entwickler eine umfassende<br />
Unterstützung bei der Implementierung bieten <strong>und</strong> die agentenorientierten Entwicklungskonzepte direkt<br />
auf die Programmebene umsetzen. Diese Aspekte werden zuerst aus allgemeiner Sicht <strong>und</strong> anschließend<br />
anhand der konkreten Implementierung eines technischen Beispiels erläutert.<br />
Agent systems in industrial automation: construction, structure and implementation of an application<br />
example<br />
As a conclusion of the series about software agents, the present article addresses the aspect of realization of<br />
agent systems. In order to implement an agent oriented solution in form of an executable software system,<br />
a basic structure for a single agent and a basic architecture for an agent system are necessary, as they provide<br />
the essential infrastructure needed by the agents. Besides that, there is a number of technologies which<br />
provide the developer with comprehensive support during the implementation, in the task of converting the<br />
agent oriented design concepts directly to program level.These aspects will be explained at first from a general<br />
point of view and sequentially by considering the concrete implementation of a technical example.<br />
1. Einführung<br />
Viele moderne <strong>Automatisierungs</strong>systeme weisen komplexe<br />
Anforderungen wie zunehmende Dezentralisierung, Flexibilität,<br />
Anpassbarkeit <strong>und</strong> Integrationsfähigkeit auf, die einen<br />
agentenorientierten Lösungsansatz sinnvoll erscheinen lassen.<br />
Beispielsweise führt eine agentenorientierte Lösung für<br />
Produktionssysteme, bei der alle beteiligten Elemente der<br />
Fertigungsstraße als autonome, kooperierende Agenten<br />
betrachtet werden, zu größerer Flexibilität <strong>und</strong> Robustheit<br />
des Fertigungsprozesses [1, 2]. Beim Energiemanagement<br />
können die komplexen Abläufe in einem Energieversorgungsnetzwerk<br />
beherrscht <strong>und</strong> optimiert werden, wenn das<br />
Netzwerk als Marktplatz betrachtet wird, auf den Erzeuger<strong>und</strong><br />
Verbraucheragenten dynamisch über verfügbare Energiekontingente<br />
verhandeln. Dieses Prinzip ist sowohl in<br />
großen Stromversorgungsnetzen anwendbar [3] als auch in<br />
abgeschlossenen lokalen Netzwerken, wie zum Beispiel bei<br />
der Energieversorgung im Kraftfahrzeug [4]. Auch in der<br />
Anlagenautomatisierung können Agenten zur Steuerung<br />
von Abläufen, zur Unterstützung des Anlagenfahrers, zur<br />
Diagnose von Fehlerzuständen <strong>und</strong> zur Verbesserung des<br />
Engineerings eingesetzt werden.<br />
Der erste Teil dieser Beitragsreihe (atp 10/2003) behandelte<br />
eine theoretische Einführung in die Agentenorientierung,<br />
ihre gr<strong>und</strong>legenden Konzepte <strong>und</strong> die Vorgehensweise<br />
bei der agentenorientierten Analyse <strong>und</strong> Entwurf [5].<br />
Im zweiten Teil (atp 11/2003) wurde die praktische Anwendung<br />
dieser Gr<strong>und</strong>lagen bei der agentenorientierten Analyse<br />
<strong>und</strong> dem Entwurf für eine Eisenbahnsteuerung veranschaulicht<br />
[6]. Abschließend stellen sich noch wichtige Fragen<br />
in Bezug auf die Realisierung von Agentensystemen:<br />
Wie ist ein einzelner Agent bzw. ein (Multi-)Agentensystem<br />
aufgebaut, <strong>und</strong> wie sieht die gr<strong>und</strong>legende Architektur aus?<br />
Wie muss bei der Implementierung von Agentensystemen<br />
vorgegangen werden, damit sich die Eigenschaften von<br />
Agenten tatsächlich im realisierten System wieder finden?<br />
Die Basiskonzepte der Agentenorientierung Autonomie,<br />
Interaktion, Reaktivität, Zielorientierung, Proaktivität <strong>und</strong><br />
Persistenz scheinen auf den ersten Blick mit den bekannten<br />
Methoden <strong>und</strong> Technologien der Softwaretechnik nur<br />
schwer modellierbar <strong>und</strong> implementierbar zu sein. Mit den<br />
heutigen Mitteln der Programmierung ist es jedoch möglich,<br />
die Agentensicht bei der Implementierung auf die Merkmale<br />
eines Softwaresystems zu übertragen. Hinzu kommt, dass für<br />
eine agentenorientierte Lösung einer realen Problemstellung<br />
diese Merkmale nicht nur wünschenswert, sondern<br />
auch unverzichtbar sind. Die Durchgängigkeit der konzeptionellen<br />
Basis bei Analyse, Entwurf <strong>und</strong> Implementierung ist<br />
ein wichtiger Faktor bei der Softwareentwicklung. Die Vernachlässigung<br />
dieser Tatsache bei der agentenorientierten<br />
Softwareentwicklung birgt die Gefahr in sich, dass ein Softwaresystem<br />
entsteht, welches die agentenorientierten Konzepte<br />
nicht oder nur in unzureichender Weise widerspiegelt<br />
<strong>und</strong> somit nicht die gewünschten Eigenschaften aufweist. Im<br />
Folgenden wird daher zunächst die gr<strong>und</strong>sätzliche Architektur<br />
von Agentensystemen erläutert. Anschließend wird
23<br />
näher auf ihre Realisierung eingegangen, <strong>und</strong> es werden die<br />
verfügbaren Hilfsmittel <strong>und</strong> Technologien vorgestellt, die<br />
den Softwareingenieur bei seiner Arbeit unterstützen. Zum<br />
Abschluss des Beitrags wird anhand des Anwendungsbeispiels<br />
der Eisenbahnsteuerung die Implementierung des in<br />
[6] erstellten Modells erläutert.<br />
2. Aufbau von Agentensystemen<br />
Bei der Realisierung eines agentenorientierten Entwurfs entsteht<br />
ein Agentensystem, bestehend aus einzelnen Agenten,<br />
die miteinander flexibel interagieren, autonom <strong>und</strong> reaktiv<br />
handeln <strong>und</strong> gegebenenfalls dabei eigene Ziele proaktiv<br />
verfolgen sollen. Die gr<strong>und</strong>legenden Mechanismen <strong>und</strong><br />
Architekturprinzipien zur Abbildung der Gr<strong>und</strong>konzepte<br />
von Agenten in einem ausführbaren System sind Gegenstand<br />
des folgenden Abschnitts.<br />
2.1 Wie können agentenorientierte Konzepte in<br />
einem Softwaresystem abgebildet werden?<br />
Letztendlich sind Agenten <strong>und</strong> Agentensysteme Computerprogramme<br />
<strong>und</strong> folgen den gleichen Ausführungsprinzipien<br />
wie andere Programme. Die Erstellung eines Programms<br />
erfolgt meist mit Hilfe von Programmiersprachen, welche die<br />
Gr<strong>und</strong>operationen des Rechners durch mächtigere Sprachkonstrukte<br />
abstrahieren. Diese Sprachkonstrukte bilden die<br />
Basis für die Umsetzung der abstrakten agentenorientierten<br />
Gr<strong>und</strong>konzepte. Die Gr<strong>und</strong>konzepte <strong>und</strong> Mechanismen für<br />
ihre Umsetzung sind:<br />
Autonomie: Unter Autonomie versteht man den Tatbestand,<br />
dass das Verhalten eines Agenten im Wesentlichen<br />
durch den Agenten selbst festgelegt <strong>und</strong> nicht von<br />
„außen” festlegbar ist. Gr<strong>und</strong>lage für die Autonomie eines<br />
Agenten ist daher die Trennung des Nachrichtenaustausches<br />
zwischen Agenten <strong>und</strong> der Nachrichtenbearbeitung<br />
innerhalb eines Agenten. Dies bedeutet auch, dass der<br />
Nachrichtenaustausch zwischen Agenten asynchron stattfinden<br />
muss, damit ein Agent nicht durch Warten auf eine<br />
Antwort blockiert wird. Als möglicher Mechanismus können<br />
Nachrichtenaustausch <strong>und</strong> Nachrichtenbearbeitung<br />
eines Agenten in eigene, parallele Prozesse (Threads)<br />
gekapselt werden. Es wird deutlich, dass der dem Agenten<br />
zu Gr<strong>und</strong>e liegende Kommunikationsmechanismus nicht<br />
wie in der objektorientierten Welt darauf basieren kann,<br />
dass die Funktionalität eines Agenten durch öffentliche<br />
Methoden nach außen zur Verfügung gestellt wird [7]. Der<br />
Agent bietet statt dessen nur eine Schnittstelle für das<br />
Senden <strong>und</strong> Empfangen von Nachrichten an.<br />
Flexible Interaktionen: Agenten interagieren miteinander,<br />
um Informationen auszutauschen, Ressourcen <strong>und</strong> Aufgaben<br />
zu verteilen <strong>und</strong> um zu verhandeln. Hierfür sind<br />
eine Reihe von Gr<strong>und</strong>elementen der Kommunikation<br />
erforderlich. Mögliche Nachrichtenformen sind Informationsübertragung<br />
<strong>und</strong> Informationsabfrage (inform, query,<br />
subscribe, request), Verhandlung (call-for-proposal, propose),<br />
Zustimmung <strong>und</strong> Ablehnung (agree, refuse) [7]. Aus<br />
diesen Kommunikationsprimitiven können Protokolle<br />
aufgebaut werden, die den geregelten Ablauf von Interaktionen<br />
festlegen. Weiter ist ein gemeinsames Verständnis<br />
der Bedeutung der Nachrichten erforderlich. Die<br />
Beschreibung dieser Bedeutungsbasis wird als Ontologie<br />
bezeichnet [8]. Um flexible Beziehungen zwischen Agenten<br />
zu ermöglichen, kann den Agenten zusätzlich eine<br />
Infrastruktur zum Auffinden von Kooperationspartnern<br />
zur Verfügung gestellt werden. Eine mögliche Realisierung<br />
ist beispielsweise eine Art Schwarzes Brett, an dem<br />
Agenten ihre Dienste bekannt geben oder benötigte<br />
Dienste abfragen können.<br />
Reaktivität: Die Aktivität eines Agenten kann zum einen<br />
durch andere Agenten ausgelöst werden. Zum anderen<br />
muss ein Agent möglicherweise auch für ihn relevante<br />
Teile der Systemumgebung (Wahrnehmungsbereich)<br />
beobachten können. In technischen Systemen kann dies<br />
beispielsweise durch Abfrage von Sensoren erfolgen.<br />
Gegebenenfalls können diese Sensoren durch Interrupt-<br />
Handler gekapselt werden, bei denen sich Agenten<br />
anmelden, um im Fall von Zustandsänderungen informiert<br />
zu werden.<br />
Ziele <strong>und</strong> Proaktivität: Ziele sind die Voraussetzung für<br />
Handlungen, die ein Agent ohne externe Aktivierung ausführt.<br />
Die Umsetzung dieser Konzepte kann durchaus<br />
komplex werden, insbesondere wenn die Ziele sehr<br />
abstrakt sind. In technischen Systemen kann die Realisierung<br />
aber auch von ganz einfacher Art sein, beispielsweise<br />
durch Ereignisse, Bedingungen <strong>und</strong> Regeln, die eine<br />
Aktivität auslösen. Ereignisse können beobachtete<br />
Zustandsänderungen in der Systemumgebung sein, die<br />
dann mit gespeicherten Mustern verglichen oder auf die<br />
Regeln angewendet werden. Es kann aber auch ein ablaufendes<br />
Zeitintervall sein, das eine Aktion auslöst.<br />
Persistenz: Zur Sicherstellung eines fortlaufenden Kontrollflusses<br />
muss ein Agent seinen inneren Zustand speichern<br />
können. Die hierfür notwendigen Mechanismen<br />
müssen durch eine Infrastruktur zur Verfügung gestellt<br />
werden.<br />
Hier wird deutlich, dass zur Realisierung der abstrakten<br />
Agentenkonzepte in einem Softwaresystem zusätzlich eine<br />
von einzelnen Agenten unabhängige Infrastruktur benötigt<br />
wird, beispielsweise für den asynchronen Nachrichtenaustausch<br />
oder für das Auffinden von Diensten. Ein Agentensystem<br />
ist demnach häufig mehr als die bloße Ansammlung<br />
von Agenten: Es bildet auch die Basis für agenteninterne<br />
Abläufe <strong>und</strong> solche zwischen Agenten. Inwieweit diese<br />
zusätzlichen Mechanismen benötigt werden, hängt von der<br />
jeweiligen Problemstellung ab.<br />
2.2 Gr<strong>und</strong>legende Struktur eines Agenten<br />
Zur Realisierung eines agentenorientierten Systems ist eine<br />
gr<strong>und</strong>legende Struktur eines Agenten erforderlich, welche<br />
die genannten Mechanismen unterstützt. Ein Agent muss<br />
eine abgeschlossene Softwareeinheit darstellen, die kontinuierlich<br />
mit der Umgebung interagiert. Diese kann auch<br />
andere Agenten beinhalten. Die Interaktion besteht darin,<br />
die Umgebung wahrzunehmen <strong>und</strong> diese durch Handlun-
24<br />
Umgebungsmodell<br />
Ziele<br />
Ziel e Ziel e Fähigkeiten<br />
Agent<br />
Verhalten<br />
Wahrnehmung<br />
Beeinflussung<br />
U<br />
m<br />
g<br />
e<br />
b<br />
u<br />
n<br />
g<br />
Age nt<br />
Age nt Agent<br />
Agent<br />
Management<br />
System<br />
Directory<br />
Facilitator<br />
Message Transport System<br />
Weitere<br />
Agentensysteme<br />
Bild 1: Gr<strong>und</strong>legende Struktur eines einzelnen Agenten.<br />
gen auf Basis der eigenen Fähigkeiten zu beeinflussen. Auch<br />
die Interaktion zwischen Agenten kann als eine Art „Wahrnehmen“<br />
<strong>und</strong> „Handeln“ gesehen werden, da andere Agenten<br />
als Teil der Umgebung betrachtet werden [9].<br />
Die Fähigkeit, selbst zu entscheiden, was wann zu tun ist<br />
<strong>und</strong> auf welche Weise, bildet eine f<strong>und</strong>amentale Eigenschaft<br />
eines Agenten. Das Verhalten wird prinzipiell durch einen<br />
Satz von Zielen unterstützt, die der Agent erreichen soll. Sie<br />
kann auf eine sehr einfache Art <strong>und</strong> Weise durch eine Liste<br />
von Regeln umgesetzt werden, wonach ein Umgebungszustand<br />
eine Aktion auslöst. In flexibleren Ansätzen wird der<br />
Entscheidungsprozess von Interaktionen mit anderen Agenten<br />
abhängig gemacht. Dies erweitert den Entscheidungsprozess,<br />
da ein Überblick über das ganze Agentensystem<br />
einbezogen wird. Bild 1 zeigt die gr<strong>und</strong>legende Struktur<br />
eines Agenten.<br />
2.3 Architektur von Agentensystemen<br />
Die meisten agentenorientierten Systeme bestehen aus<br />
mehreren Agenten, die unterschiedliche Aufgaben übernehmen<br />
<strong>und</strong> kooperieren, um Aufgaben zu lösen. Die flexible<br />
Interaktion zwischen Agenten impliziert unter anderem folgende<br />
Voraussetzungen:<br />
Agenten sind in der Lage zu wissen, welche anderen<br />
Agenten in der Umgebung existieren.<br />
Die Fähigkeiten der Agenten (welchen Dienst oder welche<br />
Funktionalität sie anbieten) sind bekannt.<br />
Den Agenten steht ein Kommunikationsmedium zur Verfügung.<br />
Die Standardisierung dieser architektonischen Elemente<br />
hat den Vorteil, dass Agenten eines (Agenten-) Systems in<br />
der Lage sind, mit Agenten eines anderen Systems zu interagieren.<br />
Ein weithin anerkannter Standard für die Systemarchitektur<br />
von Agentensystemen wurde von der Organisation<br />
Fo<strong>und</strong>ation for Intelligent Physical Agents (FIPA) entwickelt<br />
[10]. Die FIPA Organisation wurde 1996 mit dem Ziel<br />
gegründet, Softwarestandards für heterogene, interagierende<br />
Agenten <strong>und</strong> Agentensysteme zu entwickeln. Einer<br />
der bereits entwickelten Standards ist die Agent Management<br />
Specification [11], in der das in Bild 2 gezeigte Referenzmodell<br />
definiert wird. Darin werden die erforderlichen<br />
Komponenten eines Agentensystems <strong>und</strong> ihr Aufbau festgelegt.<br />
Ein wesentlicher Bestandteil des FIPA Modells ist das<br />
Agent Management System (AMS). Jedes Agentensystem<br />
besitzt nur ein AMS. Das AMS führt ein Verzeichnis mit den<br />
Bild 2: FIPA Agent Management Referenzmodell [11].<br />
Bezeichnern <strong>und</strong> Kommunikationsadressen aller Agenten im<br />
System <strong>und</strong> bietet einen Auskunftsdienst („White Pages“) an.<br />
Wenn ein Agent eine Nachricht an einen anderen Agenten<br />
oder an eine Gruppe von Agenten schicken will, fragt er<br />
beim AMS an <strong>und</strong> erhält die Adressen, an welche die Nachricht<br />
geschickt werden kann. Befindet sich der gewünschte<br />
Agent in einem anderen System, so wird die Adressanfrage<br />
an das AMS dieses Systems weitergeleitet. Die Registrierung<br />
beim AMS ist für jeden Agenten eines Agentensystems zwingend<br />
erforderlich. Der Directory Facilitator (DF) bietet anderen<br />
Agenten einen “Gelbe Seiten”-Dienst („Yellow Pages“) an.<br />
Agenten können einerseits ihre Dienste beim DF anmelden<br />
<strong>und</strong> andererseits dort anfragen, welcher Agent welchen spezifischen<br />
Dienst anbietet oder welche Dienste überhaupt<br />
von anderen Agenten angeboten werden. Der Message<br />
Transport Service (MTS) ist die Standard-Kommunikationsinfrastruktur,<br />
die von Agenten zum Nachrichtenaustausch verwendet<br />
wird. Abgesehen von den Methoden zur Kommunikation<br />
werden hier auch Format <strong>und</strong> Länge der übermittelten<br />
Nachrichten, die Sprache, in der diese codiert sind, sowie<br />
die Semantik der Nachrichten (Ontologie) festgelegt. Eine<br />
Kommunikationssprache für Agenten ist die Agent Communication<br />
Language (ACL).<br />
Codebeispiel 1: Beispiel einer ACL Nachricht.<br />
(inform<br />
sender: agent1<br />
receiver: agent2<br />
content: ok(temperature_sensor_1)<br />
in-reply-to: query(temperature_sensor_1)<br />
reply-with: ok<br />
language: heating_l<br />
ontology: monitor_system<br />
)<br />
Codebeispiel 1 zeigt eine ACL Nachricht, mit der ein<br />
agent1 an agent2 den Status eines Temperatursensors<br />
übermittelt.<br />
3. Technologien zur Realisierung<br />
Zur Unterstützung des Softwareingenieurs bei der Implementierung<br />
von Agentensystemen stehen eine Reihe von<br />
Hilfsmitteln <strong>und</strong> Technologien zur Verfügung, welche die<br />
Realisierung agentenorientierter Software wesentlich
25<br />
Tabelle 1: Rollen <strong>und</strong> ihre Verantwortlichkeiten im Modell der Eisenbahnsteuerung.<br />
Rolle<br />
S1<br />
S2<br />
IDLE<br />
TSEG<br />
TOUT<br />
Verantwortlichkeiten <strong>und</strong> Protokolle<br />
Die Rolle S1 stellt die S-Bahnverbindung zwischen Landbahnhof <strong>und</strong> Stadbahnhof dar.<br />
• Stelle Transportkapazität von 360 Personen pro St<strong>und</strong>e zur Verfügung (180 Personen in jede Richtung)<br />
• Finde dynamisch die am besten geeignete Streckenverbindung, reserviere <strong>und</strong> befahre die Streckenabschnitte (Protokolle FindTrack,<br />
ReserveTrack, ReleaseTrack).<br />
• Informiere den Zielbahnhof bei Verspätung.<br />
• Stimme Aktionen mit anderen Zügen ab, die gleichzeitig die Rolle S1 wahrnehmen (Protokoll NegotiateGoals).<br />
Die Rolle S2 ist S1 sehr ähnlich <strong>und</strong> hat dieselben Aufgaben. Sie unterscheidet sich nur in den Zielbahnhöfen.<br />
IDLE stellt die Rolle eines Zuges dar, der keiner S-Bahnlinie zugeordnet ist.<br />
• Überprüfe proaktiv die Zuordnung von Zügen zu S-Bahnlinien, ob Transportkapazitäten erfüllt <strong>und</strong> Züge effizient eingesetzt werden.<br />
• Verhandle gegebenenfalls mit eingesetzten Zügen, um deren Rolle zu übernehmen (Protokoll NegotiateRole).<br />
Die Rolle TSEG eines Streckenabschnitts interagiert mit den Zügen, um die exklusive Belegung zu einem bestimmten Zeitpunkt zu<br />
gewährleisten.<br />
• Reagiere auf die Weganfrage eines Zuges <strong>und</strong> versuche, einen Weg von der gegenwärtigen Position zum gewünschten Zielbahnhof<br />
zu finden (Protokoll FindTrack).<br />
• Kontrolliere Reservierungsinformation <strong>und</strong> erteile die Durchfahrerlaubnis für eine bestimmte Zeitdauer<br />
(Protokolle ReserveTrack <strong>und</strong> ReleaseTrack).<br />
Die Rolle TOUT einer Weiche entspricht der eines Streckenabschnitts. Zusätzlich existiert die Funktionalität, um die Weichenstellung zu<br />
ändern.<br />
erleichtern. Sie lassen sich in zwei unterschiedliche Kategorien<br />
unterteilen:<br />
Unterstützung durch agentenorientierte Programmiersprachen<br />
<strong>und</strong><br />
Unterstützung in Form von APIs <strong>und</strong> Frameworks.<br />
3.1 Agentenorientierte Programmiersprachen<br />
Mit agentenorientierten Programmiersprachen werden die<br />
agentenorientierten Konzepte direkt durch Elemente einer<br />
Programmiersprache realisiert. Dadurch können Entwurfsstrukturen<br />
leicht auf den Quellcode abgebildet werden. Beispielsweise<br />
ist es auch bei der Objektorientierung einfacher,<br />
einen objektorientierten Entwurf in einer objektorientierten<br />
Programmiersprache wie C++ statt in der strukturierten Programmiersprache<br />
C zu implementieren, da durchgängig dieselben<br />
Gr<strong>und</strong>konzepte (z.B. Klassen) verwendet werden.<br />
Die bekanntesten agentenorientierten Programmiersprachen<br />
[12] sind: AGENT-0 [13], Concurrent METATEM [14] <strong>und</strong><br />
Agent Speak(L) [15]. Bei AGENT-0 wird ein Agent als Satz von<br />
initialen Zielen, Fähigkeiten <strong>und</strong> Ausführungsregeln definiert.<br />
Wenn eine bestimmte Ausführungsregel zutrifft, werden die<br />
entsprechenden Fähigkeiten des Agenten unter Berücksichtigung<br />
der festgelegten Ziele angewendet. Der Nachteil des<br />
Gebrauchs agentenorientierter Programmiersprachen ist ihre<br />
geringe Präsenz am Markt, die hohen Kosten für die Ausbildung<br />
des Entwicklungspersonals <strong>und</strong> die deutliche Unreife<br />
dieser Sprachen. Zurzeit ist kein Projekt bekannt, in dem agentenorientierte<br />
Programmiersprachen bei der Entwicklung von<br />
größeren realen Systemen zum Einsatz kommen.<br />
3.2 Agentenorientierte APIs <strong>und</strong> Frameworks<br />
Eine zweite Form der Entwicklerunterstützung sind umfangreiche<br />
agentenorientierte APIs (Application Programming<br />
Interfaces) <strong>und</strong> Frameworks.Sie ermöglichen die Implementierung<br />
des Agentensystems auf hoher Abstraktionsebene, da<br />
das Agentensystem auf Basis vorhandener Programmbibliotheken<br />
<strong>und</strong> Komponenten realisiert wird. APIs bieten hierfür<br />
eine Reihe agentenspezifischer Funktionalitäten, die dann bei<br />
der Implementierung verwendet werden können. Frameworks<br />
erlauben sowohl die Wiederverwendung von Quellcode als<br />
auch von Architektur. Sie bieten vollständige (teilweise auch<br />
standardisierte) Lösungen für wiederkehrende Aufgaben bei<br />
der Realisierung von Agentensystemen wie Kommunikation,<br />
Synchronisation, Verwaltung von Agenten usw. Die Aufgabe<br />
des Entwicklers beschränkt sich auf die Implementierung der<br />
anwendungsspezifischen Funktionalität.<br />
Solche APIs <strong>und</strong> Frameworks sind häufig in objektorientierten<br />
Programmiersprachen implementiert, was die Einarbeitung<br />
für den Ingenieur (im Gegensatz zur Verwendung<br />
agentenorientierter Programmiersprachen) wesentlich vereinfacht.<br />
Dabei stellt sich natürlich die Frage, wie bei Verwendung<br />
einer objektorientierten Programmiersprache ein<br />
agentenorientiertes System entstehen kann. Die wichtigste<br />
Voraussetzung bei der Entwicklung agentenorientierter<br />
Software ist die agentenorientierte Betrachtung <strong>und</strong> Modellierung<br />
der realen Problemstellung. Erst dadurch wird die<br />
Realisierung von Agentensystemen möglich <strong>und</strong> die Implementierung<br />
stellt dann lediglich die Abbildung der agentenorientierten<br />
Konzepte auf die verwendete Programmiertechnologie<br />
dar. Wie diese Abbildung geschehen kann, zeigt<br />
das Anwendungsbeispiel in Abschnitt 4.<br />
Auch hier kann die Parallele zur objektorientierten Softwareentwicklung<br />
gezogen werden. Ein System kann auf<br />
Basis der objektorientierten Konzepte entwickelt, aber mit<br />
einer nicht-objektorientierten Programmiersprache wie C<br />
implementiert werden. Zwar entsteht ein mehr oder weniger<br />
großer zusätzlichen Aufwand, um die objektorientierten<br />
Konzepte auf die Programmiersprache abzubilden,<br />
gr<strong>und</strong>sätzlich ist es aber möglich. Auf ähnliche Weise können<br />
Systeme auf Basis der agentenorientierten Konzepte analysiert<br />
<strong>und</strong> modelliert werden <strong>und</strong> mit Technologien implementiert<br />
werden, die den Agentenansatz nicht direkt widerspiegeln.<br />
Ein Beispiel für eine agentenorientierte API ist das Aglets<br />
Software Development Kit (als Open Source verfügbar) [16].<br />
Die Aglets API ist in Java implementiert <strong>und</strong> umfasst Basis-
26<br />
klassen für einzelne Agenten, Nachrichten <strong>und</strong> Kommunikationsmechanismen.<br />
Sie bietet eine Infrastruktur zur Implementierung<br />
mobiler Agenten, die zwischen verschiedenen<br />
Rechnern migrieren <strong>und</strong> lokal ausgeführt werden können.<br />
Ein Beispiel für ein Framework ist das Open Source Projekt<br />
JADE (Java Agent DEvelopment Framework) [17]. JADE<br />
unterstützt die Entwicklung von Agentensystemen mit einer<br />
FIPA-Standard konformen Kommunikationsschicht <strong>und</strong><br />
durch Werkzeuge für Konfiguration, Verwaltung <strong>und</strong> Debugging<br />
von Agentensystemen, die auch auf mehrere Rechner<br />
verteilt werden können. Die Lightweight Extensible Agent<br />
Platform (LEAP) [18] ist eine Erweiterung von JADE für den<br />
Einsatz in Systemen mit begrenzten Hardwareressourcen<br />
wie Mobiltelefonen, PDAs oder Pocket PCs. Weitere Beispiele<br />
für APIs <strong>und</strong> Frameworks sind ZEUS [19], JATLite [20], FIPA-OS<br />
[21], AGENTBUILDER [22], JACK [23] <strong>und</strong> Grasshopper [24].<br />
4. Implementierung eines<br />
Anwendungsbeispiels<br />
Nach der allgemeinen Einführung in den Aufbau von Agentensystemen<br />
<strong>und</strong> die Technologien zur Implementierung soll<br />
nun die Realisierung eines Agentensystems an einem einfachen<br />
Anwendungsbeispiel veranschaulicht werden. Als Beispielanwendung<br />
dient die Steuerung einer Eisenbahn. Im Folgenden<br />
werden die wesentlichen Aspekte der Realisierung,<br />
die konkrete Festlegung der Architektur des Agentensystems<br />
<strong>und</strong> die Implementierung der einzelnen Agenten sowie ihrer<br />
Rollen vorgestellt. Das Beispiel zeigt, wie die agentenorientierte<br />
Eisenbahnsteuerung als funktionsfähiges Softwaresystem<br />
implementiert werden kann. Abschließend werden Funktionsweise<br />
<strong>und</strong> Vorteile der agentenorientierten Lösung<br />
anhand einiger Einsatzszenarien demonstriert.<br />
4.1 Anwendungsbeispiel Eisenbahnsteuerung<br />
Im zweiten Teil dieses Beitrags wurden eine agentenorientierte<br />
Analyse <strong>und</strong> ein Entwurf für die Eisenbahnsteuerung<br />
durchgeführt <strong>und</strong> ein agentenorientiertes Modell für die<br />
Steuerung entwickelt [6]. Die Anforderungen der Steuerung<br />
sind im Folgenden noch einmal kurz zusammengefasst:<br />
Die Eisenbahnanlage besteht aus<br />
den drei Bahnhöfen Stadtbahnhof,<br />
Landbahnhof <strong>und</strong> Hafenbahnhof. Zwischen<br />
Stadtbahnhof <strong>und</strong> Landbahnhof<br />
L<br />
bestehen drei Gleisverbindungen, zwischen<br />
Hafenbahnhof <strong>und</strong> Stadtbahn-<br />
K<br />
hof eine (Bild 3). In einem Betriebswerk<br />
können nicht benötigte oder defekte<br />
Züge abgestellt werden (Bild 3 rechts<br />
unten). Zwischen Stadt- <strong>und</strong> Landbahnhof<br />
verkehrt die S-Bahnlinie S1<br />
Landbahnhof<br />
mit 360 Fahrplätzen je St<strong>und</strong>e (180 in<br />
jede Richtung). Eine zweite S-Bahnlinie<br />
S2 verbindet den Stadtbahnhof mit<br />
dem Hafenbahnhof mit 180 Fahrplätzen<br />
je St<strong>und</strong>e (90 in jede Richtung). Ein<br />
Zug benötigt unabhängig von seiner<br />
Länge 18 Minuten, um die Strecke zwischen Land <strong>und</strong> Stadt<br />
zurückzulegen <strong>und</strong> 8 Minuten für die Strecke zwischen Stadt<br />
<strong>und</strong> Hafen. Für den Fahrbetrieb stehen folgende Züge zur<br />
Verfügung: Drei kurze Züge K1, K2 <strong>und</strong> K3, mit einer Kapazität<br />
von jeweils 30 Personen <strong>und</strong> zwei lange Züge, L1 <strong>und</strong><br />
L2, mit einer Kapazität von je 60 Personen.<br />
Während des Betriebes können im Wesentlichen die drei<br />
unerwarteten Fehlersituationen Zugverspätung, Zugausfall<br />
<strong>und</strong> Streckenausfall auftreten, auf welche die Steuerung<br />
dynamisch reagieren muss. Die Steuerung muss in der Lage<br />
sein, diese Fehlersituationen so zu handhaben, dass zum<br />
einen die Transportkapazität jeder Verbindung möglichst<br />
optimal erfüllt wird <strong>und</strong> zum anderen die verfügbaren Ressourcen<br />
des Systems (Züge <strong>und</strong> Streckenelemente) bestmöglich<br />
verteilt werden.<br />
Basierend auf diesen Anforderungen wurde in [6] eine<br />
automatisierte Steuerung des Fahrbetriebs der Eisenbahn<br />
entworfen. Die Komplexität der Steuerung entsteht durch<br />
die Tatsache, dass die Gesamtheit der Situationen im<br />
Betrieb <strong>und</strong> somit die optimale Auflösung einer bestimmten<br />
Fehlersituation zur Entwurfszeit nicht vollständig<br />
bestimmt werden kann. Das im zweiten Teil dieses Beitrags<br />
[6] mit der agentenorientierten Methode Gaia [25]<br />
entwickelte agentenorientierte Modell gibt deshalb lediglich<br />
die elementaren Strukturen, Mechanismen <strong>und</strong><br />
Regeln der Eisenbahnsteuerung vor, auf deren Basis die<br />
Agenten der Steuerung zur Laufzeit dynamisch <strong>und</strong> flexibel<br />
das der jeweiligen Situation angemessene Verhalten<br />
ermitteln.<br />
Der Schwerpunkt bei der agentenorientierten Modellierung<br />
lag auf der Betrachtung der Aufgaben, die durch die<br />
Eisenbahnsteuerung bewältigt werden müssen, ihrer Aufteilung<br />
in so genannten Rollen <strong>und</strong> der Interaktionen zwischen<br />
den verschiedenen Rollen zur Bewältigung ihrer Aufgaben.<br />
Tabelle 1 gibt eine Übersicht über die identifizierten Rollen<br />
im agentenorientierten Modell der Steuerung, ihre Verantwortlichkeiten<br />
<strong>und</strong> die Protokolle, mit denen sie zur Erfüllung<br />
ihrer Aufgaben interagieren.<br />
Bild 4 gibt einen Überblick über die Zusammenhänge der<br />
identifizierten fünf Rollen <strong>und</strong> fünf Protokolle. Die einzelnen<br />
Rollen sind durch Rechtecke dargestellt, die Protokolle durch<br />
Verbindungen zwischen den Rollen. Rollen, welche die glei-<br />
= 60 Plätze (2x)<br />
= 30 Plätze (3x)<br />
S1<br />
Hafenbahnhof<br />
S2<br />
Stadtbahnhof<br />
18 min.<br />
360 Personen/St<strong>und</strong>e<br />
Bild 3: Schematische Darstellung der Eisenbahn.<br />
8 min.<br />
180 P./Std.
27<br />
Negotiate Goals<br />
S1<br />
S2<br />
TSEG<br />
TOUT<br />
Negotiate Role<br />
Find Track, Reserve Track, Release Track<br />
Find Track<br />
IDLE<br />
Bild 4 Übersicht über die Rollen <strong>und</strong> Protokolle der Eisenbahnsteuerung.<br />
Train<br />
+<br />
Track<br />
+<br />
Turnout<br />
+<br />
S1 S2 IDLE TSEG TOUT<br />
Bild 5: Agentenmodell mit der Zuordnung von Rollen zu Agententypen.<br />
chen Protokolle verwenden, sind zur Vereinfachung zusammengefasst.<br />
Die Rollen werden von den aktiven Elementen des<br />
Systems, den Agenten, wahrgenommen. Aktive Elemente im<br />
Modell der Eisenbahnsteuerung sind Züge, Streckenabschnitte<br />
<strong>und</strong> Weichen. Sie werden als Agententypen modelliert.<br />
Bild 5 zeigt das Agentenmodell der Eisenbahnsteuerung,<br />
in dem die drei Agententypen dargestellt sind: der<br />
Agententyp Train für Züge, der Agententyp Track für<br />
Streckenabschnitte <strong>und</strong> der Agententyp Turnout für Weichen.<br />
Agenten vom Typ Train können die Rollen S1, S2 oder<br />
IDLE wahrnehmen. Agenten vom Typ Track übernehmen die<br />
Rolle TSEG <strong>und</strong> Agenten vom Typ Turnout die Rolle TOUT.<br />
Das ‘+‘ zeigt an, dass im System von jedem Typ mindestens<br />
ein Agent existiert.<br />
Das vorgestellte agentenorientierte Modell beschreibt<br />
alle wesentlichen Elemente der Eisenbahnsteuerung <strong>und</strong> ist<br />
die Basis für die Realisierung der Steuerung als Agentensystem.<br />
struktur eine kleine API in Form einiger Hilfsklassen selbst<br />
realisiert <strong>und</strong> diese direkt in das System integriert. Damit<br />
kann die Umsetzung der agentenorientierten Konzepte gut<br />
veranschaulicht werden. Für ein umfangreicheres System ist<br />
allerdings die Verwendung einer bestehenden API oder<br />
eines Frameworks mit entsprechender Unterstützung des<br />
Entwicklers sinnvoll.<br />
Das aus Gaia resultierende agentenorientierte Modell<br />
beschreibt zwar alle gewünschten Eigenschaften des agentenorientierten<br />
Systems, allerdings auf einer hohen Abstraktionsebene.<br />
Für die konkrete Implementierung muss dieser<br />
Entwurf noch weiter verfeinert werden. Da die objektorientierte<br />
Programmiersprache Java für die Implementierung<br />
verwendet wird, beschreiben wir den Feinentwurf mit einem<br />
Klassendiagramm. Bild 6 zeigt den relevanten Ausschnitt aus<br />
diesem Diagramm, das aus dem Gaia-Modell abgeleitet<br />
wurde. Die Agententypen <strong>und</strong> Rollen werden hier durch einzelne<br />
Klassen repräsentiert. Daneben gibt es die Hilfsklassen<br />
Mqueue <strong>und</strong> Clock,welche die Infrastruktur für die Agenten<br />
bereitstellen.<br />
Die Klasse Agent enthält allgemeine Eigenschaften <strong>und</strong><br />
Dienste, die ein Agent für das System bereitstellen muss, z.B.<br />
Kommunikationsmechanismen (durch Austausch von Nachrichten),<br />
mit deren Hilfe die im Modell definierten Protokolle<br />
implementiert werden. Die drei Arten von Agenten, die im<br />
Gaia-Modell identifiziert wurden (siehe Abschnitt 4.1), werden<br />
als Unterklassen Train, Track <strong>und</strong> Turnout der<br />
Klasse Agent realisiert.<br />
Die Klasse Agent hat Assoziationen zu den Hilfsklassen<br />
Clock <strong>und</strong> MQueue. Clock ist ein einfacher Zeitgeber, der<br />
in regelmäßigen Abständen Nachrichten an den Agenten<br />
schickt. Durch diesen Mechanismus wird auf einfache Weise<br />
die dauerhafte Aktivität des Agenten erreicht. Der Agent<br />
kann damit unabhängig von externer Aktivierung (durch<br />
einen Benutzer oder andere Agenten) selbstständig agieren<br />
<strong>und</strong> seine Ziele verfolgen (Proaktivität).<br />
Die Hilfsklasse MQueue bietet dem Agenten einen asynchronen<br />
Kommunikationskanal. Nachrichten, die ein Agent<br />
empfängt, werden von ihm in MQueue in einer Warteschlange<br />
gespeichert <strong>und</strong> können dann vom Agenten<br />
sequentiell abgearbeitet werden. Der Sender muss nicht<br />
warten, bis die Verarbeitung beendet ist, <strong>und</strong> dem Empfänger<br />
wird automatisch signalisiert, wenn eine Nachricht<br />
ankommt.<br />
Die Klasse Role repräsentiert die verschiedenen Rollen,<br />
die ein Agent während des Betriebs annehmen kann. In<br />
4.2 Implementierung<br />
Im letzten Entwicklungsschritt muss<br />
das erstellte Modell als Agentensystem<br />
implementiert werden. Für die Implementierung<br />
wird die Programmiersprache<br />
Java verwendet. In diesem kleinen<br />
Beispiel kommt keines der in Abschnitt<br />
3 genannten umfangreichen agentenorientierten<br />
Frameworks oder APIs<br />
zum Einsatz. Statt dessen haben wir für<br />
die benötigte einfache Agenteninfra-<br />
Clock<br />
Agent<br />
MQueue<br />
Track<br />
Train<br />
Turnout<br />
TSEG<br />
TOUT<br />
S1<br />
Bild 6: Klassendiagramm der Implementierung.<br />
Role<br />
S2<br />
IDLE
28<br />
Codebeispiel 2: Implementierung der Klassen Agent <strong>und</strong> Train.<br />
abstract class Agent {<br />
Role currentRole;<br />
Directory roleDB;<br />
String ID;<br />
Clock timer;<br />
MQueue messageQueue;<br />
synchronized void receive (Message m) {<br />
messageQueue.enqueue(m);<br />
}<br />
void send (Message m, Agent receiver) {<br />
receiver.receive(m);<br />
}<br />
void setRole (Role newRole) {<br />
roleDB.changeEntry(this, newRole);<br />
currentRole = newRole;<br />
}<br />
String getID() {<br />
return ID;<br />
}<br />
}<br />
public class Train extends Agent {<br />
Train(){<br />
currentRole = new IDLE();<br />
// Constructor. Initial role of a<br />
train is IDLE.<br />
}<br />
void driveTrack() {<br />
// Controls the train on the railway.<br />
}<br />
void informDelay(Station destination){<br />
// Informs destination station of a<br />
delay<br />
}<br />
}<br />
unserem Beispiel kann ein Agent zu einem bestimmten Zeitpunkt<br />
nur einer einzigen Rolle zugeordnet sein. Die konkreten<br />
Rollen TSEG, TOUT S1, S2 <strong>und</strong> IDLE sind von dieser<br />
Klasse abgeleitet. Codebeispiel 2 zeigt das Codegerüst der<br />
Klassen Agent <strong>und</strong> Train.<br />
Die aktuelle Rolle eines Agenten ist im Attribut currentRole<br />
vom Typ Role der Klasse Agent abgelegt.Wenn der<br />
Agent eine Nachricht erhält, stellt er sie mit der Methode<br />
enqueue() in MQueue. MQueue leitet die Nachricht an<br />
die Methode processMessage() der aktuellen Rolle des<br />
Agenten weiter. Je nach momentaner Rolle des Agenten<br />
wird die Nachricht unterschiedlich verarbeitet. Hier wird also<br />
Polymorphie verwendet, um das dynamische, flexible Verhalten<br />
der Agenten zu realisieren. In der Klasse Train wird die<br />
Klasse Agent um die spezifische Funktionalität erweitert,<br />
die zur Kontrolle der Züge (driveTrack) notwendig ist.<br />
Die Änderung der Rolle des Agenten zur Laufzeit wird in der<br />
Methode setRole implementiert. Diese ändert die Information<br />
in der Variablen roleDB,erzeugt eine neue Instanz<br />
Codebeispiel 3: Implementierung der Klassen Role <strong>und</strong> IDLE.<br />
public abstract class Role {<br />
Agent currentAgent;<br />
abstract void processMessage(Message m);<br />
}<br />
public class IDLE extends Role {<br />
RoleInfo CheckRoles() {<br />
// Retrieves information from the roleDB<br />
}<br />
synchronized void processMessage(<br />
Message m){<br />
// Process message according to IDLE<br />
requirements.<br />
// The assignment information can be<br />
retrieved,...<br />
RoleInfo result = CheckRoles();<br />
// ...a message can be sent...<br />
currentAgent.send(m, agent_A);<br />
// ... a role change can be performed<br />
(e.g. IDLEàS1)<br />
Role newRole = new S1();<br />
currentAgent.setRole(newRole);<br />
// (...)<br />
}<br />
}<br />
der entsprechenden Rollenklasse <strong>und</strong> ändert die Referenz in<br />
currentRole.<br />
Codebeispiel 3 zeigt das Codegerüst der Klassen Role<br />
<strong>und</strong> IDLE. Die Klasse Role hat eine Methode Process-<br />
Message(), die von jeder ihrer Unterklassen S1, S2 <strong>und</strong><br />
IDLE implementiert werden muss. Die Methode enthält<br />
das Verhalten der Rolle <strong>und</strong> wird vom Agenten aufgerufen,<br />
wenn er eine Nachricht aus der Nachrichtenwarteschlange<br />
abarbeitet. Eine Nachricht kann entweder von einem anderen<br />
Agenten als Teil einer Interaktion oder von Clock (in<br />
regelmäßigen Zeitabständen) stammen.<br />
Als Beispiel für die Implementierung einer Rolle wird in<br />
Codebeispiel 3 die Klasse IDLE gezeigt. Die Hauptverantwortlichkeit<br />
von IDLE, wie sie in Abschnitt 4.1 spezifiziert<br />
wurde, drückt sich in der Codesequenz von ProcessMessage()<br />
aus: Die Abfolge besteht aus:<br />
1. Überprüfung der Zuordnung von Agenten zu Rollen,<br />
2. Nachrichtenaustausch während der Verhandlungen über<br />
die Rolle,<br />
3. möglicher Tausch der Rolle am Ende der Verhandlungen.<br />
Details der Implementierung wurden hier weggelassen.<br />
Die vorgestellte Realisierung der agentenorientierten<br />
Eisenbahnsteuerung hat prototypischen Charakter. Sie ist<br />
keineswegs auf Geschwindigkeit oder minimalen Speicherbedarf<br />
optimiert. Die implementierten Algorithmen sind<br />
stark vereinfacht <strong>und</strong> sehen in der realen Eisenbahnsteuerung<br />
komplexer aus [26]. Das Implementierungsbeispiel orientiert<br />
sich nicht an existierenden Standards für Agentensysteme<br />
(z.B. FIPA), da die Realisierung der dafür notwendi-
29<br />
gen Infrastruktur den Rahmen gesprengt hätte. In diesem<br />
Beispiel ging es uns vielmehr darum, die gr<strong>und</strong>sätzlichen<br />
Schritte <strong>und</strong> Mechanismen zu verdeutlichen, die zur „Übersetzung“<br />
eines agentenorientierten Modells in ein agentenorientiertes<br />
System notwendig sind.<br />
4.3 Szenarien beim Einsatz des Systems<br />
Im Folgenden sollen die Merkmale der entwickelten agentenorientierten<br />
Steuerung anhand einiger Szenarien verdeutlicht<br />
werden. In jedem Szenario wird gezeigt, wie sich<br />
die gr<strong>und</strong>legenden Agentenkonzepte aus Analyse <strong>und</strong> Entwurf<br />
im Verhalten des Systems widerspiegeln.<br />
Zu Beginn der Ausführung wird das Element roleDB<br />
erzeugt, in dem die Rollen der Agenten abgelegt sind. Im Fall<br />
der Züge wertet jeder Agent seine eigene Transportkapazität<br />
aus <strong>und</strong> ermittelt die passende Rolle (siehe Abschnitt<br />
4.1, IDLE Rolle). Nach einer anfänglichen Phase von Interaktionen<br />
zwischen den Agenten zur Festlegung der Rollen<br />
wird die effizienteste Konfiguration erreicht: Die beiden langen<br />
Züge sind der Rolle S1 zugeordnet <strong>und</strong> einer der kurzen<br />
Züge, z.B. K1 ist S2 zugeordnet. Die restlichen Züge K2 <strong>und</strong> K3<br />
warten im Betriebswerk (Bild 7).<br />
Szenario 1: Erreichen gemeinsamer Ziele<br />
Erreicht der Zug K1 auf der Linie S2 aus irgendeinem Gr<strong>und</strong><br />
verspätet den Stadtbahnhof, so ist sein Fahrplan nicht mehr<br />
synchron zu S1. Dies würde für Fahrgäste, die vom Landbahnhof<br />
zum Hafenbahnhof fahren wollen, eine längere<br />
Wartezeit bedeuten. In diesem Fall informiert der Zug von<br />
S2 den Stadtbahnhof über die Verzögerung, der diese Information<br />
wiederum an alle Züge weiterleitet, die im Stadtbahnhof<br />
halten oder in naher Zukunft ankommen werden.<br />
Diese Züge können dann bestimmen, ob sie ihre Fahrpläne<br />
ändern, um auf den verspäteten Zug zu warten. Wird beispielsweise<br />
der Zug K1 in der Rolle S2 zwei Minuten später<br />
als geplant am Stadtbahnhof ankommen, leitet dieser die<br />
Information an L1 weiter, der gerade dort ankommt. Jede<br />
St<strong>und</strong>e muss L1 drei Mal zwischen Land <strong>und</strong> Stadt verkehren,<br />
braucht jedoch nur 54 Minuten (jede 18 Minuten). L1<br />
L<br />
K<br />
= 60 Plätze<br />
= 30 Plätze<br />
Hafenbahnhof<br />
S2<br />
8 min.<br />
180 P./Std.<br />
analysiert seine Ziele <strong>und</strong> entscheidet, dass eine Verspätung<br />
von zwei Minuten wegen des Zeitpuffers im Fahrplan<br />
annehmbar ist. Die Änderung seines Fahrplans wird vorgenommen<br />
<strong>und</strong> das gemeinsame Ziel, die Wartezeit für die<br />
Fahrgäste zu reduzieren, wird erreicht.<br />
Szenario 2: Reaktionsfähigkeit auf Fehler im System<br />
Nehmen wir an, dass L2, der in der Rolle S1 eingesetzt ist<br />
(siehe Bild 7), defekt ist <strong>und</strong> zur Reparatur ins Betriebswerk<br />
gefahren werden muss. Die Anforderungen an die Transportkapazität<br />
von S1 sind nicht mehr erfüllt, da L1, der zweite<br />
lange Zug mit der Rolle S1, maximal 180 Personen pro<br />
St<strong>und</strong>e befördern kann.<br />
Auf seinem Weg ins Betriebswerk gibt L2 die Rolle S1 auf<br />
<strong>und</strong> ändert die Information in roleDB.Die freien Züge K2 <strong>und</strong><br />
K3 (in der Rolle IDLE) erkennen den Wechsel der Zuordnungen<br />
<strong>und</strong> übernehmen gemeinsam mit L1 die Rolle S1. Die<br />
drei Züge müssen nun ihre Aktionen koordinieren, um die<br />
Anforderungen von S1 so gut wie möglich zu erfüllen. Die<br />
Agenten interagieren über das negotiateGoals Protokoll, bis<br />
sie die geeignete Anordnung gef<strong>und</strong>en haben: Die beiden<br />
kurzen Züge fahren im Gegentakt auf den unteren parallelen<br />
Strecken zwischen Land, Stadt <strong>und</strong> zurück. Das heißt ein Zug<br />
startet im Landbahnhof <strong>und</strong> der andere gleichzeitig im<br />
Stadtbahnhof (da in den Bahnhöfen für beide nur ein Gleis<br />
zur Verfügung steht). Mit diesem Fahrplan werden insgesamt<br />
360 Personen befördert, allerdings nicht gleichmäßig<br />
auf beide Richtungen verteilt (150 zu 210). Im Mittel von<br />
zwei St<strong>und</strong>en wird das Ziel erreicht <strong>und</strong> damit die Anforderung<br />
fast erfüllt.<br />
Szenario 3: Optimierung der Ressourcennutzung<br />
Nach einer gewissen Zeit für die Wartung ist L2 wieder fahrbereit.<br />
Er nimmt die Rolle IDLE an <strong>und</strong> prüft die Zuordnungen<br />
von Agenten zu Rollen. Dabei stellt L2 fest, dass K2 <strong>und</strong><br />
K3 für S1 eingesetzt werden <strong>und</strong> beginnt mit beiden das<br />
negotiateRole Protokoll, um die Rolle S1 wieder anzunehmen.<br />
Nachdem die Transportkapazitäten verglichen wurden,<br />
entscheiden K1 <strong>und</strong> K2, ihre Rollen aufzugeben, da sie die<br />
Anforderung der Transportkapazität<br />
nicht vollständig erfüllen <strong>und</strong> zusätzlich<br />
mehr Ressourcen – zwei Strecken<br />
gleichzeitig – als L2 für dieselbe Aufgabe<br />
benötigen. Nachdem sie die Rolle<br />
S1 aufgegeben haben, nehmen K1 <strong>und</strong><br />
K2 wieder die Rolle IDLE an.<br />
K1<br />
L1<br />
Landbahnhof<br />
L2<br />
S1<br />
Bild 7: Ausgangssituation des Eisenbahnbetriebs<br />
Stadtbahnhof<br />
18 min.<br />
360 Personen/St<strong>und</strong>e<br />
K2<br />
K3<br />
Szenario 4: Anpassung an eine sich<br />
ändernde Umgebung<br />
Nachdem die Linie S1 jetzt wieder<br />
durch die beiden langen Zügen L1 <strong>und</strong><br />
L2 bedient wird, tritt eine weitere Fehlersituation<br />
auf: Die obere Strecke zwischen<br />
Landbahnhof <strong>und</strong> Stadtbahnhof<br />
ist nicht mehr verfügbar. Zuvor hatte L1<br />
die obere Strecke für die Verbindung
30<br />
zwischen Land <strong>und</strong> Stadt benutzt <strong>und</strong> befindet sich gerade<br />
im Landbahnhof. Nachdem L1 <strong>und</strong> L2 das Problem erkannt<br />
haben, initiieren sie das negotiateGoals Protokoll, um die<br />
Benutzung der noch verfügbaren Ressourcen abzustimmen<br />
(hier die unteren Strecken). Die Lösung ist die Benutzung der<br />
zweiten unteren Strecke durch L1 im Gegentakt zu L2. Ab<br />
hier sind die Anforderungen der Rolle S1 wieder erfüllt, da<br />
drei Fahrten in jeder Richtung jede St<strong>und</strong>e stattfinden.<br />
Die vorgestellten Szenarien zeigen einen Ausschnitt, aber<br />
keine umfassende Demonstration der Möglichkeiten des<br />
agentenorientierten Transportsystems. Weitere Fehlerszenarien,<br />
gegebenenfalls auch bisher unbekannte, können flexibel<br />
gehandhabt werden. Gerade die Anpassungsfähigkeit<br />
des Systems an unerwartete Situationen ist ein Vorteil des<br />
agentenorientierten Ansatzes. Sicherlich können in diesem<br />
Beitrag nicht alle Aspekte des Systems detailliert dargestellt<br />
werden. Dies betrifft insbesondere die genaue Beschreibung<br />
der Entscheidungsprozesse innerhalb eines Agenten, die<br />
den Rahmen dieses Beitrags sprengen würde. Vielmehr soll<br />
das Beispiel einen Eindruck über den gesamten Entwicklungsprozess<br />
eines agentenorientierten Systems geben, die<br />
Denkweise bei der agentenorientierten Softwareentwicklung<br />
veranschaulichen <strong>und</strong> die spezifischen Merkmale hervorheben.<br />
4.4 Agentenspezifische Merkmale des Systems<br />
Die gezeigten Szenarien veranschaulichen die Umsetzung<br />
der agentenorientierten Gr<strong>und</strong>konzepte Autonomie, Interaktion,<br />
Reaktivität, Zielorientierung <strong>und</strong> Proaktivität in unserem<br />
Beispiel. Sie zeigen, wie die in den Protokollen spezifizierten<br />
Interaktionen zwischen den Agenten ablaufen, um<br />
Verhandlungen über Ressourcen oder gemeinsame Aktivitäten<br />
zu führen. Diese Kooperation ist ein zentrales Merkmal<br />
des agentenorientierten Systems. Der asynchrone Nachrichtenkanal<br />
Mqueue ermöglicht die Trennung zwischen Nachrichtenaustausch<br />
der Agenten <strong>und</strong> der Nachrichtenbearbeitung<br />
innerhalb eines Agenten <strong>und</strong> ist somit die Basis für das<br />
autonome Verhalten der Agenten. Flexibles, dynamisches<br />
Verhalten wird erreicht durch die getrennte Implementierung<br />
der Agenten <strong>und</strong> ihrer möglichen Rollen. Die regelmäßigen<br />
internen Nachrichten des Zeitgebers Clock an die<br />
Agenten ermöglichen eine kontinuierliche Erfassung der<br />
Umgebung <strong>und</strong> Verfolgung der Ziele ohne externe Aktivierung.<br />
Dies ist der Basismechanismus zur Implementierung<br />
von Proaktivität. In den Szenarien ist dieser Mechanismus für<br />
die Agenten notwendig, um Fehler selbstständig zu erkennen<br />
<strong>und</strong> das System anzupassen. Weiter steht in den Szenarien<br />
das Konzept der Zielorientierung im Vordergr<strong>und</strong>. Das in<br />
den verschiedenen Rollen eines Agenten spezifizierte Verhalten<br />
beeinflusst seine Aktionen so, dass die Ziele des<br />
Systems in der bestmöglichen Weise erfüllt werden können.<br />
5. Zusammenfassung <strong>und</strong> Ausblick<br />
Der letzte Schritt einer agentenorientierten Softwareentwicklung<br />
ist die Implementierung des entwickelten Agentensystems.<br />
Die Umsetzung der agentenorientierten Gr<strong>und</strong>konzepte<br />
Autonomie, Interaktion, Reaktivität, Zielorientierung<br />
<strong>und</strong> Proaktivität in ausführbare Programmstrukturen<br />
kann auf Basis der existierenden Mechanismen <strong>und</strong> Technologien<br />
der Softwaretechnik erfolgen. Hierfür ist ein gr<strong>und</strong>legender<br />
Aufbau von Agentensystemen mit Elementen für die<br />
Kommunikation <strong>und</strong> Verwaltung der Agenten erforderlich.<br />
Existierende Standards für Agentensysteme wie der FIPA-<br />
Standard vereinfachen ihren industriellen Einsatz.<br />
Zur Unterstützung des Entwicklers bei der Implementierung<br />
selbst existieren verschiedene agentenorientierte Programmiersprachen,<br />
APIs <strong>und</strong> Frameworks, wobei APIs <strong>und</strong><br />
Frameworks die weitaus größere Praxistauglichkeit aufweisen.<br />
Sie sind häufig in objektorientierten Programmiersprachen<br />
realisiert. Dies ist jedoch kein Nachteil oder Widerspruch<br />
in der agentenorientierten Softwareentwicklung,<br />
weil die agentenspezifischen Konzepte durchaus auf Basis<br />
von objektorientierten Sprachen <strong>und</strong> Technologien realisiert<br />
werden können. Aufgr<strong>und</strong> der Verbreitung objektorientierter<br />
Technologien ist dies sogar ein sinnvoller Weg für die<br />
breite Einsetzbarkeit von Agentensystemen.<br />
Nick Jennings, einer der Pioniere der Agentenorientierung,<br />
hat diesen Zusammenhang folgendermaßen ausgedrückt<br />
[27]: „... it is possible for proponents of other software<br />
engineering paradigms to claim that the key concepts of agentoriented<br />
computing can be reproduced using their technique –<br />
this is <strong>und</strong>oubtedly true. Agent-oriented systems are, after all,<br />
computer programs and all programs have the same set of<br />
computable functions. However, this misses the point.The value<br />
of a paradigm is the mindset and the techniques it provides to<br />
software engineers.“ Entscheidend für die erfolgreiche Entwicklung<br />
von Agentensystemen ist also die konsequente<br />
Umsetzung der agentenorientierten Denkweise während<br />
des gesamten Entwicklungsprozesses. Diese Denkweise<br />
wurde anhand der agentenorientierten Modellierung <strong>und</strong><br />
Implementierung einer Eisenbahnsteuerung veranschaulicht.<br />
Dabei wurden die einzelnen Schritte verdeutlicht, die<br />
bei der agentenorientierten Softwareentwicklung wichtig<br />
sind <strong>und</strong> es wurde gezeigt, wie sich die Agentenkonzepte im<br />
Verhalten des Systems zur Laufzeit ausdrücken.<br />
In dem Anwendungsbeispiel wurde auch deutlich, dass<br />
die Methode Gaia bei der Entwicklung agentenorientierter<br />
Systeme einige Schwächen aufweist. Es ist erkennbar, dass<br />
die Ergebnisse der agentenorientierten Analyse <strong>und</strong> des<br />
agentenorientierten Entwurfs mit Gaia auf einer zu hohen<br />
Abstraktionsebene vorliegen. Sie können nicht direkt für die<br />
Implementierung verwendet werden. Daneben können<br />
einige wichtige Aspekte bei der Softwareentwicklung nicht<br />
explizit im Modell ausgedrückt werden. Dazu gehören die<br />
aus den Anforderungen abgeleiteten Ziele des Systems, die<br />
Entscheidungsprozesse innerhalb der Agenten <strong>und</strong> Elemente<br />
des Systems, die keine Agenten sind (wie z.B. der<br />
Bahnhof im Anwendungsbeispiel). Für einen breiten industriellen<br />
Einsatz der agentenorientierten Softwareentwicklung<br />
müssen Methoden zur Verfügung stehen, die alle relevanten<br />
Aspekte der Aufgabenstellung <strong>und</strong> des Entwicklungsprozesses<br />
berücksichtigen. Dazu gehören auch die<br />
besonderen Anforderungen bei der Entwicklung von Software<br />
für technische Systeme, wie beispielsweise zeitliche<br />
Anforderungen. Deshalb werden am <strong>Institut</strong> für Automati-
31<br />
sierungs- <strong>und</strong> Softwaretechnik (IAS) der Universität Stuttgart<br />
im Forschungsgebiet Agentenorientierte Echtzeitsystem Konzepte,<br />
Methoden <strong>und</strong> Werkzeuge entwickelt, welche die Entwicklung<br />
von agentenorientierten <strong>Automatisierungs</strong>systemen<br />
unterstützen. Dazu gehört insbesondere die Berücksichtigung<br />
von Echtzeiteigenschaften. Hierzu wird die<br />
Erweiterung agentenorientierter Methoden untersucht. Dies<br />
geschieht zum einen auf konzeptioneller Ebene unter<br />
Berücksichtigung der spezifischen Konzepte der <strong>Automatisierungs</strong>technik,<br />
zum anderen auf der Ebene der konkreten<br />
Realisierung von Systemen mit beschränkten Ressourcen<br />
[28].<br />
Ein weiteres Forschungsthema am IAS ist das agentenbasierte<br />
Engineering von <strong>Automatisierungs</strong>systemen. Das<br />
Engineering von <strong>Automatisierungs</strong>systemen ist ein umfangreicher,<br />
vielfältiger <strong>und</strong> komplexer Vorgang mit Tätigkeiten<br />
zur Planung, Errichtung, Inbetriebnahme, Betrieb <strong>und</strong><br />
Instandhaltung technischer Anlagen. Die klassische Arbeitsweise<br />
beim Engineering ist geprägt durch getrennte Sichten<br />
(Gewerke) der einzelnen Ingenieurdisziplinen auf die Anlage<br />
<strong>und</strong> gewerkespezifische Engineering-Prozesse, Werkzeuge<br />
<strong>und</strong> Daten. Die mangelnde Durchgängigkeit der Engineering-Daten,<br />
die fehlende Unterstützung von Engineering-<br />
Prozessen <strong>und</strong> die geringe Möglichkeit der Wiederverwendung<br />
von erstellten <strong>Automatisierungs</strong>lösungen erfordern<br />
neue Konzepte. Komponentenbasierte Ansätze vereinfachen<br />
den Entwurf von <strong>Automatisierungs</strong>anlagen durch die<br />
Integration der Engineering-Daten in ein einziges Modell<br />
unter dem übergeordneten Gesichtspunkt von technologischen<br />
Komponenten, durch das die einzelnen Sichten integriert<br />
werden. Um den Entwicklungsingenieur effektiv zu<br />
unterstützen, ist eine Integration der Daten nicht ausreichend.<br />
Ein weitergehender Ansatz ist der Einsatz von aktiven<br />
Komponenten, die autonom ihre vielfältigen Verknüpfungen<br />
<strong>und</strong> Abhängigkeiten zu anderen Komponenten in der<br />
Anlage handhaben. Zudem können durch Kooperation<br />
Arbeitsabläufe <strong>und</strong> Wiederverwendung von Engineering-<br />
Lösungen unterstützt bzw. automatisiert werden. Basis für<br />
die aktiven Komponenten ist die agentenorientierte<br />
Betrachtung der Arbeitsabläufe beim Engineering. Dadurch<br />
kann eine Engineering-Umgebung geschaffen werden, in<br />
der die statischen Engineering-Daten durch aktive Softwareagenten<br />
repräsentiert werden, die den Entwicklungsingenieur<br />
bei seinen Aufgaben effektiv unterstützen <strong>und</strong> darüber<br />
hinaus Aufgaben der technischen Betriebsbetreuung<br />
selbstständig wahrnehmen [29].<br />
Weitere Informationen zur Forschung am IAS auf<br />
dem Gebiet Agenten in der <strong>Automatisierungs</strong>technik <strong>und</strong><br />
zu dem in diesem Beitrag vorgestellten Anwendungsbeispiel<br />
finden sich auf der Homepage des <strong>Institut</strong>s unter<br />
http://www.ias.uni-stuttgart.de/agenten.<br />
Wir danken allen Mitarbeitern <strong>und</strong> Studierenden des IAS, die uns bei der<br />
Erstellung dieses Beitrags unterstützt haben.<br />
Literatur + Links<br />
Zu diesem Beitrag finden Sie sämtliche Literaturreferenzen im Internet<br />
unter der Adresse http://www.ias.uni-stuttgart.de/agenten<br />
Dipl.-Ing. Thomas Wagner (29) ist seit 2 Jahren als<br />
wissenschaftlicher Assistent am <strong>Institut</strong> für <strong>Automatisierungs</strong>-<br />
<strong>und</strong> Softwaretechnik (IAS) der Universität<br />
Stuttgart auf dem Gebiet Agenten in der<br />
<strong>Automatisierungs</strong>technik tätig. Sein Aufgabenschwerpunkt<br />
ist agentenbasiertes Engineering von<br />
<strong>Automatisierungs</strong>systemen.<br />
Adresse: <strong>Institut</strong> für <strong>Automatisierungs</strong>- <strong>und</strong> Softwaretechnik,<br />
Pfaffenwaldring 47, D-70550 Stuttgart,Tel. (07<br />
11) 6 85-72 95, E-Mail: wagner@ias.uni-stuttgart.de<br />
Prof. Dr.-Ing. Dr. h. c. Peter Göhner (53) ist Leiter des<br />
<strong>Institut</strong>s für <strong>Automatisierungs</strong>- <strong>und</strong> Softwaretechnik<br />
(IAS) an der Universität Stuttgart. Hauptarbeitsgebiete:<br />
Angewandte Softwaretechnik, Komponentenbasierte<br />
Entwicklung von <strong>Automatisierungs</strong>systemen,<br />
Verlässlichkeit von Prozessautomatisierungssystemen,<br />
Web-basierte Aus- <strong>und</strong> Weiterbildung,<br />
Web-Technologien in der <strong>Automatisierungs</strong>technik<br />
<strong>und</strong> Agenten in der <strong>Automatisierungs</strong>technik.<br />
Seit Oktober 2000 ist er Prorektor für<br />
Lehre <strong>und</strong> Weiterbildung der Universität Stuttgart.<br />
Adresse: Siehe oben, Tel. (07 11) 6 85-73 01, E-Mail:<br />
goehner@ias.uni-stuttgart.de<br />
M. Sc. Paulo G. de A. Urbano (27) ist seit 2 Jahren als<br />
wissenschaftlicher Mitarbeiter am <strong>Institut</strong> für <strong>Automatisierungs</strong>-<br />
<strong>und</strong> Softwaretechnik (IAS) der Universität<br />
Stuttgart auf dem Gebiet Agenten in der<br />
<strong>Automatisierungs</strong>technik tätig. Sein Aufgabenschwerpunkt<br />
sind agentenorientierte Echtzeitsysteme.<br />
Adresse: Siehe oben, Tel. (07 11) 6 85-73 21, E-Mail:<br />
urbano@ias.uni-stuttgart.de