Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur...

176
Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung in der Qualit¨ atssicherung von Agrarprodukten vorgelegt von Diplom Informatiker Sascha Richter Von der Fakult¨ at IV - Elektrotechnik und Informatik der Technischen Universit¨ at Berlin zur Erlangung des akademischen Grades Doktor der Ingenieurwissenschaften - Dr.-Ing. - genehmigte Dissertation Promotionsausschuss: Vorsitzender: Prof. Dr. Klaus Obermayer Gutachter: Prof. Dr. Erhard Konrad Gutachter: Prof. Dr. Christian F¨ urll Tag der wissenschaftlichen Aussprache: 12. Dezember 2005 Berlin 2006 D 83

Transcript of Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur...

Page 1: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Eine logische Applikationssprache zur parallelenVerarbeitung von Neuronalen Netzen - Anwendungin der Qualitatssicherung von Agrarprodukten

vorgelegt von Diplom Informatiker

Sascha Richter

Von der Fakultat IV - Elektrotechnik und Informatik

der Technischen Universitat Berlin

zur Erlangung des akademischen Grades

Doktor der Ingenieurwissenschaften

- Dr.-Ing. -

genehmigte Dissertation

Promotionsausschuss:

Vorsitzender: Prof. Dr. Klaus Obermayer

Gutachter: Prof. Dr. Erhard Konrad

Gutachter: Prof. Dr. Christian Furll

Tag der wissenschaftlichen Aussprache: 12. Dezember 2005

Berlin 2006

D 83

Page 2: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

I

Kurzfassung

Diese Arbeit ist ein Beitrag zu den Wissensgebieten der verteilten kunstlichen In-telligenz, der parallelen logischen Programmierung und der parallelen Verarbeitungvon Neuronalen Netzen auf einem Rechnercluster. Es wird eine logische Applika-tionssprache beschrieben, die speziell im Hinblick auf die Qualitatssicherung vonAgrarprodukten entworfen wurde. Die Applikationssprache unterstutzt den Zugriffauf Datenbanken. Die logische Applikationssprache Mulog besteht aus mehrerenKomponenten, die mittels CORBA und SOAP kommunizieren. Daruberhinaus wirddie Erzeugung von Neuronalen Netzen auf mehreren Rechnern in einem Rechnerver-bund unterstutzt und eine parallele Ausfuhrung von Programmen ermoglicht. DerQuellcode, der in der Applikationssprache Mulog geschriebenen Programme, wirddabei durch einen Compiler in einen Zwischen-Code ubersetzt, der zur Laufzeit desProgramms durch einen Zwischen-Code Interpreter ausgefuhrt wird.

Die Parallelisierung wird durch eine Erweiterung der Zwischen-Code-Befehle er-reicht, die eine asynchrone Ablaufsteuerung und Verteilung der Zwischen-CodeProgramme auf einem Cluster von Computern zur Laufzeit erst ermoglicht. DieEntwicklung von wissensbasierten Systemen wird durch die Inferenzmaschine un-terstutzt. Die Pradikatenlogik 1. Stufe bildet die Grundlage fur die Semantik undder Syntax der logischen Applikationssprache Mulog. Die Hornklauseln stellen eineUnterklasse der pradikatenlogischen Formeln dar, die die Basis fur die Syntax derlogischen Applikationssprache bilden. Das gesamte System ermoglicht das dynami-sche Hinzufugen von Rechnern zur Laufzeit. Es konnen verschiedene Typen vonNeuronalen Netzen direkt durch Befehle in der Applikationssprache Mulog erzeugtwerden.

Bei der Ernte, Lagerung und Verarbeitung von Kartoffeln entstehen in der Kartof-fel schwarze Flecken. Diese Schwarzfleckigkeit ist vielen Verbrauchern bekannt undwird als Qualitatsmangel angesehen. Damit dieser Qualitatsmangel beseitigt werdenkann, mussen die fur die Entstehung verantwortlichen Einflussfaktoren identifiziertwerden. Eine Datenbank mit potentiell verdachtigen Einflussfaktoren, wie mecha-nischer Belastung, Temperatur, Kalium etc. wurde fur verschiedene Kartoffelsortenerfaßt. Mit Hilfe der Applikationssprache Mulog wurden Programme entwickelt,die eine Vielzahl von Neuronalen Netzen parallel auf mehreren Rechnern in einemRechnerverbund erzeugt haben. Es wird fur jede Kartoffelsorte eine Vielzahl vonNeuronalen Netzen vom Typ Backpropagation erzeugt. Der Eingabevektor bestehtdabei aus den Daten von zwei Einflussfaktoren. Der Ausgabevektor ist dabei die ge-messene Schwarzfleckigkeit. Es werden alle Permutationen von zwei Einflussfaktorenals Basis fur jeweils ein Neuronales Netz herangezogen, so dass fur jede moglicheKombination von zwei Einflussfaktoren am Ende ein Neuronales Netz pro Sorte exi-stiert. Diese Neuronalen Netze wurden anschließend getestet. Durch den Vergleich,der durch die Neuronalen Netze vorhergesagten Schwarzfleckigkeit und der tatsachli-chen Schwarzfleckigkeit, konnten Ruckschlusse auf die fur die Erzeugung verwen-deten Einflussfaktoren gewonnen werden. Die Auswertung der Daten, die mittelsder Programme in dem Mulog-System entwickelt und ausgefuhrt wurden, ergabendabei eine Ubereinstimmung mit dem aktuellen Wissensstand uber die Einflussfak-toren. Daruberhinaus konnten Einflussfaktoren, die ebenfalls fur die Entstehung vonSchwarzfleckigkeit mit verantwortlich gemacht werden, in ihrer Bedeutung fur dieEntstehung von Schwarzfleckigkeit beurteilt werden. Eine Bewertung der einzelnenKartoffelsorten zeigt dabei die individuellen Besonderheiten der einzelnen Sortenund die Gewichtung auf.

Page 3: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

II

Abstract

This thesis is a contribution to the fields of distributed artificial intelligence, par-allel logical programming and parallel processing of neuronal networks on a clusterof workstations. A logical application language is described which was designedspecifically for quality assurance for agricultural products. The application langua-ge supports access to databases. The logical application language Mulog consistsof several components which communicate via CORBA and SOAP. Moreover, thegenerating of neuronal networks on several computers in a computer network issupported, and parallel execution of programs is allowed. The source code of theprograms written in the application language Mulog is translated by a compilerinto an intermediate code which is executed in program run-time by an intermedia-te code interpreter. Parallelisation is achieved by an extension of the intermediatecode commands which permits asynchronous process control and distribution of theintermediate code programs to a cluster of computers in run-time. The developmentof knowledge-based systems is supported by the inference machine. A special formof the first-order predicate calculus is the presentation as a Horn clause. Horn clau-ses forms the basisi of the syntax of the logical application language Mulog. Thewhole system allows the dynamic addition of computers in run-time. Different ty-pes of neuronal networks can be generated directly by commands in the applicationlanguage Mulog.

Black spots arise in potatoes during harvesting, storage and processing. Many con-sumers are familiar with these black spots, which are regarded as a quality defect.To enable this quality defect to be remedied, the influencing factors that cause itmust be identified. A database with potential suspected influencing factors such asmechanical stress, temperature, potassium etc. was collected for different potatovarieties. With the aid of the application language Mulog, programs were develo-ped which generated a large number of neuronal networks parallel to each otheron several computers in a computer network. A large number of back-propagationneuronal networks were created for each potato type. The input vector consists ofthe data for two influencing factors. The output vector is the measured incidenceof black spots. All permutations of two influencing factors are used as the basisfor each neuronal network, so that at the end there is a neuronal network for eachvariety of potato for each possible combination of two influencing factors. Theseneuronal networks were then tested. By comparing the black spot prediction bythe neuronal networks with the actual incidence of black spots, conclusions can bedrawn about the influencing factors used to generate the data. The evaluation ofthe data developed and executed by the programs in the Mulog system showed anagreement with the current state of knowledge on the influencing factors. In addi-tion, influencing factors which are also regarded as causes of the black spots couldbe evaluated in their importance for the origination of black spots. An evaluati-on of individual potato varieties shows the special characteristics of the individualvarieties.

Page 4: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

III

Danksagung

Nachdem ich bei Frau Dr. Ulrike Reiner meine Diplom-Arbeit im Fachgebiet Wis-sensbasierte Systeme abgeschlossen hatte, ermoglichte es Herr Prof. Konrad mir,mich als Doktorand im Institut fur Agrartechnik Bornim e.V. zu bewerben. Einwenig uberrascht, dass es in einem Agrarinstitut einen Bedarf fur die Informatikgibt, wurde ich schnell gewahr, dass im ATB mit modernsten Techniken gearbeitetwird. So war das Zusammentreffen mit Herrn Dr. Gottschalk, meinem Betreuer,und meine Auswahl als Doktorand, eine gluckliche Fugung. Uberhaupt habe ich diearbeitsame, sehr menschliche und produktive Atmosphare im ATB sehr geschatztund hatte zum ersten Mal den Eindruck, dass Preußen in seiner schonen wissen-schaftlichen Auspragung noch immer existiert. Im ATB hatte ich von Anfang an dieMoglichkeit, meine Arbeit international vorzustellen und zu vergleichen. Das Bon-mot: ”Reisen bildet” kann nur bestatigt werden. Die Unterstutzung war dabei dieganze Zeit hervorragend und ich mochte mich ganz herzlich bei meinem BetreuerHerrn Dr. Gottschalk bedanken. Herrn Prof. Konrad und Herrn Prof. Furll dankeich dafur, dass Sie mir mit ihrem Rat in ihrem jeweiligen Fachgebiet wahrend dergesamten Zeit zur Seite standen. Ganz herzlich bedanke ich mich auch bei meinerFamilie.

Page 5: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Inhaltsverzeichnis

1 Einleitung 1

1.1 Die Schwarzfleckigkeit bei Kartoffeln . . . . . . . . . . . . . . . . . . 4

1.2 Strategien zur Verbesserung der Qualitat . . . . . . . . . . . . . . . 7

1.3 Das System zur Qualitatssicherung von Agrarprodukten . . . . . . . 8

2 Systemarchitektur des Mulog-Systems 10

2.1 Die Struktur des Rechnerverbundes . . . . . . . . . . . . . . . . . . . 11

2.2 Der Neuronale Netz Server . . . . . . . . . . . . . . . . . . . . . . . 12

2.3 Die Projekte- und Benutzerverwaltung . . . . . . . . . . . . . . . . . 13

2.4 Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.5 Die Applikationssprache Mulog . . . . . . . . . . . . . . . . . . . . . 17

2.6 Die Grammatik der logischen Applikationssprache Mulog . . . . . . 18

2.7 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.8 Parallele Bearbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.9 Ubersetzerbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.10 Kodiere-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.11 Kodiere Klausel-Liste . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2.12 Kodiere Programm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.13 Kodiere Anfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.14 Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.15 Zwischencode Kodierer . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.16 Der Mulog Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . 41

2.17 Die Struktur der Mulog-Klassen . . . . . . . . . . . . . . . . . . . . . 41

2.18 Zwischencode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

2.19 Cluster-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

2.19.1 Befehle fur nur einen Rechner . . . . . . . . . . . . . . . . . . 58

2.19.2 Befehle fur die parallele Bearbeitung . . . . . . . . . . . . . . 59

IV

Page 6: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

INHALTSVERZEICHNIS V

3 Neuronale Netze 61

3.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.2 Die Energiefunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.3 Aktivierungsfunktion . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.4 Das Basissystem der Neuronalen Netzwerke . . . . . . . . . . . . . . 64

3.5 Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

3.6 Backpropagation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

3.7 Adaline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3.8 Madaline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

3.9 BAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

3.10 Counterpropagation . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

4 Eingebaute Befehle von Mulog 102

4.1 Ein-/Ausgabe-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . 102

4.2 Befehle fur Neuronale Netze . . . . . . . . . . . . . . . . . . . . . . . 104

4.3 Arithmetische Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . 105

4.4 Vergleichsbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

4.5 Befehle fur die Zeichenkettenbearbeitung . . . . . . . . . . . . . . . . 107

4.6 Datenbank und Tabellen-Befehle . . . . . . . . . . . . . . . . . . . . 109

4.7 Befehle fur die Ubersetzung und das Nachladen von Mulog-Klassen . 112

5 Auswertung 114

5.1 Das Mulog-Programm zur Erzeugung der Neuronalen Netze . . . . . 114

5.1.1 Programm-Generator . . . . . . . . . . . . . . . . . . . . . . 114

5.1.2 Das Mulog-Programm zur Erzeugung der Neuronalen Netze . 115

5.2 Das Mulog-Programm zur Auswertung der Neuronalen Netze . . . . 116

5.3 Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

5.4 Die konkrete Anwendung in der Qualitatsicherung von Agrarprodukten118

5.5 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Anhang A: Klassenbeschreibungen 125

A.1 Klasse Atom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

A.2 Klasse Term . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

A.3 Klasse ParamTest . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

A.4 Die Klasse TableScanner . . . . . . . . . . . . . . . . . . . . . . . . . 131

A.5 Klasse Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

A.6 Klasse PRLabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

A.7 Klasse PRLabels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

A.8 Klasse ClassGenerator . . . . . . . . . . . . . . . . . . . . . . . . . . 137

A.9 Klasse myPrintStream . . . . . . . . . . . . . . . . . . . . . . . . . . 138

Page 7: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

INHALTSVERZEICHNIS VI

A.10 Klasse RhoToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

A.11 Klasse Rho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

A.12 Klasse ShortMemoryToken . . . . . . . . . . . . . . . . . . . . . . . 140

A.13 Klasse ShortMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

A.14 Klasse DBTabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

A.15 Klasse CutPunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

A.16 Klasse CutVerwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . 143

A.17 Klasse iFunc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

A.18 Klasse ImplementedFunctions . . . . . . . . . . . . . . . . . . . . . . 144

A.19 Klasse Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

A.20 Klasse PToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

A.21 Klasse BacklinkObj . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

A.22 Klasse Backlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

A.23 Klasse ThreadObj . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

A.24 Klasse Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

A.25 Klasse VariablenElement . . . . . . . . . . . . . . . . . . . . . . . . . 147

A.26 Klasse VariablenPos . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

A.27 Klasse WolfImpl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Anhang B: Grafische Benutzeroberflache 150

B.1 Klasse Projektverwaltung . . . . . . . . . . . . . . . . . . . . . . . . 150

B.2 Klasse PasswortAendern . . . . . . . . . . . . . . . . . . . . . . . . . 151

B.3 Klasse Himmel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

B.4 Klasse Anmeldung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

B.5 Klasse DebugDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

Anhang C: Verwaltungsdienste 158

C.1 Servant fur die Datei- und Benutzerverwaltung . . . . . . . . . . . . 158

C.2 Verwaltung der Rechner mit Hilfe von SOAP . . . . . . . . . . . . . 160

Page 8: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Kapitel 1

Einleitung

Im Zeitalter der Informatik tauchte ein vollig neues Forschungsgebiet auf. Mit Hilfeder EDV wurden viele Entdeckungen und eine Verbesserung der Lebensgrundlageder Menschen moglich. Computer vermogen in einigen Teilbereichen bereits, denMenschen zu ubertreffen. In der Losung von sehr komplexen und unvollstandigenAufgaben, konnen sie zum jetzigen Stand noch lange nicht die Leistung erbringen,zu der ein Experte in der Lage ist. Menschen konnen dank ihrer Gehirnstruktursehr komplexe Aufgaben losen. Die Intelligenz des Menschens unterscheidet sichfundamental von der Arbeitsweise eines Computers. Ein Computer besitzt nur einesehr geringe Anzahl von so genannten Central Process Units. Vorgenannte CPUskonnen sehr viele Befehle in einem sehr schnellen Zeitraum abarbeiten. Das mensch-liche Gehirn verfugt uber eine sehr viel geringere Taktrate. Es besteht zu einemgroßen Teil aus Neuronen, die als Schalter funktionieren und Synapsen, die die Ver-bindungen zwischen den Neuronen darstellen. Die Neuronen und die Synapsen sindnicht statisch verschaltet, sondern konnen neu verlegt werden. Auch ist die Anzahlder Verbindungen eines Neurons nicht statisch sondern andert sich dynamisch. DieNeuronen arbeiten dabei parallel. Die menschliche Intelligenz beruht also auf einermassiv-parallelen Architektur, die aus sehr einfachen Recheneinheiten besteht, diedie Fahigkeit hat, sich selbst zu verschalten. Durch die Fahigkeit des Gehirns, sichselbst zu programmieren, entsteht die eigentliche Intelligenz des Menschen. Aus die-sem Grund ist auch zu verstehen, dass das Gehirn selbst Schaden zu einem gewissenTeil durch die Neuprogrammierung intakter Neuronen ausgleichen kann. Menschen,denen durch einen Unfall oder einen Schlaganfall ein Teil des Gehirns beschadigtwurde, konnen durch gezielte Rehabilitation verlorene Fahigkeiten wiedererlangen.Ein weiterer faszinierender Aspekt der menschlichen Intelligenz ist ihre Transfer-leistung. Erlerntes Wissen kann dabei an neue Rahmenbedingungen angepasst undauf ein neues Einsatzgebiet angewandt werden. Bestehende Wissenslucken verhin-dern diesen Transfer nicht, sondern schlagen sich in mangelnder Prazision nieder.Die Prazision wird durch einen Lernprozess erlangt, den man gemeinhin als ”Tryand Error” bezeichnen kann. Weicht das Gehirn bei der Ausfuhrung einer Aktionvon dem gewunschten Ziel ab, dann werden im Gehirn chemische Prozesse in Ganggesetzt, die die Verschaltung oder aber den Schaltprozess einzelner Neuronen derartverandern, dass bei einer Wiederholung dieser Aktion die Prazision verbessert wird.

Sowohl im Bereich der Informatik, als auch im Agrarbereich wurde die Wissen-schaft im 20. und 21. Jahrhundert durch einen enormen technologischen Fortschrittgepragt. Die Herstellung von Agrarprodukten umfasst die Tierzucht und die Land-wirtschaft. Insofern ist die Sicherstellung eines hohen Ertrags bei gleichzeitig ho-her Qualitat fur die Versorgung der Weltbevolkerung essentiell und bei steigender

1

Page 9: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 1. EINLEITUNG 2

Bevolkerung werden die Anforderungen weiter steigen. Einige Agrarprodukte ha-ben dabei einen lokal sehr bedeutenden Einfluss auf die Ernahrung, wie z. B. Reisim Sud-Asiatischen Raum oder die Kartoffel in Deutschland. Produkte, die in derLandwirtschaft erstellt werden, unterscheiden sich jedoch in mannigfaltiger Weisevon den industriell gefertigten Waren. So treten Qualitatsmangel auf, die bei derindustriellen Fertigung nicht vorhanden sind. Krankheiten, Wachstumsschaden undSchadlinge sind dabei nur einige. Fur biologische Objekte konnen daher nur in ein-geschranktem Maße, die aus der industriellen Produktion entwickelten Methodender Qualitatskontrolle direkt ubernommen werden. Erschwerend kommt hinzu, dassdie biologische Herkunft der Agrarprodukte und der damit verbundene Varianten-reichtum einen standigen Anpassungsprozess der Qualitatskontrolle an die neuenEigenschaften, das Wachstumsverhalten und den Einfluss der Umwelt erforderlichmachen.

Die Forschung in der Landwirtschaft kann auf eine jahrhundertalte Traditionblicken. In der Agrarwirtschaft sind im Laufe des 20. und 21. Jahrhunderts ge-waltige Produktionssteigerungen erzielt worden. War zu Beginn des Jahrhundertsnoch uber ein Drittel der Bevolkerung in der Landwirtschaft beschaftigt, so sindes im Jahre 2000 nur noch 5%. Die Steigerung der Produktivitat hat verschiedeneGrunde:

• Der Einsatz von Maschinen lost das traditionelle Pferdegespann ab. DerMensch kann mit Hilfe eines Traktors eine wesentlich großere Flache bear-beiten.

• Der Ertrag wird durch die Aussaat von sehr ertragreichen Sorten gesteigert.Die genauen Kenntnisse uber die optimalen Umweltbedingungen ermoglichenes, landwirtschaftliche Flachen optimal zu nutzen.

• Das Wachstum von Pflanzen kann gezielt durch die Verabreichung vonKunstdunger gesteigert werden.

• Schadlinge und Krankheiten konnen durch Pestizide, Herbizide und mechani-sche Maßnahmen bekampft werden.

• Der Ausbau der Logistik hat zu einer Reduktion von Verlusten wahrend desTransports gefuhrt.

• Die Verbesserung der Lagerung und der Konservierung ermoglicht es, Agrar-produkte uber einen großeren Zeitraum einzulagern. Verluste durch Schimmelund Verderb konnten gesenkt werden.

Die o.g. Aufzahlungen der Verbesserungen liefen dabei nicht immer linear ab, son-dern wurden gepragt von einzelnen Erfindungen, die im weiteren Verlauf des tech-nischen Fortschritts sukzessiv verbessert wurden. Ein Produktivitatssprung wurdedurch den Traktor ausgelost, der das Pferdegespann ersetzte. Die Weiterentwicklun-gen an den ersten Traktoren fuhrten zu einer immer starkeren Produktivitatssteige-rung, die immer noch nicht abgeschlossen ist. Ein Meilenstein in der Agrartechnikwar die Entwicklung der Dreipunktaufhangung, die das Problem der Inkompati-bilitat der zu schleppenden Gerate und der Traktoren der einzelnen Hersteller zulosen vermochte. Diese Art der Aufhangung, die von Harry Ferguson vorgeschlagenwurde, beendete die Problematik der unterschiedlichen Aufhangungen und soll alsBeispiel fur die Weiterentwicklung dienen.

Schon zu Beginn des 20. Jahrhunderts waren vor allem Produktivitatssteigerungendurch den Maschinenbau und in der chemischen Industrie zu verzeichnen. Wahrend-dessen richtete sich der Fokus zu Beginn des 21. Jahrhunderts auf die Gentechnologie

Page 10: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 1. EINLEITUNG 3

und die Informationstechnologie. Hier ist zu berucksichtigen, dass die Informations-technologie helfen soll, bisherige Arbeitsablaufe zu optimieren, z. B. in der Logistik,um Leerfahrten zu minimieren [78, GEBRESENBET 2000].

Ein besonderes Problem in der Kartoffelproduktion ist die Schwarzfleckigkeit. Dievorliegende Arbeit geht dabei mit den Mitteln der Informatik an dieses Problem her-an und benutzt diesen Qualitatsmangel zur Entwicklung eines Applikationssystems,welches in der Lage ist, dieses und ahnlich gelagerte Probleme zu losen.

Die Arbeit aus [12, GOTTSCHALK 96] befaßt sich mit dem Qualitatserhalt mittelseines wissenbasierten Systems. Die Schwierigkeiten, die sich daraus ergeben, werdenwie folgt zitiert:

1. die vollstandige Erfassung aller moglichen Einflusse oder zumindest die Er-mittlung einer ausreichenden Anzahl von Einflussen, die die großten Wirkun-gen auf den Zustand des Produkts haben

2. die Ermittlung bestehender gegenseitiger Abhangigkeiten bestimmter Ein-flussgroßen

3. die Beurteilung der tatsachlichen Wirkung einer betrachteten Einflussgroßeauf den Zustand des Produkts, insbesondere in Relation zu weiteren Einfluss-großen

4. die Ermittlung unbekannter und nicht vermuteter Einflussgroßen

5. die Uberprufung der tatsachlichen Wirkung einer vermuteten Einflussgroßeund ggf. dessen Bestatigung

Der Aufbau eines wissenbasierten Systems setzt neben einer Datenbasis eine Regel-basis voraus. Mit Hilfe der Datenbasis und der Regelbasis kann in einem wissensba-sierten System neue Erkenntnisse deduziert werden. In einer Programmiersprachewie Prolog konnen die Datenbasis und die Regelbasis angelegt und sogar unvoll-standiges Wissen verarbeitet werden. Eine Inferenzmaschine ermoglicht es, mehrerealternative Regeln solange einzusetzen, bis ein Ergebnis gefunden wird oder bis dasProgramm scheitert.

Die Umsetzung eines wissensbasierten Konzepts zur Qualitatssicherung von Kartof-feln unter der Problematik der Schwarzfleckigkeit forderte jedoch mehrere Problemezu Tage.

Einige Kartoffelsorten wurden fur die Datensammlung nicht komplett erfaßt. Beieiner so großen Menge an gesammelten Daten haben sich Messfehler eingeschlichen,die zum großten Teil, aber nicht restlos, entfernt werden konnten. Als Konsequenzergibt sich daraus, dass die Datenbasis nur unvollstandig definiert werden kann.

Viele Einflussgroßen auf die Entstehung von Schwarzfleckigkeit bei Kartoffeln sindbekannt. Aber es gibt Einflussgroßen, die verdachtigt werden, an der Entstehungvon Schwarzfleckigkeit beteiligt zu sein, uber die es aber noch keine gesichertenErkenntnisse gibt. Daraus folgt, dass die Regelbasis unvollstandig ist. Hinzu kommtdie Problematik, dass es unterschiedliche Meinungen uber einige Einflussfaktorengibt, welches zu widerspruchlichen Regeln fuhrt.

Ein wissensbasiertes System, dass sich auf eine unvollstandige Datenbasis und ei-ne unvollstandige und z. T. widerspruchliche Regelbasis stutzt, birgt das Risiko,fehlerhafte neue Erkenntnisse zu gewinnen.

In einem ersten Schritt muß die Regelbasis daher komplettiert und von widerspuchli-chen Regeln bereinigt werden. Es entstand der Gedanke, ein System zu entwickeln,

Page 11: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 1. EINLEITUNG 4

welches mit Hilfe von sehr vielen Neuronalen Netzen und einer geeigneten Vorverar-beitung der Datenbasis, die den Einfluss von fehlenden Daten minimieren sollte, inder Lage ist, eine komplette Regelbasis ohne Widerspruche zu erzeugen. Die Aufgabeder Neuronalen Netze ist es, das Verhalten der Einflussfaktoren auf das Entstehender Schwarzfleckigkeit zu evaluieren. Das System muß dabei leicht an ahnlich ge-lagerte Probleme anpassbar sein und den Aufbau eines wissensbasierten Systemsermoglichen. Die Applikationssprache Mulog und die verbundenen Komponentenentstanden unter dieser Vorausgabe.

1.1 Die Schwarzfleckigkeit bei Kartoffeln

Die folgenden beiden Zitate aus [20, EFFMERT] umreißen das Problem derSchwarzfleckigkeit bei Kartoffeln in kompakter Weise:

”Die Kartoffel als fleischig verdicktes, unterirdisches, wasserreiches Sproßorgan istbei der Ernte, dem Umschlag und der Vermarktung besonders stark verletzungs-gefahrdet.”

”Besonders gefurchtet ist die Schwarzfleckigkeit, innere Verletzung des Gewebeseinschließlich Zerstorung der Kompartimentierung der Zellen, verbunden mit einerirreversiblen Verfarbung des Knollenfleisches. Grau- oder Blaufleckigkeit sowie Stoß-blau bezeichnet das gleiche Phanomen. Erst beim Schalen und Schneiden wird dieVerfarbung sichtbar, sie fuhrt mitunter zu enormen Verlusten.”

Es werden zwei verschiedene Arten der Verfarbung bei Kartoffeln beobachtet. Zumeinen die sogenannte Blaufleckigkeit, die durch mechanische Beschadigungen ent-steht. Die Blaufleckigkeit entsteht oberhalb des Gefaßbundelrings. Die Farbe wech-selt von blau zu schwarz, um sich spater zu einer weißen Nekrose umzuwandeln [48,PUTZ 95]. Die Bildung von Nekrosen wird in der Literatur auch als Verkorkungbezeichnet [54, LEPPACK 95]. Aus diesem Grund wird angenommen, dass bei dertief in der Knolle liegenden Schwarzfleckigkeit, die durch die Verarbeitung entsteht,die Zeit zwischen der mechanischen Belastung wahrend der Aufbereitung und demVerbrauch nicht fur die Verkorkung ausreicht. Zum anderen die Schwarzfleckigkeit,die nicht sofort entsteht, tiefer in der Kartoffel liegt und nicht so scharfkantig wie dieBlaufleckigkeit verlauft. Die Verluste konnen betrachtlich sein [49, HAASE 2000].So gibt Cobb (1999) eine Flachenbelastung von 200 GBP (326

�) pro Hektar an.

Mechanische Belastung

Der Begriff der mechanischen Belastung wird, da er bei der Erfassung der Daten furdie Datenbank benutzt wurde, auch in dieser Arbeit verwendet, obwohl der Begriffphysikalisch nicht korrekt ist. Es muß dabei zwischen der statischen mechanischenBelastung und der dynamischen Belastung unterschieden werden. Bei der dynami-schen Belastung hat der Impuls (= Masse ∗ Geschwindigkeit bzw. integrale Großedes Kraft/Druck-Verlaufs) einen wichtigen Einfluss. Mit Hilfe der Messkugel, die amInstitut fur Agrartechnik entwickelt wurde (siehe [69, HEROLD 95]), ist es nichtdirekt moglich den Impuls, der auf die Kartoffel einwirkt, zu erfassen, sondern eswird mit der Messkugel eine integrale Große des Drucks ermittelt, die mit dem Im-puls, der auf die Kartoffel wirkt in Korrelation gebracht werden muß. Da es nichtdirekt moglich ist, eine Große aus den Messwerten ”mechanische Belastung” und”Dauer” zu berechnen, werden diese Werte getrennt betrachtet, obwohl sie zusam-mengehoren. Bei der Auswertung der Ergebnisse wird auf die besondere Beziehungdieser beiden Messwerte noch einmal eingegangen.

Page 12: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 1. EINLEITUNG 5

Abbildung 1.1: Kartoffel mit Schwarzfleckigkeit

Nachdem die Kartoffeln belastet wurden, werden diese gefroren, um die Kartoffelnnach und nach auswerten zu konnen.

Neben der mechanischen Belastung werden noch andere Ursachen fur die Schwarz-fleckigkeit verantwortlich gemacht. Viele Vorgange in der Kartoffel sind bereits be-kannt, wahrend andere Einflussfaktoren verdachtigt werden, an der Entschehungvon Schwarzfleckigkeit beteiligt zu sein.

Trockensubstanz

Die Trockensubstanz wird aus der Einwaage (Frischgewicht) und der Auswaa-ge (Trockengewicht) berechnet. Schließlich sei noch darauf hingewiesen, dass dieTrockensubstanz einen unterschiedlichen Einfluss auf die Entstehung von schwar-zen Flecken je nachdem, ob die schwarzen Flecken im Inneren der Knollen oderan der Oberflache liegen, hat. An der Oberflache nehmen die blauen oder schwar-zen Flecken mit zunehmender Trockensubstanz zu, wahrend im Inneren eher beiabnehmender Trockensubstanz mit vermehrten schwarzen Flecken zu rechnen ist.

Turgor

Bei einem geringen Turgor steigt die Anfalligkeit der Kartoffelknollen fur dieSchwarzfleckigkeit [42, AEPPLI 79]. Der Turgor reduziert sich durch Flussigkeitsver-lust. Es konnte nachgewiesen werden, dass Kartoffeln, die durch langere Lagerungund dem damit verbundenen Flussigkeitsverlust durch Respiration, mehr schwarzeFlecken aufweisen.

Page 13: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 1. EINLEITUNG 6

Kaligehalt

Kartoffeln mit hohem Kaligehalt sind starker von Schwarzfleckigkeit als kaliarmeKartoffeln befallen. Das Nabelende der Kartoffelknolle weist einen niedrigen Kali-gehalt auf, ist aber besonders empfindlich fur Schwarzfleckigkeit [42, AEPPLI 79].Hingegen kann [74, BAUMGARTNER 83] kein Zusammenhang zwischen dem Ka-liumgehalt und der Frischsubstanz finden. Nur bei der Trockensubstanz wird einegewisse Korrelation gesehen.

Chlorogensaure

Laut [74, BAUMGARTNER 83] korreliert Chlorogensaure mit der Entstehung vonSchwarzfleckigkeit besonders dann, wenn nicht nur die Große der schwarzen Flecken,sondern auch die Farbintensitat berucksichtigt wird. Ein niedriger Chlorogengehaltbewirkt eine niedrige Schwarzfleckigkeitsneigung.

Starke

Ist eine Kartoffel trockensubstanzreich, ist der Starkeanteil hoher als in trocken-substanzarmen Kartoffeln. Die Schwarzfleckigkeit steigt bei Kartoffeln mit hohemStarkeanteil. Die Große der Starkekorner hat jedoch - wenn uberhaupt - nur ei-ne untergeordnete Rolle. Bei hoherem Starkegehalt kann ein ungunstiges Verhaltniszwischen Zellwandfraktion und Gesamttrockensubstanz entstehen, wodurch das Ge-webe der Knolle beschadigungsempfindlicher ist.

Der chemische Prozess

Der chemische Prozess, der dem Auftreten von Schwarzfleckigkeit zugrunde liegt,ist die Umwandlung von Tyrosin in Melanine. [48, PUTZ 95] beschreibt den chemi-schen Prozess, der zumindest fur die an der Knollenoberflache auftretenden schwar-zen oder blauen Verfarbungen verantwortlich ist. Durch Stoß und Druck wird in derKnolle Tyrosin frei. Wird die Knolle beschadigt, dringt Sauerstoff in die Knolle ein.Die Oxidation von Tyrosin zu 3,4-Dihydrophenylalanin (DOPA) und die Oxidationvon DOPA zu Dopachinon wird durch Polyphenoloxidase (PPO) katalysiert. PPOkommt bei der Verfarbung eine grundsatzliche Bedeutung zu. Es folgt die nichtenzymatische Polymerisation zu den braunroten und schließlich schwarzen Mela-ninpigmenten. Ist Ascorbinsaure vorhanden, kommt es des Ofteren vor, dass dasRedoxsystem Ascorbinsaure-Dehydroascorbinsaure bereits gebildete Chinone wie-der zu farblosen Phenolen zuruckbildet.

Bonitur der Flecken

Die Handelsklassen legen mehrere Kriterien zur Qualitatsbestimmung von Kartof-feln fest. Aus [41, PETERS u. SPECHT 94] ist folgendes Schema zur Einstufungentnommen:

Page 14: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 1. EINLEITUNG 7

Flecken Einstufung

bis 5 mm tief und weniger als 2 % der Oberflache 3 = gering5 bis 10 mm tief und 2 bis 5 % der Oberflache 5 = mitteluber 10 mm tief und 6 bis 10 % der Oberflache 7 = stark

Tabelle 1.1: Gutebestimmung in den Handelklassen

Die Qualitatsgrenze von 2 % wird auch wahrend der Vorverarbeitung der Daten furdie Auswertung durch das Mulogsystems verwendet.

Sortenspezifische Schwarzfleckigkeitsneigung

Dr. Horneburg und Prof. Wirsing haben in ihrer Arbeit [53, HORNEBURG u. WIR-SING 95] gezeigt, dass ein Teil der Parameter, die fur das Auftreten von Schwarz-fleckigkeit verantwortlich ist, in hohem Maße genetisch bestimmt sind. Die Boniturerfolgte im Fruhjahr und im Herbst. Dabei trat bei der Fruhjahrsbonitur Schwarz-fleckigkeit in starkerem Umfang auf. Die genotypische Disposition der Kartoffelknol-le wird durch verschiedene Umwelteinflusse mehr oder weniger stark modifiziert.[53, HORNEBURG u. WIRSING 95] unterscheiden dabei in ”umweltlabile” und”umweltstabile” Sorten.

1.2 Strategien zur Verbesserung der Qualitat

Es ist erforderlich, dass die Ernte von Kartoffeln bei einer Außentemperatur vonmehr als 10◦ Celsius erfolgt, da dann die Schwarzfleckigkeit geringer ist. Fur Kar-toffelsorten, die besonders empfindlich fur Schwarzfleckigkeit sind, wird eine Bear-beitungstemperatur von 12, 15 oder sogar 18◦ Celsius empfohlen [52, BOUMANN95]. Kartoffelpartien, die am fruhen Morgen geerntet wurden, neigen besonders zurSchwarzfleckigkeitsbildung, da die Knollen noch kalt sind [54, LEPPACK 95]. DieVermeidung von mechanischen Belastungen bei der Kartoffelernte, der Lagerungbis hin zum Kunden wirkt sich ebenfalls positiv aus. Die Reduzierung der Fallstu-fen, Polsterungen aus weichem Moosgummi, Bremseinrichtungen an Rutschen undandere Maßnahmen reduzieren dabei die mechanische Belastung erheblich.

Infolge von Krautabtotung mit Keimhemmungsmitteln konnen die Kartoffeln bei ei-ner hoheren Temperatur gelagert werden, da die Gefahr der Keimung nicht besteht.Bei der Lagerung ist auf einen moglichst geringen Gewichtsverlust zu achten. Hierzubedarf es einer moderaten Beluftung, die die Luftfeuchtigkeit moglichst hoch halt.Optimal ist eine niedrige Lagertemperatur unter 5◦ Celsius mit moglichst hoherrelativer Luftfeuchte von annahernd 100 % und eine hohe Aufbereitungstemperatur[55, LEPPACK 95]. Die Kartoffeln sollten, bevor sie aus dem Lager zur weiterenBearbeitung geholt werden, erhitzt werden, da dadurch das Auftreten von Schwarz-fleckigkeit je nach Sorte zwischen 30-100% im Durchschnitt 50% gesenkt werdenkann. Die empfohlene Temperatur liegt um die 20◦ Celsius. Bei Temperaturen uber22◦ Celsius wird die Schwarzherzigkeit1 durch Sauerstoffmangel in der Knolle ver-ursacht.

Eine weitere Methode, die Schwarzfleckigkeit zu reduzieren, schlagt [50, MILLER96] vor. Bedingt durch genetische Veranderungen wird das in der Kartoffel vor-

1Die Schwarzherzigkeit ist ein Qualitatsmangel, der nicht mit der Schwarzfleckigkeit zu ver-

wechseln ist

Page 15: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 1. EINLEITUNG 8

kommende PPO-Enzym auf ein 20stel seiner ublichen Aktivitaten reduziert. Beitatsachlich genveranderten Kartoffeln, deren PPO-Enzym weitgehend ausgeschal-tet wurde, konnte eine deutlich reduzierte Schwarzfleckigkeitsanfalligkeit beobachtetwerden.

1.3 Das System zur Qualitatssicherung von Agrar-

produkten

Es lassen sich verschiedene Aufgaben eines Systems zur Qualitatssicherung vonAgrarprodukten identifizieren.

1. Das System muß in der Lage sein, neue Erkenntnisse aus Datenbestanden zugewinnen.

2. Bekannte Wirkmechanismen auf die Qualitatssicherung mussen mit diesemSystem modelliert werden konnen.

3. Weiterhin soll es mit diesem System moglich sein, wissensbasierte Vorhersa-gemodelle mit Hilfe von Daten- und Regelbasis zu erzeugen.

Die Analyse der Datenbestande kann durch Neuronale Netze erfolgen, wenn dieZielabbildung der Daten bekannt ist und sich die Neuronalen Netze auf die Ziel-vorhersage trainieren lassen. Die Schwarzfleckigkeit ist wahrend der Datenerhebungerfasst worden, so dass ein Training der Neuronalen Netze moglich ist.

Die Schwarzfleckigkeit stellt dabei nur ein Qualitatsproblem unter ahnlichen Proble-men in der Agrartechnik dar. Soll das qualitatssichernde System auf diese ahnlichgelagerten Probleme leicht adaptierbar sein, dann muss das System eine hohe Fle-xibilitat aufweisen. Wissensbasierte Systeme lassen sich leicht in Programmierspra-chen der Kunstlichen Intelligenz entwickeln. Aber Programmiersprachen wie Lisp,Prolog oder Datalog sind nicht optimal fur die Qualitatssicherung von Agrarpro-dukten einsetzbar.

In den folgenden Kapiteln wird die Applikationssprache Mulog vorgestellt, die inder Lage ist, die formulierten Ziele der Qualitatssicherung von Agrarprodukten zuerfullen. Die Applikationssprache Mulog ist eingebettet in ein Verwaltungs- undKomponentensystem, welches den Ablauf von Programmen in einem Rechnerver-bund ermoglicht.

In dem ersten Kapitel wurde das Problem der Schwarzfleckigkeit erlautert und dieGrunde fur die Entwicklung der Mulog-Applikationssystems aufgezeigt.

Das zweite Kapitel widmet sich der dem Mulog-Applikationssystem zu Grunde lie-genden Systemarchitektur, die eine parallele Verarbeitung ermoglicht. Es werdendie einzelnen Komponenten und ihre Funktionen im Gesamtsystem aufgezeigt.

Im dritten Kapitel wird die Syntax der Applikationssprache Mulog erlautert unddie Konzepte der Ubersetzung des Quellcodes in P-Code genauso gezeigt, wie derAufbau der Mulog-Klassen, die durch einen P-Code Interpreter auf verschiedenenRechnern ohne neuerliche Ubersetzung ausgefuhrt werden konnen. Auf die Beson-derheiten der Abarbeitung von P-Code-Befehlen in einer Umgebung aus mehrerenzu einem Rechnerverbund zusammengeschalteten Computern, wird genauso einge-gangen, wie auf die Verteilung der Daten und Programme durch einen zentralenRechner - der in dieser Arbeit Leitwolf genannt wird.

Page 16: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 1. EINLEITUNG 9

Ein wichtiger Bestandteil des Mulog-Applikationssystems ist die Fahigkeit zur Be-rechung von verschiedenen Typen von Neuronalen Netzen mit Befehlen in derMulog-Applikationssprache. Die Funktionalitat wird dabei mit Hilfe einer CORBA-Schnittstelle zur Verfugung gestellt. Die Beschreibung befindet sich im vierten Ka-pitel.

Die Verwaltung der einzelnen Computer wird dabei uber das Internet-ProtokollSOAP abgewickelt. Dies ermoglicht auch eine eingeschrankte Benutzung des Mulog-Systems uber eine Firewall hinweg. Die Verwaltung der Rechner wird im funftenKapitel beschrieben.

Der Befehlssatz, den die Mulog-Applikationssprache zur Verfugung stellt, wird imsechsten Kapitel dokumentiert. Die Befehle sind in einzelne Kategorien unterteilt.

Die konkrete Anwendung der Applikationssprache und der einzelnen Komponentenwird im siebten Kapitel nachvollzogen. Das Problem der Schwarzfleckigkeit wirddabei untersucht und die Ergebnisse, die das Mulog-System hervorgebracht hat,werden kommentiert.

Der Anhang fuhrt nicht nur die Klassen- und Implementationsbeschreibungen dereinzelnen Komponenten auf, die zum Mulog-System gehoren, sondern beschreibtauch die graphische Benutzeroberflache, die ein komfortables Erstellen, Debuggenund Ausfuhren von Programmen, geschrieben in der Applikationssprache Mulog,erst ermoglicht.

Page 17: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Kapitel 2

Systemarchitektur desMulog-Systems

Das Mulog-System besteht aus einem Rechnerverbund, auf dem die verschiedenenMulog-Komponenten laufen. Die Rechner werden auch Wolfe genannt, da die Rech-ner im Rechnerverbund wie ein Wolfsrudel arbeiten.

Webserver

CO

RB

A

CO

RB

A

CO

RB

A

HTTP/SOAP

HTTP/SOAP

Web−Client

Leitwolf / ZentralrechnerDatenbank

SOAP−Container

.

.

.

.

NeuroserverCORBA

Rechner

Rechner

RechnerCORBA Neuroserver

CORBA Neuroserver

CORBA Neuroserver

RechnerCORBA Neuroserver

ZC−Interpreter

ZC−Interpreter

ZC−Interpreter

ZC−Interpreter

ZC−Interpreter

Abbildung 2.1: Systemarchitektur

Die Mulog-Komponenten umfassen dabei:

• den Server fur die neuronalen Netze neuroserver

10

Page 18: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 11

• das Datenbankverwaltungssystem MySQL

• das Projekt- und Benutzerverwaltungssystem projekte

• den Ubersetzer fur die Programmiersprache Mulog

• die Laufzeitumgebung und den P-Code Interpreter fur die Mulog-Programme

• dem Web-Server Apache

• dem SOAP-Container Axis der sich in den Web-Server Apache integriert

2.1 Die Struktur des Rechnerverbundes

Ein Rechnerverbund aus PCs stellt eine preisgunstige Alternative zu leistungsfahi-gen Mainframes und Großrechnern dar. Bedenkt man, dass jeder PC fur sich we-sentlich langsamer als ein Großrechner ist, eignen sich fur den Einsatz auf meh-reren Rechnern nur Programme, die eine starke Parallelitat aufweisen. Jedoch istes dann moglich, Aufgaben innerhalb der gleichen Zeit zu losen, wie es auf einemGroßrechner moglich ware. Fur die empirische Anwendung wurden zuerst ein Rech-nerverbund aus funf Rechnern mit AMD K6-400MHz und einem 100MBit Switchverwendet, spater wurden die konkreten Ergebnisse auf einem heterogenen Clusterbestehend aus folgenden Computern berechnet:

• AMD Athlon 1,8GHz, 512MB Speicher

• AMD Athlon 1,8GHz, 384MB Speicher

• zwei AMD Athlon 800MHz, 256MB Speicher

• Intel Pentium4 2,4GHz, 256MB Speicher

Leitwolf

Rechner

RechnerRechner

Rechner

Leichter Prozess

Abbildung 2.2: Struktur des Rechnerverbundes

Page 19: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 12

2.2 Der Neuronale Netz Server

Der Neuronale Netz Server kann mehrere Neuronale Netze (NN) gleichzeitig verwal-ten. Wichtig ist es daher, diese Neuronalen Netze mit einem Namen zu bezeichnen,damit die Lern/Test-Funktionen auf das richtige NN angewendet werden. Fernerunterstutzt der Neuronale Netz Server verschiedene Typen von Neuronalen Netzen:

• Perceptron

• BAM

• Backpropagation

• Associate

Die Unterstutzung von Neuronalen Netzen des Typs Perceptron dient in erster Liniedazu, sich mit der Programmierung von Neuronalen Netzen vertraut zu machen.

BAM NNs benutzt man dazu, Vektoren von Binar-Werten auf andere Binar-Werteabzubilden. Dabei ist die Assoziationsrichtung in diesem Typ von Neuronalen Net-zen umkehrbar. Es werden bei diesem Typ von NNs wahrend des Lernprozesses zweiVektoren miteinander verbunden. Diese Bindung kann zu einem spateren Zeitpunktdurch das Anlegen nur eines Vektors den dazugehorigen zweiten Vektor reproduzie-ren.

Neuronale Netze vom Typ Backpropagation sind im Stande sehr komplizierteZusammenhange zu lernen, weil sie uber eine Schicht mit versteckten Neuronenverfugen. Der Lernprozess vom Neuronalen Netz des Typs Backpropagation ist auf-wendiger als bei anderen NN-Typen, bietet aber fur Probleme Losungen an, diemit anderen NN Typen nicht realisierbar sind. Aus diesem Grund ist ein NN, dassdas XOR-Problem lost, mit einem Perceptron-Netz nicht losbar, dagegen aber miteinen NN vom Typ Backpropagation. Das Backpropagation NN kann eine beliebigeAnzahl von Neuronen in der verdeckten Schicht haben. Die verwendete Implemen-tierung besitzt nur eine verdeckte Schicht. Man kann die Anzahl der verdecktenSchichten auf eine Schicht reduzieren, indem man die Anzahl der Neuronen in die-ser Schicht entsprechend erhoht, ohne dass dadurch die Fahigkeit des NeuronalenNetzes reduziert wird.

Das Associate Netz ist ein spezieller Netzwerktyp, der es ermoglicht nicht binareEin- und Ausgangsvektoren zu assoziieren - vergleichbar mit einem BAM fur binareVektoren. Alle Eingabe- und Ausgabevektoren werden gespeichert. Die Assoziierungder Eingabe- und Ausgabevektoren wird dabei uber ein Backpropagation Netzwerkrealisiert, dass fur jeden Ausgabevektor ein Ausgabeneuron hat. Das Backpropaga-tion NN wird so trainiert, dass bei der Einspeisung des Eingabevektors ~x das zumAusgabevektor ~y assoziierte Ausgabeneuron y aktiv ist, aber alle anderen Ausga-beneuronen nicht aktiv sind. Dadurch funktioniert das Backpropagation Netz wieein Selektor. Bei der Einspeisung eines beliebigen Eingabevektors wird das Aus-gabeneuron y mit der maximalen Erregung ausgewahlt. Das Ausgabeneuron y istmit dem korrespondierenden Ausgabevektor ~y assoziiert. Sind ~x und ~y wahrend derLernphase identisch, dann konnen mit Hilfe dieses NNs spater der Fehler in demverrauschten Eingabevektor ~x0 ausgefiltert und der unverrauschte Ausgabevektor ~xreproduziert werden.

Page 20: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 13

2.3 Die Projekte- und Benutzerverwaltung

Das Mulog-System ist mehrbenutzerfahig und kann fur jeden Benutzer mehrere Pro-jekte verwalten. Die Daten sind dabei zwischen den Benutzern und den Projektenabgeschottet. Weil es erforderlich ist, dass sich die Benutzer mit einem Passwortanmelden mussen, ist der Schutz der Programme und Daten gegeben. Zur Bearbei-tung von Dateien, werden die Dateien durch das Programm projekte per CORBA-Funktionen an das Client Programm gesendet und nach der Bearbeitung vom Cli-ent empfangen und an die richtige Stelle im Mulog-System gespeichert, damit dieDateien von dort aus ubersetzt werden konnen. Es werden ebenfalls Funktionenzum Auflisten von Projekten, Dateien und zum Andern des Passworts exportiert.Die Projekte- und Benutzerverwaltung sorgt fur den Datenschutz der Dateien undstellt die Managementfunktionen, die in einer von mehreren Benutzern zu verwen-deten Umgebung benotigt werden, bereit. Ausschließlich auf dem Leitwolf ist dieProjekte-Verwaltung installiert, weil nur dort die Projekte, Benutzer und derenDateien verwaltet werden.

Graphische Benutzeroberflache

Die graphische Benutzeroberflache kommuniziert mit CORBA und SOAP mit demWebserver. Sie wird als JAVA-Webstart-Modul vom Webserver geladen.

Dat

enba

nk

WebbrowserLeitwolf

Rechner im Webserver

Rechnerverbund

TCP/IP−Kommunikation

Abbildung 2.3: Anbindung der graphischen Benutzeroberflache

Mit Hilfe der Benutzeroberflache konnen Programme erstellt, ausgefuhrt, von Feh-lern beseitigt usw. werden. Dabei ist eine vollstandige raumliche Trennung derAusfuhrungsumgebung des Mulogssystems und der graphischen Oberflache gege-ben und eine Client/Server-Architektur realisiert worden.

Page 21: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 14

Abbildung 2.4: Grafische Benutzeroberflache

Das Objekt-Modell CORBA

CORBA1 ist eine Spezifikation der Object Management Group (OMG). Innerhalbder CORBA-Spezifikation wird ein Objekt-Modell beschrieben. Es werden im Kernfolgende Eigenschaften festgelegt:

• Aufruf von Funktionen eines entfernten Rechners.

• Lokalisierung von Diensten uber ein Namens-Verzeichnis.

• Aktivierung von entfernten Diensten.

Diese Spezifikation wird von verschiedenen Herstellern implementiert und dientdem Austausch von Informationen und Rechnerressourcen uber Hard- und Soft-waregrenzen hinweg. Sie bieten damit das Potential, Kleinst-Computer, die z. B.in Datenloggern stecken, mit einem geringen Aufwand auf funktionaler Ebene ineinem Programm zu integrieren. Das Auslesen der Daten und die Konfigurationdes Datenloggers wird dabei uber Funktionsaufrufe realisiert, und die aufwendigeGestaltung von Import-Programmen entfallt.

Unter der Voraussetzung, dass die Implementierung der CORBA-Spezifikation uberMulti-Threading verfugt, eignet sich CORBA als Kommunikationstechnologie furden Aufbau eines Rechnerverbundes, da die Eigenschaften der Hard- und Softwa-rearchitektur der im Rechnerverbund gekoppelten Computer abstrahiert werden. Esmuss auf der Ebene der Kommunikation keine Besonderheit berucksichtigt werden,weil eine einheitliche Schnittstelle zur Verfugung steht.

1CORBA steht fur Common Object Request Broker Architektur

Page 22: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 15

Die Multithreating-Fahigkeit der CORBA-Implementierung ist von entscheidenderBedeutung. Der Aufbau eines Rechnerverbundes erfordert die Synchronisierung dernebenlaufig berechneten Zwischenergebnisse. Ein Ergebnis B kann nicht berech-net werden, ohne dass das Ergebnis A vorliegt. Aus diesem Grund muss eine Ab-stimmung zwischen den einzelnen Prozessen erfolgen. Diese Synchronisierung kannentweder explizit durch den Programmentwickler vorgenommen werden oder trans-parent (ohne das der Entwickler sich darum kummern muss). Eine explizite Syn-chronisierung bietet den Vorteil der Optimierung auf den verwendeten Algorith-mus, stellt jedoch hohe Anforderungen an den Programmentwickler. Findet einetransparente Synchronisierung Verwendung, teilt das Entwicklungssystem das Pro-gramm in einzelne Programmteile, die unabhangig voneinander ablaufen konnen.Der Programmentwickler hat in diesem Fall nur eingeschrankte Moglichkeiten, aufdie Aufteilung des Quellcodes in einzelne Programmblocke, die im Rechnerverbundverteilt werden sollen, Einfluss zu nehmen.

Kommunikation

Die Kommunikation ist der begrenzende Faktor fur den Aufbau eines Rechnerver-bundes. Die Ubertragung selbst eines einfachen Datenpaketes ist um einen Fak-tor > 104 langsamer als die Ubertragung innerhalb eines Rechners. Es wird ei-ne 100MBit schnelle Verbindung benutzt. Uber diese Verbindung werden mittelsTCP/IP Daten ubertragen.

2.4 Datenbank

Die Datenbank ADB besteht aus den Tabellen Kartoffel und Schwarzfleckig-keit. Ursprunglich wurden die Daten mit einem Tabellenkalkulationsprogramm vonHerrn Dr. Wormanns und Herrn Dr. Hoffmann erfasst. Diese Daten wurden ent-sprechend aufbereitet und in eine Datenbank transferiert.

Die Datenbank liegt auf dem MySQL Datenbankverwaltungsprogramm. Das Mulog-System kann direkt auf diesen Datenbestand zugreifen.

Die Datenstruktur fur die Kartoffeldaten

In der Tabelle Kartoffel befinden sich die Werte fur jede einzelne Kartoffel. Die Kar-toffel wird nicht nur geviertelt, sondern diese Kartoffelstucke werden auf verschie-dene chemische Inhaltsstoffe getestet. Die Temperatur soll wird aus der Einstellungdes Lagers ubernommen, wahrend die Temperatur ist die tatsachlich durch einenDatenlogger in unmittelbarer Nahe zu der Kartoffelcharge gemessene Temperaturdarstellt. Die Kartoffeln werden vor der Lagerung mit einer Hydropuls-Anlage me-chanisch geschuttelt. Die Hydropuls-Anlage wird per Computer gesteuert und hebtund senkt eine Charge Kartoffeln uber den vorgegebenen Zeitraum mit der vorge-gebenen Belastung. Das Heben und Senken kann stoßartig erfolgen. Die Hydropuls-Anlage kann dabei die Belastungswerte auf eine Charge Kartoffeln applizieren, dieauch wahrend der normalen Bearbeitungskette von der Ernte bis zur Lagerung ent-stehen. Im ATB kommt fur die Messung der Starke und der Dauer der mechanischenBelastung eine am ATB fur die Qualitatssicherung von Agrarprodukten kunstlicheKartoffel (siehe [69, HEROLD 95]) zum Einsatz, die von der Große her einer Kar-toffel entspricht, aber uber einen Kleinstcomputer, Drucksensoren, einem Speicherund eine Funkauslosevorrichtung verfugt.

Es werden folgende Werte erfasst:

Page 23: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 16

• Id

• Nr

• Belastung

• Dauer

• Datum

• Temp soll (Temperatur geplant)

• Temp ist (Temperatur real gemessen)

• K Gehalt (Kalium)

• Verdg K Gehalt (Verdunnung Kalium)

• Fe Gehalt (Eisen Gehalt)

• Vit C (Vitamin C)

• Ca Gehalt (Calcium)

• Verdg Ca Gehalt (Verdunnung Calcium)

• NO3 Gehalt (Nitrate)

• Verdg NO3 (Verdunnung Nitrate)

• Sorte

• Staerke (Starke)

Die Datenstruktur fur die Schwarzfleckigkeitsdaten

Es konnen jeder Kartoffel mehrere schwarze Flecken zugeordnet werden. Fur dieAnalyse der Schwarzfleckigkeit werden die Kartoffeln durch zwei Schnitte, einemLangsschnitt und einem Querschnitt, geviertelt. Die schwarzen Flecken auf derOberflache dieser Kartoffelviertel werden gemessen.

• Id

• Nr

• rel schwFlaeche

• Scheibenflaeche Laengsschnitt

• schwFlaeche Laengsschnitt

• Scheibenflaeche Querschnitt

• schwFlaeche Querschnitt

• Scheibenflaeche Laengsschnitt 2

• schwFlaeche Laengsschnitt 2

• Scheibenflaeche Querschnitt 2

• schwFlaeche Querschnitt 2

Page 24: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 17

Aus den Daten der Tabelle Schwarzfleckigkeit kann nicht nur die Oberflache derKartoffelviertel berechnet werden, sondern auch die Flache der einzelnen schwar-zen Flecken. Die Summe der einzelnen schwarzen Flecken (Flachen) ergibt die vonSchwarzfleckigkeit betroffene Flache. Das Verhaltnis, der von Schwarzfleckigkeit be-troffenen Flache zur Gesamtschnittflache, ergibt die relative Schwarzfleckigkeit. Eswird angenommen, dass das Verhaltnis entlang der Schnittflachen dem relativenVerhaltnis innerhalb der gesamten Kartoffel entspricht. Wobei jedoch Abweichun-gen zwischen der Verteilung entlang der Schnittflachen und der wirklichen Vertei-lung der schwarzen Flecken in der Kartoffel durchaus moglich sind, da die Messungan den Schnittflachen von der wirklichen Verteilung der Schwarzfleckigkeit in derKartoffel abweichen kann. Eine genauere Messung ware mit Hilfe der Computer-Tomographie moglich.

Abbildung 2.5: Langs- und Querschnitt durch die Kartoffel

2.5 Die Applikationssprache Mulog

Mulog ist eine Applikationssprache, die stark an Datalog angelehnt ist. Es werdenjedoch einige von Datalog bekannte Eigenschaften nicht implementiert. Dafur bietetdie Applikationssprache Mulog Fahigkeiten, die Datalog nicht kennt. Die wesentli-chen Vorteile sind:

• Parallelitat

• Verarbeitung von 64-Bit Fließkommazahlen

• Befehle fur die Erzeugung und Auswertung von Neuronalen Netzen

Die Arbeitsweise von Mulog basiert auf dem Prinzip der Resolution. Programmebestehen aus Fakten und Pradikaten. Ein Kopf-Term gilt als erfullt, wenn alle sei-ne Ziel-Terme erfullt werden konnten. Scheitert ein Ziel-Term, wird versucht, furden vorhergehenden Term eine neue Erfullung der Variablen zu suchen. Gelingtdies, wird versucht das aktuelle Pradikat mit der neuen Bindung der Variablen zuunifizieren. Wie man anschaulich in der Abbildung 2.6 sieht, wird dabei ein Tiefen-suchbaum durchlaufen. Dieser Suchbaum wird solange durchlaufen, bis ein Blatt imSuchbaum erreicht wurde (erfolgreich) oder alle moglichen Wege erfolglos versuchtwurden (ohne Erfolg). Eine Bindung an ein Pradikat gibt daher den Wert wahr fureine erfolgreiche Unifikation zuruck, oder den Wert falsch, wenn es keine Losung

Page 25: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 18

gibt. Das Programm wird dabei als Quellcode erstellt und entweder von einem In-terpreter abgearbeitet oder von einem Ubersetzer compiliert. Ein Interpreter hatgegenuber einem Ubersetzer den entscheidenden Nachteil, dass jeder im Quellcodegeschriebene Befehl zur Laufzeit in seine Bestandteile zerlegt werden muss. Es mussdie Syntax analysiert, Sprungmarken berechnet und Variablen alloziert werden. Die-se Arbeitsschritte reduzieren die Geschwindigkeit des eigentlichen Programms. Derentscheidende Vorteil des Interpreters ist, dass interpretierte Programme sofort ge-startet werden konnen, sofern ein zur Applikationssprache passender Interpreter zurVerfugung steht.

Ubersetzte Programme sind auf ihre Zielplattform beschrankt. Sie mussen fur jedeZielplattform separat ubersetzt werden. Dafur wird die Uberprufung der Syntax,die Berechnung der Sprungmarken etc. nur einmal bei der Ubersetzung des Pro-gramms durchgefuhrt und nicht bei jedem Programmstart. Aufgrunddessen, dassProgramme, die in der Applikationssprache Mulog geschrieben werden, auf einemCluster laufen und auch sonst die Forderung nach einem leistungsfahigem Systemim Sinne von hoher Rechenleistung in kurzer Zeit bestand, musste Mulog auf einemUbersetzer-Ansatz aufbauen. Der Mulog-Ubersetzer produziert keinen Maschinen-code, sondern einen Zwischencode. Dieser Zwischencode kann sehr schnell interpre-tiert werden, ohne jedoch die Geschwindigkeit eines zu Maschinencode ubersetztenProgramms zu erreichen. Weil die Applikationssprache Mulog als eine Applikations-sprache fur einen Rechner-Cluster entworfen wurde, wobei der Cluster aus Rech-nern mit unterschiedlicher Hard- und Software ausgerustet sein kann, bestand dieNotwendigkeit, von der zugrunde liegenden Hard- und Softwareplattform zu abstra-hieren und einen portablen P-Code zu erzeugen. Dieser Ansatz wird auch von derProgrammiersprache Java realisiert. Die Programmiersprache Pascal basierte alserste Applikationssprache auf P-Code. Unter [14, WILHELM 97] findet sich eineausfuhrliche Beschreibung des P-Codes.

Erkennbar ist, dass die Applikationssprache Mulog einen ahnlichen Aufbau wie dieProgrammiersprache Datalog hat, realisiert aber nicht den vollen Sprachumfang. ImKontrast dazu, sind die mathematischen Operationen wesentlich verbessert wordenund eine Ausrichtung fur die Parallelbearbeitung ist primares Gestaltungsmerkmalgewesen.

Der Mulog-Ubersetzer besteht aus drei Modulen.

• Der Scanner liest den Programmquellcode ein und gruppiert die Zeichen desQuellcodes in logische Gruppen. Diese Gruppen werden Token genannt.

• Der Parser uberpruft die Syntax des Programms. Er verarbeitet die Token desScanners.

• Der Ubersetzer - auch Code-Emitter genannt - transformiert die Token, inKenntnis seines durch den Parser festgelegten Kontextes, in einen Maschinen-code.

2.6 Die Grammatik der logischen Applikations-sprache Mulog

Die Applikationssprache Mulog beruht auf einer kontextfreien Grammatik. Die kon-textfreie Grammatik G wird als Tupel (N, T, P, S) beschrieben[5, WYK 2002]. Nsind die nonterminalen Symbole, S die Menge der terminalen Symbole, P ist dieMenge der Produktionsregeln und S das Startsymbol. S ist dabei ein nichttermina-les Symbol S ∈ T. Die Produktionsregeln sind definiert durch P ⊂ N × (N ∪ T )∗.

Page 26: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 19

Aktuelle Position

Gescheiterte Unterziele

Abgesuchter Baum

Unterziele

Abbildung 2.6: Tiefensuchbaum

Fakten

Ein Faktenname rn ist definiert durch rn ∈ (a− z)((a− z)|(A− Z)|(0− 9))∗.

Regeln

Eine Regelname rn ist definiert durch rn ∈ (a− z)((a− z)|(A− Z)|(0− 9))∗.

Startsymbol

Das Startsymbol des Mulog-Systems lautet ”?-”. Es wird ublicherweise als letzteZeile in einem Mulog-Programm verwendet.

Prafix

Damit Fakten als parallelisierbar erkannt werden, verwendet Mulog den ”multiple:”Prafix, so konnen die Regeln entsprechend parallelisiert werden.

2.7 Syntax

Die Syntax einer Applikationssprache beschreibt, wie Befehle aufgebaut sein durfen.Es gibt Regeln, die der Quellcode eines Programms erfullen muss, damit das Pro-

Page 27: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 20

gramm ubersetzt werden kann. Trifft der Ubersetzer bei der Bearbeitung des Quell-codes auf einen nicht den Ubersetzungsregeln entsprechenden Term, wird ein Uber-setzungsfehler erzeugt, der den Fehler beschreibt, damit er korrigiert werden kann.Diese Regeln werden in den folgenden Abschnitten beschrieben.

Term

Der Begriff Term wird eingefuhrt, um einen Sammelbegriff fur die Definition derBestandteile des Wortschatzes der Applikationssprache Mulog zu haben. Ein Termbesteht aus Konstanten, Variablen, Strukturen, Pradikaten, Fakten und Operato-ren. Jedes aus Zahlen und Buchstaben zusammengesetzte Wort ist ein Term.

Typen

Alle Typen werden in der untersten Ebene von Mulog auf einen Datentyp, das Atomabgebildet. Dennoch unterscheidet Mulog zwischen den vier Datentypen:

• Naturliche Zahl

• Reelle Zahl

• Zeichenkette

• Boolscher Wert

Es ist zu beachten, dass der Zahlenbereich dabei durch die Hardwarearchitekturbeschrankt wird. Naturliche Zahlen werden dabei in einem 32-Bit Wert abgelegt,Reelle Zahlen in einem 64-Bit Wert und Zeichenketten konnen in der vorliegendenImplementierung nicht mehr als 231 Zeichen fassen. Eine leistungsfahigere Hardwa-replattform wird zu einer Ausweitung der Zahlenbereiche fuhren, aber nichts daranandern, dass auf heute verfugbaren Rechnern die Zahlenbereiche immer beschranktsind.

Typ Abkurzung Zahlenbereich Realer ZahlenbereichNaturliche Zahl Integer N -2147483647 bis

2147483648Reelle Zahl Double R 4, 9406564841247∗ 10−324

bis1, 79769313348623∗ 10308

und−1, 79769348232 ∗ 10308

bis −4.94065645841247∗10−324

Zeichenkette α ∈ [ASCII2]* Lange(α) ∈ N Lange(α) ≤ 231

Boolscher Wert Bool α ∈[wahr|falsch] α ∈[wahr|falsch]

Tabelle 2.1: Zahlenbereiche

2American Standard Code for Information Interchange plus Erweiterung der wichtigsten eu-

ropaischen Lander, genannt PC8, 256 verschiedene Zeichen darstellbar

Page 28: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 21

Vorgenannte Datentypen konnen zum Teil untereinander konvertiert werden. EineZeichenkette kann in eine Fließkommazahl gewandelt werden, wenn die Zeichenkettenur aus Zahlen und maximal einem Punkt besteht.

Eine Zeichenkette kann in eine naturliche Zahl gewandelt werden, wenn die Zeichen-kette nur aus Zahlen und maximal einem Punkt besteht. Alle Zahlen, die hinter demPunkt stehen werden dabei ignoriert. Es findet keine Aufrundung sondern immerein Abrunden statt.

Eine Fließkommazahl kann in eine naturliche Zahl gewandelt werden. Es wird immerabgerundet.

Eine naturliche Zahl kann in eine Fließkommazahl gewandelt werden.

Konstanten

Eine Konstante kann entweder eine vorzeichenbehaftete naturliche Zahl im Bereichvon -2147483647 bis 2147483648 sein, eine Fließkommazahl oder eine Zeichenkette.Beginnt eine Zeichenkette mit einem Anfuhrungszeichen, dann muss diese Zeichen-kette auch mit einem Anfuhrungszeichen enden. Folglich wird dann angenommen,dass alle Zeichen zwischen dem ersten Anfuhrungszeichen ” und dem abschließendenAnfuhrungszeichen ” zu der Zeichenkette gehoren. Sonderzeichen, wie zum Beispieldas ” ” mussen immer in Anfuhrungszeichen ” gesetzt werden. Eine Konstante vomTyp Zeichenkette muss mit einem kleingeschriebenen Buchstaben beginnen, oder inAnfuhrungszeichen ” geschrieben werden. Alle Konstanten sind unter Mulog auchAtome. In diesem Punkt unterscheidet sich Mulog von Datalog.

In Datalog sind Zahlenkonstanten keine Atome, in Mulog sind jedoch Zahlenkon-stanten auch Atome.

Term Erlauterung4 Eine Konstante vom Typ Integer

3.1415 Eine Konstante vom Typ Doubleflugzeug Eine Konstante vom Typ Zeichenkette

”Flugzeug” Eine Konstante vom Typ ZeichenketteFlugzeug Keine Konstante, sondern eine Variable

aT10 Eine Konstante vom Typ Zeichenkette

Tabelle 2.2: Ubersicht uber die Konstantendeklaration

Variablen

Variablen beginnen mit einem Großbuchstaben. Sie durfen nicht in Anfuhrungszei-chen ” gesetzt werden und sie durfen keine Steuerzeichen enthalten. Eine Beson-derheit ist die Variable ” ”. Sie wird auch die anonyme Variable genannt. Tritt dieVariable ” ” mehrfach in einem Term auf, kann sie unterschiedliche Werte anneh-men. Sie wird eingesetzt, wenn die Bindung an diese Objekte unerheblich ist, oderwenn die Variablen nur ein einziges Mal in dem gesamten Term vorkommen. Diesewird nicht gebunden, sondern steht fur eine beliebige Bindung.

Die Bedeutung einer Variablen beschreibt [18, CLOCKSIN 90] anschaulich mit:

”Eine Variable steht fur ein Objekt, das wir moglicherweise nicht benennen konnen.Dies entspricht etwa der Verwendung von Pronomen im Deutschen.”

In dem Fakt pflanze(X). Ist X die Variable.

Page 29: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 22

Term ErlauterungA Eine Variable

T30io Eine Variablet Keine Variable

Tabelle 2.3: Ubersicht uber die Variablendeklaration

Operatoren

Um mathematische Terme zu berechnen, werden in der Applikationssprache MulogFunktoren als Operatoren dargestellt. Sollen zwei Zahlen addiert werden, werdender Funktion + die beiden Werte als Parameter mitgegeben. Da die Schreibweise+(3,4) nicht der ublichen Darstellung von arithmetischen Termen entspricht, kanndie Schreibweise umgestellt werden und eine Infix-Schreibweise benutzt werden.Die Funktion +() wird durch den Operator + ersetzt, der in der Mitte zwischenzwei Zahlen steht. Aus dem Term +(3,4) wird 3+4. Die Infix-Schreibweise hatjedoch den Nachteil, dass die Abarbeitung der Operatoren nicht strikt von linksnach rechts, sondern in Abhangigkeit von der Prioritat des Operators erfolgt. EineMultiplikation oder Division muss vor einer Addition oder Subtraktion ausgefuhrtwerden. Bei der Funktionsschreibweise tritt dieses Problem nicht auf, weil die imOperationsbaum am tiefsten liegenden Funktionen ausgefuhrt werden. Der Parserder Applikationssprache Mulog wandelt daher die Operatoren in Funktionsaufrufeum, dabei wird die Prioritat und die Klammerung berucksichtigt. Weiterhin istdie Assoziativitat fur die Interpretation eines arithmetischen Terms wichtig. DerTerm 8/4/2 kann entweder als (8/4)/2 interpretiert werden, dann ist ein Operatorlinks-assoziativ ausgegangen, oder als 8/(4/2), dann ist er rechts-assoziativ. DieAbbildung 2.7 zeigt die Wandlung des arithmetischen Terms 3-4+(5+6*7).

3 − 4 + ( 5 + 6 * 7 )

* (6,7)

+(5,*(6,7))

−(3,4)

+(−(3,4),+(5,*(6,7)))

Abbildung 2.7: Wandlung eines arithmetischem Ausdrucks in einen Funktionsbaum

Vergleichsoperatoren

Viele Algorithmen benotigen einen definierten Zustand ihrer Eingangsvariablen, da-mit eine erfolgreiche Bearbeitung moglich ist. Ob eine Variable oder eine Konstantein einem, fur die Fortsetzung der Funktion gultigen Bereich liegt, kann mittels derVergleichsoperatoren getestet werden. Scheitert ein Vergleichsoperator, wird derAlgorithmus nicht fortgefuhrt. Es werden die Vergleichsoperatoren kleiner, kleineroder gleich, großer, großer oder gleich, gleich und nicht gleich unterstutzt.

Page 30: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 23

Vergleichsoperator Mulog-Syntax Erlauterung< < Ist der erste Parameter

kleiner als der zweiteParameter, wird derboolsche Wert wahr,ansonsten wird ein falschzuruckgeliefert.

≤ <= Ist der erste Parameterkleiner oder gleich demzweiten Parameter, wirdder boolsche Wert wahr,ansonsten wird ein falschzuruckgeliefert.

> > Ist der erste Parametergroßer als der zweiteParameter, wird derboolsche Wert wahr,ansonsten wird ein falschzuruckgeliefert.

≥ => Ist der erste Parametergroßer oder gleich demzweiten Parameter, wirdder boolsche Wert wahr,ansonsten wird ein falschzuruckgeliefert.

= = Ist der erste Parametergleich dem zweitenParameter, dann wird derboolsche Wert wahr,ansonsten wird ein falschzuruckgeliefert.

6= \ = Ist der erste Parameterungleich dem zweitenParameter, dann wird derboolsche Wert wahr,ansonsten wird ein falschzuruckgeliefert.

Tabelle 2.4: Vergleichsoperatoren und ihre Syntax

Gleichheit

In den meisten funktionalen Applikationssprachen gibt es eine Zuweisung. Dort wirdder Wert von der rechten Seite, der Variablen auf der linken Seite zugeordnet. UnterMulog gibt es die Zuweisung nicht, sondern ein anderes Konzept - die Gleichheit =.Dabei schrankt der Gleichheitsoperator = die Richtung der Zuweisung nicht ein.Es kann eine gebundene Variable an eine ungebundene Variable ubertragen werden,dabei ist die Richtung nicht entscheidend. Sind beide Variablen an den gleichenWert gebunden, liefert der Operator = den boolschen Wert wahr zuruck. Ist nureine Variable gebunden wird der gebundene Wert mit dem Atom auf Gleichheitgetestet. Die gesamten Moglichkeiten werden in der Tabelle 2.5 gezeigt. Die erstenzwei Spalten enthalten den Ausgangszustand. Die dritte Spalte gibt den Ruckga-

Page 31: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 24

bewert des Gleichheitsoperators an. Scheitert die Gleichheit, wird ein sogenanntesBacktracking veranlasst. Die vierte und funfte Spalte geben den Zustand der Termedes Gleichheitsoperators nach seiner Anwendung an.

Term1 Term2 = Term1 Term2

geb. Variable α geb. Variable α wahr geb. Variable α geb. Variable αgeb. Variable α geb. Variable β falsch geb. Variable α geb. Variable βgeb. Variable α Variable wahr geb. Variable α geb. Variable α

Variable geb. Variable α wahr geb. Variable α geb. Variable αAtom α geb. Variable α wahr Atom α geb. Variable αAtom α geb. Variable β falsch Atom α geb. Variable βAtom α Variable wahr Atom α geb. Variable α

geb. Variable α Atom α wahr geb. Variable α Atom αgeb. Variable α Atom β falsch geb. Variable α Atom β

Variable Atom α wahr geb. Variable α Atom αAtom α Atom α wahr Atom α Atom αAtom α Atom β falsch Atom α Atom β

Tabelle 2.5: Ubergangstabelle und Ruckgabe des Gleichheitsoperators

Der lokale Datenpool

Die Applikationssprache Mulog kennt keine globalen Variablen, Prozeduren oderFunktionen, sondern nur Fakten und Regeln. Eine globale Variable wird benotigt,um von mehreren Stellen in einem Programm einen Wert abzurufen. In der Ap-plikationssprache Mulog werden fur diesen Zweck Fakten im lokalen Datenpool ge-speichert. Ein Fakt kann beliebig viele Argumente speichern und gehort keinemDatentyp an. Um einen Fakt in dem lokalen Datenpool zu speichern, muss der Fak-tenname im Programm stehen, optional gefolgt von mehreren zu diesem Faktumassoziierten Argumenten, die in den Klammern () stehen.

auto(”U-WA 567”,”Volkswagen”,”Golf”).

steht fur einen Fakt auto. In diesem Fakt werden die Informationen

”U-WA 567”,”Volkswagen” und ”Golf” gespeichert. Dieses Faktum ist aber nichtdie einzig mogliche Auspragung des Faktes auto. Es konnen weitere Fakten vomTyp auto im lokalen Datenpool gespeichert werden.

auto(”Z-A 1478”,”Opel”,”Calibra”).auto(”P-TI 5533”,”Opel”,”Astra”).auto(”N-UR 6546”,”BMW”,”M5”).

Der Name des Fakts reicht dann nicht mehr aus, einen eindeutigen Datensatz zureferenzieren. Vielmehr mussen weitere Kriterien zur Lokalisierung herangezogenwerden. In dem Beispiel auto kann jeder Datensatz gezielt uber das Feld ”AmtlichesKennzeichen” referenziert werden. Es hangt von der Aufgabe ab, ob es sinnvoll ist,jedem Fakt einen eindeutigen Schlussel zuzuordnen. Jedoch ist es aufwandiger, eineneindeutigen Schlussel zu einem spaten Zeitpunkt in der Programmentwicklung denFakten zuzuweisen. Wie schon angedeutet, konnen Mulog-Fakten von verschiedener

Page 32: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 25

Argument-Wertigkeit verarbeitet werden. Allerdings besteht das Risiko, Fakten undRegeln bei der Anpassung zu ubersehen, weil der Ubersetzer keine Prototypen fureinen Fakt kennt und somit Fluchtigkeitsfehler nicht erkennt.

Soll zum Amtlichen Kennzeichen P-TI 5533 das entsprechende Auto ermittelt wer-den, dann lautet die Anfrage:

?-auto(”P-TI 5533”,Hersteller,Marke).

Als Antwort erhalt man:

Hersteller=”Opel”, Marke=”Astra”.

Das Pradikatenkalkul

Die Funktionsweise der Applikationssprache Mulog basiert auf dem Pradikaten-kalkul. Dem Pradikatenkalkul liegen die logischen Operatoren zugrunde:

Operation Operator Ausgesprochen Erlauterung

Negation ¬α Nicht α der boolsche Wertwird negiert

Konjunktion α ∧ β α und β nur wahr wenn α undβ wahr sind, sonstfalsch

Disjunktion α ∨ β α oder β wahr wenn mindestenseiner der Werte α oderβ wahr sind

Aquivalenz α ≡ β α ist aquivalent zu β Sind α und β gleich,folgt daraus das α ⊃ βwahr ist

Implikation α ⊃ β α impliziert β Aus einem wahrenWert kann keinfalscher Wert gefolgertwerden

Tabelle 2.6: Ubersicht uber die logischen Operatoren

Die logischen Operatoren lassen sich am Besten uber Wahrheitstabellen veranschau-lichen.

Dabei werden die vier moglichen Belegungen der boolschen Werte α und β angege-ben und das Ergebnis der Operation.

α ¬α

wahr falschfalsch wahr

Tabelle 2.7: Wahrheitstabelle fur die Negation

Page 33: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 26

α β α ∧ β

wahr wahr wahrwahr falsch falschfalsch wahr falschfalsch falsch falsch

Tabelle 2.8: Wahrheitstabelle fur die Konjunktion

α β α ∨ β

wahr wahr wahrwahr falsch wahrfalsch wahr wahrfalsch falsch falsch

Tabelle 2.9: Wahrheitstabelle fur die Disjunktion

α β α ⊃ β

wahr wahr wahrwahr falsch falschfalsch wahr wahrfalsch falsch wahr

Tabelle 2.10: Wahrheitstabelle fur die Implikation

α β α ≡ β

wahr wahr wahrwahr falsch falschfalsch wahr falschfalsch falsch wahr

Tabelle 2.11: Wahrheitstabelle fur die Aquivalenz

Page 34: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 27

Term Wandlung

α ⊃ β (¬α) ∨ βα ≡ β (α ∧ β) ∨ (¬α ∧ ¬β)¬(α ∧ β) (¬α) ∨ (¬β)

Tabelle 2.12: Wandlungstabelle

Term Wandlung

¬∃x,P ∀x,¬P¬∀x,P ∃x,¬P

Tabelle 2.13: Wandlungstabelle fur Terme mit Quantoren

Alle anderen logischen Verknupfungen konnen mit diesen funf logischen Operationenrealisieren werden.

Klauselform

Des Weiteren kann man sagen, dass das Pradikatenkalkul sehr komplex ist, daherwird eine bestimmte Reprasentation des Pradikatenkalkuls gewahlt, die die Darstel-lungsmoglichkeiten eines Terms einschrankt. Die Klauselform bietet die Moglich-keit, das Pradikatenkalkul in einer ubersichtlichen Darstellung zu realisieren. Umeinen Term in eine Klauselform zu bringen, muss die Implikation und die Aquiva-lenz durch die logischen Operatoren ¬, ∨ und ∧ ersetzt werden. Tabelle 2.12 zeigtdie Wandlung auf.

Bisher wurden nur Terme mit Konstanten behandelt. Diese Terme werden Grund-terme genannt.

Im Pradikatenkalkul konnen jedoch auch Variablen behandelt werden. Allerdings istderen Bedeutung nur in Verbindung mit Quantoren definiert. Die beiden Quantoren,der Existenzquantor ∃ und der Allquantor ∀ binden in Quantifizierungen wie ∀x,Pbzw. ∃x,P freie Vorkommen der Variablen x in ihrem Gultigkeitsbereich P ein,wobei P fur ein Pradikat steht. Der Existenzquantor ∃ wird als ”es existiert ein...”gelesen und bedeutet, dass mindestens eine Belegung der Variablen die Aussageerfullt. Der Allquantor ∀ wird als ”fur alle ... ” interpretiert, wobei die Bedingungfur jede Belegung der Variablen gultig sein muss. In der Klauselform muss dieNegation nach innen gebracht werden. Die Tabelle 2.13 zeigt die Transformation vonTermen mit außenliegender Negation, die mit Quantoren versehen sind, in Termemit innenliegender Negation.

Die Quantoren mussen in der Klauselform entfernt werden. Dies geschieht durchdie Einfuhrung einer Skolem-Konstanten. Der Existenzquantor ∃X besagt, dasses mindestens eine Belegung der Variablen X geben muss, damit die Aussage wahrist. Bei der Benutzung der Skolem-Konstanten wird die Variable X beispielsweisedurch die Belegung x20, fur die die Existenz-Aussage gilt, ersetzt. Die Skolem-Konstante ist die Belegung einer Variablen, fur die die Existenz-Aussage gilt, da-her kann, wenn die Skolem-Konstante anstelle der Variablen eingesetzt wird, derExistenzquantor weggelassen werden, weil seine Bedingung per Definition erfulltwird. Dadurch verliert der Term seinen Existenzquantoren, ohne dass sich die lo-gische Aussage geandert hatte, weil die Variable durch eine gultige Konstante, der

Page 35: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 28

Skolem-Konstanten, ersetzt wurde.

Der Allquantor wird nach außen gezogen und kann weggelassen werden, da dieAussage des Terms fur alle Belegungen gelten muss.

Als Nachstes wird der Term in die konjunktive Normalform gewandelt. PositiveLiterale werden als Ak geschrieben, wahrend negative Literale die Form ¬Bn haben.Eine Klausel hat die Form (A1∨...∨Ak∨¬B1∨..∨¬Bn). Da ¬B1∨..∨Bn aquivalentzu ¬(B1 ∧ ... ∧Bn) ist und (A ∨ ¬B) aquivalent zu (A← B) ist, kann der Term zuder Normalform

A1, ..., Ak ← B1, ..., Bn

umgebildet werden, wobei die Kommata links fur das logische ”Oder” stehen,wahrend sie rechts fur das logische ”Und” stehen.

Horn-Klausel

Ausgehend von der Normalform wird ein Spezialfall der Normalform gebildet - dieHorn-Klausel. Die Horn-Klausel hat nur einen Literal auf der linken Seite.

Eine Horn-Klausel hat die folgende Form:

A← B1, ..., Bn

Eine Horn-Klausel hat maximal ein positives Literal, genannt der Klausel-Kopf.Die Konjunktion der Literale B1, ..., Bn wird der Klausel-Rumpf genannt. EineHorn-Klausel ohne Klausel-Rumpf wird auch als Fakt bezeichnet, wahrend manbei einer Horn-Klausel mit einem positiven Literal im Klausel-Kopf und minde-stens einem Literal im Klausel-Rumpf von einer Regel spricht. Die Ansammlungvon Horn-Klauseln, die zur gleichen Anwendung gehoren, reprasentieren unter derApplikationssprache Mulog ein Programm. Horn-Klauseln mit einem identischemKopf Literal werden Alternativen genannt.

Hinter der Idee von der Verwendung der Horn-Klausel steht, dass das Kopf Literal,nur dann erfullt wird, wenn alle Rumpf-Literale erfolgreich erfullt werden konnen.Dieser Vorgang kann als sukzessive Bearbeitung der Literale B1 bis Bn verstandenwerden. Nur wenn alle Literale in dieser Kette erfullt werden konnen, gilt A alserfullt. Die Rumpf-Klauseln werden als Unterziele angesehen, die funktional abge-arbeitet werden mussen, damit das Ziel A erfullt werden kann.

Backtracking

Durch die Verwendung von Hornklauseln wird eine Regel moglicherweise in mehrereKlauseln gewandelt. Ausschließlich fur den Fall, dass alle diese Klauseln scheitern,ist die ganze Regel gescheitert. In der Praxis bedeutet dies, dass die Applikations-sprache Mulog als Erstes versucht, die erste Klausel einer Regel zu erfullen. Dabeikonnen Variablen gebunden werden. Scheitert ein folgendes Literat, muss die aktu-elle Bindung der Variablen aufgehoben werden. Dieser Vorgang wird Backtrackinggenannt. Es muss versucht werden, die Variablen mit einer bisher noch nicht ge-nutzten Belegung zu binden. Dieser Vorgang wird solange fortgesetzt, bis entwederdas folgende Literat erfullt wurde oder bis alle Moglichkeiten erschopft sind. An-schaulich wird beim Backtracking eine Tiefensuche durchgefuhrt.

Page 36: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 29

Cut

Der Cut wird durch das Symbol ”!” im Quellcode reprasentiert. Die Aufgabe desCuts ist es, das Backtracking zu verhindern. Wird ein Cut in einer Klausel aus-gefuhrt, dann scheitert die gesamte Klausel fur den Fall, dass alle rechts vom Cutstehenden Literale scheitern, selbst wenn links des Cuts neue Variablen-Belegungenmoglich gewesen waren und dort der Tiefensuchbaum noch nicht erschopft ist. Aberauch im positiven Sinn, namlich wenn eine erfolgreiche Belegung gefunden wurdeund ein Backtracking keinen Sinn macht, wird ein Cut eingesetzt. Die Anwendungdes Befehls Cut kann nach [18, CLOCKSIN 90] in drei Hauptgruppen unterteiltwerden:

• ”Wenn du soweit gekommen bist, hast du die richtige Regel fur das Zielgewahlt.”

• ”Wenn du hier angelangt bist, sollst du nicht weiter versuchen, dieses Ziel zuerfullen.”

• ”Wenn du hier angekommen bist, hast du die einzige Losung fur dieses Pro-blem gefunden, und es gibt keinen Grund nach weiteren Alternativen zu su-chen.”

Handhabung

Die Quellcodedatei der Applikationssprache Mulog wird ublicherweise mit dem Suf-fix .mulog versehen. Dies ist jedoch nicht zwingend, sondern dient einzig und al-lein der Ubersichtlichkeit. Um die Applikationssprache Mulog leistungsfahig underweiterbar zu machen, kann ein P-Code Interpreter vor der Ausfuhrung mit spezi-ellen Objekt-Dateien gebunden werden.

Der Erzeugte P-Code Interpreter wird dabei durch die Objekt-Dateien um Funk-tionen erweitert, die im Standard-Sprachschatz von Mulog nicht existieren.

2.8 Parallele Bearbeitung

Die parallele Bearbeitung von Instruktionen verspricht eine hohere Abarbeitungs-geschwindigkeit von Programmen. Dabei werden drei Formen (siehe [22, BEER 87],Seite 5) unterschieden:

• Oder-Parallelitat ist die gleichzeitige Ausfuhrung aller Klauseln, die das ak-tuelle Ziel erfullen konnen.

• Und-Parallelitat ist die gleichzeitige Ausfuhrung aller Unterziele der aktuellenKlausel.

• Bindung-Parallelitat ist die gleichzeitige Bindung aller Argumente eines gege-benen Ziels mit dem Kopf-Literal.

Die Ausfuhrungsgeschwindigkeit steigt nur an, wenn tatsachlich Programmteile ne-benlaufig bearbeitet werden konnen und die Synchronisierungskosten den Leistungs-gewinn nicht aufzehren. Die Nebenlaufigkeit kann nur durch den Einsatz von meh-reren Prozessoren erreicht werden. Diese Prozessoren konnen entweder in einemRechner installiert sein oder zu einem Verbund von Rechnern gehoren. Die hochste

Page 37: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 30

Geschwindigkeitssteigerung verspricht eine Kombination aus den obengenanntenMethoden der Parallelitat. In der Praxis steigt der Aufwand fur die Synchronisie-rung stark an, so dass eine Effizienz-Steigerung schwer zu erreichen ist.

Der Applikationssprache Mulog liegt der Gedanke zugrunde, die Programme aufmehreren Rechnern gleichzeitig ablaufen zu lassen. Die Verwendung der Bindung-Parallelitat ist mit einem hohen Aufwand an Kommunikation innerhalb eines Rech-nerverbundes verbunden. Der Aufwand der Realisierung der Bindung-Parallelitatin der Applikationssprache Mulog scheint ebenfalls hoher zu sein als bei den beidenverbliebenen Formen der Parallelitat.

Beim Einsatz der Und-Parallelitat mussen daher fur jedes Unterziel eine Kommu-nikation von dem bearbeitenden Rechner mit dem zentralen Rechner gestartet wer-den, um die Einzelergebnisse fur eine Klausel zusammenzufuhren. Bei Verwendungder Oder-Parallelitat wird die Bearbeitung aller Unterziele einer Klausel von einemRechner allein bewerkstelligt und erst abschließend das Ergebnis an den zentralenRechner geschickt.

Weil die Bearbeitung eines Unterziels tendenziell weniger Zeit in Anspruch nimmtals die Kommunikation mit dem zentralen Rechner, ist die Oder-Parallelitat bessergeeignet fur die Verarbeitung auf einem Rechnerverbund, da somit in der Oder-Parallelitat die Kommunikationskosten geringer sind. Dies ist jedoch nicht fur jedesProgramm der Fall. Besteht ein Programm nur aus Klauseln, die keine Alternativenbesitzen, kann durch Verwendung der Oder-Parallelitat keine Geschwindigkeitsstei-gerung vorgenommen werden, wahrend die Und-Parallelitat immer noch ein lei-stungssteigerndes Potential besitzt. Letztlich hangt es sehr stark vom eigentlichenProgramm ab, welche Parallelitat besser geeignet ist [22, Beer 87].

Unter folgender Annahme ist die Oder-Parallelitat offensichtlich leistungsfahiger:

1. Die Kommunikationszeit zwischen den Rechnern im Rechnerverbund dauertlanger als die durchschnittliche Laufzeit eines Unterziels.

2. Fur jede Klausel sind mehrere Alternativen vorhanden.

3. Im Durchschnitt fuhrt eine der mittleren Alternativen zur Erfullung des Ziels.

Zu 1 ist anzumerken, dass ein Kommunikationsbefehl mehrere 10er Potenzen langsa-mer ist als die Abarbeitung eines Befehls, da die Kommunikation uber ein externesNetzwerk - ein 100MBit schnelles Ethernet-Netzwerk - abgewickelt werden muss. Diesichere Ubermittlung der Daten wird uber ein auf mehreren Schichten basierendesKommunikationsmodell abgewickelt. Viele der Schichten fugen den ursprunglichenDaten dabei weitere protokollspezifische Daten hinzu, so dass die Ubertragung voneinfachen Daten einen großen Overhead erzeugt. Dieser Overhead kann reduziertwerden, indem auf einer sehr hardwarenahen Schicht kommuniziert wird. Selbst dieBearbeitung eines komplexen Unterziels ist meistens schneller als die Ubermittlungeines Zeichens von einem Rechner zum anderen.

In den meisten Programmen gibt es fur die Erreichung des Programm-Ziels Klauselnmit mehreren Alternativen. Daher ist 2 oft erfullt.

Aus 2 folgt oft 3. Wenn mehrere Alternativen existieren, kann davon ausgegangenwerden, dass nicht immer die erste Alternative zum Ziel fuhrt, sondern mehrereVersuche mit mehreren Alternativen ausgefuhrt werden mussen, bis eine der Alter-nativen zum Ziel fuhrt.

Die Applikationssprache Mulog verwendet daher nur die Oder-Parallelitat zur Lei-stungssteigerung. Fur die Implementierung der Oder-Parallelitat spricht der geringeAufwand an Synchronisierungsaufgaben.

Page 38: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 31

2.9 Ubersetzerbau

Grundlagen

Die Definition des Ubersetzers findet sich in [15, Guting 99]:

”Ein Ubersetzer (engl. Compiler) erzeugt aus einem Quellprogramm in einer Spra-che A ein Zielprogramm in einer Sprache B. Mindestens die Quellsprache A ist durchein Regelsystem beschrieben, das der Ubersetzer benutzt, um das Quellprogrammzu analysieren; so wird insbesondere die Syntax von A durch eine Grammatik defi-niert.”

Der Quellcode eines Programms wird in einer fur den Benutzer verstandlichenForm geschrieben. Es gibt klare Regeln fur die Erstellung des Quellcodes. Eben-falls herrscht Klarheit daruber, welches Verhalten das Programm beim Ausfuhrenaufzeigen sollte. Der Ubersetzungsprozess wird nach [16, AHO 97] wie folgt be-schrieben:

”Der Ubersetzungsprozess besteht dabei aus zwei Teilen: Analyse und Synthese. DerAnalyse-Teil zerlegt das Quellprogramm in sine Bestandteile und erzeugt eine Zwi-schendarstellung des Quellprogramms. Der Synthese-Teil konstruiert das gewunsch-te Zielprogramm aus der Zwischendarstellung.”

Die Ubersetzung aus der Quellsprache A in die Zielsprache B verlauft in mehrerenPhasen. Die Phasen entsprechen dabei Teilaufgaben, die zur Ubersetzung des Quell-programm notig sind. Die auf die Bearbeitung dieser Teilaufgaben spezialisiertenProgramme werden im folgenden vorgestellt:

Der Scanner

Die Aufgabe des Scanners ist die lexikalische Analyse eines Quellcodes. Hierzu liestder Scanner einzelne Zeichen aus einer Datei und zerlegt den Eingabestrom in sinn-volle Gruppen. Die Gruppierung erfolgt gemaß den Spezifika der Programmier-sprache. Die resultierenden Gruppen werden Symbole genannt. In einem arithme-tischen Term werden ublicherweise die Zahlen von den Operatoren abgeteilt. DaZahlen im Quellcode als Zeichenkette vorliegen, wird bis zum Eintreffen eines nichtzu einer Zahl gehorenden Zeichens gelesen.

Der Sieber

Der Sieber weist den Symbolen einen Bezeichner zu und kann die vom Scannergefundenen Werte aufbereiten. Das Resultat der Aufbereitung eines Symbols erzeugteinen Token. Dabei konnen unwichtige Informationen, wie zum Beispiel Leerzeilen,aus dem Strom komplett weggefiltert werden. Eine zentrale Rolle spielt der Sieber,weil er die Schlusselworter der Applikationssprache erkennen muss. Ein Sieber mussdaruberhinaus den Symbolen weitergehende Informationen zuweisen, die nachherbeim Parsen benotigt werden.

Der Sieber wird haufig sehr eng mit dem Scanner verzahnt. So schreibt [14, WIL-HELM 97] auch:

”Programmtechnisch werden Scanner und Sieber meist zu einer Prozedur zusam-mengefasst (welche dann ebenfalls Scanner genannt wird). Konzeptionell sollte mansie aber auseinander halten, weil die Aufgabe des Scanners durch einen endlichenAutomaten erledigt werden kann, wahrend die Aufgabe des Siebers notwendiger-bzw. sinnvollerweise durch andere Funktionen vorgenommen werden.”

Page 39: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 32

Der Parser

Der Parser analysiert die Struktur der einzelnen Token und uberpruft, ob die To-ken und ihre Anordnung die Spezifikationen der Programmiersprache erfullt. Kannkeine Ubereinstimmung gefunden werden, mussen moglichst sinnvolle Fehlermel-dungen generiert werden, damit die Fehler im Quellcode moglichst leicht behobenwerden konnen. Dabei werden die Token zur weiteren Verarbeitung umgruppiert.Der Parser kann die neue Form der Token in einem Syntaxbaum darstellen. BeimParsen wird beispielsweise die Prioritat der arithmetischen Operatoren (Punkt vorStrichrechnung) berucksichtigt und der Syntaxbaum entsprechend strukturiert, sodass der Kodierer Punkt-Befehle vor Strich-Befehlen bearbeitet und somit den arith-metischen Regeln Rechnung tragt.

Die semantische Analyse

Ein Token kann in Abhangigkeit von den anderen Token in seinem Umfeld eineandere Bedeutung haben, als wenn er mit anderen Token benachbart ware. Diesemantische Analyse lost dabei die wahre Bedeutung in Abhangigkeit des Kontextesauf. Wie ersichtlich ist, brauchen strikt kontextfreie Programmiersprachen keinesemantische Analyse.

Wird ein Operator auf zwei Variablen angewendet, kann es von dem Typ der Varia-blen abhangen, ob der Operator gultig ist oder nicht, oder aber es kann vorkommen,dass ein Operator-Symbol in verschiedene Funktionen ubersetzt werden muss. Der+ Operator kann auf Zahlen angewandt, eine Addition bewirken, wahrend er inVerbindung mit Zeichenketten eine Konkatenation bedeutet.

Der Optimierer

Der Optimierer ist maschinenunabhangig. Er entfernt Token, die nie ausgefuhrtwerden konnen, aus dem Syntaxbaum. Das Vorkommen von Variablen, denen nurstatische Werte zugewiesen werden, kann durch den Zahlenwert direkt ersetzt wer-den. Weitere Einsatzgebiete fur den Optimierer sind:

• Schleifeninvariante Berechnungen aus der Schleife herausziehen

• Eliminierung von redundanten Berechnungen

• Reduzierung der Verwaltung des Kellerspeichers durch Ubergabe von Wertenin Registern

Der Kellerspeicherstapel

Der Kellerspeicherstapel ist der dynamischste Teil eines Programms. Auf dem Kel-lerspeicherstapel werden Rucksprungadressen, lokale Variablen, organisatorischeZellen etc. abgelegt. Der Kellerspeicherstapel wird von unten nach oben gefullt.Wird eine lokale Variable erzeugt, wird auf dem Kellerspeicherstapel Platz geschaf-fen, in dem der Kellerspeicherstapelzeiger um Eins erhoht wird. Wird die Variablenicht mehr benotigt, wird der Kellerspeicherstapelzeiger um Eins erniedrigt.

Page 40: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 33

Kellerspeicherstapelzeiger kszReferenz auf lokale Variable 1

Organisatorische Zelle

0 Organisatorische Zelle

Referenz auf lokale Variable 2

Beginn des Kellerspeicher

Abbildung 2.8: Aufbau des Kellerspeichers

Die Halde

In der Halde werden Laufzeitobjekte gespeichert. Wahrend der Abarbeitung ei-nes Programms kommt es vor, dass dynamische Objekte erzeugt werden, die nichtauf dem Kellerspeicher Platz finden. Sei es, weil ihr Gultigkeitsbereich den einesKellerrahmens ubersteigt, oder weil das Objekt von der Große nicht auf dem Kel-lerspeicher gelegt werden kann. Fur diese Falle existiert die Halde.

Der Rucksetzkeller

Der Rucksetzkeller, auch Trail genannt, wird intern zur Verwaltung von Objektenverwendet. Mit Hilfe des Trails ist es moglich, nicht mehr benotigte Objekte zuloschen. Diese Notwendigkeit besteht, weil sich sonst der limitierte Speicher derLaufzeitumgebung erschopfen konnte.

Der Programmspeicher

Im Programmspeicher liegt das ausfuhrbare Programm. Ein Programmzahler ver-weist auf die Stelle im Programmspeicher, von der der nachste Befehl gelesenwird. Der Programmzahler wird nach dem Lesen ublicherweise auf die Position desnachsten Befehls erhoht. Es sei denn, es wird ein Sprungbefehl gelesen. Folglich wirddie Zieladresse, die diesem Sprungbefehl zugeordnet ist, in den Programmzahler ge-laden. Gelesene Befehle fuhren eine Aktion aus. Zusatzlich konnen Speicherzellengelesen und geschrieben, interne Register manipuliert und Berechnungen ausgefuhrtwerden.

Page 41: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 34

Haldenzeiger hz

0

1

Objekt

Objekt

Objekt

Objekt

Beginn der Halde

Abbildung 2.9: Aufbau des Haldenspeichers

Viele Befehle arbeiten mit einem oder zwei Argumenten. Weil der freie Platz im Be-fehlswort eingeschrankt ist, werden die Argumente ublicherweise in den Programm-speicher hinter dem eigentlichen Befehl abgelegt. Aus diesem Grund konnen sichBefehle uber mehrere Zellen erstrecken. Die Große des Speicherbedarfs im Pro-grammspeicher hangt vom konkreten Befehl ab. Erst nachdem ein Befehl dekodiertwurde, werden eventuell weitere Daten aus dem Programmspeicher gelesen. Es wirdalso erst ein Sprungbefehl gelesen und analysiert und dann die eigentliche Sprung-adresse aus dem Programmspeicher geholt.

2.10 Kodiere-Funktionen

Mulog-Programme werden durch einzelne Funktionen ubersetzt. Die Funktionen,die die einzelnen Bestandteile eines Mulog-Programms kodieren, werden nachfol-gend vorgestellt. Dabei wird der in [14, Wilhelm 97] beschriebenen Struktur gefolgt.

Adressumgebung ρ

Die Adressumgebung ρ wird wahrend der Ubersetzung der Mulog Programmebenotigt. Die Adressen der Variablen, der Klauseln und der Fakten werden durchdie Adressumgebung ρ in den Speicher abgebildet.

Kodiere Argument

Die Ubersetzungsfunktion Kodiere Argument dient zur Kodierung der Argumen-te einer Funktion.

Page 42: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 35

0

Befehln−1

Befehln

Befehlszusatzn

Befehl1

Befehl2

Befehln+1

Programmzeiger pz

Erweiterter Befehl

Beginn des Programmspeichers

Abbildung 2.10: Aufbau des Programmspeichers

kodiere Arg a ρ = putatom akodiere Arg X ρ = putvar ρ(X) erstes Vorkommen von X

kodiere Arg X ρ = putref ρ(X) X kommt bereits vorkodiere Arg f(t1, ..., tn) ρ = kodiere A t1 ρ;

.

.

.kodiere Arg tn ρ;putstruct f/n

Kodiere Ziele des Rumpfs

Ein Rumpf-Literal wird ubersetzt und ein Kellerrahmen angelegt.

kodiere Ziel p(t1, ...tn) ρ = enter;kodiere A t1 ρ;...kodiere Arg tn ρ;call p/n

Page 43: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 36

Kodiere Kopf und Prafix

Der Kopf eines Terms wird mittels kodiere Kopf ubersetzt. Ein Prafix verandertdie Ubersetzung des Kopf-Terms. Der Prafix wird deshalb zu erst ausgewertet underzeugt einen Zustand, der als Kontext fur die weitere Ubersetzung des Kopf-Termsherangezogen wird.

kodiere Kopf a ρ = uatom a unifiziere mit Atomkodiere Kopf X ρ = ρ(X) unifiziere mit ungebundener Variable

kodiere Kopf (X) ρ = uatom a unifiziere mit gebundener Variablekodiere Kopf f(t1..., tn) ρ = uatom a unifiziere mit Struktur

down;kodiere Kopf t1 ρ;brother 2;kodiere Kopf t2 ρ;...brother nkodiere kodiere Kopf tn ρ;up

Kodiere Klausel

Mit kodiere Klausel werden Klauseln ubersetzt.

pushenv n+r+4;btinit

pusharg1;kodiere Kopf t1 ρ;pusharg2;kodiere Kopf t2 ρ;...pushargn;kodiere Kopf tn ρ;

Kopf

kodiere Ziel g1 ρ;kodiere Ziel g2 ρ;...kodiere Ziel gm ρ;

Ziel

fin btparam

btinit

Die Funktion btinit wird mit einem Parameter aufgerufen. Der Parameter kannfolgende Werte annehmen:

• first setbtp btforsetz;

• middle nextalt btfortsetz;

Page 44: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 37

• last

• single

first

Die erste, von mehreren alternativen Klauseln legt einen Rucksetzpunkt an. DieSequenz btinit btparam btfortsetz wird in den Befehl setbtp btfortsetz uber-setzt.

middle

Der Rucksetzpunkt wird verandert. Die Sequenz btinit btparam btfortsetz wirdin den Befehl nextalt btfortsetz ubersetzt.

last

Der Rucksetzpunkt wird geloscht. Die Sequenz btinit btparam btfortsetz wirdin den Befehl delbtp ubersetzt.

single

Es wird kein Befehl erzeugt, da keine Alternativen vorhanden sind.

fin

• last,single → popenv

• first, middle → restore

first , middle

Der Kellerrahmen darf nicht aufgegeben werden, da noch weitere Alternativendurchlaufen werden mussen. Die Variablen der gescheiterten Alternativen werdenrestauriert, damit ein neuer Durchlauf erfolgen kann.

last , single

Der Kellerrahmen wird aufgegeben, da keine weiteren Alternativen mehr existieren.

2.11 Kodiere Klausel-Liste

Die Funktion kodiere Klausel-Liste ubersetzt Klauseln, die den gleichen Kopf-Literal haben. Diese Klauseln stellen verschiedene Alternativen fur eine Interpreta-tion des Kopf-Literals dar.

Page 45: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 38

kodiere Klausel-Liste K1, ..., Kn =kodiere Klausel K1 first l2;

l2: kodiere Klausel K2 middle l3;l3: kodiere Klausel K3 middle l4;

.

.

.ln−1: kodiere Klausel Kn−1 middle ln;ln: kodiere Klausel Kn last 0

2.12 Kodiere Programm

Die Funktion kodiere Programm ubersetzt ein Mulog Programm.kodiere Programm p1, ..., pn =

kodiere Klausel-Liste p1;kodiere Klausel-Liste p2;...kodiere Klausel-Liste pn;

Das Programm besteht aus den Pradikaten p1, ..., pn .

2.13 Kodiere Anfrage

Die Funktion kodiere Anfrage ubersetzt die Anfrage an das Programm. Die An-frage muss immer vor dem eigentlichen Programm kodiert werden, damit die Mulog-Maschine richtig initialisiert wird.

kodiere Anfrage G1, ..., Gn =init;pushenv r+4;kodiere Ziel G1 ρ;kodiere Ziel G2 ρ;...kodiere Ziel Gn ρ;halt;

Die Variable r reprasentiert die Anzahl der Argumente in dem Klausel-Kopf.

2.14 Token

Die Zeichen werden von links nach rechts gelesen und in Symbole, auch Token ge-nannt aufgeteilt[16, ULLMAN 97] Ein Token strukturiert die wahrend des Uberset-zungsprozesses notwendigen Einheiten in einer Klasse. Der Parser vergleicht die To-ken mit den Regeln fur den syntaktisch korrekten Aufbau von Mulog-Programmen.Fur die Ubersetzung wird nicht nur die aus dem Quellcode gruppierten Zeichen ver-wendet, sondern es werden vom Parser weitere Daten, wie der Typ des Token, derVerweis auf die nachste Alternative, der intern benutzten Klauselname etc. benotigt.

Page 46: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 39

Der Konstruktor Token(text,typ,klauselName,alternative, alternativenPos,verweis)erzeugt ein Token.

Funktionsname Typ Erlauterungtext String Die Zeichen, die aus dem ScannerInput-

Stream gelesen und in diesem Token zu-sammengefasst wurden, werden in die-sem Feld abgelegt.

typ EnumTokenTyp Es gibt mehrere verschiedene Tokenar-ten. Anhand des typ Felds werden dieTokenarten unterschieden.

klauselName String Der Klauselname wird aus dem Funk-tionsnamen, dem Zeichen ” ” undder Anzahl der Funktionsparameterzusammengesetzt.

alternative EnumAlternativenArt Die Gesamtanzahl der Alternativenwird hier hinterlegt.

alternativePos Integer Ist der Token vom Typ headFuncName,gibt dieses Feld daruber Auskunft, wieoft bereits ein gleichnamiger Kopftermangefunden wurde.

verweis Integer Ist der Token vom Typ headFun-cName, zeigt verweis auf die nachsteAlternative.

Tabelle 2.14: Parameter der Token-Tabelle

Der Aufzahlungstyp EnumTokenTyp enthalt alle fur die Ubersetzung notwendigeninternen Datentypen.

EnumTokenTyp:=(REGELNAME, LISTE, RULEASSIGN, VARASSIGN, START,VARIABLE, TEXT, HEAD START, HEAD END, FUNC START, FUNC END,ARI GROSS,ARI KLEIN, ARI GROSSGLEICH, ARI KLEINGLEICH, ARI MUL, ARI DIV,ARI TESTGLEICH, ARI PLUS, ARI MINUS, ARI IST, KLAM-MER AUF, KLAMMER ZU, INTEGER, DOUBLE, TERM START, TERM END,RUN START, RUN END, ARGUMENT START, ARGUMENT END);

Klauseln konnen unterschiedlich ubersetzt werden:

• je nachdem ob es keine Alternative gibt → SINGLE,

• es die erste Klausel von mehreren Klauseln ist → FIRST,

• die Klausel eine Alternative aus der Mitte ist → MIDDLE oder

• aber die letzte Alternative ist → LAST.

Diese Unterscheidung schlagt sich in der folgenden Typ-Zuordnung nieder:

EnumAlternativenArt := (NOT SET, SINGLE, FIRST, MIDDLE, LAST);

2.15 Zwischencode Kodierer

Nachdem ein Programm durch den Scanner in einzelne Token zerlegt und die Syn-tax des Programms durch den Parser validiert wurde, ist es Aufgabe des Kodie-rers, die Token in ein ausfuhrbares Programm zu ubersetzten. Der Kodierer erzeugt

Page 47: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 40

einen Zwischencode. Dieser Zwischencode wird von einem Zwischencode Interpre-ter ausgefuhrt. Zwischencode ist vom Laufzeitverhalten langsamer als ein echterMaschinencode [72, WIRTH 86], hat dafur aber mehrere Vorteile:

• Der Befehlsumfang des Zwischencode ist fur die Applikationssprache maßge-schneidert. Die Komplexitat des Kodierers wird dadurch beachtlich reduziert.

• Der Zwischencode ist hardwareunabhangig. Lediglich der Zwischencode Inter-preter muss fur die Ziel-Plattform neu erzeugt werden. Ein Kodierer, der direktMaschinenbefehle generiert, muss in einem erheblichen Umfang neu geschrie-ben werden, da nicht nur die Maschinenbefehle eine andere Syntax haben,sondern auch die Adressierung von Speicherzellen von Hardwareplattform zuHardwareplattform stark differieren.

• Ubersetzte Programme laufen im Idealfall ohne erneute Compilierung auf allenPlattformen fur die ein Zwischencode-Interpreter existiert.

Arithmetische Bindung

Wird in einem Ziel-Term T einer Variable A eine Zahl zugewiesen, so ist dies einearithmetische Bindung der Variablen A. Eine arithmetische Bindung wird in Mulogdurch das Schlusselwort is reprasentiert. Die Syntax lautet

Variable is arithmetischer Term

Beispiele:

A is 5

A is (403+4-(7*2))

Im Normalfall wird zuerst der arithmetische Term ausgewertet und das Ergebnisanschließend an die Variable gebunden. Der Kodierer kehrt dabei die Reihenfolgeim Verhaltnis zur Schreibweise um. Es wird zuerst der arithmetische Term ausge-wertet und dann der Bindungsbefehl in den Programmspeicher geschrieben. DieKodierungssequenz lautet:

kodiere arithmetischen Term T

bind T

Arithmetischer Term - #mathexpr

Der arithmetische Term wird in mehreren Stufen ubersetzt. Es mussen zuerst dieTeil-Terme mit der hochsten Bindung ubersetzt werden. Dabei gilt, dass die Terme,die in Klammern eingeschlossen sind, zuerst ausgewertet werden mussen. Es fol-gen die Punkt-Operatoren, da diese eine hohere Bindung als die Strich-Operatorenhaben.

Der arithmetische Term wird in Teil-Terme zerlegt. Diese Teil-Terme sind durch dieOperatoren ”+” und ”-” begrenzt.

Die Kodierung lautet:

mathexpr = kodiere mexpr ((kodiere +|kodiere −) kodiere mexpr)∗

Page 48: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 41

Arithmetischer Term - #mexpr

Der arithmetische Term besteht nur noch aus Zahlen, gebundenen Variablen, denOperatoren ”*” und ”/” und den Klammern. In der Funktion mexpr wird ein Termwiederum in die Teil-Terme zerlegt. Der Term wird an den Operatoren ”*” und ”/”aufgetrennt.

Die Kodierung lautet:

mexpr = kodiere unaryExpression ((kodiere +|kodiere −) kodiereunaryExpression)∗

Arithmetischer Term - #unaryExpression

Der Term enthalt nur noch Zahlen, gebundene Variablen oder durch Klammernbeschrankte arithmetische Terme. Durch Klammern eingeschlossene Terme konnenwiederum aus Variablen, Zahlen, Klammern und den Operatoren ”+”, ”-”, ”*” und”/” bestehen. Die Zerlegung und die Ubersetzung solch eines Terms wird durch dieFunktion mathexpr bereits zerlegt. Deshalb beschrankt sich die Funktion unaryEx-pression auf den Aufruf von mathexpr fur klammerbeschrankte Terme. Die Referenzauf gebundene Variablen wird kodiert. Zahlen werden durch putatom kodiert.

2.16 Der Mulog Interpreter

Die Mulog-Maschine interpretiert den Zwischencode. Der Umfang des Zwischenco-des umfasst dabei alle Befehle, die zum Bau eines Mulog-Interpreters notwendigsind. Da der Zwischencode speziell fur die Programmiersprache Mulog entwickeltwurde, und der Ubersetzer den Zwischencode bei der Kompilierung optimiert hat,wird der Zwischencode sehr schnell interpretiert.

Der Quellcode wird dabei in dem Ordner ”klassen” hinterlegt. Der Name der Pro-grammklasse wird aus dem Namen der ausfuhrbaren Datei und dem Pfad dieserDatei gebildet. Bei der Erzeugung des Programmklassennamens wird nach folgen-dem Schema verfahren:

• Als erstes werden die Zeichen ”\” und ”/” durch einen Punkt ersetzt.

• Der Anhang der Quellcode-Datei wird in mulog klasse geandert.

• Der transformierte Pfad und Dateiname bilden zusammen mit dem Klassen-pfadprafix den Pfadnamen der Programmdatei.

• Aus der Quelldatei ”/projekte/test/t1.mulog” wird die Programmdatei ”/pro-jekte/mulog/klassen/projekte.test.t1.mulog klasse”.

2.17 Die Struktur der Mulog-Klassen

Die Struktur der Mulog-Klassen wird anschaulich im Abbild 2.11 gezeigt. Die Ver-sionsnummer ist eine 32-Bit lange Zahl. Anhand der Versionsnummer werden un-terschiedliche Lade-Mechanismen durchgefuhrt. Die Klassenstruktur kann dadurchmodifiziert werden, ohne die Verarbeitung alter Klassen einzuschranken. Es ist zubeachten, dass das hochstwertige Byte zuerst aus dem Datenstrom gelesen wird.Das niedrigste Byte steht in der Datei an der vierten Stelle.

Page 49: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 42

Blockidentifikationskennung

Jeder Block besitzt eine eigene Identifikationskennung. Die Blocke umschließen denProgrammcode, die Fakten-Basis und die Marken-Tabelle. Abbildung 2.11 zeigt denAufbau der einzelnen Blocke, die zusammen eine Mulog-Klasse bilden.

Block ID1

Versionsnummer

1. Datensatzlänge n

k. Datensatzlänge n

Block ID2

Klassenstruktur

1. Block

2. Block

1. Datensatz

k. Datensatz

Data2Data1 Data3 Data4 Datan−1 Datan

Data1 Data2 Data3 Data4 Datan−1 Datan

Blocklänge k

Abbildung 2.11: Die Sektionen der Programmklasse

Block OBJK

Ein Block, der durch die Kennung OBJK eingeleitet wird, enthalt die Namen derObjekte. Die Blocklange k gibt dabei die Anzahl der zu lesenden Objekte an. DieLange k ist ebenfalls ein 32-Bit Wert und das hochstwertige Byte steht an ersterStelle. Es folgt ein weiterer 32-Bit Wert n, der die Lange der folgenden Namens-zeichenkette enthalt. Es werden anschließend n Zeichen aus der Datei gelesen, dieden Namen des Objekts bilden. Es folgt erneut ein 32-Bit Wert, der die Langeder nachsten Namenszeichenkette enthalt. Es befinden sich k Datensatze in derProgramm-Datei. Die Datensatze werden als Objekte in der Laufzeitumgebung vonMulog hinzugefugt.

Page 50: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 43

Data2Data1 Data3 Data4 Datan−1 Datan

k. Datensatzlänge n

Data1 Data2 Data3 Data4 Datan−1 Datan

k. Datensatz

Block "B"

1. Datensatz

Blockstruktur vom Typ OBJK

1. Datensatzlänge n

"O" "J" "K"

Blocklänge k

Abbildung 2.12: Die Sektionen des OBJK-Blocks

Block PROG

Der Programmcode wird im PROG-Block gespeichert. Die Blocklange gibt die An-zahl der 32-Bit Werte des Programmcodes an. Der Programmcode wird direkt inden Programmspeicher gelesen. Jeder Mulog Zwischencode-Befehl ist genau 32-Bitlang. Das hochstwertige Byte wird als Erstes aus der Datei gelesen.

Block MARK

Der Block MARK ist fur ein Programm nicht erforderlich. Wie man sieht, enthaltder Block alle symbolischen Namen und Sprungmarkierungen. Mit Hilfe dieser Infor-mationen ist die Programmablaufverfolgung auf der Zwischencode Ebene moglich.Die Fehlersuche wird durch diese Informationen wesentlich erleichtert, da die sym-bolischen Namen und Sprungmarkierungen vom Ubersetzer aus den Namen derPradikate und Atome abgeleitet werden.

Der Blockidentifikator besteht aus vier Bytes. Die vier Bytes enthalten den ASCII-Code der Buchstaben ”M”, ”A”,”R” und ”K”. Danach folgt ein 32-Bit Wert, derdie Anzahl der Datensatze enthalt. Jeder Datensatz besteht aus einem 32-Bit Wert,der die Lange n der Daten enthalt. Danach folgen genau n Bytes. Die n Bytesbilden den symbolischen Namen. Wiederum folgt ein weiterer 32-Bit Wert. DieserWert ist ein Zeiger auf die mit dem symbolischen Namen verbundene Adresse imProgrammcode.

Block QUEL

Der Block QUEL ist fakultativ. Der Quellcode des Programms wird damit in derProgrammklasse abgelegt. Es wird dabei immer eine Klausel je Datensatz mit derentsprechenden Referenz im Programm hinterlegt. Mulog ist mit Hilfe dieser Datenund dem Block MARK in der Lage, ein Programm in Einzelschrittfolge ablaufen zulassen. Die in dem Block QUEL gespeicherten Daten werden zur Lokalisierung vonFehlern benotigt.

Page 51: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 44

Block

1. Datensatz 1. P−Code Befehl

k. P−Code nk. Datensatz

Blockstruktur vom Typ PROG

2. P−Code Befehl

"P" "R" "O" "G"

Blocklänge k

Abbildung 2.13: Die Sektionen des PROG-Blocks

Block RELO

Der Block RELO enthalt alle Daten, die zum Relozieren des Programms notig sind.Die Relozierung ist notwendig, wenn mittels einer assert- oder retract-Anweisungdas Programm modifiziert wurde, da sich dadurch auch die Sprungmarken entspre-chend in dem Programmspeicher andern. Durch eine retract-Anweisung kann daserste Auftreten eines Faktes geloscht werden. Deshalb mussen alle Programmstellen,die bisher diese Alternative angesprungen haben, auf die nachstfolgende Alternativeversetzt werden. Dazu wird die interne Reloziertabelle benutzt. Durch diese Tabelleerhalt man die Informationen, an welcher Stelle im Programm Verweise auf diesenFakt gespeichert wurden. Wird ein Programm durch ein anderes Programm impor-tiert, muss das importierte Programm ebenfalls reloziert werden, weil es wahrendder Ubersetzung fur den Beginn ab Speicherzelle 0 reloziert wurde, nun aber nichtmehr dort gespeichert werden kann, da dort das Hauptprogramm liegt. Das hatzur Folge, dass das importierte Programm und die Adresse so verschoben werdenmussen, dass das importierte Programm hinter dem aktuellen Hauptprogramm imProgrammspeicher abgelegt werden kann.

Block IMPO

Der Block IMPO ist fakultativ. Es gibt in der Programmiersprache Mulog dieMoglichkeit, Programme zu modularisieren. Dies erhoht nicht nur die Lesbarkeit,sondern die Module konnen leicht wiederverwendet werden. Mittels der Direkti-ve ”import:(Modulname).” wird ein Modul in einem Programm eingebettet. DerName des Moduls findet sich in dem Block IMPO. Ein Modul ist ein beliebigesMulog-Programm. Es werden keine speziellen Export- oder Prototyp-Informationenbenutzt.

Page 52: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 45

Data2Data1 Data3 Data4 Datan−1 Datan

k. Datensatzlänge n

Data1 Data2 Data3 Data4 Datan−1 Datan

Block "A""M" "R" "K"

1. Datensatz

Programmkode−Referenz 1

Programmkode−Referenz k

k. Datensatz

Blockstruktur vom Typ MARK

Blocklänge k

1. Datensatzlänge n

Abbildung 2.14: Struktur des Blocks fur die symbolischen Marken

Page 53: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 46

Data2Data1 Data3 Data4 Datan−1 Datan

k. Datensatzlänge n

Data1 Data2 Data3 Data4 Datan−1 Datan

Block "U""Q" "E" "L"

1. Datensatz 1. Datensatzlänge n

Programmkode−Referenz 1

Programmkode−Referenz k

k. Datensatz

Blockstruktur vom QUEL

Klausel

Blocklänge k

Abbildung 2.15: Struktur des Quellcodeblocks

Page 54: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 47

Data2Data1 Data3 Data4 Datan−1 Datan

Programmkode−Referenz 1

k. Datensatzlänge n

Data1 Data2 Data3 Data4 Datan−1 Datan

Programmkode−Referenz k

k. Datensatz

Block "E""R" "L" "O"

1. Datensatz 1. Datensatzlänge n

Marke

Adresse der Referenz

Adresse der Marke

auf die Marke

Marke

Adresse der Marke

Verweis−Referenz 1

Blocklänge k

Abbildung 2.16: Dieser Block enthalt die Informationen zum dynamischen Relozie-ren

Page 55: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 48

Das eingebettete Programm wird beim Import nur neu ubersetzt, wenn die Quell-datei des Moduls neueren Datums als die Programm-Datei des Moduls ist. DieSpeicheradressen innerhalb eines Moduls werden beim Start des Programms relo-ziert.

Wichtig ist zu beachten, dass Module sich nicht - direkt oder indirekt - selbst ladendurfen, da dadurch eine Schleife entsteht, die nicht aufgelost wird und somit nichtterminiert.

Data2Data1 Data3 Data4 Datan−1 Datan

Data1 Data2 Data3 Data4 Datan−1 Datan

"M" "P" "O"

1. Datensatz 1. Datensatzlänge n

k. Datensatzlänge nk. Datensatz

"I"Block

Programmname

Programmname

Blocklänge k

Abbildung 2.17: Struktur des Blocks fur importierte Module

2.18 Zwischencode

Mulog verwendet speziell abgestimmte Befehle die in [14, WILHELM 97] und [22,BEER 87] beschrieben werden. Die Programmiersprache Mulog ist um arithmeti-sche Befehle erweitert worden. Ebenfalls fanden Funktionen fur die Datenverteilungin den Befehlsschatz Eingang. Mulog basiert auf einer Kellerstapelmaschine undkommt mit sehr wenigen Variablen aus.

Das Programm liegt als 32-Bit Werte im Programmspeicher ps. Der aktuelle Befehlwird uber das Register pz referenziert. Das pz Register wird nach dem Lesen einesKommandos inkrementiert, außer es handelt sich um einen Sprungbefehl, dann wirddie Zieladresse in das pz Register geladen und der nachste Befehl wird somit vonder Sprungadresse gelesen.

Zur Speicherung von temporaren Daten wird der Kellerspeicher ks verwendet. Dieaktuelle Speicherstelle im Kellerspeicher wird durch den Kellerspeicherstapelzeiger

Page 56: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 49

32-Bit pz der Programmzahler32-Bit ksz der Kellerspeicherstapelzeiger32-Bit gr die Große des Programmspeichers32-Bit rz der Rahmenzeiger32-Bit[] ps der Programmspeicher32-Bit[] ks der KellerspeicherObjekt[] lzObj die LaufzeitObjekte

Tabelle 2.15: Die Register und Speichersegmente von Mulog

ksz referenziert. Der Kellerspeicher wachst von unten nach oben. Rucksprungadres-sen, gerettete Register und temporare Variablen werden im Kellerspeicher abgelegt.Der Kellerspeicherstapelzeiger zeigt dabei immer auf die Zelle oberhalb des letz-ten hinterlegten Wertes. Wird eine Funktion aufgerufen, wird die Adresse, die derSprungadresse unmittelbar folgt, auf den Kellerspeicher hinterlegt, bevor die Sprun-gadresse in das Register geladen wird. Im Anschluss werden die organisatorischenZellen auf dem Kellerspeicher gerettet und Platz fur die lokalen Variablen angelegt.Der Kellerspeicher wachst bei einem Funktionsaufruf an. Wird die Funktion been-det, wird auch der Platz der organisatorischen Zellen und der lokalen Variablen frei-gegeben. Vom Kellerspeicher wird die Rucksprungadresse in den Programmzahlergeladen und das Programm wird an der Rucksprungadresse fortgesetzt. Infolge-dessen wird durch die Freigabe der organisatorischen Zellen und lokalen Variablenund die Restauration des Progammzahlers der Kellerspeicher um die gleiche Anzahlvon Zellen dekrementiert, um die der Kellerspeicher beim Aufruf der Funktion ange-wachsen war. Der Kellerspeicherstapelzeiger befindet sich nach dem Funktionsaufrufan der gleichen Stelle wie vor dem Aufruf.

Aufgrunddessen, dass der Kellerspeicherstapelzeiger nur mit großen Schwierigkei-ten zur Lokalisierung von temporaren Variablen verwendet werden kann, existiertfur diese Aufgabe der Rahmenzeiger rz, da dieser seinen Wert bei Sprungen undder Erzeugung von lokalen Variablen nicht andert. Bei jedem Aufruf einer Funk-tion wird ein Rahmenzeiger angelegt. Der aktuelle Rahmenzeiger weist auf denPunkt im Kellerspeicher, auf den auch der Kellerspeicherstapelzeiger beim Eintrittin die Funktion zeigte. Lokale Variablen, die auf dem Kellerspeicher erzeugt werden,konnen relativ zum Rahmenzeiger angesprochen werden.

In der Laufzeitumgebung konnen Objekte (auch Atome genannt) erzeugt undgeloscht werden. Diese Atome konnen Zeichenketten oder Zahlen sein. Zur Spei-cherung dieser Atome wird lzObj verwendet. lzObj ist ein Vektor, in dem dieObjekte hinterlegt werden. Ein Objekt wird durch eine Zahl indiziert. Diese Zahlwird zur Laufzeit als Referenz auf das Objekt verwendet. Diese Referenz wird beizur Laufzeit generierten Objekten auf dem Kellerspeicher hinterlegt. Bei Atomen,die bereits bei der Ubersetzung in die Laufzeitumgebung eingefugt werden, werdendie Referenzen direkt im Programmcode eingefugt.

putatom α

Eine Zeichen- oder Zahlenkonstante wird in die Laufzeitumgebung eingefugt. DieReferenz auf diese Konstante wird von anderen Befehlen benutzt. Es ist daher nichtmehr notig, dass unter Umstanden sehr große Objekt jedes Mal mit dem Befehl neuzu kodieren. Konstanten vom Typ Zeichenkette sind nicht nur von variabler Lange,sondern die Befehle erhalten nur eine Referenz auf das Objekt. Diese Referenz istein 32-Bit Wert.

Page 57: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 50

Befehl Ubersetzung Erlauterungputatom α ksz=ksz+1;

ks[ksz]=neuesObjekt(Atom α);Ein neues Atom wird in dieLaufzeitumgebung eingefugt.Die Referenz wird auf demKellerspeicher hinterlegt.

putvar i

Eine ungebundene Variable wird hinterlegt. Dabei wird nicht die Variable sonderneine neue Referenz auf die Variable erzeugt.

Befehl Ubersetzung Erlauterungputvar i ksz=ksz+1;

ks[rz+i]=neueRef(Ref i);ks[ksz]=ks[rz+i]

Eine Referenz wird in dieLaufzeitumgebung eingefugt. DieReferenz wird auf dem Kellerspeicherhinterlegt. Dabei gibt derRahmenzeiger die Position der lokalenVariablen an.

putref i

Eine gebundene Variable wird hinterlegt.

Befehl Ubersetzung Erlauterungputvar i ksz=ksz+1;

ks[rz+i]=neueRef(Ref i);ks[ksz]=ks[rz+i]

Die Referenz wird auf demKellerspeicher hinterlegt. Dabei gibtder Rahmenzeiger die Basis-Positionder lokalen Variablen an. Die Variablei wird zur Rahmenposition addiertund die durch die Speicheradresselokalisierte Referenz wird oben aufdem Kellerspeicher kopiert.

enter

Der Befehl enter wird beim Eintritt in eine Funktion aufgerufen. Er legt einen neu-en Kellerrahmen an und reserviert den Platz fur die organisatorischen Zellen. Deraktuelle Rahmenzeiger rz wird in den Kellerspeicher gerettet.

Befehl Ubersetzung Erlauterungenter ksz=ksz+6;

ks[ksz-4]=rz;Ein neuer Kellerrahmen wird erzeugt.

call p/n

Die call Funktion ladt den Programmzahler pz mit der Adresse der Funktion p.Dadurch wird die Funktion p ausgefuhrt. Zuvor wird jedoch der neue Kellerrahmenvom Kellerspeicher in den Rahmenzeiger rz geladen. Die Rucksprungadresse wirdin dem neuen Kellerrahmen hinterlegt, um einen Rucksprung aus der Funktion zuermoglichen.

Page 58: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 51

Befehl Ubersetzung Erlauterungcall p/n rz=ksz-(n+4);

ks[rz-1]=pz;Ein neuer Kellerrahmen wird geladen,die Rucksprungadresse wird in diesemKellerrahmen gesetzt und die Funktionp wird angesprungen.

down

Der Befehl down wird fur die Kodierung von Strukturen benotigt. Die Funktiondown wird unterschiedlich ubersetzt, je nachdem, ob ein in der Struktur vorkom-mendes Atom bereits gebunden wurde oder nicht. Ist das vorkommende Atom ge-bunden, sieht die Kodierung folgendermaßen aus:

Befehl Ubersetzung Erlauterungdown ks[ksz+1]=lzObj[ks[ksz]+1];

ksz=ksz+1;Die oberste Zelle imKellerspeicher enthalt denVerweis auf das Laufzeitobjekt.Da das Laufzeitobjekt existiert,wird die in dem Laufzeitobjektgespeicherte Referenz oben aufden Kellerstapel gelegt.

Ist das Atom noch nicht gebunden worden, existiert noch kein Laufzeitobjekt, son-dern nur ein Verweis auf die Speicherstelle, in der die Referenz des zu bindendenLaufzeitobjekts gespeichert werden soll. Der Zeiger auf die Speicherstelle, in der dieReferenz hinterlegt werden soll, liegt oben auf dem Kellerstapel und wird um Einsinkrementiert und wiederum oben auf den Kellerstapel gelegt.

Befehl Ubersetzung Erlauterungdown ks[ksz+1]=ks[ks[ksz]+1];

ksz=ksz+1;Eine Verweiszelle wirdreserviert.

brother i

Der Befehl brother verhalt sich ahnlich wie der down Befehl. Der Hauptunterschiedist der Offset i, der den konstanten Offset von +1 in down ersetzt.

Befehl Ubersetzung Erlauterungbrother ks[ksz+1]=lzObj[ks[ksz]+i];

ksz=ksz+1;Die oberste Zelle imKellerspeicher enthalt denVerweis auf das Laufzeitobjekt.Da das Laufzeitobjekt existiert,wird die in dem Laufzeitobjektgespeicherte Referenz oben aufden Kellerstapel gelegt.

Ist das Atom noch nicht gebunden worden, existiert noch kein Laufzeitobjekt, son-dern nur ein Verweis auf die Speicherstelle, in der die Referenz des zu bindendenLaufzeitobjekts gespeichert werden soll. Der Zeiger auf die Speicherstelle, in der dieReferenz hinterlegt werden soll, liegt oben auf dem Kellerstapel und wird um einsinkrementiert und wiederum oben auf den Kellerstapel gelegt.

Page 59: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 52

Befehl Ubersetzung Erlauterungbrother ks[ksz+1]=ks[ks[ksz]+i];

ksz=ksz+1;Eine Verweiszelle wirdreserviert.

up

Nachdem eine Struktur unifiziert wurde, muss der Kellerstapel aufgeraumt werdenund der Automatenzustand restauriert werden. Ist der Teilterm bereits gebunden,raumt up nur den letzten Wert vom Kellerstapel.

Befehl Ubersetzung Erlauterungup kz=kz-1; Eine Verweiszelle wird

reserviert.

War der Teilterm nicht unifiziert, werden zwei Werte vom Stapel genommen, wobeider letzte Wert den aktuellen Unifikationszustand definiert.

Befehl Ubersetzung Erlauterungup kz=kz-1;

modus=ks[ksz];kz=kz-1;

Eine Verweiszelle wirdreserviert. Der aktuelle Lese-und Schreibmodus wird vomKellerspeicher gelesen.

deref objRef

Eine Variable X kann an die Variable Y gebunden sein. Diese wiederum kann an dieVariable Z gebunden sein. Um die Ursprungsbindung zu erhalten, muss die ganzeKette der Bindungen durchlaufen werden. Um die Referenz auf das tatsachlicheLaufzeitobjekt zu erhalten, wird die Funktion deref benutzt.

Befehl Ubersetzung Erlauterungderef if (typeof(halde[a]==Ref) {

Ref b=(Ref)halde[a];if (b==a) return a;

else return deref(b);}else return a;

eine ungebundene Variable zeigtauf sich selbstdie gebundene Referenz wirdaufgelostdas Objekt ist keine Referenz -das Ursprungsobjekt wurdegefunden.

uatom a

Ein Atom a wird in einem Funktionskopf angetroffen. Das Atom a kann dabei be-reits existieren oder tritt zum ersten Mal auf. Existiert das Atom a bereits, unifiziertuatom a das Atom a mit dem in der Laufzeitumgebung existierenden Atom.

Page 60: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 53

Befehl Ubersetzung Erlauterunguatom a Ref ref=deref(ks[ksz]);

ksz=ksz-1;if (typeof(lzObj[ref])==Atom) {halde[ref]=(Ref)neuesObjekt(a);trail(v);}else backtrack();

Zuerst wird versucht, einAtom a zu referenzieren.Gelingt dies, wird das Atomin die Laufzeitumgebungeingefugt und eine Referenzauf dieses Objekt wird in dielzObj hinterlegt. Falls dieBindung scheitert, wird dieFunktion backtrackaufgerufen.

Tritt das Atom zum ersten Mal auf, muss es in der Laufzeitumgebung neu generiertwerden.

Befehl Ubersetzung Erlauterunguatom a halde[ks[ksz]]=neuesObjekt(a);

ksz=ksz-1;Der oberste Wert wird vomStapel genommen und dasObjekt wird an dieser Stelle indie Laufzeitumgebungeingestellt.

uvar i

Analog zu der Unifikation mit Atomen gibt es den Befehl uvar i fur die Unifikationmit ungebundenen Variablen. Die Variable tritt zum ersten Mal auf und wird imZielterm erzeugt. Die Referenz auf die in der Zielfunktion erzeugten Variable wirddereferenziert und an die Position innerhalb der lokalen Variablen kopiert.

Befehl Ubersetzung Erlauterunguvar i ks[rs+i]=deref(ks[ksz]);

ksz=ksz-1;Es wird der Verweis auf daserste Auftreten der Variablen indie lokale Speicherzelle imaktuellen Kellerrahmenubertragen.

Tritt die Variable zum ersten Mal auf, und ist die Variable im Zielterm nicht vor-handen, muss ein entsprechendes Objekt erzeugt werden.

Befehl Ubersetzung Erlauterunguvar i Ref ref=neueRef(hz);

halde[ks[ksz]]=ref;ks[rz+i]=ref;ksz=ksz-1;

Es wird eine neue Referenzerzeugt. Diese Referenz wirdsowohl in der Halde als auch imaktuellen Kellerrahmeneingetragen.

uref i

Wurde eine Variable X bereits mittels uvar ubersetzt und wird diese Variable inner-halb der Funktion ein weiteres Mal vorgefunden, wird die Speicherzelle, die auf dieVariable X zeigt, mittels uref i ubersetzt. Ist die Variable X zur Laufzeit gebunden,wird uref i folgendermaßen ausgefuhrt:

Page 61: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 54

Befehl Ubersetzung Erlauterunguref i unify(ks[ksz],ks[rz+i]);

ksz=ksz-1;Die Funktion unify bindet dieReferenz an die Variable X.

Ist die Variable X zur Ausfuhrungszeit ebenfalls nicht gebunden, erfolgt diese Uber-setzung:

Befehl Ubersetzung Erlauterunguref i halde[ks[ksz]]=ks[rz+i];

ksz=ksz-1;Auf der Halde wird die Referenzauf die lokale Speicherzelleinnerhalb des aktuellenKellerrahmens hinterlegt.

pushenv k

Zweckmaßig ist es, beim Eintritt in eine Funktion Platz auf dem Kellerspeichersta-pel fur die organisatorischen Zellen und den lokalen Variablen zu schaffen.

Befehl Ubersetzung Erlauterungpushenv k ksz=rz+k; Platz fur den Kellerrahmen wird

auf dem Kellerspeicherstapelgeschaffen.

pusharg i

Die Referenz auf eine Variable oder ein Atom wird oben auf den Kellerspeichersta-pel kopiert.

Befehl Ubersetzung Erlauterungpusharg i ksz=ksz+1;

ks[ksz]=ks[rz+4+i];Es befindet sich die Referenz aufeinem Atom oder einer Variableoben auf demKellerspeicherstapel.

setbpt l

In Mulog konnen mehrere Alternativen je Pradikat definiert werden. Scheitert eineAlternative, wird versucht, die nachste Alternative zu erfullen. Fur den Fall, dasseine Alternative scheitert, muss im Klauselrahmen ein Rucksetzpunkt existieren.Der Rucksetzpunkt muss daher vorher mittels setbpt l angelegt worden sein.

Befehl Ubersetzung Erlauterungsetbpt l ks[rz+1]=bpt;

ks[rz+2]=tp;ks[rz+3]=hp;ks[rz+4]=l;bpt=fp;

Es wird ein neuerRuckzugspunkt angelegt. Deralte Ruckzugspunkt wirdgerettet.

Page 62: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 55

nextalt l

Scheitert eine Alternative, wird die Fortsetzungsadresse auf die nachste Alternativegesetzt.

Befehl Ubersetzung Erlauterungnextalt l ks[rz+4]=l; Die Adresse der nachsten

Alternative wird in dieorganisatorische Zelle fur denFall des Scheiterns in denaktuellen Kellerrahmeneingetragen.

delbpt

Scheitert die letzte mogliche Alternative, wird der Rucksetzpunkt aufgegeben, daer nicht benotigt wird. Es wird keine Alternative angesprungen.

Befehl Ubersetzung Erlauterungdelbpt bpt=ks[rz+1]; Der Rucksetzpunkt wird

geloscht.

popenv

Bei der Endbehandlung von Klauseln wird der Befehl popenv ausgefuhrt, falls esnur eine Klausel gab oder falls dies die letzte Alternative war. Fur den Fall, dassmehrere Alternativen existierten, wird der Klauselrahmen freigegeben. Die Klauselwird verlassen.

Befehl Ubersetzung Erlauterungpopenv if (rz>bpt) ksz=rz-2;

pz=ks[rz-1];rz=ks[rz];

Ein Klauselrahmen wirdentfernt (sofern vorhanden). Eswird die Klausel verlassen.

restore

Der Befehl restore wird nur ausgefuhrt, wenn eine andere Alternative der Klauselausgefuhrt werden soll. Dabei wird der Klauselrahmen auf die fur die Alternativegultige Adresse versetzt, und die Alternative wird angesprungen.

Befehl Ubersetzung Erlauterungrestore pz=ks[rz-1];

rz=ks[rz];Fuhrt eine Alternative aus.

halt

Der Befehl halt beendet das Programm oder fuhrt ein Backtracking aus, wenn dasProgramm von einem anderen Programm ausgefuhrt wird.

Page 63: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 56

Befehl Ubersetzung Erlauterunghalt if (bpt>rz) backtrack();

else stop();Ist noch ein Rucksetzpunktvorhanden, wird dieserangesprungen. Ansonsten wirddie Ausfuhrung des Programmsgestoppt.

init

Die Register der Mulog-Maschine mussen zu Beginn der Programmausfuhrung in-itialisiert werden. Der init Befehl wird als erster Befehl ausgefuhrt. Die FunktionFailcode zeigt auf eine Funktion zur Beendigung des Programms fur den Fall, dassdas Programm nicht erfullt werden kann.

Befehl Ubersetzung Erlauterunginit ksz=5;

rz=1;hz=0;tz=-1;bpt=1ks[5]=Adr(Failcode);ks[3]=-1;ks[4]=-1;

Ist noch ein Rucksetzpunktvorhanden, wird dieserangesprungen. Ansonsten wirddie Ausfuhrung des Programmsgestoppt.

trail adr

Im Trail werden alle Bindungen verzeichnet.

Befehl Ubersetzung Erlauterungtrail adr if (adr<ks[bpt+3]) {

tz=tz+1;tr[tz]=adr;}

Eine Adresse wird im Trailhinterlegt.

reset Adresse von, Adresse bis

Es wird ein Bereich aus der Halde geloscht. Die Adressen werden aus dem Trailgeladen. Das Loschen der Objekte in der Halde geschieht dadurch, dass die Objektein der Halde auf sich selbst zeigen.

Befehl Ubersetzung Erlauterungreset von, bis while(von<bis) {

halde[tp[von]]=tp[von];von=von+1;}

Die Referenzen in der Haldeverweisen auf sich selbst undsind somit geloscht.

backtrack

Scheitert die Erfullung eines Terms, muss zur nachstmoglichen Alternative zuruck-gegangen werden.

Page 64: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 57

Befehl Ubersetzung Erlauterungbacktrack rz=bpt;

hp=ks[rz+3];reset(ks[rz+2],tz);tz=ks[rz+2];pz=ks[rz+4];

Es wird zum letztenRucksetzpunkt gesprungen unddie in dem gescheitertenTeilterm gebundenen Objektewerden geloscht.

plus

Die Addition von zwei Zahlen wird mit plus durchgefuhrt.

Befehl Ubersetzung Erlauterungplus ksz=ksz-1;

doubled1=(double)lzObj[ks[ksz]];doubled2=(double)lzObj[ks[ksz-1]];double d=d1d2;ks[ksz-1]=neuesObjekt(d);

Die letzten zwei Werte auf demKellerspeicherstapel zeigen aufzwei Zahlen vom Typ double.Diese Werte werden addiert unddas Ergebnis gespeichert.

minus

Die Subtraktion von zwei Zahlen wird mit minus durchgefuhrt.

Befehl Ubersetzung Erlauterungplus ksz=ksz-1;

doubled1=(double)lzObj[ks[ksz]];doubled2=(double)lzObj[ks[ksz-1]];double d=d1-d2;ks[ksz-1]=neuesObjekt(d);

Die letzten zwei Werte auf demKellerspeicherstapel zeigen aufzwei Zahlen vom Typ double.Diese Werte werden subtrahiertund das Ergebnis gespeichert.

mul

Die Multiplikation von zwei Zahlen wird mit mul durchgefuhrt.

Befehl Ubersetzung Erlauterungmul ksz=ksz-1;

doubled1=(double)lzObj[ks[ksz]];doubled2=(double)lzObj[ks[ksz-1]];double d=d1*d2;ks[ksz-1]=neuesObjekt(d);

Die letzten zwei Werte auf demKellerspeicherstapel zeigen aufzwei Zahlen vom Typ double.Diese Werte werdenmultipliziert und das Ergebnisgespeichert.

div

Die Division von zwei Zahlen wird mit div durchgefuhrt.

Page 65: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 58

Befehl Ubersetzung Erlauterungdiv ksz=ksz-1;

doubled1=(double)lzObj[ks[ksz]];doubled2=(double)lzObj[ks[ksz-1]];double d=d1/d2;ks[ksz-1]=neuesObjekt(d);

Die letzten zwei Werte auf demKellerspeicherstapel zeigen aufzwei Zahlen vom Typ double.Diese Werte werden dividiertund das Ergebnis gespeichert.

2.19 Cluster-Befehle

In dieser Gruppe werden die fur den Cluster-Betrieb notigen Befehle erlautert. DieBefehle konnen entweder der Gruppe der parallelen Bearbeitung auf allen Rech-nern des Clusters zugeordnet werden oder die Befehle sind auf einem Rechner imCluster beschrankt. Weiterhin werden einige Befehle unterschiedlich interpretiert,je nachdem, ob sie auf einem beliebigen Rechner im Cluster oder auf dem zentralenLeitwolf ausgefuhrt werden.

2.19.1 Befehle fur nur einen Rechner

Der Leitwolf kann durch einen Befehl veranlasst werden, die Programmausfuhrungan einen anderen Rechner im Rechnerverbund zu deligieren.

ssetbpt l

In Mulog konnen mehrere Alternativen je Pradikat definiert werden. Scheitert eineAlternative, wird versucht, die nachste Alternative zu erfullen. Da nach einer ge-scheiterten Alternative der Kellerrahmen restauriert werden muss, wird ein Ruck-setzpunkt mit ssetbpt l angelegt.

Befehl Ubersetzung Erlauterungssetbpt l ks[rz+1]=bpt;

ks[rz+2]=tp;ks[rz+3]=hp;ks[rz+4]=l;bpt=fp;

Es wird ein neuerRucksetzpunkt angelegt. Deralte Rucksetzpunkt wirdgerettet.

snextalt l

Scheitert eine Alternative, wird die Fortsetzungsadresse auf die nachste Alternativegesetzt.

Befehl Ubersetzung Erlauterungsnextalt l ks[rz+4]=l; Fur den Fall des Scheiterns wird

die Adresse der nachstenAlternative in dieorganisatorischen Zellen desaktuellen Kellerrahmenseingetragen.

Page 66: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 59

sdelbpt

Der Rucksetzpunkt wird geloscht.

Befehl Ubersetzung Erlauterungsdelbpt bpt=ks[rz+1]; Der Rucksetzpunkt wird

geloscht.

inform

Programme, die nur auf einem Rechner im Cluster - und nicht auf dem Leitwolf- ausgefuhrt werden, haben eine asynchrone Aufgabe zu erledigen, beispielswei-se Messwerte auslesen. Damit der Leitwolf uber ein eingetroffenes Ereignis infor-miert wird, muss der Befehl inform ausgefuhrt werden. Trifft der P-Code Interpre-ter auf diesen Befehl, wird eine Kommunikationsverbindung zum Leitwolf aufge-baut. Uber die Kommunikationsverbindung wird das Atom, das uber den oberstenWert auf dem Kellerspeicherstapel referenziert wird, an den Leitwolf ubertragen.Die Ausfuhrung wird unterbrochen und es wird auf eine Antwort vom Leitwolf ge-wartet. Der Leitwolf kann entweder einen Befehl zur Fortsetzung des Programmsuber den Kommunikationskanal senden, oder die Abarbeitung unterbrechen. Wirddie Abarbeitung unterbrochen, ist es nicht mehr moglich, das Programm zu einemspateren Zeitpunkt weiter abzuarbeiten.

Befehl Ubersetzung Erlauterunginform ksz=ksz-1;

Objekt obj=lzObj[[ks[ksz]];Der Leitwolf wird informiertund das Programm wirdunterbrochen.

2.19.2 Befehle fur die parallele Bearbeitung

Der Leitwolf kann durch einen Befehl veranlasst werden, die Programmausfuhrungan mehrere Rechner im Rechnerverbund zu deligieren.

msetbpt l

In Mulog konnen mehrere Alternativen je Pradikat definiert werden. Scheitert eineAlternative, wird versucht, die nachste Alternative zu erfullen. Da nach einer ge-scheiterten Alternative, der Kellerrahmen restauriert werden muss, wird ein Ruck-setzpunkt mit msetbpt l angelegt.

Befehl Ubersetzung Erlauterungmsetbpt l ks[rz+1]=bpt;

ks[rz+2]=tp;ks[rz+3]=hp;ks[rz+4]=l;bpt=fp;

Es wird ein neuerRucksetzpunkt angelegt. Deralte Rucksetzpunkt wirdgerettet.

mnextalt l

Scheitert eine Alternative, wird die Fortsetzungsadresse auf die nachste Alternativegesetzt.

Page 67: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 2. SYSTEMARCHITEKTUR DES MULOG-SYSTEMS 60

Befehl Ubersetzung Erlauterungmnextalt l ks[rz+4]=l; Fur den Fall des Scheiterns wird

die Adresse der nachstenAlternative in dieorganisatorischen Zellen desaktuellen Kellerrahmenseingetragen.

mdelbpt

Der Rucksetzpunkt wird geloscht.

Befehl Ubersetzung Erlauterungmdelbpt bpt=ks[rz+1]; Der Rucksetzpunkt wird

geloscht.

wait

Programme, die verteilt im Rechnerverbund laufen, mussen ihre Ergebnisse an denLeitwolf melden. Damit der Leitwolf uber ein eingetroffenes Ereignis informiert wird,muss der Befehl wait ausgefuhrt werden. Trifft der P-Code Interpreter auf diesenBefehl, wird eine Kommunikationsverbindung zum Leitwolf aufgebaut. Uber dieKommunikationsverbindung wird das Atom, dass uber den obersten Wert auf demKellerspeicherstapel referenziert wird, an den Leitwolf ubertragen. Die Ausfuhrungwird unterbrochen und es wird auf eine Antwort vom Leitwolf gewartet. Der Leitwolfkann entweder einen Befehl zur Fortsetzung des Programms uber den Kommuni-kationskanal senden, oder die Abarbeitung unterbrechen. Fur den Fall, dass dieAbarbeitung unterbrochen wird, ist es nur noch moglich, das Programm zu einemspateren Zeitpunkt weiter abzuarbeiten, wenn der Kellerspeicherstapel, die Halde,der Trail, die Laufzeitobjekte und die Register synchronisiert wurden.

Befehl Ubersetzung Erlauterungwait ksz=ksz-1;

Objekt obj=lzObj[ks[ksz]];Der Leitwolf wird informiertunddas Programm wirdunterbrochen.

Page 68: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Kapitel 3

Neuronale Netze

Neuronale Netze (NN) simulieren die Arbeitsweise des menschlichen Gehirns. Dasmenschliche Gehirn unterscheidet sich fundamental von der Arbeitsweise eines Von-Neumann Rechners1. Ein Rechner schaltet dabei um ca. 6 Zehnerpotenzen schnellerals das Gehirn, arbeitet jedoch die Befehle sequentiell ab. Das Gehirn schaltet we-sentlich langsamer, hat jedoch den Vorteil der massiven Parallelitat. Aus [27, ZELL2000], Seite 25 und [37, LINDENMAIER 99], Seite 8 wird die Leistungsfahigkeitvon Gehirn und Rechner in der Tabelle 3.1 zusammengefasst. Die Neuronen einesGehirns sind faktisch permanent aktiv, wahrend nur eine geringe Zahl von Transisto-ren bei einer Informationsverarbeitung aktiv sind. Hinzu kommt die unterschiedlicheSchaltung der Elemente. Ein Neuron hat bis zu 104 Verbindungen.

Neuronale Netze sollen dabei die Lernfahigkeit des Gehirns mit Hilfe eines Compu-ters simulieren.

Soll ein Vorhersagemodell auf Basis von Neuronalen Netzen entwickelt werden,mussen zum Training des NN entsprechende Messwerte zur Verfugung stehen. Da-bei wird der Eingabevektor an die Eingabeneuronen angelegt und die Ausgabe desNeuronalen Netzes mit dem erwarteten Messwert verglichen. Stimmt die Ausgabedes NNs nicht mit dem Messwert uberein, liegt ein Fehler vor und die internenGewichtsvektoren mussen korrigiert werden.

Es gibt verschiedene Neuronale Netze, die bekanntesten sind:

• McCulloch und Pitts haben das Modell eines Neuronalen Netzes vorgestellt,das auf der binaren Datenverarbeitung basiert.

• Perceptron ist ein feedforward-Netzwerk, das ohne verdeckte Schichten aus-kommt.

• Hopfield und Madaline verarbeiten nicht nur Signale zwischen 0 und 1 sondernzwischen -1 und 1. Dadurch ist ein Hopfield/Madaline Netzwerk leistungsfahi-ger als ein Perceptron-Netzwerk.

• Backpropagation ist ein Netzwerk, das uber verdeckte Schichten verfugt unddamit sehr leistungsfahig ist.

• Kohonen und Counter-Propagation zeichnen sich dadurch aus, dass immer nurein Neuron in der Zwischenschicht aktiviert wird (Winner-take-all-Methode).

1Ein Von-Neumann-Rechner hat dabei eine klassische Arbeitsweise. Er arbeitet Befehle sequen-

tiell mit dem Prozessor ab und hat einen Hauptspeicher.

61

Page 69: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 62

Eigenschaften Gehirn Rechner

Anzahl Verarbeitungselemente ca. 1011 Neuronen ca. 109 TransistorenArt massiv parallel im allg. seriellFehlertoleranz hoch niedrigMustererkennung sehr gut schlechtNumerisch exakte Berechnung schlecht sehr gutFehlerlose Datenspeicherung schlecht sehr gutRekonstruktion defekter Daten schlecht sehr gutVerallgemeinerung von Beispielen sehr gut schlechtSpeicherung assoziativ adressbezogenSchaltung eines Elements ca. 1 ms (10−3 s) ca. 1 nc (10−9 s)”Schaltvorgange” ca. 103/s ca. 109/s”Schaltvorgange” insges. (theoretisch) ca. 1013/s ca. 1018/s”Schaltvorgange” insges. (tatsachlich) ca. 1012/s ca. 1010/s

Tabelle 3.1: Vergleich zwischen Gehirn und Rechner

• Hopfield-Netzwerke ruckkoppeln ihre Ausgabe in ihre Eingabe. Reproduziertsich das Hopfield-Netzwerk nach der Ruckkopplung selbst, ist es stabil.

• BAM erweitert das Hopfield-Netzwerk. Interessant an diesem Modell ist dieVerbindung zweier Eingaben.

• ART zeichnet sich durch die Stabilitat des Netzwerks aus. Einmal Erlernteskann nicht ohne weiteres manipuliert werden.

Eingaben AusgabenVersteckte Schichten

Abbildung 3.1: Aufbau eines mehrschichtigen Feedforward-Netzwerks

Page 70: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 63

3.1 Notation

~x Der Eingabevektor x.~y Der Ausgabevektor y.xi Der Wert an der i-ten Stelle des Eingabevektors.w Die Gewichtsmatrixwij Das Gewicht zwischen dem Neuron an der Stelle i und dem Neuron an der Stelle jθ Der Schwellenwertα, β, δ und η Die Lernrateoi Die Ausgabe des i-ten Neuronsai Die Aktivierung des i-ten Neuronszi Der gewunschte Zielzustand des i-ten Neurons4wij Die Gewichtsanderung der Gewichtsmatrix wahrend des Lernprozessesµ Das Momentum

3.2 Die Energiefunktion

Die Energiefunktion wird zum Trainieren der Neuronalen Netze verwendet. Ziel allerLern-Algorithmen ist die Minimierung der Energie, die ein Neuron zum Schaltenbenotigt. Ein Neuron funktioniert optimal, wenn das Neuron nur noch die Energiedes globalen Minimums zum Schalten benotigt.

Egesamt lokale Minima

globales Minimum

Abbildung 3.2: Energiefunktion mit zwei lokalen und einem globalem Minimum

3.3 Aktivierungsfunktion

Eine Aktivierungsfunktion bildet eine Eingabe in einem Bereich ab. Da viele Neu-ronale Netze nur mit Eingabewerten im Bereich von

0, ..., 1

arbeiten konnen, ist es erforderlich, die Werte zu skalieren. Fur diesen Vorgangeignen sich Funktionen, die einen beliebigen Wert in einem Bereich zwischen Null

Page 71: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 64

und Eins abbilden. Hinzu kommt, dass die Funktion moglichst eng liegende Einga-bewerte streckt, das heißt, die Distanz zwischen den Werten vergroßert, damit dieErkennungsleistung eines NN erhoht wird.

3.4 Das Basissystem der Neuronalen Netzwerke

Die Implementierung der verschiedenen Typen von Neuronalen Netzwerken, dieauf den folgenden Seiten vorgestellt werden, geschieht auf der Basis eines Grund-gerustes. Dieses Rahmenwerk vereinigt dabei die Gemeinsamkeiten der NeuronalenNetze. Die Komplexitat der einzelnen Module sinkt dadurch.

Das Modul Any

Das Modul Any kapselt verschiedene Datentypen. Standardmaßig werden die Daten-typen doppelt genaue Fließkommazahl, Integer und Zeichenkette unterstutzt. DieDatentypen Fließkommazahl und Integer werden von der Neuronalen Netzwerk-Bibliothek verwendet.

Konstruktor ErlauterungAny ∅ Ein leeres Objekt vom Typ Any wird

kreiert.Any Double Ein Objekt vom Typ Any wird erzeugt

und hat den Inhalt des doppeltgenauen Fließkommawerts.

Any Integer Ein Objekt vom Typ Any wird erzeugtund hat den Inhalt des 32-Bit Werts.

Any Zeichenkette Ein Objekt vom Typ Any wird erzeugtund hat den Inhalt der Zeichenkette.

Any Any Ein Any-Objekt wird geklont. Eswerden also aus einem Objekt zweiAny-Objekte erzeugt.

Es werden mehrere Funktionen zur Verfugung gestellt, die das Auslesen des Inhaltsermoglichen.

Page 72: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 65

Ruckgabe Funktionsname Funktionsparameter ErlauterungDouble getDouble ∅ Der Inhalt wird als

doppelt genaueFließkommazahlausgelesen.

Integer getInteger ∅ Der Inhalt wird alsnaturliche Zahlzuruckgeliefert.

Any = Any Es wird der Inhalteines Objekts von TypAny einem anderenObjekt vom Typ Anyzugewiesen. Diesentspricht einerZuweisung.

Zeichenkette toString ∅ Der Inhalt desObjekts vom Typ Anywird als Zeichenkettezuruckgeliefert undkann z. B. in eineLog-Datei geschriebenwerden.

Das Modul Vektor

Neuronale Netze haben meistens eine flexible Anzahl von Eingabe- und Ausgabe-neuronen. Daher ist es sinnvoll, diese Ein- und Ausgange dynamisch zu verwalten.Das Modul Vektor bietet diese Funktionalitat an.

Konstruktor

Konstruktor ErlauterungVektor ∅ Es wird ein leerer Vektor erzeugt,

dabei wird bereits Platz fur 100Elemente angelegt, damit Objekteschnell abgelegt werden konnen.

Vektor n:Integer Es wird ein leerer Vektor mit Platz furn Objekte generiert.

Die Vektor-Klasse speichert nicht nur dynamisch Objekte, sondern stellt Funktio-nen zur Addition, Subtraktion, Multiplikation und weitere Vektoroperationen zurVerfugung. Die Große des Vektors kann dynamisch wachsen. Wird ein Vektor mitn Speicherplatzen erzeugt, kann er trotzdem eine beliebige Große annehmen. Istdie maximale Dimension des Vektors bekannt, kann das Abspeichern von Objektendurch die Angabe der Maximalgroße beschleunigt werden.

Typ Variable Erlauterung

Integer FreeCount Es kann noch die Zahl von Elementen, die durchFreeCount angegeben wird, in dem Vektorgespeichert werden, bevor eine erneuteSpeicheranforderung notwendig wird.

Page 73: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 66

Integer BufferCount Gibt die Anzahl der Elemente, die insgesamt zurVerfugung stehen an, und ist die Summe derfreien und belegten Puffer.

Integer NewAllocCount Bei der nachsten Speicheranforderung werdendie Anzahl von NewAllocCount-Pufferangefordert.

Integer count Die Anzahl der gespeicherten Objekte wirdmittels der Variablen count ermittelt.

Zeiger Elements[][] Die gespeicherten Elemente werden durch dieseVariable referenziert. Die konkreteImplementierung der Vektor-Klasse verwaltetZeiger auf beliebige Objekte.

Funktionen

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ init Integer n Diese Hilfsfunktion leert

den Vektor und setzt denleeren Vektor auf nSpeicherplatze.

∅ dump ∅ Es wird der Inhalt desVektors ausgegeben.Diese Funktion wirdwahrend des Debuggensbenotigt.

Integer Add Zeiger objekt Es wird am Ende desVektors der Wert derVariablen objektgespeichert.

Zeiger delete Integer position Das Objekt an der Stelleposition wird aus demVektor geloscht undzuruckgeliefert. Diefolgenden Objekte imVektor rutschen einePosition vor, das heißt,dass nach dem Aufrufvon delete an der Positionposition, dann das demursprunglichen Objektfolgende Objekt zu findenist.

Zeiger Get Integer position Das Objekt an der Stelleposition wirdzuruckgeliefert.

∅ = Vektor v Dieser Infix-Operatorklont den rechtenParameter v und weistdie Werte dem linkenParameter zu.

Page 74: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 67

Boolean == Vektor v Dieser Infix-Operatorvergleicht den Inhalt derlinks und rechts desOperators == stehendenVektoren und gibt bei derUbereinstimmung dergespeichertenDouble-Werte denWahrheitswert wahrzuruck, ansonsten einfalsch. Haben die beidenVektoren eineunterschiedlicheDimension, wird falschgeliefert.

Das Modul NNVektor

Neuronale Netze haben meistens eine flexible Anzahl von Eingabe- und Ausgabe-neuronen. Daher ist es sinnvoll, diese Ein- und Ausgange dynamisch zu verwalten.Das Modul NNVektor bietet daher diese Funktionalitat an. Es ubersteigt in seinerFunktionalitat das Modul Vektor, welches ahnlich ist.

Konstruktor

Konstruktor ErlauterungNNVektor ∅ Es wird ein leerer Vektor erzeugt,

dabei wird bereits Platz fur 100Elemente angelegt, damit Objekteschnell abgelegt werden konnen.

NNVektor n:Integer Es wird ein leerer Vektor mit Platz furn Objekte generiert.

Die NNVektor-Klasse speichert nicht nur dynamisch Objekte, sondern stellt Funk-tionen zur Addition, Subtraktion, Multiplikation und weitere Vektoroperationen zurVerfugung. Die Große des Vektors kann dynamisch wachsen. Wird ein Vektor mit nSpeicherplatzen erzeugt, kann er trotzdem eine beliebige Große annehmen. Ist diemaximale Dimension des Vektors bekannt, besteht die Moglichkeit das Abspeichernvon Objekten durch die Angabe der Maximalgroße zu beschleunigen.

Typ Variable Erlauterung

Integer FreeCount Es kann noch die Zahl von Elementen, die durchFreeCount angegeben wird, in dem Vektorgespeichert werden, bevor eine erneuteSpeicheranforderung notwendig wird.

Integer BufferCount Gibt die Anzahl der Elemente, die insgesamt zurVerfugung stehen, an und ist die Summe derfreien und belegten Puffer.

Integer NewAllocCount Bei der nachsten Speicheranforderung werdendie Anzahl von NewAllocCount-Pufferangefordert.

Page 75: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 68

Integer count Die Anzahl der gespeicherten Objekte wirdmittels der Variablen count ermittelt.

Double *Elements Die gespeicherten Elemente werden durch dieseVariable referenziert. Die konkreteImplementierung der NNVektor-Klasse verwaltetnur Objekte vom Typ doppelt genaueFließkommazahl.

Funktionen

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ init Integer n Diese Hilfsfunktion leert

den Vektor und setzt denleeren Vektor auf nSpeicherplatze.

∅ dump ∅ Es wird der Inhalt desVektors ausgegeben.Diese Funktion wirdwahrend des Debuggensbenotigt.

Integer Add Double objekt Es wird am Ende desVektors der Wert derVariablen objektgespeichert.

Integer AddFirst Double objekt Es wird an den Anfangdes Vektors der Wert desParameters objektgespeichert.

Double delete Integer position Das Objekt an der Stelleposition wird aus demVektor geloscht undzuruckgeliefert. Diefolgenden Objekte imVektor rutschten einePosition vor, das heißt,dass nach dem Aufrufvon delete an der Positionposition, dann das demursprunglichen Objektfolgende Objekt zu findenist.

Double Get Integer position Der Fließkommawert ander Stelle position wirdzuruckgeliefert.

∅ addVektor NNVektor vektor Der Inhalt des Vektorsvektor wird zum aktuellenObjekt aufaddiert. DieDimension des Vektorvektor muss mit derDimension des aktuellenObjekts identisch sein.

Page 76: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 69

∅ subVektor NNVektor vektor Der Inhalt des Vektorsvektor wird zum aktuellenObjekt subtrahiert. DieDimension des Vektorvektor muss mit derDimension des aktuellenObjekts identisch sein.

Double sumProd Double parameter Alle Werte des Vektorswerden mit der Variablenparameter multipliziertund der aufaddierte Wertwird zuruckgeliefert(∑count

i=1 Elementsi ∗parameter).

∅ mulDouble Double d Jeder gespeicherte Wertim Vektor wird mit demWert d multipliziert.

Double dot NNVektor v Das Punkt-Produktzweier Vektoren wirdgebildet.

Boolean load File f Der Inhalt des Vektorswird aus einer Dateigelesen. Die Datei mussbereits zum Lesengeoffnet sein und wirddurch denDateideskriptor freferenziert. Tritt einFehler auf, wird derboolsche Wert falschzuruckgegeben, ansonstenein wahr.

Boolean save File f Der Inhalt des Vektorswird in die Dateigeschrieben. Die Dateimuss bereits zumSchreiben geoffnet seinund wird durch denDateideskriptor freferenziert. Tritt einFehler auf, wird derboolsche Wert falschzuruckgegeben, ansonstenein wahr.

∅ = NNVektor v Dieser Infix-Operatorklont den rechtenParameter v und weistdie Werte dem linkenParameter zu.

Page 77: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 70

Boolean == NNVektor v Dieser Infix-Operatorvergleicht den Inhalt derlinks und rechts desOperators == stehendenVektoren und gibt beiUbereinstimmung dergespeichertenDouble-Werte denWahrheitswert wahrzuruck, ansonsten einfalsch. Haben die beidenVektoren eineunterschiedlicheDimension, wird falschgeliefert.

Das Modul Matrix

Die Verbindungen zwischen den Neuronenschichten konnen am Effektivsten durcheine Matrix modelliert werden, da bei vielen Neuronalen Netzen eine n↔m Bezie-hung zwischen den Schichten besteht, wobei n die Dimension der ersten Schichtund m die Dimension der zweiten Schicht reprasentiert. Die Klasse Matrix stellt diebenotigten Operationen zur Matrix-Manipulation zur Verfugung.

Konstruktor

Konstruktor Erlauterung

Matrix(Integer zeilen,Integer spalten) Es wird eine Matrix mitzeilen Zeilen und spaltenSpalten erzeugt.

Matrix(Integer zeilen,Integer spalten,Double wert) Es wird eine Matrix mitzeilen Zeilen und spaltenSpalten erzeugt. AlleZellen in der Matrixwerden mit dem Wertwert initialisiert.

Matrix(NNVektor a, NNVektor b) Es wird eine Matrix mitder Dimension des ~aZeilen und der Dimensiondes ~b Spalten erzeugt. DieWerte der Matrix werdeneinerVektor-Multiplikationentsprechend belegt.

Matrix(Matrix m) Es wird die Matrix mgeklont.

Variablen

Typ Variable Erlauterung

Page 78: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 71

Integer zeilen Gibt die Anzahl der Zeilen in der Matrix an.Integer spalten Gibt die Anzahl der Spalten in der Matrix an.

Zeichenkette name Dieser optionalen Variable kann ein Namezugeordnet werden, so dass das Debuggenerleichtert wird.

Double mx[][] Dieses zweidimensionale Feld enthalt die Werte derMatrix. Der erste Platzhalter hat eine Dimensionvon zeilen und der zweite Platzhalter hat eineDimension von spalten.

Funktionen

Die Klasse Matrix stellt folgende Funktionen zur Verfugung:

Ruckgabe Funktionsname Funktionsparameter Erlauterung

∅ init NNVektor v1,NNVektor v2,Double lernRate=0

Diese Hilfsfunktionwird von denKonstruktorenverwendet undalloziert denDimensionen derVektoren v1 und v2entsprechend Speicher.

∅ dump ∅ Gibt den Inhalt derMatrix aus und wirdwahrend derFehlersuche benotigt.

∅ modZeile NNVektor v,Integer zeile

Die Zeile zeile wird inder Matrix durchden Inhalt des Vektorsv uberschrieben.

∅ modSpalte NNVektor v,Integer spalte

Die Spalte spalte wirdin der Matrix durchden Inhalt des Vektorsv uberschrieben.

NNVektor spaltenVektor Integer spalte Die Spalte an derStelle spalte in derMatrix wird in Formeines Vektorszuruckgeliefert.

NNVektor zeilenVektor Integer zeilen Die Zeile an der Stellezeile in der Matrixwird in Form einesVektorszuruckgeliefert.

∅ transponiert Matrix m Die Matrix m wirdtransponiert und dertransponierte Inhaltwird in die aktuelleMatrix geschrieben.Die aktuelle Matrixenthalt mT .

Page 79: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 72

Boolean load File f Der Inhalt der Matrixwird aus einer Dateigelesen. Die Dateimuss bereits zumLesen geoffnet seinund wird durch denDateideskriptor freferenziert. Tritt einFehler auf, wird derboolsche Wert falschzuruckgegeben,ansonsten ein wahr.

Boolean save File f Der Inhalt der Matrixwird in die Dateigeschrieben. Die Dateimuss bereits zumSchreiben geoffnet seinund wird durch denDateideskriptor freferenziert. Tritt einFehler auf, wird derboolsche Wert falschzuruckgegeben,ansonsten ein wahr.

∅ zufall Double d Die Werte der Matrixwerden auf zufalligeWerte zwischen 0 undd gesetzt.

∅ addMatrix Matrix m Der Inhalt der Matrixm wird auf dieaktuelle Matrixaddiert. BeideMatrizen mussen diegleiche Dimensionhaben.

NNvektor mulVektor NNVektor v Es wird eineMatrix*VektorOperation ausgefuhrtund der resultierendeVektor wirdzuruckgegeben.Anhand des Vergleichsder Dimension desVektors v mit derSpalten- undZeilengroße derMatrix wird ermittelt,ob eine Zeilen- oderSpalten-Multiplikationdurchgefuhrt wird.

Page 80: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 73

Matrix = Matrix m Die aktuelle Matrixwird durch die Kopieder Matrix muberschrieben.

Matrix * Double d Die Werte der Matrixwerden mit dem Wertd multipliziert.

Tabelle 3.7: Beschreibung der Klasse Matrix

Das Modul DatenHolen

Zur Anbindung der Neuronalen Netze an Applikationen wird das Modul Datenholenverwendet. Daten werden von dem Neuronalen Netz-Modul direkt per Callback ausdem Kontext der Applikation geholt. Der Einsatz dieses Moduls stellt die Alterna-tive zum Bereitstellen der Daten per Datei dar.

Konstruktor

Konstruktor Erlauterung

DatenHolen(Integer anzahl) Es wird ein ModulDatenHolen erzeugt, deranzahl großeDatenvektorenzuruckliefert.

DatenHolen(Zeichenkette name,Integer anzahl) Es wird ein ModulDatenHolen erzeugt, deranzahl großeDatenvektorenzuruckliefert. Dem Modulwird ein Namezugeordnet.

Variablen

Typ Variable Erlauterung

Zeichenkette name Der Name des Moduls wird in dieser Variablehinterlegt.

Integer dimension Die Große des von dem Modul geliefertenVektors wird in der Variable dimensiongespeichert.

Integer position Werden die Datensatze uber dienaechsten-Funktion iteriert, wird die Anzahlder zuruckgegebenen Datensatze gespeichert.

Funktionen

Die Klasse DatenHolen stellt folgende Funktionen zur Verfugung:

Ruckgabe Funktionsname Funktionsparameter Erlauterung

Page 81: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 74

Boolscher Wert eof ∅ Sind keineDatensatze mehrvorhanden, wirdder Wahrheitswertwahrzuruckgeliefert,ansonsten einfalsch.

NNVektor ersten ∅ Es wird der ersteDatensatzzuruckgegeben.

NNVektor letzten ∅ Es wird der letzteDatensatzzuruckgegeben.

NNVektor naechsten ∅ Es wird dernachste Datensatzzuruckgegeben.

NNVektor datensatz Integer i Es wird derDatensatz an derPosition izuruckgegeben.

3.5 Perceptron

Neuronale Netze, die aus Perceptrons bestehen, gehoren zur Klasse der Feed-Forward-Netze. Somit bedeutet dies, dass der Informationsfluss nur von der Eingabezur Ausgabe fließen kann. Eine Ruckkoppelung ist nur bis zur letzten Neuronen-Schicht moglich. Eine Eingabe fließt dabei in die Eingabeneuronen, diese Neuro-nen schalten ihre Ausgabe auf die Eingabeleitungen der Neuronen in der folgen-den Schicht. Diese Schicht schaltet wiederum ihre Ausgabe durch auf eine weitereSchicht. Ist die Ausgabe des Neuronalen Netzes fehlerhaft, konnen der Schwellwertund die Eingangsgewichte der Neuronen in der letzten Schicht korrigiert werden,nicht jedoch die Parameter der Neuronen in den davorliegenden Schichten. DieSelbstlernfahigkeit eines Neuronalen Netzes aus Perceptrons ist daher sehr limitiert.Ein Perceptron-Netz kann daher wirkungsvoll auf Sachverhalte angewandt werden,die mit einer Neuronalen Schicht modelliert werden konnen, oder zur Gestaltungvon Neuronalen Netzen, in denen die Selbstlernfahigkeit uberhaupt nicht oder nurin der letzten Schicht notwendig sind. Neuronale Netze ohne Selbstlernfahigkeitbenotigen genaues Wissen uber den darzustellenden Sachverhalt.

Der Eingabevektor wird mit dem Gewichtsvektor w des Perceptrons multipliziertund die Summe der Ergebnisse wird addiert. Ist die Summe großer oder gleich demSchwellenwert θ, schaltet das Perceptron eine Eins, ansonsten eine Null auf dieAusgabeleitung.

Lernregel

Die Lernregel des Perceptron-Netzwerks basiert auf dem uberwachten Lernen. Hier-zu werden alle zu lernenden Muster als Eingabe in das Perceptron-Netzwerk einge-speist. Die Ausgabe des NN wird mit der erwarteten Ausgabe verglichen. Stimmt

Page 82: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 75

x1

x2

x3

w1

θΣ

w3

w2

Abbildung 3.3: Perceptron

diese nicht uberein, mussen die Gewichte angepasst werden. Die Funktion:

wij(t + 1) = wij(t) + (2zi − 1)δoj

korrigiert das Gewicht entsprechend. Die Konstante δ gibt dabei die Lernrate an.Die Lernrate muss dabei der Qualitat der Eingabedaten angepasst werden. Sind die,zu den Eingabedaten zugeordneten Ausgabedaten fehlerlos, kann eine hohe Lernrategewahlt werden, damit das Netz schneller das gewunschte Verhalten zeigt. Fur denFall, dass die Daten jedoch nicht fehlerfrei sind, verfalscht ein falscher Datensatzdas NN je starker, desto hoher die Lernrate ist.

Anwendung in der Agrartechnik

Das Perceptron gehort zu den einfachen Neuronalen Netzwerken, die sich daher furden Einstieg in die Materie eignen.

Implementierung der Klasse Perceptron

Die Klasse Perceptron verfugt uber die zum Aufbau von Neuronalen Netzen notwen-digen Funktionen und Variablen. Sie benotigt die Klassen NNVektor und Matrix.

Konstruktor

Der Konstruktor erzeugt ein Neuronales Netz aus Perceptron-Neuronen.

Konstruktor Erlauterung

Perceptron(Integer eingaben,Integer ausgaben) Es wird ein Neuronales Netzmit einem Eingabevektor derGroße eingabe und ausgabeunabhangigenPerceptron-Neuronenerzeugt.

Variablen

Nur die Variable lernRate darf direkt verandert werden.

Page 83: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 76

Typ Variable Erlauterung

Double lernRate Durch die Variable lernRate wirdangegeben, wie stark Anderungenbeim Lernprozess auf dieGewichtsmatrix angewandt werden.

Integer perceptronAnzahl Die Anzahl der Perceptronneuronenwird durch diese Variable angegeben.

Integer anzahlTraining Uber diese Variable wird die Anzahlder unterschiedlichen Trainingsmusterabgefragt.

Integer eingabeVektorDimension Die Eingabe-Vektor-Dimension kannuber diese Variable ermittelt werden.

Matrix eingabe Die eingabe Matrix enthalt mehrereEingabemuster. Die Eingabemusterwerden zeilenweise in derEingabematrix gespeichert. Jede Zeilehat genau die Große der Dimensiondes EingabeVektors.

Matrix ausgabe Die ausgabe Matrix enthalt mehrereAusgabemuster. Die Ausgabemusterwerden zeilenweise in derAusgabematrix gespeichert. Jede Zeilehat genau die Anzahl derPerceptron-Neuronen.

Matrix w Die Gewichte, die der Eingabeschichtund den Perceptron-Neuronenzugeordnet sind, werden in dieserMatrix gespeichert. Die Tiefe derGewichtsmatrix ist um Eins großer alsdie Dimension des Eingabevektors, dader Schwellenwert durch einen Biasersetzt wird. 2

NNVektor eingabeVektor Der aktuelle Eingabevektor kann uberdiese Variable gelesen werden.

NNVektor perceptronVektor Nachdem ein Eingabevektor an dasNeuronale Netz angelegt wurde, wirdin der Variablen perceptronVektor dievom Netzwerk berechnete Ausgabeabgelegt.

Funktionen

Die Klasse Perceptron stellt folgende Funktionen zur Verfugung:

Ruckgabe Funktionsname Funktionsparameter Erlauterung

2Der Eingabevektor wird bei jeder Eingabe ins Netzwerk um einen Wert mit einer konstanten

Aktivierung mit dem Wert Eins erganzt. Zusammen mit dem erweiterten Gewichtsvektor wird die

Schwellenwertberechnung uberflussig.

Page 84: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 77

∅ lernenPerceptron NNVektor eingabe,NNVektor ziel

Diese Funktion berechnetdie Ausgabe desNeuronalen Netzes undvergleicht die realeAusgabe mit dem zielVektor. Ergibt sich einFehler, wird dieGewichtsmatrixangepasst - das NeuronaleNetz lernt.

∅ lernen Integer anzahl Es werden anzahl-mal diegesamten in der Matrixeingabe gespeichertenEingabemuster an dasNeuronale Netz angelegtund mit derentsprechenden Zeile derausgabe Matrix verglichenund bei Abweichungkorrigiert.

NNVektor ausgabeFunk NNVektor v Der Eingabevektor v wirdan das Netzwerk angelegtund die Aktivitat desNetzwerks wird alsVektor zuruckgeliefert.

∅ laden ZeichenkettedateiName

Das Neuronale Netz wirdaus der Datei mit NamendateiNamen geladen.Dadurch kann einvortrainiertes Netzwerkverwendet werden, ohneein Trainingdurchzufuhren.

∅ speichern ZeichenkettedateiName

Das Neuronale Netz wirdin die Datei mit NamendateiNamen gespeichert.Dadurch kann einvortrainiertes Netzwerkzur spateren Verwendunggesichert werden.

3.6 Backpropagation

Die Leistungsfahigkeit von Feed-Forward Netzen hangt entscheidend von der An-zahl der Neuronen zwischen der Eingabe- und der Ausgabeschicht ab. Die Gewichteder Neuronen in den Zwischenschichten mussen im Fall einer Korrektur des Neu-ronalen Netzes angepasst werden. Es ergibt sich dabei das Problem, wie auf dieseNeuronen zugegriffen werden kann, da sie nicht von außen zugreifbar sind. DerBackpropagation-Algorithmus stellt dabei die Moglichkeit der Anpassung der Ge-wichte dar, ohne das Ergebnis der Ausgabe in das Neuronale Netzwerk zuruckzu-koppeln.

Page 85: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 78

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

-4 -3 -2 -1 0 1 2 3 4

1/(1+exp(-g*x)), g=2

Abbildung 3.4: Sigmoide Aktivierungsfunktion

Sigmoide Aktivierungsfunktion

Die Ausgabe eines Neurons wird durch die Aktivierungsfunktion an die Ausgabegelegt. Eine haufig verwendete Transferfunktion im Backpropagation-Netzwerk istdie Funktion:

a = F(net)=1/(1+exp(-g net))

wobei g (gain) die Steilheit des Kurvenverlaufs festlegt. Die sigmoide Funktion bietetvier Vorteile:

1. Alle Eingangszahlen werden in einen Bereich von 0 bis 1 abgebildet.

2. Sehr große Zahlenwerte werden bei positiven Werten in die Nahe der 1 ab-geleitet, wahrend negative Werte in die Nahe der 0 abgebildet werden. Dieabsolute Große der Zahlen spielt dabei nur noch eine untergeordnete Rolle.

3. Eingangszahlen, die nahe der 0 liegen, werden durch den Kurvenverlauf ge-streckt und sind daher besser getrennt.

4. Die leichte Ableitbarkeit der Funktion.

Die Ausgabe eines Backpropagationsnetzwerk wird nach der Formel

oi = ai = F (Σwijoj)

berechnet.

Die Delta-Lernregel

Der Fehler des gesamten Neuronalen Netzwerks ist:

Page 86: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 79

0

0.05

0.1

0.15

0.2

0.25

-4 -3 -2 -1 0 1 2 3 4

1/(1+exp(-g*x)), g=2

Abbildung 3.5: Ableitung der sigmoiden Aktivierungsfunktion

E = 1/2Σ(zi − oi)2

Die Delta-Lernregel minimiert den Fehler des NNs, indem die Gewichte in Rich-tung des steilsten Gradienten angepasst werden. Voraussetzung fur die Korrekturder Gewichte ist, dass fur alle Elemente gelten muss:

wij(t + 1) = wij(t) + σδioj

Die Lernrate ist σ. Um den Fehler δi der Neuronen in der Zwischenschicht zu be-rechnen, wird die folgende Formel benutzt:

σi = F ′(neti)Σδhwhi

Variable Erlauterung

h Elementδh Der Fehler der Elemente h die in der Schicht den

Elementen i nachgelagert sindwhi Gewichte zu diesem Element

Tabelle 3.12: Erlauterung der Notation

Der Fehler δi in der Output-Schicht ist gegeben durch:

δi = F ′(neti) ∗ (zi − oi)

wobei zi die gewunschte Ausgabe fur das i-te Element ist.

Page 87: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 80

Der berechnete Fehler δi wird zuruckpropagiert. Zur Minimierung des Fehlers wirdein Gradientenabstiegsverfahren verwendet, welches in Richtung des lokalen Mi-nimums wandert. Abbildung3.5 zeigt die Ableitung der sigmoiden Aktivierungs-funktion. Wie man sieht, eignet sich die sigmoide Aktivierungsfunktion gut fur einGradientenabstiegsverfahren. Beim Abstieg zum lokalen Minimum muss darauf ge-achtet werden, dass die Anpassungsschritte nicht zu groß gewahlt werden, da sonstdas lokale Minimum uberschritten wird und aus dem Tal, den das Minimum an-schaulich bildet, heraustritt. Der Fehler der Neuronen in der davorliegenden Schichtwird mittels dieses Fehlers berechnet. Dazu mussen alle Fehler der folgenden Schichtbereits berechnet worden sein. Die Berechnung des Fehlers wandert dadurch von derAusgabeschicht in Richtung der Eingabeschicht, bis alle Elemente berechnet wur-den. Von dieser Vorgehensweise hat der Algorithmus auch seinen Namen, da derGesamtfehler zuruckpropagiert wird und der Anteil, den ein Neuron am Gesamt-fehler hat, zur Korrektur der Gewichte des Neurons verwendet wird.

Da fur die Berechnung von δi der ursprungliche Gewichtsvektor eines Neurons her-angezogen wird, offenbart sich ein Problem bei der Zuruckpropagierung des Feh-lers. Sind alle ursprunglichen Gewichtsvektoren gleich, wird jedem Neuronen dergleiche Fehler zugeordnet, da die Aktivierung bei allen Neuronen gleich ist unddie Berechnung des lokalen Fehlers des Neurons unter Beihilfe der Aktivitat einesNeurons entsteht. Dadurch haben nach der Backpropagierung die Neuronen wie-derum den gleichen Gewichtsvektor. Es findet somit keine Spezialisierung statt unddas Neuronale Netz lernt nicht. Die Neuronen mussen daher mit einem zufalligenGewichtsvektor initialisiert werden.

Zur Steigerung der Lerngeschwindigkeit kann das sogenannte Momentum verwen-det werden. Das Momentum lasst dabei die vorherige Korrektur des Gewichtsvektorsin die aktuelle Korrektur einfließen. Die Anpassung wird dadurch beschleunigt, dassin Abhangigkeit der vorherigen Anpassung, der jetzige Anpassungsschritt großersein kann, als ohne die Einbeziehung der vorherigen Berechnung.

4wij(t) = σ δi oj µ4 wij(t− 1)

Der Wert t legt dabei den Zeitpunkt fest. Der Momentumfaktor µ soll laut [33,SCHONEBURG 90] auf einen relativ großen Wert (z.B. 0.9) und der Lernfaktor δauf 0,5 gesetzt werden.

Der neue Gewichtsvektor wird nach folgender Formel berechnet:

wij(t + 1) = wij(t) +4wij(t)

”Das Momentum wirkt wie eine Art Tiefpassfilter.” [33, SCHONEBURG 90]

Anwendung in der Agrartechnik

Das Backpropagation-Netzwerk ermoglicht die Bewaltigung von sehr komplexenAufgaben wie die Vorhersage von Qualitatsmerkmalen. Es konnen daher alle kom-plizierten Abbildungen vorgenommen werden. Die Abbildung des Backpropagation-Netzwerks ist nur durch die Anzahl der verwendeten Neuronen und der Anzahl derversteckten Schichten beschrankt. Prinzipiell kann bei einer ausreichenden Anzahlder Neuronen jede gewunschte Abbildung des Eingabevektors ~x in einen Ausga-bevektor ~y durchgefuhrt werden. Der Einsatz von Neuronalen Backpropagation-Netzwerken birgt aber auch ein großes Risiko:

Page 88: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 81

Durch die Fahigkeit des Backpropagation-Netzwerks - bei entsprechend hoher An-zahl von Neuronen - jeden beliebigen Eingabevektor in jeden beliebigen Ausga-bevektor abzubilden, besteht das Risiko, dass ein derartiges Neuronales Netz einehervorragende Qualitat mit den Trainingsdaten erreicht, aber mit unbekannten Da-ten die Qualitat stark absinkt. Generell kann davon ausgegangen werden, dass dasRisiko der zu starken Spezialisierung von Backpropagation-Netzwerken mit demMaß zunimmt, mit der sich die Zahl der Neuronen im Netzwerk der Zahl der unter-schiedlichen Trainings-Eingabevektoren nahert.

Implementierung der Klasse Backpropagation

Die Klasse Backpropagation verfugt uber die zum Aufbau von Neuronalen Netzennotwendigen Funktionen und Variablen. Sie benotigt die Klassen NNVektor undMatrix.

Konstruktor

Konstruktor Erlauterung

Backpropagation(Integer e,Integer v,Integer a) Es wird ein Neuronales Netz miteinem Eingabevektor der Großee, v Neuronen in der verdecktenSchicht und a Neuronen in derAusgabeschicht angelegt.

Variablen

Die Variable steigung und lernRate konnen verandert werden.

Typ Variable Erlauterung

Double steigung Die Steigung der sigmoidenAktivierungsfunktion wird uberdiese Variable angegeben.

Double lernRate Durch die Variable lernRatewird angegeben, wie starkAnderungen beim Lernprozessauf die Gewichtsmatrixangewandt werden.

Integer verdeckteNeuronenAnzahl Die Anzahl derBackpropagation-Neuronen inder verdeckten Schicht wirddurch diese Variable angegeben.

Integer backpropagationAnzahl Die Anzahl derBackpropagation-Neuronen wirddurch diese Variable angegeben.

Integer anzahlTraining Uber diese Variable wird dieAnzahl der unterschiedlichenTrainingsmuster abgefragt.

Integer eingabeVektorDimension Die Eingabe-Vektor-Dimensionkann uber diese Variableermittelt werden.

Page 89: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 82

Matrix eingabe Die eingabe Matrix enthaltmehrere Eingabe-Muster. DieEingabe-Muster werdenzeilenweise in derEingabematrix gespeichert. JedeZeile hat genau die Große derDimension des EingabeVektors.

Matrix ausgabe Die ausgabe Matrix enthaltmehrere Ausgabe-Muster. DieAusgabe-Muster werdenzeilenweise in derAusgabematrix gespeichert.Jede Zeile hat genau die Anzahlder Backpropagation-Neuronen.

Matrix w1 Die Gewichte, die derEingabeschicht und denBackpropagation-Neuronen inder verdeckten Schichtzugeordnet sind, werden indieser Matrix gespeichert. DieTiefe der Gewichtsmatrix ist umEins großer als die Dimensiondes Eingabevektors, da derSchwellenwert durch einen Biasersetzt wird.

Matrix w2 Die Gewichte, die derverdeckten Neuronenschicht undder Ausgabe-Neuronenschichtzugeordnet sind, werden indieser Matrix gespeichert. DieTiefe der Gewichtsmatrix ist umEins großer als die Dimensiondes Eingabevektors, da derSchwellenwert durch einen Biasersetzt wird.

NNVektor eingabeVektor Der aktuelle Eingabevektorkann uber diese Variable gelesenwerden.

NNVektor backpropagationVektor Nachdem ein Eingabevektor andas Neuronale Netz angelegtwurde, wird in der VariablebackpropagationVektor die vomNetzwerk berechnete Ausgabeabgelegt.

Funktionen

Die Klasse Backpropagation stellt folgende Funktionen zur Verfugung:

Ruckgabe Funktionsname Funktionsparameter Erlauterung

Page 90: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 83

∅ lernenBackpropagation NNVektor eingabe,NNVektor ziel

Diese Funktionberechnet dieAusgabe desNeuronalen Netzesund vergleicht diereale Ausgabe mitdem ziel Vektor.Ergibt sich einFehler, wird dieGewichtsmatrixangepasst - dasNeuronale Netzlernt.

∅ lernen Integer anzahl Es werdenanzahl-mal diegesamten in derMatrix eingabegespeichertenEingabemuster andas Neuronale Netzangelegt und mitder entsprechendenZeile der ausgabeMatrix verglichenund beiAbweichungkorrigiert.

NNVektor ausgabeFunk NNVektor v Der Eingabevektorv wird an dasNetzwerk angelegtund die Aktivitatdes Netzwerks wirdals Vektorzuruckgeliefert.

∅ laden ZeichenkettedateiName

Das NeuronaleNetz wird aus derDatei mit NamendateiNamengeladen. Dadurchkann einvortrainiertesNetzwerkverwendet werden,ohne ein Trainingdurchzufuhren.

Page 91: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 84

∅ speichern ZeichenkettedateiName

Das NeuronaleNetz wird in dieDatei mit NamendateiNamengespeichert.Dadurch kann einvortrainiertesNetzwerk zurspaterenVerwendunggesichert werden.

3.7 Adaline

Das Adaline-Neuron (ADAptive LInera NEuron) arbeitet mit Schwellenwertlogikund produziert einen bipolaren Ausgabewert mit den Werten von -1 und +1. Eswurde 1959 von Bernard Widrow an der Stanford University entwickelt. Es ist einFeed-Forward-Netz. Ein Neuronales Netz mit Adaline-Neuronen eignet sich fur dieEntwicklung von adaptiven Filtern und Echounterdruckern. Der Schwellwert wirduber eine fixe Eingabe von plus Eins und dem dazugehorigen Gewicht w0 realisiert.

Xo=1

X1

X2

Xn

wn

o

w1

w2

w

Σ-1

+1

Abbildung 3.6: Aufbau eines Adaline Netzwerks

Widrow-Hoff-Lernalgorithmus

Der Widrow-Hoff-Lernalgorithmus ist ein uberwachter Lernalgorithmus, der auchals Least Mean Square-Methode oder auch Delta-Regel bezeichnet wird. Die Delta-Regel kann in einem einschichtigen Feed-Forward-Netz auf jede differenzierbare Ak-tivierungsfunktion angewendet werden. Im ADALINE-Netz wird eine lineare Akti-vierungsfunktion <= xtw = Σixiwi verwendet, wobei wi die Gewichtung zwischen

Page 92: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 85

• Lernkoeffizient α

• Zielausgabe t

• Eingabevektor x

• Ausgabevektor y

ist.

Der Eingabevektor besteht aus n Werten und dem Ausgabevektor m. Fur die Trai-ningsmuster p=1,...,P gilt der Fehler Eglobal:

Eglobal =

P∑

p=1

EP

Der Fehler eines Muster p uber allen Ausgabeeinheiten wird durch die Summe derquadrierten Einzelfehler festgelegt.

EP =

m∑

j=1

(tPj − yPj )2

Der Fehler δi ist die Differenz der Aktivitat ai und der gewunschten Zielausgabe zi.Es wird im Gegensatz zum Perceptron-Lernalgorithmus die Aktivitat ai und nichtdie tatsachliche Ausgabe oi verwendet.

δi = zi − ai

Die einzelnen Gewichte des Gewichtsvektors werden durch Werte nahe Null initia-lisiert.

Der Korrektur-Anteil δ, den jede Gewichtskomponente von der Gesamtabweichungδgesamt erhalt, wird mit

δ =δgesamt

n + 1

ausgerechnet. Wobei δgesamt = asoll−o ist. Der neue Wert der Gewichte wird durchdie folgende Gleichung angegeben:

wi{t + 1} = wi{t}ηaiδθ{t + 1} = θ{t}+ ηδ

Die Lernrate η sollte bei jedem Iterationsschritt verkleinert werden, damit der Ge-wichtsvektor nicht durch zu große δ-Werte hin- und herschwingt, sondern sich lang-sam stabilisiert.

Anwendung in der Agrartechnik

Das Adaline-Netzwerk eignet sich zum Aufbau von Reglern oder adaptiven Filtern.Fur die Gute der Regelung ist es entscheidend, dass das Adaline-Netzwerk mit einerbreiten Datenbasis trainiert wird, wobei ”breit” in dem Sinne von breiter Streuungder Werte zu verstehen ist, damit der Regler eine hohe Qualitat im gesamten Re-gelspektrum aufweist.

Page 93: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 86

Implementierung der Klasse Adaline

Die Klasse Adaline verfugt uber die zum Aufbau von Neuronalen Netzen notwen-digen Funktionen und Variablen. Sie benotigt die Klassen NNVektor und Matrix.

Konstruktor

Konstruktor Erlauterung

Adaline(Integer eingaben,Integer ausgaben) Es wird ein Neuronales Netz miteinem Eingabevektor der Großeeingabe und ausgabeunabhangigenAdaline-Neuronen erzeugt.

Variablen

Die Variable lernRate kann verandert werden.

Typ Variable Erlauterung

Double lernRate Durch die Variable lernRate wirdangegeben, wie stark Anderungenbeim Lernprozess auf dieGewichtsmatrix angewandt werden.

Integer adalineAnzahl Die Anzahl der Adalineneuronen wirddurch diese Variable angegeben.

Integer anzahlTraining Uber diese Variable wird die Anzahlder unterschiedlichen Trainingsmusterabgefragt.

Integer eingabeVektorDimension Die Eingabe-Vektor-Dimension kannuber diese Variable ermittelt werden.

Matrix eingabe Die eingabe Matrix enthalt mehrereEingabe-Muster. Die Eingabe-Musterwerden zeilenweise in derEingabematrix gespeichert. Jede Zeilehat genau die Große der Dimensiondes EingabeVektors.

Matrix ausgabe Die ausgabe Matrix enthalt mehrereAusgabe-Muster. Die Ausgabe-Musterwerden zeilenweise in derAusgabematrix gespeichert. Jede Zeilehat genau die Anzahl derAdaline-Neuronen.

Matrix w Die Gewichte, die der Eingabeschichtund den Adaline-Neuronen zugeordnetsind, werden in dieser Matrixgespeichert. Die Tiefe derGewichtsmatrix ist um Eins großer alsdie Dimension des Eingabevektors, dader Schwellenwert durch einen Biasersetzt wird. 3

3Der Eingabevektor wird bei jeder Eingabe ins Netzwerk um einen Wert mit einer konstanten

Aktivierung mit dem Wert Eins erganzt. Zusammen mit dem erweiterten Gewichtsvektor wird die

Schwellenwertberechnung uberflussig.

Page 94: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 87

NNVektor eingabeVektor Der aktuelle Eingabevektor kann uberdiese Variable gelesen werden.

NNVektor adalineVektor Nachdem ein Eingabevektor an dasNeuronale Netz angelegt wurde, wirdin der Variable adalineVektor die vomNetzwerk berechnete Ausgabeabgelegt.

Funktionen

Die Klasse Adaline stellt folgende Funktionen zur Verfugung:

Ruckgabe Funktionsname Funktionsparameter Erlauterung

∅ lernenAdaline NNVektor eingabe,NNVektor ziel

Diese Funktion berechnetdie Ausgabe desNeuronalen Netzes undvergleicht die realeAusgabe mit dem zielVektor. Ergibt sich einFehler, wird dieGewichtsmatrixangepasst - das NeuronaleNetz lernt.

∅ lernen Integer anzahl Es werden anzahl-mal diegesamten in der Matrixeingabe gespeichertenEingabemuster an dasNeuronale Netz angelegtund mit derentsprechenden Zeile derausgabe Matrix verglichenund bei Abweichungkorrigiert.

∅ korrigieren Integer i,NNVektor eingabe,NNVektor ziel

Ein Adaline-Neuron wirdgezielt trainiert. DieseFunktion wird von derMadaline-Implementierungbenotigt.

NNVektor ausgabeFunk NNVektor v Der Eingabevektor v wirdan das Netzwerk angelegtund die Aktivitat desNetzwerks wird alsVektor zuruckgeliefert.

∅ laden ZeichenkettedateiName

Das Neuronale Netz wirdaus der Datei mit NamendateiNamen geladen.Dadurch kann einvortrainiertes Netzwerkverwendet werden, ohneein Trainingdurchzufuhren.

Page 95: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 88

∅ speichern ZeichenkettedateiName

Das Neuronale Netz wirdin die Datei mit NamendateiNamen gespeichert.Dadurch kann einvortrainiertes Netzwerkzur spateren Verwendunggesichert werden.

3.8 Madaline

Ein Madaline-Netzwerk wird aus Adaline-Elemente und einem Verdichtungsver-fahren zusammengesetzt. Madaline-Netzwerke konnen alle logischen Funktionenproduzieren. Zur Reproduktion der XOR-Funktion mussen zwei Adaline-Elementeverwendet werden, da eine Adaline-Element den Losungsraum nur linear trennenkann, die XOR-Funktion aber in zwei Bereiche auftritt, das heißt, der Losungsraummuss in drei Teile zerlegt werden. Das Verdichtungsverfahren sorgt dafur, dass jedesAdaline-Element den Raum aufteilt und somit die fur die XOR-Funktion benotig-te Dreiteilung vornimmt. Die Kombination von mehreren Adaline-Elementen undeiner Verdichtungsschicht wird als Madaline-Element bezeichnet.

=1ox

x1

x2

xn

Adaline

Madaline

Verdichtungsfunktion

Σ,∨,∧etc.

Abbildung 3.7: Aufbau eines Madaline-Netzwerks

Als Verdichtungsverfahren existieren die drei Verfahren:

• Das Singularverfahren schaltet das Maximum der Ausgabe aller verwendetenAdaline-Elemente durch.

• Das Einstimmigkeitsverfahren schaltet nur eine +1 durch, wenn alle Adaline-Elemente eine +1 als Ausgabe produzieren, ansonsten eine -1.

Page 96: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 89

• Das Mehrheitsverfahren schaltet demokratisch das Ergebnis durch, welchesvon den beteiligten Adaline-Elementen am haufigsten produziert wurde. BeiStimmengleichheit wird im Allgemeinen der Wert -1 geschaltet.

Der Lernvorgang beschrankt sich auf das Adaline-Element, welches eine falscheAktivierung produziert und deren Netzaktivitat dann am nachsten zum Umschalt-punkt der Aktivierungsfunktion liegt.

4ε2 =4(Σε2k)

Anwendung in der Agrartechnik

Das Madaline-Netzwerk geht uber ein Adaline-Netzwerk hinaus und kann die Aufga-ben eines komplexen Reglers oder eines Diskriminators ubernehmen. Das gewunsch-te Lerngebiet kann dabei eine beliebige zusammenhangende Form aufweisen. DieKomplexitat der Form hangt von der Anzahl der verwendeten Adaline-Elementeab, je mehr Adaline-Elemente verwendet werden, desto komplexer kann das abge-bildete Gebiet sein.

Implementierung der Klasse Madaline

Die Klasse Madaline verfugt uber die zum Aufbau von Neuronalen Netzen notwen-digen Funktionen und Variablen. Sie benotigt die Klassen NNVektor und Matrix.Wahlt man als Verdichtungschicht eine Mehrheitsfunktion, sollte immer eine unge-rade Anzahl von Adaline-Elementen verwendet werden.

Konstruktor

Konstruktor Erlauterung

Madaline(Integer eingaben,Integer adaline, Integerausgaben)

Es wird ein Neuronales Netz miteinem Eingabevektor der Großeeingabe, mit der Anzahl von adalineAdaline-Neuronen proMadaline-Neuron und ausgabeunabhangigen Madaline-Neuronenerzeugt.

Variablen

Typ Variable Erlauterung

Double lernRate Durch die Variable lernRatewird angegeben, wie starkAnderungen beim Lernprozessauf die Gewichtsmatrixangewandt werden.

Integer adalineAnzahl Die Anzahl der Adalineneuronenpro Madalineneuron wird durchdiese Variable angegeben.

Page 97: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 90

Integer madalineAnzahl Die Anzahl derMadalineneuronen wird durchdiese Variable angegeben.

Integer anzahlTraining Uber diese Variable wird dieAnzahl der unterschiedlichenTrainingsmuster abgefragt.

Vektor adalineElemente In diesem Vektor werden die zuden Madaline-Neuronenzugehorigen Adaline-Netzwerkegespeichert.

Integer eingabeVektorDimension Die Eingabe-Vektor-Dimensionkann uber diese Variableermittelt werden.

Matrix eingabe Die eingabe Matrix enthaltmehrere Eingabe-Muster. DieEingabe-Muster werdenzeilenweise in derEingabematrix gespeichert. JedeZeile hat genau die Große derDimension des EingabeVektors.

Matrix ausgabe Die ausgabe Matrix enthaltmehrere Ausgabe-Muster. DieAusgabe-Muster werdenzeilenweise in derAusgabematrix gespeichert.Jede Zeile hat genau die Anzahlder Madaline-Neuronen.

Matrix w Die Gewichte, die derEingabeschicht und denMadaline-Neuronen zugeordnetsind, werden in dieser Matrixgespeichert. Die Tiefe derGewichtsmatrix ist um Einsgroßer als die Dimension desEingabevektors, da derSchwellenwert durch einen Biasersetzt wird. 4

NNVektor eingabeVektor Der aktuelle Eingabevektorkann uber diese Variable gelesenwerden.

NNVektor madalineVektor Nachdem ein Eingabevektor andas Neuronale Netz angelegtwurde, wird in der VariablemadalineVektor die vomNetzwerk berechnete Ausgabeabgelegt.

4Der Eingabevektor wird bei jeder Eingabe ins Netzwerk um einen Wert mit einer konstanten

Aktivierung mit dem Wert Eins erganzt. Zusammen mit dem erweiterten Gewichtsvektor wird die

Schwellenwertberechnung uberflussig.

Page 98: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 91

Funktionen

Die Klasse Madaline stellt folgende Funktionen zur Verfugung:

Ruckgabe Funktionsname Funktionsparameter Erlauterung

∅ lernenMadaline NNVektor eingabe,NNVektor ziel

Diese Funktion berechnetdie Ausgabe desNeuronalen Netzes undvergleicht die realeAusgabe mit dem zielVektor. Ergibt sich einFehler, wird dieGewichtsmatrixangepasst - das NeuronaleNetz lernt.

∅ lernen Integer anzahl Es werden anzahl-mal diegesamten in der Matrixeingabe gespeichertenEingabemuster an dasNeuronale Netz angelegtund mit derentsprechenden Zeile derausgabe Matrix verglichenund bei Abweichungkorrigiert.

NNVektor ausgabeFunk NNVektor v Der Eingabevektor v wirdan das Netzwerk angelegtund die Aktivitat desNetzwerks wird alsVektor zuruckgeliefert.

∅ laden ZeichenkettedateiName

Das Neuronale Netz wirdaus der Datei mit NamendateiNamen geladen.Dadurch kann einvortrainiertes Netzwerkverwendet werden, ohneein Trainingdurchzufuhren.

∅ speichern ZeichenkettedateiName

Das Neuronale Netz wirdin die Datei mit NamendateiNamen gespeichert.Dadurch kann einvortrainiertes Netzwerkzur spateren Verwendunggesichert werden.

3.9 BAM

Das Neuronale Netz vom Typ Bidirektionaler Assoziativspeicher wurde von BartKosko entwickelt. Das BAM5-Netzwerk besteht aus der Schicht S1 und der Schicht

5Bidirectional Associative Memory

Page 99: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 92

Σwijoj(t) = 0 oi(t + 1) = oi(t)Σwijoj(t) > 0 oi(t + 1) = 1Σwijoj(t) < 0 oi(t + 1) = 0

Tabelle 3.19: Die unterschiedlichen Falle der Transferfunktion

S2. Das BAM-Netzwerk assoziiert den Vektor ~x der S1-Schicht mit dem Vektor ~yder S2-Schicht. Die Vektoren konnen dabei eine unterschiedliche Dimension aufwei-sen. Die S1- und S2-Schicht sind sowohl Eingabe- als auch Ausgabeschicht. JedesElement der S1-Schicht ist mit jedem Element der S2-Schicht verbunden. Weiter-hin gilt, dass jedes Gewicht symmetrisch angeordnet ist. Der Vektor ~x gehort zurS1-Schicht und der Vektor ~y zur S2-Schicht. Es gilt

wij = wji, wii = 0, 1 ≤ i ≤ n, 1 ≤ j ≤ m.

~x =

x1

x2

.

.xn

∈ {−1, 1}n und ~y =

y1

y2

.

.ym

∈ {−1, 1}m

Die Transferfunktion der Neuronen lautet:

Lernregel

Damit ein Vektor ~x mit n Komponenten auf einem Vektor ~y mit m Komponentenabgebildet werden kann, wird die Gewichtsmatrix W durch das außere Produkt be-rechnet:

W = yxT

Um das Lernen zu verbessern, werden alle Komponenten im Eingabevektor x, diemit einer 0 belegt sind, durch eine -1 ersetzt. Werden k Eingabevektoren gelernt,so gilt

W =k

i=1

xTi yi

fur alle zu lernenden Vektoren.

Energiefunktion

Die Energiefunktion:

Egesamt = −∑

i

j

wijxiyj = −yT Wx

ist dann minimal, wenn in der S1- und der S2-Schicht ein bereits gespeichertesVektorpaar (x,y) anliegt.

Page 100: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 93

Reproduktion

Wird ein Vektor z an die S1-Schicht angelegt, wird der ihm ahnlichste Vektor ~xund der dazugehorige Vektor ~y vom BAM-Netzwerk reproduziert. Diese Reproduk-tion muss nicht unmittelbar stattfinden, sondern erfolgt uber mehrere Iterationenin denen sich die Energie minimiert. Das gewunschte Vektorpaar (~x,~y) wird beimErreichen des lokalen Energie-Minimums erreicht.

S1−Schicht S2−Schicht

x1

x2

xn

y1

y2

ym

Abbildung 3.8: Aufbau eines BAM-Netzwerks

Anwendung in der Agrartechnik

Eine Folge von Vektoren kann mittels eines BAM-Netzwerks gespeichert werden.Sollen beispielsweise Steuersequenzen erzeugt werden, die abhangig von einer Ein-gabe sind, erzeugt ein BAM-Netzwerk den zur Eingabe ahnlichsten Ausgabevek-tor und setzt die diesem Ausgabevektor folgende Vektorausgabe fort. Es ist auchmoglich unendliche Vektorfolgen einzuspeichern. Die Dimension der Eingabe- undAusgabeschicht muss dann identisch sein.

Implementierung der Klasse BAM

Die Klasse BAM verfugt uber die zum Aufbau von Neuronalen Netzen notwendigenFunktionen und Variablen. Sie benotigt die Klassen NNVektor und Matrix. Dievorliegende Implementierung beschrankt sich auf Netzwerke mit gleichem Ein- undAusgabevektor. Soll ein Eingabewert und das Funktionsergebnis in einem BAM-Netzwerk gespeichert werden, muss der Ein- und Ausgabevektor aus den beidenWerten komponiert werden.

Page 101: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 94

Konstruktor

Konstruktor Erlauterung

BAM(Integer eingaben,Integer ausgaben) Es wird ein Neuronales Netz miteinem Eingabevektor der Großeeingabe und ausgabeunabhangigen BAM-Neuronenerzeugt.

Variablen

Typ Variable Erlauterung

Double lernRate Durch die Variable lernRate wirdangegeben, wie stark Anderungenbeim Lernprozess auf dieGewichtsmatrix angewandt werden.

Integer bamAnzahl Die Anzahl der BAM-Neuronen wirddurch diese Variable angegeben.

Integer anzahlTraining Uber diese Variable wird die Anzahlder unterschiedlichen Trainingsmusterabgefragt.

Integer eingabeVektorDimension Die Eingabe-Vektor-Dimension kannuber diese Variable ermittelt werden.

Matrix eingabe Die eingabe Matrix enthalt mehrereEingabe-Muster. Die Eingabe-Musterwerden zeilenweise in derEingabematrix gespeichert. Jede Zeilehat genau die Große der Dimensiondes EingabeVektors.

Matrix ausgabe Die ausgabe Matrix enthalt mehrereAusgabe-Muster. Die Ausgabe-Musterwerden zeilenweise in derAusgabematrix gespeichert. Jede Zeilehat genau die Anzahl derBAM-Neuronen.

Matrix w Die Gewichte, die der Eingabeschichtund den BAM-Neuronen zugeordnetsind, werden in dieser Matrixgespeichert. Die Tiefe derGewichtsmatrix ist um Eins großer alsdie Dimension des Eingabevektors, dader Schwellenwert durch einen Biasersetzt wird. 6

NNVektor eingabeVektor Der aktuelle Eingabevektor kann uberdiese Variable gelesen werden.

6Der Eingabevektor wird bei jeder Eingabe ins Netzwerk um einen Wert mit einer konstanten

Aktivierung mit dem Wert Eins erganzt. Zusammen mit dem erweiterten Gewichtsvektor wird die

Schwellenwertberechnung uberflussig.

Page 102: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 95

NNVektor bamVektor Nachdem ein Eingabevektor an dasNeuronale Netz angelegt wurde, wirdin der Variable bamVektor die vomNetzwerk berechnete Ausgabeabgelegt.

Funktionen

Die Klasse BAM stellt folgende Funktionen zur Verfugung:

Ruckgabe Funktionsname Funktionsparameter Erlauterung

∅ lernenBAM NNVektor eingabe,NNVektor ziel

Diese Funktion berechnetdie Ausgabe desNeuronalen Netzes undvergleicht die realeAusgabe mit dem zielVektor. Ergibt sich einFehler, wird dieGewichtsmatrixangepasst - das NeuronaleNetz lernt.

∅ lernen Integer anzahl Es werden anzahl-mal diegesamten in der Matrixeingabe gespeichertenEingabemuster an dasNeuronale Netz angelegtund mit derentsprechenden Zeile derausgabe Matrix verglichenund bei Abweichungkorrigiert.

NNVektor ausgabeFunk NNVektor v Der Eingabevektor ~v wirdan das Netzwerk angelegtund die Aktivitat desNetzwerks wird alsVektor zuruckgeliefert.

∅ laden Zeichenkette dateiName Das Neuronale Netz wirdaus der Datei mit NamendateiNamen geladen.Dadurch kann einvortrainiertes Netzwerkverwendet werden, ohneein Trainingdurchzufuhren.

∅ speichern Zeichenkette dateiName Das Neuronale Netz wirdin die Datei mit NamendateiNamen gespeichert.Dadurch kann einvortrainiertes Netzwerkzur spateren Verwendunggesichert werden.

Page 103: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 96

3.10 Counterpropagation

Ein Counterpropagation-Netzwerk ist nicht so leistungsfahig wieein Backpropagation-Netzwerk, kann aber wesentlich schneller berechnet werden.Es ist ein kombiniertes Netzwerk, in der die Neuronen der Kohonen-Schicht K voneinem anderen Typ als die Neuronen in der Grossberg-Schicht G sind.

Eingabe−Schicht I Kohonen−Schicht K Grossberg−Schicht G

x2

Gewichtsmatrix W Gewichtsmatrix V

1x

xn

y1

y2

yn

Abbildung 3.9: Aufbau eines Counterpropagation-Netzwerks

Das Interessante an diesem Netzwerk-Typ ist die Fahigkeit, sowohl die funktionaleAbbildung von ~x→ ~y als auch die Abbildung von ~y → ~x approximieren zu konnen.Es kann also sowohl die Funktion f abgebildet werden, als auch die inverse Funktionf−1 approximiert werden. Um diese Fahigkeit dem Counterpropagation-Netzwerkanzutrainieren, wird der Eingabevektor ~z aus den Werten von X und Y gebildet.Das Netzwerk wird auf die Erkennung des gleichen Vektor ~z trainiert. Es liegen alsoam Eingang und am Ausgang der Vektor ~z an. Nach dem Training muss nur nocheine der Komponenten X oder Y angelegt werden. Der andere Teil der Komponentemuss auf 0 gesetzt werden, damit am Ausgang der vollstandige Vektor ~z und somitdie fehlende Komponente erzeugt wird.

Eine Eingabeschicht besteht aus Neuronen, die mit allen Neuronen der Kohonen-schicht verbunden sind. Dabei werden die Aktivitaten der Neuronen der Eingabe-Schicht mit der Gewichtsmatrix W multipliziert. Die Gewichtsmatrix W bestehtaus den einzelnen Gewichten wij , die jeder Verbindung der Eingabe-Schicht mitder Kohonen-Schicht zugeordnet ist. Die Kohonen-Schicht funktioniert als ein the-winner-takes-all-Netzwerk, wobei 1 ≤ i ≤ Große der Eingabe-Schicht und 1 ≤ j ≤Große der Kohonen-Schicht ist. Es wird eine Netzeingabe in der Kohonenschichtermittelt. Jedes Neuron der Kohonen-Schicht produziert eine Netzeingabe:

netj =∑

i∈I

oiwij =∑

i∈I

xiwij

wobei I die Menge der Eingabeneuronen ist. Das Neuron mit der großten Netzein-gabe schaltet als Einziges eine 1 durch, die anderen Neuronen der Kohonen-Schicht

Page 104: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 97

feuern eine 0. Haben mehrere Neuronen die gleiche maximale Netzeingabe, wird einNeuron zufallig ausgewahlt.

Die Netzeingabe der Neuronen der Grossberg-Schicht berechnet sich nach:

netk =∑

i∈I

oiwij =∑

i∈K

oivij

wobei K die Menge der Neuronen in der Kohonen-Schicht ist, V die Gewichtsmatrixzwischen der Kohonen- und der Grossberg-Schicht und vij ∈ V ist. Da nur eineinziges Kohonen-Neuron aktiviert sein kann, ergibt sich fur dieses Neuron oj , dassok = ojvjk = vjk ist.

Lernregel der Kohonen-Schicht

Als Erstes wird der Eingabevektor auf die Lange 1 normalisiert. Dies geschiehtdurch:

x′

i = xi/√

x21 + ... + x2

n

Als Nachstes wird das Kohonen Neuron mit der großten Aktivitat ausgewahlt. ImAnschluss daran wird dieser Gewichtsvektor dem Eingabeneuron ahnlicher gemacht.Dies geschieht durch Anpassung der Gewichte des Gewichtsvektors:

wij(t + 1) = w(ij) + α(xi(t)− wij(t))

Die Lernrate α beginnt nach [27, ZELL 2000] mit dem Wert 0,7 und wird wahrenddes Lernens verringert. Dadurch schwenkt der Gewichtsvektor in Richtung des Ein-gabevektors. Damit sich die Neuronen spezialisieren konnen, muss die Gewichstma-trix W mit zufalligen Werten belegt werden. Es entsteht das Problem, dass einigeNeuronen unter Umstanden nie aktiviert werden und damit vergeudet sind. Um zuunterbinden, dass dies geschieht, wird die Fairness-Funktion, beschrieben von De-Sieno, implementiert. Hat ein Neuron mehr als 1/k-Aktivierungen gewonnen, wobeik die Anzahl der Neuronen in der Kohonen-Schicht ist, wird der Schwellenwertso erhoht, dass die bisher gescheiterten Neuronen in der Kohonen-Schicht bei dernachsten Eingabe eines Musters aktiviert werden.

Lernregel der Grossberg-Schicht

Die Neuronen der Grossberg-Schicht werden durch uberwachtes Lernen trainiert.Nachdem ein Eingabevektor ein Neuron der Kohonen-Schicht aktiviert hat, wird dieAktivitat mit dem zugeordneten Gewichtsvektor des aktivierten Neurons der Ge-wichtmatrix V multipliziert. Das Gewicht der Verbindung vij des Kohonen-Neuronsan der Stelle i und des Grossberg-Neuron an der Stelle j wird mittels der Gleichung

vij(t + 1) = vij(t) + oi(t)β(tj − vij(t))

berechnet, wobei i ∈ K und j ∈ G ist. Die Lernrate β wird langsam von dem An-fangswert 0,1 wahrend des Lernens reduziert[27, ZELL 2000]. Dadurch konvertierendie Gewichte zur gewunschten Ausgabe.

Page 105: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 98

Anwendung in der Agrartechnik

Interessante Anwendungen in der Agrartechnik ergeben sich aus der Tatsache, dasseine Funktion und ihre Inverse durch ein Counterpropagation-Netzwerk abgebil-det werden konnen. Wird ein Counterpropagation-Netzwerk auf die Vorhersage vonQualitatsmerkmalen eines Agrarprodukts trainiert und als Eingabevektor die In-haltsstoffe des Agrarprodukts und die gemessenen Qualitatsmerkmale verwendet,kann nach Abschluss des Trainings anhand der Qualitatsmerkmale ein Ruckschlussauf die Inhaltsstoffe vorgenommen werden, ohne dass die destruktiven Messmetho-den, die sonst zur Ermittlung der Inhaltsstoffe notwendig sind, angewendet werdenmussen. Weiterhin kann das Counterpropagation-Netzwerk naturlich immer nochdie Inhaltsstoffe auf die Qualitatsmerkmale abbilden. Die fur Agrarprodukte cha-rakteristischen Schwankungen konnen die Abbildungsqualitat in beiden Richtungenbeeintrachtigen.

Implementierung der Klasse Counterpropagation

Die Klasse Counterpropagation verfugt uber die zum Aufbau von Neuronalen Net-zen notwendigen Funktionen und Variablen. Sie benotigt die Klassen NNVektor undMatrix.

Konstruktor

Konstruktor Erlauterung

Counterpropagation(Integer e, Integer k, Integer g) Es wird ein NeuronalesNetz mit einemEingabevektor der Großee, k Kohonen-Neuronenund gGrossberg-Neuronenerzeugt.

Variablen

Typ Variable Erlauterung

Double lernRate Durch die Variable lernRate wirdangegeben, wie stark Anderungenbeim Lernprozess auf dieGewichtsmatrix angewandt werden.

Integer kohonenAnzahl Die Anzahl derCounterpropagation-Neuronen in derKohonenschicht wird durch dieseVariable angegeben.

Integer grossbergAnzahl Die Anzahl derCounterpropagation-Neuronen in derGrossbergschicht wird durch dieseVariable angegeben.

Double deSieno[] Dieses Feld gehort zurFairness-Funktion, die dafur sorgt,dass jedes Kohonen-Neuron nur den1/k-ten Anteil der Aktivierungendurch die Trainingsmuster erhalt.

Page 106: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 99

Integer anzahlTraining Uber diese Variable wird die Anzahlder unterschiedlichen Trainingsmusterabgefragt.

Integer eingabeVektorDimension Die Eingabe-Vektor-Dimension kannuber diese Variable ermittelt werden.

Matrix eingabe Die eingabe Matrix enthalt mehrereEingabe-Muster. Die Eingabe-Musterwerden zeilenweise in derEingabematrix gespeichert. Jede Zeilehat genau die Große der Dimensiondes EingabeVektors.

Matrix ausgabe Die ausgabe Matrix enthalt mehrereAusgabe-Muster. Die Ausgabe-Musterwerden zeilenweise in derAusgabematrix gespeichert. Jede Zeilehat genau die Anzahl derCounterpropagation-Neuronen.

Matrix w Die Gewichte, die der Eingabeschichtund denCounterpropagation-Neuronenzugeordnet sind, werden in dieserMatrix gespeichert. Die Tiefe derGewichtsmatrix ist um Eins großer alsdie Dimension des Eingabevektors, dader Schwellenwert durch einen Biasersetzt wird. 7

NNVektor eingabeVektor Der aktuelle Eingabevektor kann uberdiese Variable gelesen werden.

NNVektor counterpropagationVektor Nachdem ein Eingabevektor an dasNeuronale Netz angelegt wurde, wirdin der VariablecounterpropagationVektor die vomNetzwerk berechnete Ausgabeabgelegt.

Funktionen

Die Klasse Counterpropagation stellt folgende Funktionen zur Verfugung:

Ruckgabe Funktionsname Funktionsparameter Erlauterung

7Der Eingabevektor wird bei jeder Eingabe ins Netzwerk um einen Wert mit einer konstanten

Aktivierung mit dem Wert Eins erganzt. Zusammen mit dem erweiterten Gewichtsvektor wird die

Schwellenwertberechnung uberflussig.

Page 107: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 100

∅ lernenCounterpropagation NNVektor eingabe,NNVektor ziel

Diese Funktionberechnet dieAusgabe desNeuronalen Netzesund vergleicht diereale Ausgabe mitdem ziel Vektor.Ergibt sich einFehler, wird dieGewichtsmatrixangepasst - dasNeuronale Netzlernt.

∅ lernen Integer anzahl Es werdenanzahl-mal diegesamten in derMatrix eingabegespeichertenEingabemuster andas Neuronale Netzangelegt und mitder entsprechendenZeile der ausgabeMatrix verglichenund beiAbweichungkorrigiert.

NNVektor ausgabeFunk NNVektor v Der Eingabevektorv wird an dasNetzwerk angelegtund die Aktivitatdes Netzwerks wirdals Vektorzuruckgeliefert.

∅ laden ZeichenkettedateiName

Das NeuronaleNetz wird aus derDatei mit NamendateiNamengeladen. Dadurchkann einvortrainiertesNetzwerkverwendet werden,ohne ein Trainingdurchzufuhren.

Page 108: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 3. NEURONALE NETZE 101

∅ speichern ZeichenkettedateiName

Das NeuronaleNetz wird in dieDatei mit NamendateiNamengespeichert.Dadurch kann einvortrainiertesNetzwerk zurspaterenVerwendunggesichert werden.

Page 109: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Kapitel 4

Eingebaute Befehle vonMulog

Die Programmiersprache Mulog verfugt uber folgende Befehle:

4.1 Ein-/Ausgabe-Befehle

write(A)

Die Funktion gibt den Inhalt des Atoms A auf der Konsole aus.

writeln(A)

Die Funktion gibt den Inhalt des Atoms A auf der Konsole aus und fuhrt anschlie-ßend eine neue Zeile und einen Wagenrucklauf aus.

print(A)

Die Funktion gibt den Inhalt des Atoms A auf der Konsole aus.

println(A)

Die Funktion gibt den Inhalt des Atoms A auf der Konsole aus und fuhrt anschlie-ßend eine neue Zeile und einen Wagenrucklauf aus.

open(Deskriptorname, Dateiziel)

Das Offnen einer Datei fur die Ein- oder Ausgabe geschieht mit Hilfe der Funktionopen. Der Deskriptorname wird dabei als Referenz auf die gewahlte Datei fur dieFunktionen readline, write und close verwendet. Das Dateiziel besteht aus zweiTeilen:

• zum einen aus der Eingaberichtung - so steht ”>” fur die Ausgabe, ”>>” und”<” fur die Eingabe

102

Page 110: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 103

• zum anderen aus dem Dateinamen. Wird Mulog uber die graphische Benutze-roberflache gestartet, kann der Pfad nur noch eine Datei relativ innerhalb despersonlichen Bereichs referenzieren. Diese Maßnahme soll einen Missbrauchvon Mulog zur Manipulation von Daten, die nicht dem Benutzer gehoren,unterbinden.

Ein Beispiel:

start:-open("ausgabe1",">ausgabe.txt"),write("ausgabe1","Hallo Welt"),

close("ausgabe1").

write(Deskriptorname, Text)

Der Text wird in die durch den Deskriptor Deskriptorname referenzierten und durchden Befehl open zur Ausgabe oder Anhangen geoffneten Datei geschrieben. Ist dieDatei nicht geoffnet oder schlagt das Schreiben fehl, wird ein Laufzeitfehler erzeugt.

readline(Deskriptorname, Text)

Zeilen werden mittels des Befehls readline gelesen. Der Inhalt, der durch den De-skriptornamen referenzierten Datei, wird an die Variable Text gebunden. Die Funk-tion readline liest durch Wiedererfullung die Datei aus. Es ist nicht moglich readlinein einer zirkularen Weise zu benutzen:

# Beispiel 1 - in Ordnung

datei_lesen:-readline("eingabe1",Zeile),bearbeite(Zeile),fail.

# Beispiel 2 - falsch, da zirkular

datei_lesen:-readline("eingabe1",Zeile),bearbeite(Zeile),datei_lesen.

# Beispiel 3 - falsch, da zirkular

datei_lesen1:-readline("eingabe1",Zeile),bearbeite(Zeile),datei_lesen2.

datei_lesen2:-readline("eingabe1",Zeile),bearbeite(Zeile),datei_lesen1.

writeln(A, B)

Der Text wird in die durch den Deskriptor Deskriptorname referenzierten und durchden Befehl open zur Ausgabe oder Anhangen geoffneten Datei geschrieben. Es wirdein Wagenrucklauf angefugt. Ist die Datei nicht geoffnet oder schlagt das Schreibenfehl, wird ein Laufzeitfehler erzeugt.

close(Deskriptornamen)

Die durch den Deskriptornamen referenzierte Datei wird geschlossen.

Page 111: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 104

4.2 Befehle fur Neuronale Netze

nn backpropagation2 test(Name, Eingabe, Ausgabe)

Diese Funktion ubergibt an das Backpropagation-Netzwerk Name den Eingabevek-tor Eingabe und bindet den Ruckgabevektor dieses NNs an das Atom Ausgabe.

nn bam test(Name, Eingabe, Ausgabe)

Diese Funktion ubergibt an das BAM-Netzwerk Name den Eingabevektor Eingabeund bindet den Ruckgabevektor dieses NNs an das Atom Ausgabe.

nn backpropagation2(Fakt, AusgabeTabelle, Prozent, Back-propagationName, VersteckteNeuronen, Iterationen)

Die Variable Fakt bezeichnet eine bereits existierende Tabelle, die als Eingabetabellefur das Backpropagation-Netzwerk verwendet wird. Die Ziel-Parameter zum Trai-ning des Backpropagation-Netzwerks kommen aus der AusgabeTabelle. Die Daten,die zum Training benutzt werden, konnen uber den Prozent-Parameter begrenztwerden. Nur bei 100 werden alle Daten benutzt, ansonsten der Prozentsatz derDaten, die in diesem Parameter angegeben wurden. Das erzeugte Backpropagation-Netzwerk erhalt den Namen aus dem Parameter BackpropagationName. Da jedesBackpropagation-Netzwerk uber Neuronen in der versteckten-Schicht verfugt, wirddie Anzahl der Neuronen mittels dem Parameter VersteckteNeuronen ubergeben.Zum Erlernen werden Iterationen-Durchlaufe mit den Trainingsdaten durchgefuhrtund das Netzwerk jeweils durch Backpropagation korrigiert.

nn associate(Fakt, P, Ergebnis, VN, I)

Die interne Tabelle Fakt wird als Eingabe in das assoziative Netzwerk verwendet. Eswird dabei der Prozentsatz P verwendet. Die interne Tabelle Ergebnis wird als Zieldes Neuronalen Netzwerks trainiert. Das neu angelegte Neuronale Netz bekommtdabei den Namen Fakt. Es werden pro Eingangsleitung des NNs VN Neuronen inder verdeckten Schicht angelegt. Das NN wird I-mal trainiert.

nn associate test(N, E, T, M, P, A)

Der Eingabe-Vektor E wird in das Neuronale Netzwerk N eingegeben. Der Typ Tkann entweder den Wert ”auto” oder ”predict” annehmen. Wird der Typ ”auto”gewahlt, wird bei der Wahl des zum Eingabevektors korrespondierenden Ausgabe-vektors der exakte Ausgabevektor, der beim Training verwendet wurde, zuruckge-geben. Bei ”predict” wird eine interne Heuristik verwendet, um einen zum Eingabe-vektor passenden Ausgabevektor zu interpolieren. Die Ruckgaben fur die maximaleUbereinstimmung, die Position in der internen Ausgabevektorentabelle und denbesten Ausgabevektors werden in M, P und A zuruckgegeben.

nn drop(Name)

Das durch Name bezeichnete Neuronale Netz wird geloscht.

Page 112: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 105

nn backpropagation(Fakt, AusgabeTabelle, Prozent, Backpro-pagationName, VersteckteNeuronen, Iterationen)

Die Variable Fakt bezeichnet eine bereits existierende Tabelle, die als Eingabetabellefur das Backpropagation-Netzwerk verwendet wird. Die Ziel-Parameter zum Trai-ning des Backpropagation-Netzwerks kommen aus der AusgabeTabelle. Die Daten,die zum Training benutzt werden, konnen uber den Prozent-Parameter begrenztwerden. Nur bei 100 werden alle Daten benutzt, ansonsten der Prozentsatz derDaten die in diesem Parameter angeben wurden. Das erzeugte Backpropagation-Netzwerk erhalt den Namen aus dem Parameter BackpropagationName. Da jedesBackpropagation-Netzwerk uber Neuronen in der Versteckten-Schicht verfugt, wirddie Anzahl der Neuronen mittels dem Parameter VersteckteNeuronen ubergeben.Zum Erlernen werden Iterationen Durchlaufe mit den Trainingsdaten durchgefuhrtund das Netzwerk jeweils durch Backpropagation korrigiert.

nn backpropagation test(Name, Eingabe,Ausgabe)

Vorgenannte Funktion ubergibt an das Backpropagation-NetzwerkName den Einga-bevektor Eingabe und bindet den Ruckgabevektor dieses NNs an das Atom Ausgabe.

nn backpropagation test(Name, EingangsTabelle, ZielTabelle,Ergebnis, Fehler, Datensaetze)

Diese Funktion testet das Backpropagation-Netzwerk Name mit den Eingangsvek-toren aus der Tabelle EingangsTabelle und den Ausgabevektoren aus der TabelleZielTabelle. Die Anzahl der Vektoren, die sowohl in der Tabelle EingangsTabelle alsauch in der Tabelle ZielTabelle vorkommen und mittels der internen ”ID” verbun-den werden konnen, wird an Datensaetze gebunden. Der Gesamtfehler des Testswird entsprechend an Fehler ubertragen und die Anzahl der korrekten Vorhersagendurch das Neuronale Netz findet sich im Ergebnis wieder.

4.3 Arithmetische Befehle

assign(A, B)

Bindet den Inhalt des Parameters A an die Variable B.

bin(A, B)

Ist der an A gebundene Wert kleiner als 0.5, so wird an die Variable B der Wert0.0, ansonsten 1.0, gebunden.

sin(A, B)

Bindet den Sinus-Wert von A an die Variable B.

cos(A, B)

Bindet den Cosinus-Wert von A an die Variable B.

Page 113: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 106

tan(A, B)

Bindet den Tangens-Wert von A an die Variable B.

inv(A, B)

Bindet den Inversen-Wert von A an die Variable B.

radgrad(A, B)

Bindet den vom Rad ins Grad-System gewandelten Wert von A an die Variable B.

gradrad(A, B)

Bindet den vom Grad ins Rad-System gewandelten Wert von A an die Variable B.

abs(A, B)

Bindet den Absoluten-Wert von A an die Variable B.

round(A, B)

Rundet den Inhalt von A und speichert ihn in B.

rest(A, B)

Bindet den Fließkommaanteil von A an B.

add(A, B, C)

Die Inhalte von A und B werden addiert und an C gebunden.

sub(A, B, C)

Der Inhalt von B wird von A subtrahiert und an C gebunden.

mul(A, B, C)

Die Inhalte von A und B werden multipliziert und an C gebunden.

div(A, B, C)

Der Inhalt von A wird durch den Inhalt von B geteilt und an C gebunden.

Page 114: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 107

4.4 Vergleichsbefehle

greater(A, B)

Es wird ein Backtracking ausgefuhrt, wenn A nicht großer als B ist.

greater equal(A, B)

Es wird ein Backtracking ausgefuhrt, wenn A nicht großer gleich B ist.

less(A, B)

Es wird ein Backtracking ausgefuhrt, wenn A nicht kleiner als B ist.

less equal(A, B)

Es wird ein Backtracking ausgefuhrt, wenn A nicht kleiner gleich B ist.

unequal(A, B)

Ein boolscher Test auf Ungleichheit der an A und B gebundenen Werte wird durch-gefuhrt. Scheitert der Test, wird ein Backtracking ausgefuhrt.

equal(A, B)

Ein boolscher Test auf Gleichheit der an A und B gebundenen Werte wird durch-gefuhrt. Scheitert der Test, wird ein Backtracking ausgefuhrt.

4.5 Befehle fur die Zeichenkettenbearbeitung

str substring(EingabeVektor, Start, Ende, AusgabeVektor)

Es wird der Teilbereich zwischen der Start- und Ende-Position aus dem Eingabe-Vektor in den AusgabeVektor kopiert.

str length(A, B)

Es wird die Lange der Zeichenkette A an die Variable B gespeichert.

str concat(A, B, C)

Die Inhalte der Variablen A und B werden verbunden und anschließend in dieVariable C kopiert.

Page 115: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 108

str trim(A, B)

Es werden die fuhrenden und abschließenden Leerzeichen aus der Zeichenkette Aentfernt, und das Resultat an B gebunden.

str index(A, B, C)

Das Vorkommen der Zeichenkette B in der Zeichenkette A wird gesucht, und diePosition an C gebunden.

str replace(A, B, C, D)

Alle Vorkommen der Zeichenkette B in der Zeichenkette A werden durch den Inhaltvon C ersetzt und an D gebunden.

str char(A, B, C)

Es wird aus der Zeichenkette A das Zeichen an der Stelle B an die Variable Cgebunden.

str cmp(A, B, C)

Es wird die Zeichenkette A mit der Zeichenkette B verglichen, und das Resultatin C gespeichert. Lautet das Resultat 0, sind die Zeichenketten gleich. Bei einemnegativen Wert ist A kleiner als B und bei einem positiven Wert ist A großer als B.

vector count(EingabeVektor, Vektorlange)

Die Anzahl der Elemente im EingabeVektor wird an die Variable Vektorlange ge-bunden.

vector element at(EingabeVektor, N, Element)

Es wird das Element an der N-ten Stelle im Eingabe-Vektor EingabeVektor an dieVariable Element gebunden.

vector remove(EingabeVektor, N, AusgabeVektor)

Es wird das Element an der N-ten Stelle aus dem Eingabe-Vektor EingabeVektorentfernt und das Resultat wird im Ausgabe-Vektor gebunden.

vector add(EingabeVektor, Element, AusgabeVektor)

Es wird das Element Element an den Eingabe-Vektor EingabeVektor angefugt, unddas Ergebnis an die Variable AusgabeVektor gebunden.

Page 116: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 109

vector overwrite(EingabeVektor, N, Element, AusgabeVek-tor)

Diese Funktion ersetzt ein Element an der N-ten Stelle im Eingabe-Vektor Einga-beVektor mit dem Element Element und bindet den neuen Vektor an den Ausgabe-Vektor AusgabeVektor.

vector mul(EingabeVektor, Faktor, AusgabeVektor)

Der Eingabe-Vektor EingabeVektor wird mit dem Faktor Faktor multipliziert undim Ausgabe-Vektor AusgabeVektor gespeichert.

dbtable comp(TabellenName1, TabellenName2, Vergleichser-gebnis)

Es werden die Tabellen TabellenName1 und TabellenName2 verglichen. Enthaltendie Tabellen eine unterschiedliche Anzahl von Zeilen oder Spalten, wird als Ergebnis”Spaltenzahl kleiner”, ”Spaltenzahl großer”, ”Zeilenzahl kleiner” oder ”Zeilenzahlgroßer” an Vergleichsergebnis gebunden. Ist die Zeilenanzahl und die Spaltenzahl inbeiden Tabellen gleich, wird ein zweistelliger Vektor an das Atom Vergleichergebnisgebunden, der an erster Stelle die Anzahl der Elemente der ersten Tabelle enthalt,die großer als die korrespondierenden Elemente in der zweiten Tabelle sind und anzweiter Stelle die Anzahl der Elemente der zweiten Tabelle enthalt, die großer alsdie korrespondierenden Elemente in der ersten Tabelle sind.

4.6 Datenbank und Tabellen-Befehle

dbtable(Fakt, Attribute, Treiber, RechnerAdresse, Daten-bankname, Tabellenname, Benutzername, Passwort)

Es wird eine Tabelle Tabellenname aus der Datenbank Datenbankname in daslaufende Programm geladen. Dabei ist zu beachten, dass die Tabelle sowohl in-tern in der Laufzeitumgebung zwischengespeichert ist, als auch kompiliert undin das Programm als Fakt eingeladen wird. Auf die Datei wird mit der AbfrageFakt(Attribut1[,Attribut2...Attributn]); zugegriffen. Die Attribute haben die FormAttribut1[#Attribut2...#Attributn]. Die Beschreibung der Variablen ist identischzu dbtable intern.

dbtable intern(InternerTabellenName, Attribute, Treiber,Rechner, Datenbank, Tabelle, Benutzername, Passwort)

Mulog besitzt eine interne Tabellenverwaltung, damit die Neuronalen Netze mitdiesen Daten trainiert werden konnen. Der dbtabelle intern-Befehl ladt eine Tabelleaus der Datenbank und legt diese intern an. Die Daten der Tabelle werden nichtubersetzt und als Fakten dem Programm zur Verfugung gestellt. Die Daten sind alsoauch nicht per Pattern-Matching erreichbar. Diese Einschrankungen stehen einemdeutlichen Geschwindigkeitsvorteil beim Auslesen der Daten aus der Datenbankgegenuber. Sollen die Daten einer Tabelle direkt per Pattern-Matching erreichbarsein, so muss der Befehl dbtable verwendet werden.

Die Parameter der Funktion dbtable intern sind im Einzelnen:

Page 117: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 110

• InternerTabellenName → Mittels dieses Namens kann die korrespondierendeTabelle an die Neuronalen Netze gesendet werden.

• Attribute → Es werden die Attribute getrennt durch das #-Zeichen, angege-ben, die aus der Datenbanktabelle gelesen werden sollen.

• Treiber → Zur Zeit wird nur der Treiber fur MySQL unterstutzt. Der Para-meter lautet also ”mysql”.

• Rechner → Die Adresse kann entweder als IP oder als Hostname angegebenwerden.

• Datenbank → Die Datenbank wird uber diesen Parameter ausgewahlt.

• Tabelle→ Die gewunschte Tabelle aus der Datenbank wird hiermit angegeben.

• Benutzername → Da das Datenbankverwaltungssystem nur autorisierten Be-nutzern Zugriff gewahrt, muss der Benutzername angegeben werden.

• Passwort → Das zur Autorisierung benotigte Passwort muss hier angegebenwerden.

db element(EingabeTabelle, ZielTabelle, ZeilenNr, Ausgabe)

Diese sehr spezialisierte Funktion holt die ersten beiden Spalten aus der TabelleEingabeTabelle und die erste Spalte aus der ZielTabelle aus der Zeile ZeileNr underzeugt aus den Werten einen Vektor, der an die Variable Ausgabe gebunden wird.

table1(TabellenName, WerteVektor)

Eine interne Tabelle namens TabellenName wird erzeugt und mit den Werten desWerteVektors in die zweite Spalte gefullt. Die erste Spalte wird von 1 bis zur Anzahlder Elemente im Vektor durchnummeriert.

table1(TabellenName, NummerierungsVektor, WerteVektor)

Eine interne Tabelle namens TabellenName wird erzeugt und mit den Werten desWerteVektors in die zweite Spalte gefullt. Die erste Spalte wird mit dem Inhalt desNummerierungsVektors beschrieben. Der WerteVektor und der NummerierungsVek-tor mussen die gleiche Machtigkeit haben.

table2(TabellenName, WerteVektor1, WerteVektor2)

Eine interne Tabelle namens TabellenName wird erzeugt und mit den Werten desWerteVektor1 in die zweite Spalte und den Werten des WerteVektor2 in die dritteSpalte gefullt. Die erste Spalte wird von 1 bis zur Anzahl der Elemente im Vektordurchnummeriert.

Page 118: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 111

table2(TabellenName, NummerierungsVektor, WerteVektor1,WerteVektor2)

Eine interne Tabelle namens TabellenName wird erzeugt und mit den Werten desWerteVektor1 in die zweite Spalte und den Werten des WerteVektor2 in die dritteSpalte gefullt. Die erste Spalte wird von 1 bis zur Anzahl der Elemente im Vektordurchnummeriert. Die erste Spalte wird mit dem Inhalt des NummerierungsVektorbeschrieben. Die WerteVektoren und der Nummerierungsvektor mussen die gleicheMachtigkeit haben.

tableattributes(Name, AttributNamenVektor)

Die erste Zeile einer Tabelle Name enthalt die Attribut-Namen. Mit Hilfe dieserFunktion werden diese Attribut-Namen durch den Inhalt des AttributNamenVektorsuberschrieben.

bigtable(Name, Spalten, Zeilen)

Es wird eine interne Tabelle namens Name mit Spalten+1 Spalten und Zeilen+1Zeilen angelegt. Die erste Spalte enthalt die Nummerierung von 1 bis Zeilen. In derersten Zeile werden die Spaltennamen von Spalte1..Spalten abgelegt.

bigtableadd(Name, ZeilenNr, SpaltenVektor)

Eine Zeile wird an die durch ZeileNr beschriebene Stelle in der Tabelle Name ge-speichert.

tablerange(TN, S, E, TA)

Die Tabelle TA wird aus dem Inhalt der Zeilen S bis E der Tabelle TN erzeugt.

dump internal table(TabellenName)

Der Inhalt der Tabelle namens TabellenName wird auf der Konsole ausgegeben.Der Befehl wird zur Kontrolle der Daten verwendet und dient in erster Linie zurValidierung der korrekten Implementierung der Tabellen-Klassen.

mul internal table(TabellenName, SpaltenNr, Faktor)

Die Werte in der Spalte SpalteNr der Tabelle TabellenName werden mit dem WertFaktor multipliziert.

trim tables2(TabellenName1, TabellenName2, ID, Tabellen-Name3, TabellenName4)

Der Befehl trim tables2 bereitet zwei Tabellen auf, so dass sie als Eingabe fur dennn backpropagation-Befehl verwendet werden konnen. Er entspricht im Wesentlicheneinem Datenbank-Join uber das Attribut ID. Es werden nur Spalten aus der Tabelle

Page 119: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 112

TabellenName1 in die Tabelle TabellenName3 kopiert, deren Wert in der Attribut-Spalte - referenziert durch den Attributnamen ID - in der Attributspalte der TabelleTabelleName2 vorkommen. Analog wird fur die Tabelle TabellenName2 verfahren.Deren Spalten werden in Abhangigkeit von der Existenz eines korrespondierendenWertes in der Attributspalte namens ID in die Tabelle TabellenName4 geladen.Beim Kopieren werden alle Spalten entfernt, die einen NULL-Wert oder einen Wertenthalten, der zur gezielten Markierung dieser Datenspalte als ungultig verwendetwurde (es wurden verwendet: ein negativer Wert, der Wert ”99999” und der Wert”-99999”). Anschließend werden die Tabellen TabellenName3 und TabellenName4mit Hilfe des Attributwerts ID aufsteigend sortiert.

threshold bin internal table(TabellenName, SpaltenNr,SchwellenWert)

Alle Werte in der Spalte SpaltenNr der Tabelle TabellenName werden mit demSchwellenwert SchwellenWert verglichen. Sind die Werte kleiner als der Schwellen-wert, werden die Werte auf Null gesetzt, ansonsten auf die Eins. Diese Funktionwird zur Vorverarbeitung von Daten fur die Verarbeitung durch Neuronale Netzeverwendet.

normalizetable(A, B, C)

Eine Tabelle A wird normalisiert. Das Ergebnis wird unter dem Namen der Varia-blen B als interne Tabelle abgelegt. Der berechnete Normalisierungsfaktor wird anC gebunden.

tabletodb(TableName, DBName, Host, Driver, UserName,Password, Mode)

Die interne Tabelle TableName wird in die Datenbank DBName ubertragen. HatMode den Wert ”append”, werden die Daten an eine eventuell schon bestehendeTabelle angehangen, ansonsten wird die Tabelle neu erzeugt. Verwendet man ”over-write”, wird eine bestehende Tabelle geloscht und nur die Daten der internen Tabellezur Erzeugung der Datenbanktabelle herangezogen.

tablecopy(TN, S, E, TA)

Es werden die Zeilen von der Position S bis zur Position E der Tabelle TN in dieTabelle TA kopiert.

4.7 Befehle fur die Ubersetzung und das Nachla-den von Mulog-Klassen

loadclass(A)

Eine Klasse A wird nachgeladen und reloziert, damit sie aus dem Programm herausverwendet werden kann. Mit Hilfe dieser Funktion konnen Funktionsbibliothekenerzeugt werden.

Page 120: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 4. EINGEBAUTE BEFEHLE VON MULOG 113

compile(A)

Es wird eine Klasse A ubersetzt. Diese kann mit loadclass eingeladen werden.

test(A)

Das interne Test-Pradikat wird zum Testen des Ubersetzers und der Mulog-Maschine verwendet und sollte nicht benutzt werden.

Page 121: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Kapitel 5

Auswertung

5.1 Das Mulog-Programm zur Erzeugung derNeuronalen Netze

Jedes Neuronale Netz wird von genau einem Programm erzeugt, welches die Datenaus der Datenbank abfragt und auf einem Rechner im Rechnerverbund verteilt. Die-se Programme sind von der Struktur her identisch, nur die Datenbankabfragen unddie den Neuronalen Netzen zugewiesenen Identifikationsnamen sind unterschiedlich.Die einzelnen Programme werden daher von einem Programm-Generator erzeugt,der nur die Unterschiede in das jeweilige Programm einfugt.

5.1.1 Programm-Generator

In diesem Zusammenhang ergibt sich, dass fur jede Kartoffelsorte nahezu das bisauf die Datenbank-Abfragen identische Programm verwendet werden kann. DerProgramm-Generator ist selbst in Mulog geschrieben und erzeugt den Quellcodeder Programme.

liste("Belastung#Dauer#Temp_soll#Temp_ist#K_Gehalt#Verdg_K_Gehalt#Fe_Gehalt#Vit_

C#Ca_Gehalt#Verdg_Ca_Gehalt#NO3_Gehalt#Verdg_NO3").

daten(Deskriptor,A,Name1,Pos):-vector_count(A,L),less(Pos,L),

vector_element_at(A,Pos,B),str_concat(Name1,"_",E),str_concat(E,B,F),

str_concat(F,"_Ziel",Zielname)

,str_concat(F,"_Quell",Quellname),str_concat(F,"_Ponto",Backname),str_concat("id

#",Name1,T1),str_concat(T1,"#",T2),str_concat(T2,B,T3),write(Deskriptor,"laden:-

dbtable_intern(\042"),write(Deskriptor,F),write(Deskriptor,"\042,\042"),write(De

skriptor,T3),write(Deskriptor,"\042,\042mysql\042,\04210.1.1.124\042,\042ADB\042

,\042Kartoffel where Sorte=\047Ponto\047\042,\042sascha\042,\042sascha\042),trim

_tables2(\042"),write(Deskriptor,F),write(Deskriptor,"\042,\042schwarzfleckigkei

t_tabelle\042,\042ID\042,\042"),write(Deskriptor,Quellname),write(Deskriptor,"\0

42,\042"),write(Deskriptor,Zielname),write(Deskriptor,"\042),normalizetable(\042

"),write(Deskriptor,Quellname),write(Deskriptor,"\042,DOU),writeln(DOU),tableatt

ributes(\042"),write(Deskriptor,Zielname),write(Deskriptor,"\042,\042Flaeche\042

),fail.\n"),add(Pos,1,Pneu),daten(Deskriptor,A,Name1,Pneu).

daten(Deskriptor,A,Name1,Pos):-writeln("Ende Daten-Laeufer").

ladenschwf(Deskriptor):-write(Deskriptor,"dbtable_intern(\042"),write(Deskriptor

,"ziel"),write(Deskriptor,"\042,\042id#rel_schwFlaeche\042,\042mysql\042,\04210.

1.1.124\042,\042ADB\042,\042Schwarzfleckigkeit\042,\042sascha\042,\042sascha\042

114

Page 122: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 115

),").

laeufer(Deskriptor,A,Name1,Pos):-vector_count(A,L),less(Pos,L),vector_element_at

(A,Pos,B),str_concat(Name1,"_",E),str_concat(E,B,F),str_concat(F,"_Ziel",Zielnam

e),str_concat(F,"_Quell",Quellname),str_concat(F,"_Ponto",Backname),str_concat("

id#",Name1,T1),str_concat(T1,"#",T2),str_concat(T2,B,T3),write(Deskriptor,"multi

ple:schwarzfleckigkeit:-nn_backpropagation(\042"),write(Deskriptor,Quellname),wr

ite(Deskriptor,"\042,\042"),write(Deskriptor,Zielname),write(Deskriptor,"\042,10

0,\042"),write(Deskriptor,Backname),writeln(Deskriptor,"\042,3,10000),fail."),ad

d(Pos,1,Pneu),laeufer(Deskriptor,A,Name1,Pneu).

laeufer(Deskriptor,A,Name1,Pos):-writeln("Ende Laeufer").

paare(Des,A,Pos):-vector_count(A,L),less(Pos,L),vector_element_at(A,Pos,B),add(P

os,1,Pneu),laeufer(Des,A,B,Pneu),paare(Des,A,Pneu).

paare(A,B,C):-writeln("Ende Paare").

datenpaare(Des,A,Pos):-vector_count(A,L),less(Pos,L),vector_element_at(A,Pos,B),

add(Pos,1,Pneu),daten(Des,A,B,Pneu),datenpaare(Des,A,Pneu).

datenpaare(A,B,C):-writeln("Ende Datenpaare").

start:-liste(A),vector_element_at(A,6,B),writeln(B),vector_count(A,L),write("Lae

nge "),writeln(L).

anfrageblock(Deskriptor):-writeln(Deskriptor,"multiple:schwarzfleckigkeit."),wri

teln(Deskriptor,"nn_berechnen:-laden,schwarzfleckigkeit."),writeln(Deskriptor,"?

-nn_berechnen.").

ladenschw(Deskriptor):-writeln(Deskriptor,"laden:-dbtable_intern(\042schwarzflec

kigkeit_tabelle\042,\042id#rel_schwflaeche\042,\042mysql\042,\04210.1.1.124\042,

\042ADB\042,\042Schwarzfleckigkeit\042,\042sascha\042,\042sascha\042),threshold_

bin_internal_table(\042schwarzfleckigkeit_tabelle\042,\0421\042,\0422.0\042),fai

l.").

s:-liste(A),open("des",">nn_backpropagation_erzeugen.mulog"),writeln("Anfang"),

ladenschw("des"),datenpaare("des",A,0),writeln("des","laden."),paare("des",A,0),

anfrageblock("des"

),writeln("Ende"),close("des").

?-s.

5.1.2 Das Mulog-Programm zur Erzeugung der NeuronalenNetze

Um zu optimalen Ergebnissen zu kommen, wird das vom Programm-Generatorerzeugte Programm an die einzelnen Sorten angepasst. Es erzeugt, nachdem esubersetzt und ausgefuhrt wurde, die Neuronalen Netze fur die jeweilige Sorte. DerPrafix ”multiple:” leitet die Verteilung der danach folgenden Klausel auf die Rechnerim Rechnerverbund ein.

laden:-dbtable_intern("schwarzfleckigkeit_tabelle","id#rel_schwflaeche","mysql",

"10.1.1.124","ADB","Schwarzfleckigkeit","sascha","sascha"),threshold_bin_interna

l_table("schwarzfleckigkeit_tabelle","1","2.0"),fail.

laden:-dbtable_intern("Belastung_Dauer","id#Belastung#Dauer","mysql","10.1.1.

124","ADB","Kartoffel where Sorte=’Astra’","sascha","sascha"),trim_tables2("Bela

stung_Dauer","schwarzfleckigkeit_tabelle","ID","Belastung_Dauer_Quell","Belastun

g_Dauer_Ziel"),normalizetable("Belastung_Dauer_Quell",DOU),writeln(DOU),tableatt

ributes("Belastung_Dauer_Ziel","Flaeche"),fail.

. . . . . . .

. . . . . . .

. . . . . . .

laden:-dbtable_intern("NO3_Gehalt_Verdg_NO3","id#NO3_Gehalt#Verdg_NO3","mysql

","10.1.1.124","ADB","Kartoffel where Sorte=’Astra’","sascha","sascha"),trim_tab

Page 123: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 116

les2("NO3_Gehalt_Verdg_NO3","schwarzfleckigkeit_tabelle","ID","NO3_Gehalt_Verdg_

NO3_Quell","NO3_Gehalt_Verdg_NO3_Ziel"),normalizetable("NO3_Gehalt_Verdg_NO3_Que

ll",DOU),writeln(DOU),tableattributes("NO3_Gehalt_Verdg_NO3_Ziel","Flaeche"),fai

l.

laden.

multiple:schwarzfleckigkeit:-nn_backpropagation("Belastung_Dauer_Quell","Bela

stung_Dauer_Ziel",100,"Belastung_Dauer_Astra",3,10000),fail.

. . . . . . .

. . . . . . .

. . . . . . .

multiple:schwarzfleckigkeit:-nn_backpropagation("NO3_Gehalt_Verdg_NO3_Quell",

"NO3_Gehalt_Verdg_NO3_Ziel",100,"NO3_Gehalt_Verdg_NO3_Astra",3,10000),fail.

multiple:schwarzfleckigkeit.

nn_berechnen:-laden,schwarzfleckigkeit.

?-nn_berechnen.

5.2 Das Mulog-Programm zur Auswertung der

Neuronalen Netze

Die Auswertung der Neuronalen Netze geschieht dadurch, dass der gesamte Daten-bestand in die korrespondierenden NNs eingegeben und das Ergebnis der Ausgabemit der tatsachlichen Messung der Schwarzfleckigkeit verglichen werden. Ist derAbstand zwischen der Vorhersage und dem tatsachlichen Ergebnis kleiner als 0,5,ist die Vorhersage korrekt, ansonsten falsch. Der Abstand wird auch als Fehler derNNs bezeichnet, da der Abstand zwischen Vorhersage und tatsachlicher Messung imIdealfall 0 ist. Die Funktion nn backpropagation test fuhrt diesen Durchlauf aus undliefert als Ergebnis die Erkennungsleistung, den kumulierten Fehler und die Anzahlder verwendeten Datensatze zuruck.

laden:-dbtable_intern("schwarzfleckigkeit_tabelle","id#rel_schwflaeche","mysql",

"10.1.1.124","ADB","Schwarzfleckigkeit","sascha","sascha"),threshold_bin_interna

l_table("schwarzfleckigkeit_tabelle","1","2.0"),fail.

laden:-dbtable_intern("Belastung_Dauer","id#Belastung#Dauer","mysql","10.1.1.

124","ADB","Kartoffel where Sorte=’Astra’","sascha","sascha"),trim_tables2("Bela

stung_Dauer","schwarzfleckigkeit_tabelle","ID","Belastung_Dauer_Quell","Belastun

g_Dauer_Ziel"),normalizetable("Belastung_Dauer_Quell",DOU),writeln(DOU),tableatt

ributes("Belastung_Dauer_Ziel","Flaeche"),fail.

. . . . . . .

. . . . . . .

. . . . . . .

laden:-dbtable_intern("NO3_Gehalt_Verdg_NO3","id#NO3_Gehalt#Verdg_NO3","mysql

","10.1.1.124","ADB","Kartoffel where Sorte=’Astra’","sascha","sascha"),trim_tab

les2("NO3_Gehalt_Verdg_NO3","schwarzfleckigkeit_tabelle","ID","NO3_Gehalt_Verdg_

NO3_Quell","NO3_Gehalt_Verdg_NO3_Ziel"),normalizetable("NO3_Gehalt_Verdg_NO3_Que

ll",DOU),writeln(DOU),tableattributes("NO3_Gehalt_Verdg_NO3_Ziel","Flaeche"),fai

l.

laden.

schwarzfleckigkeit:-nn_backpropagation_test("Belastung_Dauer_Astra","Belastun

g_Dauer_Quell","Belastung_Dauer_Ziel",Erg,F,D),open("erg",">Astra.txt"),write("e

rg","Belastung_Dauer_Astra"),write("erg"," Ergebnis "),write("erg",Erg),write("e

rg"," Fehler "),write("erg",F),write("erg"," Datensaetze "),writeln("erg",D),clo

se("erg"),fail.

. . . . . . .

. . . . . . .

Page 124: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 117

. . . . . . .

schwarzfleckigkeit:-nn_backpropagation_test("NO3_Gehalt_Verdg_NO3_Astra","NO3

_Gehalt_Verdg_NO3_Quell","NO3_Gehalt_Verdg_NO3_Ziel",Erg,F,D),open("erg",">>Astr

a.txt"),write("erg","NO3_Gehalt_Verdg_NO3_Astra"),write("erg"," Ergebnis "),writ

e("erg",Erg),write("erg"," Fehler "),write("erg",F),write("erg"," Datensaetze ")

,writeln("erg",D),close("erg"),fail.

schwarzfleckigkeit.

nn_testen:-laden,schwarzfleckigkeit.

?-nn_testen.

5.3 Methode

Arbeiten im Wissensgebiet der Informatik haben oft Bezug zu anderen Wis-senschaftsfeldern, weil die Informatik mit ihren Methoden und Datenverarbei-tungsfahigkeiten Erkenntnisgewinne realisieren kann, die mit Methoden aus anderenWissenschaftsgebieten in diesem Sektor nicht zu realisieren waren. Die vorliegen-de Arbeit verbindet die Informatik und die Agrartechnik. Dieser interdisziplinareAnsatz ermoglicht es, neue Erkenntnisse in der Agrartechnik zu gewinnen und be-stehende Verfahren und Methoden der Informatik zu erweitern und zu erganzen.

Bei der Ernte und der Lagerung von Kartoffeln entstehen im Inneren der Kartof-fel des Ofteren schwarze Flecken. Diese Flecken werden Schwarzfleckigkeit genannt.Die Schwarzfleckigkeit stellt einen Qualitatsmangel dar. Die Konsumenten wollenmoglichst Kartoffeln, die frei von Schwarzfleckigkeit sind. Haben Kartoffeln eineniedrige Qualitat, sind sie, genauso wie andere Produkte schlechter verkauflich,obwohl der Mangel den Konsumenten nicht sofort ins Auge springt und die Rekla-mationsmoglichkeiten des Konsumenten schwierig sind. Der Konsument tragt denVerlust, weil er bei Schwarzfleckigkeit einen erheblichen Anteil der Kartoffeln nichtverwenden kann. Die Weiterverarbeitung z. B. zu Pommes frites, Kartoffel-Pureeoder Chips ist ebenfalls nicht mehr moglich.

Fur die Entstehung der Schwarzfleckigkeit sind einige Faktoren bekannt. Uber ande-re gibt es jedoch widerspruchliche Angaben und schließlich werden außerdem andereFaktoren verdachtigt, einen Einfluss auf die Entstehung von Schwarzfleckigkeit zuhaben.

Mehrere Arbeiten zeigen dabei, dass die Starke, die Temperatur und die mechani-sche Belastung, die wahrend der Bearbeitungskette von der Ernte bis zur Lagerungauf die Kartoffel einwirkt, einen großen Einfluss haben.

Andere Faktoren wie Kalium oder Nitrat werden von einigen Wissenschaftlern eben-falls fur die Entstehung von Schwarzfleckigkeit mitverantwortlich gemacht.

Ein verlassliches Vorhersagemodell fur die Entstehung von Schwarzfleckigkeit beiKartoffeln setzt die Kenntnis der Wirkung der potentiellen Einflussfaktoren voraus.Da sowohl ein Vorhersagemodell als auch das Einflussverhalten von Bestandtei-len wie Nitrat oder Kalzium, aber auch der Einfluss der mechanischen Belastungund der Temperatur in der verwendeten Methode als Resultat erwunscht waren,boten sich Neuronale Netze als Moglichkeit fur ein Vorhersagemodell an, zumaldie Zielgroße, der relative Anteil der Schwarzfleckigkeit, bereits in der Datenbankerfasst war. Die Einschatzung des Einflussverhaltens der Bestandteile kann dabeiuber die Erkennungsgute der Neuronalen Netze gemessen werden. Liefert ein Neu-ronales Netz eine gute Vorhersage, ist anzunehmen, dass es eine starke Relationzwischen Eingabe- und Ausgabevektor gibt. In diesem Fall bedeutet das nichts An-deres, als dass es einen engen kausalen Zusammenhang zwischen der Entstehung

Page 125: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 118

von Schwarzfleckigkeit und den Einflussfaktoren, die als Eingabevektor verwendetwurden, gibt. Ist die Vorhersage eines NNs schlecht, so ist die Relation zwischen denin diesem Neuronalen Netz eingespeisten Bestandteilen und der Schwarzfleckigkeitnicht vorhanden, gering oder das Neuronale Netz kann in der verwendeten Topo-logie den Zusammenhang nicht darstellen. Der verwendete Typ fur die NeuronalenNetze kann dabei ganz entscheidend die Vorhersagequalitat beeinflussen. Percep-tron NNs konnen z. B. nicht das XOR-Problem losen, Backpropagation NNs jedochmit zwei Neuronen in der versteckten Schicht konnen diese Probleme losen. Auchkann es kausale Zusammenhange zwischen zwei oder mehr Einflussfaktoren geben;ganz offensichtlich zum Beispiel zwischen der Belastungsstarke und der Belastungs-dauer. Das Neuronale Netz muss in der Lage sein, Cluster, also Gruppierungen vonDaten, verlasslich auf die Zielgroße abzubilden und sich damit von einer linearenDatenabbildung zu trennen.

Backpropagation NNs konnen sowohl das XOR-Problem losen als auch Daten-Cluster abbilden, wobei den Neuronen in der verdeckten Schicht eine elementareRolle zukommt, da jedem Neuron in der verdeckten Schicht im Optimalfall ein Da-tencluster zugeordnet wird. Bei der Verwendung von Backpropagation NNs muss je-doch beachtet werden, dass die Neuronen in der verdeckten Schicht nicht die Anzahlder zu unterscheidenden Eingabevektoren ubersteigen, da dann der Effekt eintritt,dass sich Neuronen in der verdeckten Schicht auf einen Eingabevektor spezialisie-ren und somit eine perfekte Vorhersagequalitat des NNs mit den beim Lernprozessverwendeten Eingabevektoren gelingt, die jedoch nicht viel uber Eingabevektoren,die nicht trainiert wurden, aussagt.

Auch sind Ruckschlusse hinsichtlich des tatsachlichen Einflussverhaltens von Ele-menten des Eingabevektors auf das Vorhersageziel bei einer geringen Anzahl vonNeuronen in der verdeckten Schicht wahrscheinlicher als bei einer großen Anzahlvon Neuronen in der verdeckten Schicht.

5.4 Die konkrete Anwendung in der Qualitatsiche-rung von Agrarprodukten

Mehrere Faktoren werden verdachtigt, einen Einfluss auf die Entstehung vonSchwarzfleckigkeit bei Kartoffeln zu haben.

• die Hohe der mechanischen Belastung

• die Dauer der mechanischen Belastung

• die geplante Temperatur im Lager

• die tatsachlich gemessene Temperatur im Lager

• die Starke (Amylum), ein Polysaccharid

• die Konzentration von Kalium

• die Konzentration von Nitrat NO3

• die Konzentration von Vitamin C

• die Konzentration von Eisenverbindungen

• Verdunnung NO3

Page 126: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 119

• Verdunnung Kalium

• Verdunnung Calcium

Einige Einflussfaktoren haben zusammen mit anderen Einflussfaktoren eine Bedeu-tung fur das Auftreten von Schwarzfleckigkeit bei Kartoffeln. Es ist bekannt, dassdie Hohe der mechanischen Belastung wahrend der Ernte und der Bearbeitungsket-te bis ins Lager nicht allein wirkt, sondern zusammen mit der Dauer der Belastungeinen konkreten Einfluss auf die Schwarzfleckigkeit hat. Andere Faktoren konntenebenfalls nur zusammen mit einem anderen Faktor eine Relation fur die Entstehungder Schwarzfleckigkeit nehmen.

Das Konzept, um die Einflussfaktoren einzuschatzen beruht darauf, sie paarweiseals Eingabevektoren fur die Erzeugung von Neuronalen Netzen zu verwenden undanschließend die Vorhersagequalitat dieser Netze zu testen. Die Neuronalen Netzewerden erzeugt, wobei zwei Einflussfaktoren ausgewahlt und die Daten dieser Ein-flussfaktoren nach und nach in das Neuronale Netz eingespeist werden, wahrendals Zielparameter der zu den Eingabedaten korrespondierende relative Schwarz-fleckigkeitsanteil verwendet wird. Damit die Daten aus der Kartoffel-Tabelle unddie Daten aus der Schwarzfleckigkeit-Tabelle richtig zueinander zugeordnet werdenkonnen, haben die jeweiligen Datensatze eine eindeutige ID, die in beiden Tabel-len dieselbe Kartoffel bezeichnet. Die Große, der von Schwarzfleckigkeit betroffenenSchnittflache wird so vorverarbeitet, dass der ins Neuronale Netz eingespeiste Ziel-wert gleich Eins gesetzt wird, wenn der relative Schwarzfleckigkeitsanteil großergleich zwei Prozent ist. Fur den Fall, dass der relative Schwarzfleckigkeitsanteilkleiner als zwei Prozent ist, wird ein Wert von Null als Zielwert benutzt. Durch die-se Maßnahme wird zwar die direkte Vorhersagequalitat des Neuronalen Netzes aufeine konkrete Große der relativen Schwarzfleckigkeit zunichte gemacht, dafur wer-den Messwertschwankungen und Streuungen, die bei Agrarprodukten unumgang-lich sind, besser abgefedert. Auch konnen die Neuronalen Netze besser trainiertwerden, wenn eine harte Unterscheidung in schwarzfleckig und nicht schwarzfleckigunternommen wird. Wobei naturlich gesagt werden muss, dass nicht schwarzfleckigrelativ verwendet wird, da der Anteil der Schwarzfleckigkeit bis zu zwei Prozentbetragen kann, und die Ausdrucke weniger schwarzfleckig fur weniger als zwei Pro-zent Schwarzfleckigkeitsanteil und mehr schwarzfleckig zutreffender sind, trotzdemjedoch die Begriffe nicht schwarzfleckig und schwarzfleckig verwendet werden, umnicht nur der Zielwert-Gruppierung der Neuronalen Netze in die Werte Null undEins gerecht zu werden, sondern auch der Qualitatseinteilung der Handelsklassengerecht zu werden [40, PETERS 99], [41, PETERS 94], die ebenfalls eine Einteilunganhand der Schwarzfleckigkeit vornehmen. Die Trennung an der zwei Prozent-Markein schwarzfleckig und nicht schwarzfleckig ist dabei nicht willkurlich, sondern dasErgebnis von ersten Versuchen mit einem mittlerweile nicht mehr benutzen Daten-bestand und entspricht der Aufteilung der Handelsklassen, die fur weniger als zweiProzent Schwarzfleckigkeitsanteil von einer gering beschadigten Knolle ausgeht. Indiesem Datenbestand ergab eine Unterscheidung an der zwei Prozent-Marke eine gu-te Trennung in schwarzfleckig/nicht schwarzfleckig. Diese Marke, die die Kartoffelnin die beiden nahezu gleichgroßen Bereiche schwarzfleckig/nicht schwarzfleckig teil-te, wurde fur die folgenden Versuche und dem aktuellen Datenbestand beibehalten.Die Neuronalen Netze werden somit als Separator in schwarzfleckig/nicht schwarz-fleckig trainiert, unter der Annahme, dass ein relativer Schwarzfleckigkeitsanteil vonweniger als zwei Prozent als nicht schwarzfleckig gilt.

Um die Einflussfaktoren entsprechend ihrer Relevanz fur die Schwarzfleckigkeit zusortieren, werden Neuronale Netze fur alle moglichen Permutationen von zwei Ein-flussfaktoren aus der Menge aller Einflussfaktoren paarweise ausgewahlt, die als

Page 127: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 120

Eingabe-Vektor fur ein zu erzeugendes Neuronales Netz vom Typ Backpropagati-on dienen (Abbildung 5.1), erstellt. Hinzu kommt, dass diese Permutationen furjede Kartoffel-Sorte separat durchzufuhren ist, weil die chemische Beschaffenheitder einzelnen Kartoffelsorten so stark voneinander differieren, dass der Versuch,die Neuronalen Netze aus der Permutation des gesamten Datenbestandes der Kar-toffeldatenbank ohne Unterteilung in die einzelnen Sorten scheiterte. Die aus demgesamten Datenbestand gewonnenen Neuronalen Netze lieferten nach dem Trainingsehr schlechte Vorhersagewerte und erwiesen sich fur die Einschatzung der Ein-flussfaktoren als ungeeignet. Es war zu beobachten, dass einige Neuronalen Netzenicht zu einem Minimum konvertierten, sondern durch die sehr unterschiedlichenEingabevektoren die von Kartoffeln unterschiedlicher Sorten stammten, hin und herpendelten und die Netze die konvertierten, lieferten im besten Fall eine Vorhersage-genauigkeit von nur 62 Prozent. Daher wurde die Berechnung separat fur jede Sortedurchgefuhrt, denn jede Sorte hat eigene Eigenschaften und reagiert unterschied-lich. Jede paarweise Permutation von Eingabedaten fuhrte dabei zu einem eigenenNeuronalen Netz.

10,5

10,5

10,6

Neuronales Netz

.

..

9,5

8

9,5

.

sonst Ausgabe=0

Auswertung und

Lerneneventuell anschließendes

Datenvorverarbeitung

3Temperatur mech. Belastung Kalium NO ...

503070

4760

705080

20 4,9

2,3

1,5

...

.

.

.

Schwarzfleckigkeit .....

wenn Eingabe>2 => Ausgabe=1

Abbildung 5.1: Ein- und Ausgabe-Vektoren werden in ein NN eingespeist

Fur jeden Einflussfaktor war jedoch pro Sorte nicht die gleiche Menge an Messwer-ten erfasst worden und fur einige Sorten wurden einige potentielle Einflussfakto-ren uberhaupt nicht erfasst. Die Sorten, fur die ganze Einflussfaktoren uberhauptnicht erfasst wurden, konnten fur die Auswertung nicht herangezogen werden, dadie Berechnung von Neuronalen Netzen mit unvollstandigen Eingabevektoren nichtmoglich ist. Die Kartoffelsorte ”Astra” hat beispielsweise keine Messwerte fur dieStarke in der Datenbank. Aus diesem Grund ist es nicht moglich, das NeuronaleNetz, welches als Eingabevektor Daten der potentiellen Einflussfaktoren Starke undBelastung enthalt, zu berechnen, da keine Daten uber den Starkegehalt fur die Kar-toffelsorte ”Astra” existieren. Somit ist keine Aussage uber den Einfluss von Starkefur die Sorte ”Astra” moglich. Außerdem kann nicht ausgeschlossen werden, dass esLucken in dem Datenbestand gibt. Neben Fehleingaben konnen Daten schlicht ver-gessen oder aus anderen Grunden nicht erfasst worden sein. Damit nicht fehlerhafteoder unvollstandige Datenvektoren als Eingabevektoren zum Training der Neurona-

Page 128: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 121

Vorhersageleistung Gutekennziffer

≥ 60 % 1≥ 70 % 2≥ 80 % 3≥ 85 % 4≥ 90 % 5≥ 95 % 6

Tabelle 5.1: Zuordnung der Vorhersageleistung zur Gutekennziffer

len Netze verwendet werden, wird vorher eine Datenvalidierung durchgefuhrt unddie Datenpaare, die offensichtlich fehlerhaft oder unvollstandig sind, herausgefiltert.Diese Situation fuhrt dazu, dass fur einige Neuronalen Netze mehrere hundert Da-tensatze, fur andere dagegen nur ein paar Eingabevektoren fur das Training derjeweiligen Neuronalen Netze zur Verfugung stehen. Die Unterschiede sind innerhalbder untersuchten Sorten gering. Nur drei Sorten stechen durch einen umfangreichenDatenbestand besonders hervor:

• Cilena

• Ponto

• Solara

Deshalb liegt die Schwankung der verwendbaren Datensatze je nach Einflussfaktor,bei der Sorte ”Solara” zwischen 319 und 371 Datenpaaren. Fur die Sorte ”Mowe”konnen nur zwischen 18 und 28 Datenpaare als Eingabevektoren fur die NeuronalenNetze verwendet werden. Die Schwankung der Anzahl der Datensatze pro NN istinnerhalb einer Sorte gering, zwischen den Sorten jedoch erheblich.

Nach der Lernphase wird die Vorhersagequalitat der Neuronalen Netze eingeschatzt.Es wird die Ausgabe des Neuronalen Netzes mit den Werten der Schwarzfleckigkeits-tabelle verglichen. Als Ergebnis kommt ein Prozentsatz an richtigen Vorhersagenzustande. Der Prozentsatz der richtigen Vorhersagen wird eine Gutekennziffer zu-geordnet, die in nachfolgendes Tabelle dargestellt wird.

Jede Permutation von Neuronalen Netzen wird getestet. Das folgende Beispiel de-monstriert, wie aus den einzelnen Gutekennziffern die globale Gutekennziffer ge-wonnen wird.

Anhand des folgenden Beispiels soll die Bearbeitung aufgezeigt werden:

Ein Neuronales Netz der Kartoffel Sorte ”Mowe” aus den Eingabevektoren beste-hend, wurde aus den Datenpaaren Kartoffelstarke und Kalium erzeugt. Die Vor-hersage dieses Neuronalen Netzes wird verglichen mit der Große, der von Schwarz-fleckigkeit betroffenen Schnittflache, die aus der Schwarzfleckigkeitstabelle stam-men. In diesem Zusammenhang werden die Daten aus der Schwarzfleckigkeitstabel-le auf den Wert Null gesetzt, wenn die relative Schwarzfleckigkeit kleiner als zweiProzent ist und auf Eins und wenn die relative Schwarzfleckigkeit großer als zweiProzent ist. Die Vorhersage der Neuronalen Netze liefert nach der Einspeisung desEingabevektors einen Ausgabewert der zwischen Null und Eins liegt. Liegt der Wertdichter an der Null als an der Eins, wird der Vorhersagewert auf Null gesetzt, an-sonsten auf Eins. Der aus der Vorhersage stammende Wert wird mit dem aus derDatenbank gewonnenen Wert verglichen und ist bei richtiger Vorhersage identisch.

Page 129: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 122

Nachdem der gesamte Datenbestand durchgetestet wurde, kam eine Vorhersagequa-litat von 85,1 Prozent als Ergebnis heraus. Die korrespondierende Gutekennziffervier wird auf die globale Gutekennziffer der Kartoffelstarke und Kalium hinzu ad-diert.

Diese Schritte werden fur alle Neuronalen Netze durchgefuhrt. Als Ergebnis mussendie Einflussfaktoren, die eine hohe globale Gutekennziffer aufweisen, an Neurona-len Netzen mit einer hohen Vorhersagequalitat beteiligt gewesen sein. Tatsachlichkann man sagen, dass Neuronale Netze nur dann eine gute Vorhersagequalitat ha-ben, wenn sie eine Relation zwischen Eingabe- und Ausgabevektor bilden konnten.Daher besteht ein starker Zusammenhang zwischen den Einflussfaktoren und demAuftreten von Schwarzfleckigkeit, vorausgesetzt, dass die Vorhersagequalitat hochist. Wie man jetzt zeigen konnte, ergibt die globale Gutekennziffer eine Rangliste derfur Schwarzfleckigkeit relevantesten Einflussfaktoren. Als Ergebnis des komplettenTests entstand folgende Tabelle:

Einflussfaktoren Globale Gutekennzahl

Starke 369Gemessene Temperatur 356Eingestellte Temperatur 351

Calcium 348die mechanischen Belastung 336

Dauer der mechanischen Belastung 331Kalium 329

Nitrat (NO3) 311Vitamin C 306Eisengehalt 291

Verdunnung Nitrat (NO3) 274Vedunnung Kalium 272

Verdunnung Calcium 268

Tabelle 5.2: Auswertung der globalen Gutekennziffer

Die Resultate zeigen, dass Starke eine sehr starke Relation zum Auftreten vonSchwarzfleckigkeit bei Kartoffeln hat, und dass die Verdunnung von Calcium einenschwachen oder gar keinen Einfluss hat. Es ist Stand der Wissenschaft, dass dieTemperatur, die mechanische Belastung und die Starke einen Einfluss auf die Ent-stehung von Schwarzfleckigkeit haben.

Die Hohe der mechanischen Belastung und die Dauer der mechanischen Belastungwurden separat analysiert. Normalerweise mussten diese beiden Faktoren zusam-mengefasst werden, weil sie normalerweise keine zwei unterschiedlichen Faktorensind. Es ist zur Zeit aber nicht moglich aus diesen beiden Faktoren eine Kenngroßezu erzeugen, daher konnen die beiden Faktoren Hohe der mechanischen Belastungund Dauer der mechanischen Belastung nicht zu einer Große vorverarbeitet werden,und sind aus diesem Grund als zwei Werte wahrend der Analyse zu behandeln.

Trotz der zur Zeit nicht korrekten Vorverarbeitung dieser beiden Werte ergibt dieAnalyse mit dem Mulog-System einen hohen Einfluss dieser beiden Faktoren aufdie Schwarzfleckigkeit, der vermutlich bei der korrekten Zusammenfassung beiderWerte zu einem noch hohereren Rang in der Liste der wichtigsten Einflussfaktorenfuhren wurde.

Page 130: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 123

Die hier vorgestellte Methode, die zu diesem Erkenntnisgewinn gefuhrt hat, istdie parallele Erzeugung und Auswertung von mehreren Neuronalen Netzen, ver-teilt in einem Cluster von Rechnern, die durch eine zentrale Instanz koordiniertund synchronisiert werden. Die Integration des Systems und die leichte Program-mierbarkeit durch die Applikationssprache Mulog spielt insoweit eine entscheidendeRolle. Die Parallelisierung der Anwendung in einem Rechnerverbund resultiert ineiner Geschwindigkeitssteigerung im Verhaltnis zu einer Berechnung auf nur einemRechner. Tatsachlich ermoglicht diese Geschwindigkeitssteigerung die Methode ineinem festen Zeitrahmen einzusetzen. Als Beispiel ist eine Berechnung zu nennen,die auf einem Einzelrechner drei Monate dauern wurde. Wird sie hingegen durcheinen Cluster mit vier Rechnern berechnet, erhalt man das Resultat bereits in ei-nem Monat. Dies kann von entscheidendem Vorteil sein, besonders dann, wenn derZeitrahmen begrenzt ist - man denke an befristete Arbeitsvertrage. Die Geschwin-digkeit kann im Fall einer zu niedrigen Bearbeitungsgeschwindigkeit leichter miteinem Rechnerverbund erhoht werden, als im Fall nur eines Rechners. Es mussennur entsprechend viele Rechner zum Rechnerverbund hinzugefugt werden. Naturlichwachst die Leistung des Rechnerverbundes nicht linear, da der Synchronisations-und Kommunikationsaufwand wesentlich steigt.

Unter Umstanden ware die Anwendung von sehr vielen Neuronalen Netzen zurErreichung eines Ziels in einem vorgegebenen Zeitrahmen gar nicht ins Auge gefasstund somit ein Losungsansatz ignoriert worden.

5.5 Ausblick

Zusammenfassend lasst sich festhalten, dass der Nutzen bei der empirischen An-wendung anhand der Einschatzung der Einflussfaktoren fur die Entstehung vonSchwarzfleckigkeit bei Kartoffeln gezeigt worden ist. Insofern ist die Anwendungauf ahnlich gelagerte Probleme leicht ubertragbar. Datenbestande, die nicht nur dieEinflussgroßen, sondern auch Auskunft uber den Zielparameter geben, konnen leichtzum Training von Neuronalen Netzen verwendet werden. Die Vorverarbeitung derDaten wird dabei vom Mulog-System unterstutzt. Prinzipiell ist eine Aussage uberdie Relevanz der Einflussfaktoren fur ein gegebenes Problem anhand der Bewertunguber Gutekennzahlen fur die Erkennungsqualitat der durch Permutation erzeugtenNetze fur andere Schadbilder und Krankheiten bei Agrarprodukten ubertragbar.Die Anwendung selbst ist nicht nur auf den Agrarsektor beschrankt, sondern kannauf ein breites Spektrum ausgedehnt werden - kommt dabei jedoch einigen Spezi-fika der Agrarprodukte entgegen. Das System kann sich an verandertes Verhaltendurch wechselnde Umwelteinflusse adaptieren. Die Selbstlernfahigkeit und Anpas-sungsfahigkeit machen es zu einer geeigneten Qualitatssicherungsmethode fur denAgrarsektor, wo Umwelteinflusse großeren Einfluss als bei der maschinellen Produk-tion haben.

Der ursprungliche Gedanke eines umfassendes Qualitatssicherung- und Qualitats-vorhersagesystems fur Agrarprodukte wurde bereits in [12, GOTTSCHALK 96] for-muliert. Im ersten Kapitel wurde auf die Problematik der unzureichenden Daten-und Regelbasis, die einer Realisierung eines wissensbasierten Systems entgegensteht,hingewiesen. Nachdem die Wertigkeit der Einflussfaktoren fur die Entstehung derSchwarzfleckigkeit durch die Analyse mit Hilfe der Neuronalen Netze erfolgte, kannjetzt eine Regelbasis fur die Vorhersage und Qualitatssicherung fur das Auftretenvon Schwarzfleckigkeit bei Kartoffeln formuliert werden.

Unter bestimmten Voraussetzungen kann bereits jetzt schon die Schwarzfleckig-keit vorhergesagt werden, denn die bei der Analyse trainierten Neuronalen Netze

Page 131: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

KAPITEL 5. AUSWERTUNG 124

konnen fur die Vorhersage benutzt werden. Sind zwei der Einflussfaktoren und dieKartoffelsorte bekannt, kann das entsprechende Neuronale Netz verwendet werden.Die Erkennungsqualitat der Neuronalen Netze wurde wahrend der Analyse in einerExcel-Datei festgehalten. Bei der Bewertung der Ergebnisse der Neuronalen Netzemuss die Erkennungsqualitat aus der Excel-Datei zu Rate gezogen werden, damiteine Bewertung der Vorhersage moglich ist, denn Neuronale Netze, die wahrendder Analyse nur eine schlechte Erkennungsleistung gezeigt haben, durften auch imnachhinein nur schlechte Ergebnisse liefern.

Ein Expertensystem kann jetzt realisiert werden, indem ein klassisches Experten-system mit Hilfe der gewonnenen Erkenntnisse in der Applikationssprache Mulogentworfen wird. Eine Losung, die die bestehenden Neuronalen Netze um eine regel-basierte Bewertung der gemessenen Erkennungsleistung erganzt, ware relativ leichtzu realisieren.

Es kann aber auch ein neues wissensbasiertes System entwickelt werden, welches sichnur der Inferenzmaschine des Mulog-Gesamtsystems bedient. In diesem Fall wird dieRegelbasis in der Applikationssprache Mulog entwickelt, und die Datenbasis wirdsinnvollerweise zur Laufzeit aus der Datenbank geholt, obwohl auch eine Definitionim Programm direkt moglich ist.

Naturlich kann das Applikationssystem auf eine Vielzahl anderer Probleme ange-wendet werden, die nicht zwingend in den Bereich der Qualitatssicherung und derQualitatsvorhersage liegen, sondern auf alle Probleme, die mittels einer Inferenz-maschine und Neuronalen Netze losbar sind.

Page 132: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Anhang A

Klassenbeschreibungen

A.1 Klasse Atom

Ein Atom ist die kleinste Informationseinheit in der Applikationssprache Mulog.Ein Atom ist entweder eine 32-Bit naturliche Zahl, eine 64-Bit Fließkomma-Zahloder eine Zeichenkette. Alle komplexeren Informationsgebilde basieren auf Ato-men.

Konstruktor ErlauterungAtom ∅ Ein leeres Atom wird kreiert.

Atom(Integer value) Ein Atom, das eine 32-Bit naturlicheZahl reprasentiert, wird erzeugt.

Atom(Double value) Ein Atom, das eine 64-Bit Fließkomma-zahl reprasentiert, wird erzeugt.

Atom(String value) Ein Atom, das eine belie-bige ASCII-Zeichenkette reprasentiert,wird erzeugt.

Atom(Bool value) Ein Atom, das einen boolschen Wert re-prasentiert, wird erzeugt.

doubleValue

Der Inhalt des Atoms wird als 64-Bit Fließkommazahl zuruckgegeben.

Ruckgabe Funktionsname Funktionsparameter ErlauterungDouble doubleValue ∅ Der Wert des Atoms

wird als Fließkomma-zahl zuruckgegeben.

intValue

Der Inhalt des Atoms wird als 32-Bit ganze Zahl zuruckgegeben.

125

Page 133: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 126

Ruckgabe Funktionsname Funktionsparameter ErlauterungInteger intValue ∅ Der Wert des Atoms

wird als ganze Zahlzuruckgegeben.

stringValue

Der Inhalt des Atoms wird als Zeichenkette zuruckgegeben.

Ruckgabe Funktionsname Funktionsparameter ErlauterungString stringValue ∅ Der Wert des Atoms

wird als Zeichenkettezuruckgegeben.

boolValue

Der Inhalt des Atoms wird als Bool zuruckgegeben.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool boolValue ∅ Der Wert des Atoms

wird als Boolzuruckgegeben.

isEmpty

Es wird getestet, ob das Atom leer ist. Ein Atom ist leer, wenn es keinen gultigenWert reprasentiert.

Ruckgabe Funktionsname Funktionsparameter ErlauterungBool isEmpty ∅ Es wird wahr zuruck-

gegeben, wenn dasAtom leer ist.

A.2 Klasse Term

Es werden in einem Term die gesamten Token einer Klausel hinterlegt. Ein Termwird von dem TableScanner produziert.

Konstruktor ErlauterungTerm() Es werden interne Tabellen fur den

Kopfterm und die Zielterme angelegt.

setzeKlauselNamen

Diese Funktion erzeugt einen Klauselnamen. In der Programmiersprache Mulog istes moglich, Funktionen gleichen Namens, aber unterschiedlicher Aritat zu haben.Daher wird der Name aus dem Namen des Kopfterms gebildet und mit dem Zeichen” ” plus der Anzahl der Argumente erzeugt.

Page 134: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 127

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ setzeKlauselNamen String Name, Integer Position Ein Klauselname wird

aus dem Funktions-namen und der An-zahl der Argumentegebildet.

headFuncName

Der Name des Kopfterms wird zuruckgegeben. Es steht fur den Namen des Pradi-kats.

Ruckgabe Funktionsname Funktionsparameter ErlauterungString headFuncName ∅ Es wird der Name des

Kopftermszuruckgegeben.

headFuncToken

Diese Funktion gibt den Token des Namens des Kopfterms zuruck. Dieser Kopftermenthalt auch die Information wie der Klauselname intern verwendet wird. Außer-dem kann uber dieses Token die nachste Alternative ermittelt werden - sofern sieexistiert. Die Alternative ist ebenfalls ein Kopftoken, der fur eine Klausel mit glei-chem Namen und gleicher Prioritat steht.

Ruckgabe Funktionsname Funktionsparameter ErlauterungToken headFuncToken ∅ Es wird der Token des

Kopftermszuruckgegeben.

headArgumentsCount

Diese Funktion gibt die Anzahl der Argumente des Kopfterms zuruck. Der Uber-setzer hat dadurch die Kenntnis, wie viel Platz im Kellerrahmen reserviert werdenmuss.

Ruckgabe Funktionsname Funktionsparameter ErlauterungInteger headArguments ∅ Es wird die Anzahl der

Argumente im Kopfzuruckgegeben.

headArgument n

Es wird das Token des n-ten Arguments zuruckgeliefert.

Ruckgabe Funktionsname Funktionsparameter ErlauterungToken headArgumentsCount Integer n Es wird das Argument

an der n-ten Stelle imKopftermzuruckgegeben.

Page 135: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 128

tailFuncCount

Diese Funktion gibt die Anzahl der Literale im Ziel zuruck.

Ruckgabe Funktionsname Funktionsparameter ErlauterungInteger tailFuncCount ∅ Es wird die Anzahl der

Zielfunktionenzuruckgeliefert.

tailFuncToken n

Diese Funktion gibt den Funktionsnamen eines Zielterms an der Position n als To-ken zuruck.

Ruckgabe Funktionsname Funktionsparameter ErlauterungToken tailFuncToken Integer n Das erste Token eines

Ziels an der Stelle nwird zuruckgegeben.

tailArgumentsCount n

Jede Zielfunktion kann eine beliebige Anzahl von Argumenten haben. Zur Uberset-zung des Quellprogramms wird die Anzahl der Argumente benotigt. Die FunktiontailArgumentCount liefert die Anzahl der Argumente der n-ten Zielfunktion.

Ruckgabe Funktionsname Funktionsparameter ErlauterungInteger tailArgumentsCount Integer n Mit

dieser Funktion wirddie Anzahl der Argu-mente einer Zielfunkti-on zuruckgegeben.

findTailArgument n

Fur die Ubersetzung eines in der Programmiersprache Mulog geschriebenen Pro-gramms ist es fur den Code-Emitter notwendig zu wissen, an welcher Stelle imTerm das erste Argument der Zielfunktion n ist.

Ruckgabe Funktionsname Funktionsparameter ErlauterungInteger findTailArgument Integer n Die Position des ersten

Argumentsin dem Zielterm n wirdzuruckgegeben.

tailArgument n,m

Die Funktion liefert das Token des Arguments m der Zielfunktion n. Mit Hilfe dieserFunktion kann ein einzelnes Argument aus einem Term selektiert werden.

Page 136: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 129

Ruckgabe Funktionsname Funktionsparameter ErlauterungToken tailArgument Integer n, Integer m Der

Token des m-ten Argu-ments der n-ten Ziel-funktion wird geliefert.

uniqueVariables

Fur eine Klausel konnen beliebig viele Alternativen existieren.

Ruckgabe Funktionsname Funktionsparameter ErlauterungToken uniqueVariables ∅ Es wird die Anzahl der

unterschiedlichen Va-riablen zuruckgeliefert.

A.3 Klasse ParamTest

Diese Klasse enthalt eine Sammlung von Funktionen, die von den anderen Klas-sen benotigt werden. Allen Funktionen gemeinsam ist, dass ein Argument auf einegewunschte Eigenschaft untersucht wird und ein boolscher Wert vom Typ wahrzuruckgeliefert wird, wenn das Argument die durch die Funktion reprasentierte Ei-genschaft erfullt. Diese Klasse ist statisch, es ist nicht notwendig einen Konstruktoraufzurufen, da keinerlei Initialisierungen notwendig sind.

isVariable z

Die Zeichenkette z wird darauf uberpruft, ob z eine Variable ist. Im Wesentlichentestet diese Funktion die Zeichenkette darauf, ob das erste Zeichen ein Großbuch-stabe oder das Zeichen ist. So liefert die Funktion einen boolschen Wert vom Typwahr, ansonsten einen boolschen Wert von Typ falsch.

Ruckgabe Funktionsname Funktionsparameter ErlauterungBool isVariable String z Testet eine Zeichenket-

te darauf, ob sie einegultige Variable ist.

isDigit c

Ein Zeichen wird darauf uberpruft, ob c eine Variable ist. Diese Funktion testet dasZeichen darauf, ob das Zeichen einem ASCII-Code fur eine Zahl entspricht. Dannliefert die Funktion einen boolschen Wert vom Typ wahr, ansonsten einen boolschenWert von Typ falsch.

Ruckgabe Funktionsname Funktionsparameter ErlauterungBool isDigit Char c Testet ein Zeichen dar-

auf, ob das Zeichen ei-ne Zahl ist.

Page 137: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 130

isAtom z

Ein Zeichen wird darauf uberpruft, ob z ein Atom ist. So liefert die Funktion einenboolschen Wert vom Typ wahr, ansonsten einen boolschen Wert von Typ falsch.

Ruckgabe Funktionsname Funktionsparameter ErlauterungBool isAtom String z Testet eine Zeichenket-

te darauf, ob sie eingultiges Atom ist.

isUpperAlpha c

Ein Zeichen wird darauf uberpruft, ob das Zeichen einem ASCII-Code eines groß-geschriebenen Buchstabens entspricht. Dann liefert die Funktion einen boolschenWert vom Typ wahr, ansonsten einen boolschen Wert von Typ falsch. Die Funktionwird z. B. zum Erkennen von Variablen verwendet.

Ruckgabe Funktionsname Funktionsparameter ErlauterungBool isUpperAlpha Char c Testet ein Zeichen dar-

auf, ob das Zeichenein großgeschriebenerBuchstabe ist.

isLowerAlpha c

Es wird getestet, ob das Zeichen einem ASCII-Code eines kleingeschriebenen Buch-staben entspricht. Dann liefert die Funktion einen boolschen Wert vom Typ wahr,ansonsten einen boolschen Wert von Typ falsch.

Ruckgabe Funktionsname Funktionsparameter ErlauterungBool isLowerAlpha Char c Testet ein Zeichen dar-

auf, ob das Zeichenein kleingeschriebenerBuchstabe ist.

isAlphaNum c

Ein Zeichen wird darauf uberpruft, ob c ein alphanumerisches Zeichen ist. In dieserFunktion wird getestet, ob das Zeichen einem ASCII-Code fur eine Zahl oder einemZeichen aus dem Bereich ’a’-’z’ oder ’A’-Z’ entspricht. Dann liefert die Funktioneinen boolschen Wert vom Typ wahr, ansonsten einen boolschen Wert von Typfalsch.

Ruckgabe Funktionsname Funktionsparameter ErlauterungBool isAlphaNum Char c Testet ein Zeichen dar-

auf, ob das Zeichen ei-nem alphanumerischenWert entspricht.

Page 138: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 131

A.4 Die Klasse TableScanner

Der TableScanner liest einzelne Zeichen aus dem Eingabestrom und versucht diesezu gruppieren. Die Klasse ScannerInputStream stellt fur diese Aufgabe die Basis-Funktionen zur Verfugung. Ein Scanner kann dabei nicht den Eingabestrom linearabarbeiten, weil die Semantik eines Tokens erst beim Lesen des fur das Token letz-ten gultigen Zeichens feststeht. Zwischenzeitlich konnen aber schon Zeichen vomEingabestrom gelesen worden sein, die nicht zu diesem Token gehoren, sonderndem nachsten Token zuzurechnen sind. Um keine schwierigen Sonderbehandlungs-methoden einzufuhren, macht es Sinn, die zu viel gelesenen Zeichen zuruck in denEingabestrom zu stellen und von dieser Stelle weiterzuscannen.

Ein ganzzahliger Wert und eine Fließkommazahl unterscheiden sich durch den Nach-kommabereich. Der TableScanner liest in einem solchen Fall voraus, um die richtigeFallunterscheidung vorzunehmen, bevor ein Zeichen aus dem Eingabestrom verar-beitet wird.

Der TableScanner gruppiert dabei nicht nur die Zeichen des Eingabestroms in To-ken, sondern er weist diesen Token logische Namen zu, und speichert diese Token ineiner Tabelle. Da bei diesem Prozess ebenfalls Hilfstoken in die Tabelle eingestelltwerden, die die Syntax der erkannten Token beschreiben, beschrankt sich die KlasseTableScanner nicht nur auf das Scannen, sondern ubernimmt einen Teil des Parsens.

add

Mittels der Funktion add wird ein Token in die interne Tabelle eingestellt. DiesesToken wird wahrend des Scannens und des Siebens erzeugt und wird wahrend desParsens benotigt.

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ add PToken token Es wird ein Token in

die interne Tabelle ein-gefugt.

open dateiname

Eine Quelldatei wird geoffnet. Eine Instanz der Klasse ScannerInputStream wirderzeugt. Aus dieser Instanz werden die Daten wahrend des Scannens gelesen. Dabeibietet die Instanz der Klasse ScannerInputStream Operationen fur die zeichenweiseBearbeitung des Quellcodes.

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ open String dateiname Es wird die Datei mit

dem Namen dateinamegeoffnet.

scanListe L

Eine Zeichenkette L, die eine Liste enthalt, wird in ihre Bestandteile zerlegt. EineListe kann sowohl Variablen, als auch Atome enthalten. Die Listenelemente werdendurch Komma getrennt. Daruberhinaus kann eine Liste als Kopf und der Rest durchdas ”|”-Zeichen dargestellt werden.

Page 139: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 132

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ scanListe String L Es wird eine Liste

in ihre Komponentenzerlegt.

match isTail

match erweitert die Funktion matchFunc um die fur das Ubersetzen notwendigenHilfstoken. Dabei werden vor dem Aufruf der Funktion matchFunc ein Start-Tokenund nach dem Aufruf ein Ende-Token eingefugt. Dieses Start- und Ende-Token er-leichtert das Parsen, da der Parser die Token leichter bearbeiten kann.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool match bool isTail Fugt Hilfstoken in den

Syntaxbaum ein.

matchHead

Diese zum Sieber zuzurechnende Funktion liest den Namen der Kopf-Klausel ausdem Quellcode. Der erkannte Klauselname wird durch Hilfstoken eingeschlossen,die die spatere Ubersetzung erleichtern. Sollte der Kopf-Term ein Fakt sein, mussenkeine weiteren Kopf-Terme erfullt werden.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool matchHead String L Der Name des Kopf-

Terms wird isoliert.

matchTail

Die Funktion matchTail ruft die Funktion matchFunc auf und erweitert diese umdas Hinterlegen eines Term-Ende-Token in der Tabelle fur jede erkannte Funktion.Wird die letzte Funktion erkannt, scheitert matchTail und signalisiert, dass keineweiteren Funktionen zu dem momentanen Kopf-Term existieren.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool matchTail String L Der Name eines Funk-

tionsterms wirdisoliert.

eof

Um das Dateiende zu erkennen, wird auf den ScannerInputStream zuruckgegriffen.Die Funktion eof ruft dazu die Funktion ScannerInputStream.eof auf und reichtdas Ergebnis durch. Die Funktion liefert den Wert ”wahr” zuruck, wenn das Datei-ende erreicht ist, ansonsten den Wert ”falsch”.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool eof ∅ Das Dateiende wird

erkannt.

Page 140: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 133

skipWhiteSpaces

Leerzeichen haben in der Programmiersprache Mulog keine Funktion. Daher werdendie Leerzeichen, Tabulator-Zeichen, Wagenrucklauf-Zeichen und Neue-Zeile-Zeichenkonsumiert, ohne dass eine Aktion oder ein Token generiert wird.

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ skipWhiteSpaces ∅ Unwichtige Steuerzei-

chen werden entfernt.

matchAri

Ein arithmetischer Ausdruck kann neben Zahlen und Variablen die Symbole ”+”,”-”, ”*”, ”/”, ”(” und ”)” enthalten. Diese Funktion gruppiert die einzelnen Kompo-nenten und erzeugt daraus Token. Diese Funktion beschrankt sich auf das Scannenund stellt die Token in der Reihenfolge, in der sie gelesen werden, in die Tabelleein. Zahlen werden als Token vom TokenTyp(DOUBLE) behandelt, wenn in derZahl ein .-Zeichen angefunden wird, ansonsten wird dem Token ein Wert von To-kenTyp(Integer) assoziiert.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool matchAri ∅ Ein arithme-

tischer Ausdruck wirdanalysiert.

matchFunc

Eine Funktion kann sowohl einwertig sein, als auch verschiedene Funktionsargumen-te haben. Diese Funktionsargumente konnen Listen, Variablen oder Atome sein. Eswerden Hilfstoken zur Erleichterung des Parsens mit den erkannten Token in dieTabelle eingestellt. Dadurch wird das spatere Parsen wesentlich erleichtert.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool matchFunc ∅ Eine Funktion wird

zerlegt. Die Funkti-onsargumente werdenanalysiert.

lexan

Wird eine Zahl aus dem Eingabestrom gelesen, ist die Zahl aus mehreren ASCII-Zeichen zusammengesetzt. Ein ASCII-Zeichen wird intern durch einen Zahlenwertvon 0 bis 255 prasentiert. Diesem Zahlenwert ist ein Zeichen zugeordnet. Das ASCII-Zeichen fur den Buchstaben A hat den ASCII-Code 65. Die Zeichen 0-9 werdenden Zahlen 48 bis 57 zugeordnet. Die Zahl 1234 setzt sich aus vier Zeichen mitden ASCII-Codes 49, 50, 51 und 52 zusammen. Die Funktion lexan wandelt dieASCII-Codes in eine Zahl.

Ruckgabe Funktionsname Funktionsparameter ErlauterungInteger lexan ∅ ASCII-Codes werden

in eine Zahl gewandelt.

Page 141: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 134

A.5 Klasse Scanner

Der Scanner liest eine Quellcode-Datei ein und gruppiert die einzelnen Zeichen zulogischen Gruppen. Die Struktur der Gruppen wird durch die Spezifikation derProgrammiersprache Mulog festgelegt.

ScannerInputStream

Eine Datei der Große l wird von der ScannerInputStream-Klasse komplett in denSpeicher geladen. Dazu wird ein Byte-Array der Große l von der Halde alloziert.Diese Klasse puffert dadurch wiederholte Zugriffe auf das gleiche Byte, welches beimScannen von Dateien haufig vorkommt. Weiterhin bietet diese Klasse notwendigeFunktionen zum Scannen von Quellcode-Dateien. Der ScannerInputStream verfugtuber einen Lesekopf, der uber den Puffer lauft. Die Position des Lesekopfs wird mitder Variable pos angesprochen.

getByte

Die Funktion getByte liest ein Byte aus dem Datei-Strom. Das Byte ist nichtvorzeichenbehaftet.

Es wird von der aktuellen Position im Strom gelesen. Der Lesekopf wird um eineZelle inkrementiert. Dadurch wird das aktuelle Zeichen konsumiert.

Ruckgabe Funktionsname Funktionsparameter Erlauterungunsigned byte getByte ∅ Es wird ein vorzeichen-

loses Bytezuruckgegeben.

getChar

Die Funktion getChar liest ein ASCII-Zeichen aus dem Datei-Strom. Es wird vonder aktuellen Position im Strom gelesen. Der Lesekopf wird um eine Zelle inkre-mentiert. Dadurch wird das aktuelle Zeichen verbraucht.

Ruckgabe Funktionsname Funktionsparameter Erlauterungchar getChar ∅ Es wird ein ASCII-

Zeichenzuruckgegeben.

lookahead

Die Funktion lookahead liest ein ASCII-Zeichen aus dem Datei-Strom. Der Lese-kopf wird dabei nicht bewegt und es wird auch kein Zeichen konsumiert.

Ruckgabe Funktionsname Funktionsparameter Erlauterungchar lookahead ∅ Es wird ein ASCII-

Zeichenzuruckgegeben.

Page 142: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 135

lookahead i

Die Funktion getlookahead liest ein ASCII-Zeichen aus dem Datei-Strom an derPosition des Lesekopfs+i. Der Lesekopf wird dabei nicht bewegt und es wird auchkein Zeichen konsumiert.

Ruckgabe Funktionsname Funktionsparameter Erlauterungchar lookahead Integer i Der Funktionsparame-

ter i ist eine Zahl, dieauf die aktuelle Posi-tion des Lesekopfs ad-diert wird, bevor dasZeichen gelesen wird.Es wird ein ASCII-Zeichen von dieserStelle zuruckgegeben.

unget

Mittels unget wird das letzte konsumierte Zeichen restauriert. Der Lesekopf wirdum eine Zelle dekrementiert.

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ unget ∅ Der Lesekopf wird um

eine Zelle zuruckge-setzt. Die Zelle wirdrestauriert.

unget i

Mittels unget werden die i letzten Zeichen restauriert. Der Lesekopf wird um iZellen dekrementiert.

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ unget Integer i Der Lesekopf wird um

i Zellen zuruckgesetzt.Die Zellen werdenrestauriert.

eof

Beim Einlesen einer Quelldatei muss das Ende der Datei erkannt werden. Die Funk-tion eof gibt beim Erreichen des Dateiendes den boolschen Wert wahr zuruck.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool eof ∅ Beim Er-

reichen des Dateiendeswird ”wahr”zuruckgegeben.

eof i

Fur das Scannen der Quelldatei ist es erforderlich zu wissen, ob noch i Zeichen vomEingabepuffer gelesen werden konnen. Die Funktion eof i gibt den boolschen Wert

Page 143: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 136

wahr zuruck, wenn beim Lesen von i-Zeichen das Dateiende erreicht wird, ansonstenfalsch.

Ruckgabe Funktionsname Funktionsparameter Erlauterungbool eof Integer i Beim

Erreichen des Datei-endes innerhalb von iLesezyklen wird wahrzuruckgegeben.

A.6 Klasse PRLabel

Die Klasse PRLabel dient der Zuordnung eines logischen Namens zu einer Adresseim Programmspeicher. Es wird eine Relation zwischen dem Namen und der ent-sprechenden Position im Programmspeicher erstellt.

Konstruktor ErlauterungPRLabel(String Marke,Integer Position) Die Relation Marke ←→ Position wird

hergestellt.

A.7 Klasse PRLabels

Die Klasse PRLabels verwaltet mehrere Instanzen der Klasse PRLabel.

Konstruktor ErlauterungPRLabels ∅ Eine interne Tabelle wird angelegt.

add Name,Position

Es wird eine Marke und die dazugehorige Position in die interne Tabelle eingestellt.

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ add String Name, Integer Position Eine Marke wird in die

interne Tabelle gesetzt.

size

Die Funktion size ermittelt die Anzahl der Relationen vom Typ PRLabel in derinternen Tabelle. Die Große wird zum durchiterieren der internen Tabelle benotigt.

Ruckgabe Funktionsname Funktionsparameter ErlauterungInteger size ∅ Es wird die Anzahl der

Elemente in der inter-nen Tabellezuruckgegeben.

Page 144: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 137

find Position

Um die Fehlersuche der in der Applikationssprache Mulog geschriebenen Programmezu erleichtern, kann jeder Befehl im Einzelschrittmodus ausgefuhrt werden. Mittelsfind Position kann die zu einer Position zugehorige Marke geladen und die Ablaufeklarer dargestellt werden.

Ruckgabe Funktionsname Funktionsparameter ErlauterungString find Integer Position Die zur Position pas-

sende Marke wird ausdem Programmgeladen.

set Name,Position

Wahrend der Ubersetzung eines Programms steht die Position einer Marke nochnicht fest. Die Position wird zu einem spateren Zeitpunkt vom Adressenreloziererermittelt. Damit diese Marken ebenfalls von der Klasse PRLabels verwaltet wer-den konnen, wird die Marke vorlaufig mit einer falschen Position gespeichert. Dierichtige Position wird vom Relozierer durch einen Aufruf der Funktion set mit derrichtigen Position gesetzt und die falsche Marke wird uberschrieben.

Ruckgabe Funktionsname Funktionsparameter Erlauterung∅ set String Name, Integer Position Es wird ei-

ne neue Positionmit der MarkeName assoziiert.

A.8 Klasse ClassGenerator

Die Klasse ClassGenerator schreibt eine ubersetzte Datei, die zur spateren direktenAusfuhrung bestimmt ist.

Page 145: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 138

Konstruktor ErlauterungClassGenerator(StringDateiname,Vector Quellcode,IntegerProgrammGroesse,Integer[]Programm,PRLabels Prlabels,VectorImportDateien,VectorRuntimeObjs,Integer[] Typ,BacklinkBacklinks)

Unter dem Namen Dateiname wirddie zu erzeugende Mulog-P-Code-Dateierzeugt. Diese Datei beinhaltet denQuellcode, damit das Programm auchim Debug-Code laufen kann, in demder gerade ausgefuhrte Quellcode ange-zeigt wird. Der vom Programm benotig-te Programmspeicher wird durch dieGroße ProgrammGroße und den In-halt des Programmspeichers Programmubergeben. Da jedes Mulog-Programmandere Mulog-Programme einbindenkann, wird eine Liste der Program-me ImportDateien mitgegeben. DieseDateien werden zur Laufzeit nachgela-den. Da dadurch eine Relozierung derSprungadressen notwendig wird, wer-den in PRlabels die Sprungmarkierun-gen mitgefuhrt. Konstanten und unge-bundene Terme werden durch den Vek-tor RuntimeObjs und das Feld Typ anden ClassGenerator ubergeben.

A.9 Klasse myPrintStream

Diese Hilfsklasse erweitert die vorhandene PrintStream-Klasse um die Funktion wri-teLong, die einen 32-Bit-Wert mit dem hochsten-Byte voran in eine Datei schreibt.

Konstruktor ErlauterungmyPrintStream(OutputStreamout)

Erzeugt eine neue Instanz derKlasse myPrintStream.

writeLong(long w)

Die Funktion writeLong schreibt einen 32-Bit Wert mit hochstwertigen Byte voranin die Datei.

A.10 Klasse RhoToken

RhoToken ist eine einfache Klasse, die eine Variablenbezeichnung, ein Label, eineReferenz auf den fp-Zeiger und den Typ des Objekts gruppiert.

Page 146: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 139

Konstruktor ErlauterungRhoToken(String Name,Integer fp) Eine Relation zwischen der

Variablenbezeichnungoder einem Label Name unddem Zeiger fp auf dem loka-len Kellerrahmen wird herge-stellt. Der Typ wird auf denWert 0 gesetzt.

RhoToken(String Name,Integer fp,Integer typ) Eine Relation zwischen derVariablenbezeichnung odereinem Label und dem Zeigerauf dem lokalen Kellerrahmenwird hergestellt.

Funktion setTyp

Die Funktion setTyp erhalt als Eingabeparameter einen Integer-Wert, der in derlokalen Variable typ gespeichert wird. Es wird kein Wert zuruckgegeben.

Funktion toString

Der Inhalt der lokalen Variablen name, fp und typ wird als Zeichenkette zuruckge-geben.

A.11 Klasse Rho

Die Klasse Rho verwaltet Objekte vom Typ RhoToken.

Konstruktor ErlauterungRho() Eine Instanz der Klasse Rho wird

erzeugt.

Funktion toString()

Alle Elemente die von Rho verwaltet werden, werden als eine Zeichenkette zuruck-geliefert.

Funktion elementAt(int i)

Das Element, welches sich an der i-ten Position im internen Speichervektor der Klas-se Rho befindet, wird zuruckgegeben. Der Ruckgabewert ist vom Typ RhoToken.

Funktion void add(RhoToken rt)

Ein Element vom Typ RhoToken wird an das Ende des internen Speichervektorsangefugt.

Page 147: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 140

Funktion RhoToken add(String name)

Es wird ein neues Objekt vom Typ RhoToken erzeugt, dessen fp-Zeiger auf die mo-mentane Anzahl von Objekten in den internen Speichervektor gesetzt wird. DiesesObjekt wird an den internen Speichervektor angefugt und dann zuruckgegeben.

Funktion int size()

Diese Funktion gibt die Anzahl der Elemente im internen Speichervektor zuruck.

Funktion RhoToken find(String name)

Es wird das Element vom RhoToken zuruckgeliefert, dessen Name mit dem Para-meter name ubereinstimmt. Wird kein passendes Element gefunden, wird der WertNull zuruckgeliefert.

Funktion String findName(int pc)

Es wird analog zur find-Funktion verfahren. Doch wird hierbei nicht nach demNamen, sondern nach dem fp-Zeiger gesucht.

A.12 Klasse ShortMemoryToken

ShortMemoryToken ist eine einfache Klasse, die ein Label mit einer Position ver-bindet.

Konstruktor ErlauterungRhoToken(String Name,Integer Position) Eine Relation zwischen dem Label Na-

me und der Position wird hergestellt.ShortMemoryToken(String Name) Das Objekt speichert den Wert Name

und setzt die interne Variable Positionauf den Wert -1.

A.13 Klasse ShortMemory

Die Klasse ShortMemory verwaltet Objekte vom Typ ShortMemoryToken.

Konstruktor ErlauterungShortMemory() Eine Instanz der Klasse ShortMemory

wird erzeugt.

Funktion void add(ShortMemoryToken token)

Diese Funktion fugt ein Objekt vom Typ ShortMemoryToken in den internen Spei-chervektor.

Funktion void add(String Name,Integer Position)

Es wird ein Objekt vom Typ ShortMemoryToken mit Hilfe der Parameter Name undPosition erzeugt. Das Objekt wird ans Ende des internen Speichervektors eingefugt.

Page 148: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 141

Funktion int size()

Es wird die Große des internen Speichervektors zuruckgegeben.

Funktion void changePosition(String Name,Integer Position)

Der Positionswert eines gespeicherten Objekts vom Typ ShortMemoryTerm wirddurch den Namen referenziert und der bisherige Positionswert wird durch den neuenWert ersetzt.

Funktion boolean exists(String Name)

Der boolsche Wert ”wahr” wird zuruckgegeben, wenn sich ein Objekt vom TypShortMemoryToken im internen Speichervektor befindet, dessen Name dem Para-meter Name entspricht. Ansonsten wird der boolsche Wert ”falsch” zuruckgeliefert.

Funktion ShortMemoryToken find(String Name)

Es wird das Objekt vom Typ ShortMemoryToken zuruckgeliefert, welches durchden Parameter Name referenziert werden kann. Wird kein entsprechendes Objektgefunden, liefert die Funktion den Wert 0.

Funktion Integer findPC(String Name)

Die Funktion findPC liefert nur die Position des mit dem Namen Name assoziier-ten ShortMemoryToken. Existiert kein ShortMemoryToken namens Name, wird derWert -1 zuruckgeliefert.

Funktion String findName(Integer PC)

Analog zu findPC liefert findName den Namen des mit PC assoziierten ShortMe-moryToken. Existiert kein entsprechender ShortMemoryToken, wird eine leere Zei-chenkette zuruckgeliefert.

A.14 Klasse DBTabelle

Die Klasse DBTabelle kapselt die Datenbankabfrage einer Tabelle. Die Tabel-le gehort zu einer Datenbank. Das Ergebnis dieser Abfrage wird als Fakten indie interne Datenbasis von Mulog abgelegt. Dabei wird aus jeder Datenzeileein eigener Fakt produziert. Die bisherige Implementierung ist auf das MySQL-Datenbankverwaltungssystem beschrankt.

Page 149: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 142

Konstruktor ErlauterungDBTabelle(String Fakt, String[] Attribute[],String Treiber, String Host, String Daten-bank, String Tabelle, String Benutzername,String Passwort)

Der Parameter Fakt gibt den Namen desPradikats an, unter dem eine Datenzeile in deninternen Datenspeicher ubertragen wird. DasFeld Attribute enthalt die Namen der Attri-bute, die aus der Datenbank abgefragt wer-den. Es sind die Werte, die zwischen den SQL-Kommandos ”SELECT” und ”FROM” ste-hen. Daher ist es moglich, auch Anfragen wie”count(*)” an die Datenbank zu senden. Nurder MYSQL-Treiber wird z. Z. unterstutzt.Dieser Treiber muss im Parameter Treibermitgegeben werden. Der Zielrechner der Da-tenbank wird in der Variablen Host uberge-ben. Der eigentliche Datenbankname liegt indem Parameter Datenbank. Die entsprechen-de Tabelle in dieser Datenbank wird uber denParameter Tabelle referenziert. Da eine Daten-bank geschutzt sein kann, werden die WerteBenutzername und Passwort benotigt, um sichzu authentifizieren.

Funktion toString()

Mit der Funktion toString wird eine Tabelle als String zusammengefasst. Es ist imWesentlichen eine Hilfsfunktion, die fur das Debuggen der Mulog-Laufzeitumgebunggebraucht wird. Ein direkter Zugriff von einem Mulog-Programm aus ist nichtmoglich.

A.15 Klasse CutPunkt

Die Klasse CutPunkt verwaltet einen einzelnen Cut im Zwischencode. Ein Cut be-wirkt, dass ein Backtracking nach dem Uberschreiten eines Cuts nicht zuruck uberden Cut vorgenommen wird. Mit Hilfe des Befehls cut wird ein CutPunkt erzeugt.Ein CutPunkt umfasst dabei den Speicherbereich fur den dieser Cut gultig ist, alsoden Bereich der Klausel, in der der Cut existiert, dem Fortsetzungspunkt, vom demaus die Klausel komplett aufgegeben werden kann und dem Programmzahler pc, derbeim Unterschreiten des realen Programmzahlers das Aufgeben der Klausel durchden Sprung an den Fortsetzungspunkt das Cut-Ereignis triggert.

Konstruktor ErlauterungCutPunkt(Integer pcStartBereich,Integer pcEndBereich, Integer pc,Integer rausAdresse)

Es wird der Start- und Endbereich ei-ner Klausel, wie auch der Fortsetzungs-punkt zum Verlassen der Klausel indas Objekt ubertragen. Ferner wirddie Stelle des Cuts im Zwischencodefestgehalten.

Funktion boolean istDrin(Integer altPC,Integer neuPC)

Diese Funktion gibt den boolschen Wert ”wahr” zuruck, wenn sowohl der Wert vonaltPC und neuPC im Speicherbereich der Klausel liegen und altPC nach und neuPC

Page 150: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 143

vor dem pc des CutPunktes liegen. Treffen diese Voraussetzungen nicht zu, wird derboolsche Wert ”falsch” zuruckgegeben.

A.16 Klasse CutVerwaltung

Funktion CutPunkt addCutPunkt(Integer pcStartBereich, In-teger pcEndBereich, Integer pc, Integer forsetzungspunkt)

Ein CutPunkt wird erzeugt und von dieser Klasse verwaltet.

Funktion void subCutPunkt(CutPunkt cut)

Ein CutPunkt wird aus dem internen Speichervektor entfernt.

Funktion int size()

Mittels size werden die Anzahl der CutPunkte, die verwaltet werden, ermittelt.

Funktion CutPunkt wurdeCutAktiviert(Integer altPC, Inte-ger neuPC)

Es wird ein CutPunkt gesucht, der durch die Kombination altPC/neuPC referenziertwerden kann. Wird ein solches Objekt gefunden, wird dieses Objekt zuruckgegeben,ansonsten wird eine 0 geliefert.

A.17 Klasse iFunc

Diese Hilfsklasse gruppiert die Variablen id, name und count in einem Objekt.

Konstruktor ErlauterungiFunc(String Name,Integer ID,Integer Count) Ein Objekt vom Typ iFunc spei-

chert einen Funktionsnamen na-me, eine Referenznummer aufdie implementierte Funktion unddie Anzahl der Parameter dieserFunktion.

Im Namen wird dabei redundant die Anzahl der Parameter abgelegt. Ein Pradikat”write(A)” wird somit zum Namen ”write 1”. Die ID wird intern von der P-CodeMaschine verwendet, um die richtige Funktion anzuspringen. Der Code-Emitterwandelt dabei die von der Scanner/Sieber/Parser-Kombination ermittelten Pradi-kate in die ID-Abbildung, um und schreibt diesen Wert mit dem Funktionsaufruffur bereits implementierte Funktionen in den Programmspeicher. Somit erfahrenPradikate die im Mulog-System bereits vordefiniert sind eine Sonderbehandlung imVergleich zu Pradikaten, die erst im Quellcode erzeugt werden. Jedes Pradikat wird

Page 151: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 144

typQuel ”QUEL”typIMPO ”IMPO”typPROG ”PROG”typRELO ”RELO”typOBJK ”OBJK”typMARK ”MARK”typENDE ”ENDE”typBACK ”ZURK”

Tabelle A.1: Definitionstabelle der Blockmarkierungen

wahrend der Ubersetzung darauf abgetestet, ob es bereits in der Liste der imple-mentierten Funktionen vorhanden ist und anhand dieses Tests wird entschieden, obein Aufruf der entsprechenden Funktion in der Mulog-Bibliothek erfolgt oder einneues Pradikat im Programmcode erzeugt wird.

A.18 Klasse ImplementedFunctions

Diese Klasse verwaltet die internen Bibliotheksfunktionen von Mulog.

Konstruktor ErlauterungImplementedFunctions() Der Konstruktor ubertragt alle in der

Laufzeitbibliothekverfugbaren Funktionen in seine inter-nen Verwaltungsstrukturen.

Funktion void add(iFunc ifunc)

Eine implementierte Funktion wird in die interne Verwaltungsstrukturen ubertra-gen.

Funktion void add(String name, int typ, int count)

Es wird aus den Parametern name, typ und count eine neue implementierte Funktionerzeugt und diese in die internen Verwaltungsstrukturen ubertragen.

Funktion int find(String name)

Die Funktion find ermittelt den ID-Wert der durch name gesuchten implementiertenFunktion. Ist eine solche Funktion nicht vorhanden, wird der Wert 0 zuruckgegeben.

A.19 Klasse Konstanten

Diese Hilfsklasse kapselt die von Mulog benotigten Konstanten. Die vierstelligenByte-Konstanten, die als Blockbezeichnung in einer Mulog-P-Code Datei verwendetwerden, sind:

Page 152: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 145

A.20 Klasse PToken

Wahrend des Kompilierens des Programms wird der Quellcode in einzelne Bestand-teile gegliedert. Diese Bestandteile - ab jetzt Token genannt, werden fur die Erzeu-gung des Zwischencodes benotigt. Die unterschiedlichen Token werden anhand eineseindeutigen Zahlenwerts in der internen Variable Typ unterschieden. Daher sind indieser Klasse umfangreiche Konstantendeklarationen vorhanden. Jeder Token um-fasst folgende Komponenten:

• String Text

• Integer Typ

• String KlauselName

• Integer Alternative

• Integer AlternativenPos

• Integer Link

• Integer QuellkodePos

Typ BezeichnungPToken(Integer typ, String text) Der KlauselName wird auf Null gesetzt,

Alternative auf NOT SET, Alternati-venPos auf 0, QuellkodePos auf -1 undLink auf -1. Die Werte typ und text wer-den in die entsprechenden internen Va-riablen ubernommen.

PToken(Integer typ, String text,Integer QuellkodePos)

Der KlauselName wird auf Null gesetzt,Alternative auf NOT SET, Alternati-venPos auf 0 und Link auf -1. Die Wer-te typ, QuellkodePos und text werden indie entsprechenden internen Variablenubernommen.

Funktion toString()

Diese Funktion gibt die Text-Komponente dieses Tokens als Text zuruck.

A.21 Klasse BacklinkObj

BacklinkObj ist eine einfache Klasse, die ein Label auf eine Position im Programm-speicher abbildet.

Konstruktor ErlauterungBacklinkObj(String Name,Integer PC) Eine Relation zwischen dem Label Na-

me und der Position PC im Programm-speicher wird hergestellt.

Page 153: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 146

A.22 Klasse Backlink

Die Klasse Backlink verwaltet Objekte vom Typ BacklinkObj.

Konstruktor ErlauterungBacklink() Eine Instanz der Klasse Backlink wird

erzeugt.

Funktion BacklinkObj elementAt(int i)

Das Element, welches sich an der i-ten Position im internen Speichervektor derKlasse Backlink befindet, wird zuruckgegeben. Der Ruckgabewert ist von dem TypBacklinkObj.

Funktion void add(String Name,Integer PC)

Ein Element vom Typ BacklinkObj wird erzeugt und an das Ende des internenSpeichervektors angefugt.

Funktion int size()

Diese Funktion gibt die Anzahl der Elemente im internen Speichervektor zuruck.

Funktion void removeAllElements()

Es werden alle Objekte im internen Speichervektor geloscht.

Funktion void resolve(String Name, Integer pc, MulogMaschi-ne pm)

Der Mulog-Compiler arbeitet nach dem 2-Pass Verfahren [72, WIRTH 86], dadurchkann es passieren, dass die Adresse einer Sprungmarke noch nicht bekannt ist. Eswerden der Name und die Speicheradresse, die eigentlich das Ziel enthalten, wel-ches aber noch unbekannt ist, als ein BacklinkObj gespeichert. In dem Vektor derBacklinkObjs befinden sich also die unreferenzierten Sprungziele. Wird eine neueSprungmarke wahrend der Ubersetzung erzeugt, wird die Funktion resolve mit demNamen des Sprungziels und seiner Adresse aufgerufen. Die Funktion resolve ite-riert durch den gesamten Bestand an gespeicherten BacklinkObjs und ubertragtdie Adresse der Sprungmarke an die im BacklinkObj gespeicherte Adresse, wennder Name der Sprungmarke und der im BacklinkObj gespeicherte Name identischsind. Dadurch werden die noch fehlenden Sprungziele aufgelost.

A.23 Klasse ThreadObj

Diese simple Hilfsklasse enthalt nur einen Konstruktor.

Konstruktor ErlauterungThreadObj(String corbaID) Mittels der Zeichenkette corbaID

kann ein entfernter Server referenziertwerden.

Page 154: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 147

A.24 Klasse Threads

Konstruktor ErlauterungThreads() Der Speichervektor, der die einzel-

nen ThreadObjekte verwalten soll, wirderzeugt.

Funktion int size()

Die Anzahl der verwalteten Elemente wird zuruckgegeben.

Funktion int add(ThreadObj t)

Mittels der Funktion add wird ein ThreadObj in den internen Verwaltungsvektoreingefugt und die Position des Objekts wird zuruckgeliefert.

Funktion ThreadObj elementAt(Integer i)

Das ThreadObj an der i-ten Stelle im internen Verwaltungsvektor wird geliefert.

A.25 Klasse VariablenElement

Die Klasse VariablenElement stellt eine Relation zwischen einer Variablen und derPosition der Variablen in der globalen Variablentabelle her.

Konstruktor ErlauterungVariablenElement(String Name,Integer Position) Eine

Relation zwischen der Va-riablen Name und der Po-sition wird hergestellt.

A.26 Klasse VariablenPos

Die Klasse VariablenPos verwaltet Elemente vom Typ VariablenElement.

Konstruktor ErlauterungVariablenPos(Integer init) Der init Parameter legt

fest, ab welcher Positiondie Zahlung der Variablenbeginnt. Der interne Posi-tionszahler wird mit demWert init initialisiert.

Funktion int position(String name)

Befindet sich bereits ein VariablenElement mit Namen name in dem internen Ver-waltungsvektor, wird die Position dieses Elements geliefert. Ansonsten wird ein neu-es VariablenElement aus dem Parameter name und dem internen Positionszahlererzeugt und dem internen Speichervektor hinzugefugt und der Positionszahler wirdum eins erhoht und zuruckgegeben.

Page 155: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 148

A.27 Klasse WolfImpl

Diese Klasse kommuniziert uber CORBA mit einem entfernten Objekt. Die KlasseWolfImpl lauft auf einem Rechner und stellt dessen Rechenleistung dem Clusterzur Verfugung. Infolge der Verwendung mehrerer Rechner kann die Rechenleistungstark gesteigert werden.

Konstruktor ErlauterungWolfImpl() Eine Instanz dieser Klasse wird erzeugt.

Funktion speichereQuelle(String datei, byte[] inhalt)

Der Inhalt, der im Byte-Format in der Variablen inhalt ubergeben wird, wird unterdem Namen datei gespeichert. Die Funktion speichert die Datei in den Quellcode-Kontext des Benutzers.

Funktion speichereKlasse(String datei, byte[] inhalt)

Der Inhalt, der im Byte-Format in der Variablen inhalt ubergeben wird, wird unterdem Namen datei gespeichert. Die Funktion speichert die Datei in den ausfuhrbarenBereich des Benutzers.

Funktion int uebersetze(String datei)

Diese Funktion kompiliert das durch die Variable datei referenzierte Programm.

Funktion int ausfuehren(String datei, Communi-cation.Callback Himmelstempel clientHimmelstempel, Com-munication.NeuroServer neuroServer, boolean debug)

Ein bereits ubersetztes Programm datei wird ausgefuhrt. Da es entfernt ausgefuhrtwird, erhalt das Programm die Kommunikationsschnittstellen zum Neuro-Serverund zu der Benutzerschnittstelle. Ferner kann der Debug-Modus aktiviert werden,in dem die Variable debug auf ”wahr” gesetzt wird.

Funktion void backpropagation2 Erzeugen(String name, intversteckteNeuronenAnzahl, int prozent)

Es wird durch diese Funktion ein Neuronales Netz mit 2 Eingangsneuronen undeinem Ausgabeneuron erzeugt. In der verdeckten Schicht befinden sich die Anzahlvon versteckteNeuronenAnzahl Neuronen.

Funktion double backpropagation2 Lernen(String name, Dou-ble[] eingabe1, Double[] eingabe2, Double[] ausgabe)

Das Neuronale Netz muss trainiert werden. Da mehrere Neuronale Netze existierenkonnen, wahlt der Parameter name das gewunschte NN aus. Die Felder eingabe1und eingabe2 dienen den beiden Eingabeneuronen als Eingabe und das Feld ausgabewird als gewunschter Zielwert benutzt.

Page 156: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG A 149

Funktion void backpropagation2 Entfernen(String name)

Um eine Neuronales Netz aus der internen Verwaltung zu loschen, muss backpropa-gation2 Entfernen mit dem Namen des zu loschenden NNs aufgerufen werden.

Funktion void registerNeuroServer(Communication.-NeuroServer neuroserver)

Der Neuroserver ist ein eigenstandiges Programm und bietet seinen Dienst per COR-BA an. Damit eine Verbindung zum Neuroserver hergestellt werden kann, existiertdie Funktion registerNeuroServer.

Funktion void beenden(int wert)

Es ist vom Leitwolf aus moglich, den Server auf den Client-Rechnern zu beenden.Der Beendigungswert entspricht wert.

Page 157: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Anhang B

Grafische Benutzeroberflache

B.1 Klasse Projektverwaltung

Mittels des Formulars Projektverwaltung werden die Projekte eines Benutzers ver-waltet. Es konnen Projekte angelegt und geloscht werden.

void initComponents()

Es werden die Elemente der grafischen Benutzeroberflache erzeugt und das Dialog-Fenster dargestellt.

void updateProjektAnsicht()

Es werden die Projekte in der Baumansicht aktualisiert.

void closeDialog(java.awt.event.WindowEvent evt)

Das Formular wird geschlossen.

void jButtonLoeschenActionPerformed(java.awt.event.-ActionEvent evt)

Ein Projekt wird geloscht.

void jButtonAbbruchActionPerformed(java.awt.event.-ActionEvent evt)

Das Formular wird geschlossen.

void jTreeProjekteMouseClicked(java.awt.event.MouseEventevt)

Ein Projekt wird in der Projektansicht ausgewahlt.

150

Page 158: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG B 151

void jButtonNeuActionPerformed(java.awt.event.Action-Event evt)

Ein neues Projekt wird per CORBA in dem Kontext des aktuellen Benutzers an-gelegt. Ferner wird eine Unterfunktion zur Generierung der grafischen Darstellungdes Ordners aufgerufen.

voidjButtonOKActionPerformed(java.awt.event.ActionEvent evt)

Das Formular wird geschlossen.

void add(String name)

Es wird ein neues Projekt in der Projektansicht erzeugt.

B.2 Klasse PasswortAendern

Mittels des Formulars PasswortAendern wird das Passwort des Benutzers geandert.

void initComponents()

Es werden die Elemente der grafischen Benutzeroberflache erzeugt und das Dialog-Fenster dargestellt.

voidjButtonOKActionPerformed(java.awt.event.ActionEvent evt)

Diese Funktion ubertragt die Werte fur das neue Passwort aus dem Text-Feld desDialogs und schließt das Formular.

void closeDialog(java.awt.event.WindowEvent evt)

Das Formular wird geschlossen, ohne dass das neue Passwort ubernommen wird.

B.3 Klasse Himmel

Die Klasse Himmel kapselt die eigentliche Benutzerschnittstelle zum Leitwolf-System. Es werden von diesem Programm aus sowohl die Verwaltung der Pro-jekte und Dateien vorgenommen als auch Mulog-Programme erzeugt, gespeichert,bearbeitet und ubersetzt, sowie diese ubersetzten Programme auf dem Leitwolf-Rechnerverbund gestartet. Die Mulog-Programme konnen aber auch im Einzel-schrittmodus zur Fehlerbeseitigung ausgefuhrt werden.

void updateDateisystemAnsicht()

Die Dateien in der Baum-Ansicht der Projekte werden aktualisiert.

Page 159: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG B 152

void updateClusterAnsicht()

Die Anzeige der Rechner, die sich im Rechnerverbund befinden, wird neu aufgebaut.

void initComponents()

Die grafischen Dialogkomponenten werden auf dem Formular platziert.

void debugRun()

Das Programm wird im Einzelschrittmodus gestartet.

void jButtonStartActionPerformed(java.awt.event.Action-Event evt)

Das Programm wird ausgefuhrt.

void jButtonCompileActionPerformed(java.awt.event.Action-Event evt)

Die selektierte Mulog-Datei wird in einen Zwischencode ubersetzt.

void jButtonPasswortActionPerformed(java.awt.event.-ActionEvent evt)

Es wird das Formular zum Andern des Passworts aufgerufen.

void jMenuItemEndeActionPerformed(java.awt.event.Action-Event evt)

Das Client-Programm wird hiermit beendet.

void jMenuItemDateiLoeschenActionPerformed(java.awt.-event.ActionEvent evt)

Wenn diese Taste gedruckt wird, wird die selektierte Datei geloscht.

void jMenuItemDateiUmbenennenActionPerformed(java.-awt.event.ActionEvent evt)

Die ausgewahlte Datei wird umbenannt.

void jEditorPaneTextKeyTyped(java.awt.event.KeyEventevt)

Es werden die Tasten, die im Editor gedruckt wurden, ausgewertet und Steuertasten,wie zum Beispiel [ALT]-S zum Speichern der Datei, ausgefuhrt.

Page 160: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG B 153

void jEditorPaneTextInputMethodTextChanged(java.awt.-event.InputMethodEvent evt)

Wird der Text geandert, wird dies hier registriert. Der Benutzer wird damit aufveranderte und ungespeicherte Dateien hingewiesen.

void jTreeDateisystemMouseClicked(java.awt.event.Mouse-Event evt)

Wenn in die Projekt/Datei-Ansicht mit der Maus eine Datei angeklickt wird, wirddiese Datei zur Bearbeitung selektiert.

void jMenuItem1ActionPerformed(java.awt.event.Action-Event evt)

Es wird ein Menu zur weiteren Auswahl angezeigt.

void closeDialog(java.awt.event.WindowEvent evt)

Das Formular wird geschlossen.

void starteAlleProgramme()

Es werden die benotigten Hilfsprogramme gestartet.

void beendeAlleProgramme()

Alle benotigten Hilfsprogramme, die beim Programmstart geladen wurden, werdenbeendet.

void main(String args[])

In der Hauptfunktion wird die Verbindung zum Leitwolf des Rechnerverbundeshergestellt.

B.4 Klasse Anmeldung

Mittels des Formulars Anmeldung meldet sich der Benutzer am Rechnerverbund an.

void initComponents()

Es werden die Elemente der grafischen Benutzeroberflache erzeugt und das Dialog-Fenster dargestellt.

Page 161: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG B 154

voidjButtonOKActionPerformed(java.awt.event.ActionEvent evt)

Diese Funktion ubertragt die Werte fur den Benutzer und das Passwort aus denText-Feldern des Dialogs und schließt das Formular.

void closeDialog(java.awt.event.WindowEvent evt)

Das Formular wird geschlossen, ohne dass die internen Variablen Benutzer undPasswort ubernommen worden.

B.5 Klasse DebugDialog

Ein Mulog-Programm kann im Einzelschritt-Modus ausgefuhrt werden, damit Feh-ler leichter behoben werden konnen. Es wird nicht nur der Quellcode angezeigt,der gerade ausgefuhrt wird, sondern auch der Zwischencode und die Zustande desKellerspeichers und der Laufzeitumgebung.

Abbildung B.1: Ein Programm im Debugger

Page 162: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG B 155

Konstruktor ErlauterungDebugDialog(String dateiName, Stringtext,WolfImpl wolfimpl,Callback HimmelstempelImplcallback Impl,Callback Himmelstempelcallback Himmelstempel,Communication. NeuroServerneuro srv,java.awt.Frame parent,boolean modal)

Das Formular DebugDialog wirderzeugt.

void initComponents()

Es werden die Elemente der grafischen Benutzeroberflache erzeugt und das Dialog-Fenster dargestellt.

void debugRun()

Das Programm wird im Einzelschrittmodus ausgefuhrt.

PCodeZeile pcToCode(Integer pc)

Anhand des ubergebenen Programmzeigers pc wird die dazugehorige Programmzeilezuruckgegeben.

void drawPCode(Integer pc)

Eine Programmzeile des Zwischencodes wird in dem Formular angezeigt.

void sendPCode(String p code)

Der Inhalt des Programmspeichers wird in dem Formular angezeigt.

void sendStack(Integer[] stack)

Der komplette benutzte Kellerspeicher wird an der entsprechenden Stelle im For-mular angezeigt.

void sendTrail(Integer[] trail)

Der Inhalt des Rucksetzkellers wird in dem Formular visualisiert.

void sendHeap(Integer[] heap)

An der entsprechenden Stelle in dem Formular wird die Halde angezeigt.

Page 163: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG B 156

void sendLaufzeit(String[] laufzeit)

Die Objekte der Laufzeitumgebung werden zur Beseitigung von Fehlern ebenfallsangezeigt.

void jTextPanePCodeMouseClicked(java.awt.event.Mouse-Event evt)

Um einen Unterbrechungspunkt an einer Stelle zu setzen, muss die Stelle nur an-geklickt werden. Ist bereits ein Unterbrechungspunkt gesetzt, wird er bei nochma-ligen Anklicken geloscht.

void jButtonStoppActionPerformed(java.awt.event.Action-Event evt)

Durch Anklicken des Schalters ”Stopp” wird die Ausfuhrung im Einzelschrittmodusunterbrochen.

void jButtonWeiterActionPerformed(java.awt.event.Action-Event evt)

Das Programm lauft nach dem Drucken des Schalters ”Weiter” weiter, ohne nachjedem Befehl anzuhalten.

void jButtonSchrittActionPerformed(java.awt.event.Action-Event evt)

Es wird genau eine Zwischenkode-Befehl ausgefuhrt und danach das Programmunterbrochen.

void debugVeto(Integer QuellPos,Integer pc)

Mittels dieser Funktion wird getestet, ob an der Stelle pc ein Unterbrechungspunktgesetzt ist. Falls dies der Fall ist, wird die Ausfuhrung unterbrochen.

void setSP(Integer sp)

Es wird der Wert sp in dem Formular angezeigt.

void setTPO(Integer tpo)

Es wird der Wert tpo in dem Formular angezeigt.

void setFP(Integer fp)

Es wird der Wert fp in dem Formular angezeigt.

Page 164: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG B 157

void setHP(Integer hp)

Es wird der Wert hp in dem Formular angezeigt.

void setPC(Integer pc)

Es wird der Wert pc in dem Formular angezeigt.

void setTP(Integer tp)

Es wird der Wert tp in dem Formular angezeigt.

void setBTP(Integer btp)

Es wird der Wert btp in dem Formular angezeigt.

Page 165: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Anhang C

Verwaltungsdienste

C.1 Servant fur die Datei- und Benutzerverwal-

tung

Das Gesamtsystem ermoglicht nicht nur die Verwaltung von mehreren Benutzern,sonder auch die Projekt- und Dateiverwaltung. Somit ist das System sehr flexibeleinsetzbar. Die Funktionen, die fur die Verwaltung notwendig sind, wie das Erzeugenvon Benutzer, Projekten, Dateien, das Umbenennen von Dateien usw., sind dabeiin einem eigenen Programm gekapselt.

Sequenzen

Viele Strukturen werden nicht nur als einzelne Objekte ubertragen, sondern auchals Sequenzen, wie Felder unter CORBA heißen. Es existieren folgende Sequenzen:

• OctetSeq

• StringSeq

• DoubleSeq

Exportierte Funktionen

Das Programm projekte bietet als CORBA-Server folgende Funktionen an:

long writeIOR(in string path)

Diese Funktion schreibt die IOR dieses Servers in die Datei path. Mittels der IORdes Servers kann ein Client mit CORBA auf die Funktionen des Servers zugreifen.

boolean wolfRegistrieren(in string IOR)

Ein Rechner meldet sich mit seiner IOR an. Dadurch kann der neue Rechner iden-tifiziert und die von ihm angebotenen Funktionen benutzt werden.

158

Page 166: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG C 159

string anmelden(in string benutzername,in string passwort)

Gehort die Kombination benutzername und passwort einem dem System bekanntenBenutzer, wird ein sogenanntes Ticket zuruckgeliefert. Dieses Ticket wird benotigt,um weitere Aktionen durchzufuhren. Schlagt die Anmeldung fehl, wird eine leereZeichenkette ubergeben.

short speichere(in string datei,in string projekt,in string ticketID,in Oc-tetSeq puffer)

Eine Datei datei wird in den Kontext projekt gespeichert. Der Inhalt der Datei wirdin den Puffer puffer ubergeben. Der Wert von ticketID identifiziert den richtigenBenutzer und nur mit einem gultigen Ticket kann die Datei gespeichert werden.

short lade(in string datei,in string projekt,in string ticketID,out Oc-tetSeq puffer)

Mittels der Funktion lade wird eine Datei aus dem Kontext projekte geladen. DerInhalt der Datei wird im Puffer puffer ubergeben. Der Wert von ticketID identifiziertden richtigen Benutzer und nur mit einem gultigen Ticket kann die Datei geladenwerden.

short uebersetze(in string datei)

Die Datei unter dem Namen datei wird von Mulog in einen Zwischenkode ubersetzt.

StringSeq projekte(in string ticket)

Eine Liste aller Projekte, die dem Besitzer des Tickets ticket gehoren, wird zuruck-geliefert.

short erzeugeBenutzer(in string benutzername,in string passwort,instring pfad)

Ein neuer Benutzer mit dem Benutzernamen benutzername und dem Passwortpasswort wird angelegt. Alle Informationen, die diesen Benutzer betreffen, werdenunterhalb des Pfades pfad abgelegt.

short erzeugeGruppe(in string gruppenName,in string administrator)

Es wird eine neue Gruppe gruppenName angelegt und ein Benutzer administratorals Administrator festgelegt.

short erzeugeProjekt(in string projekt,in string ticketID)

Es wird unterhalb des mit dem Ticket ticketID assoziierten Benutzerpfad ein neuerOrdner projekt abgelegt. In einem Projekt konnen mehrere Dateien abgelegt werden.

Page 167: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG C 160

short addBenutzerZuGruppe(in string gruppenName,in string benutzer)

Um ein neues Mitglied benutzer zur Gruppe gruppenName hinzuzufugen, wird dieFunktion addBenutzerZuGruppe verwendet.

short subBenutzerVonGruppe(in string gruppenName,in string benut-zer)

Es wird der Benutzer benutzer aus der Gruppe gruppenName entfernt.

short subProjekt(in string projekt,in string ticketID)

Es wird das Projekt und alle darunterliegenden Dateien sofort und unwiderruflichentfernt.

short addDateiZuProjekt(in string datei,in string projekt,in string ticke-tID)

Eine Datei datei wird im Kontext des zu ticketID assoziierten Benutzers in dasProjekt projekt aufgenommen.

StringSeq dateien(in string projekt,in string ticketID)

Eine komplette Liste aller Dateien, die im Projekt projekt des mit ticketID assozi-ierten Benutzers liegt, wird geliefert.

short dateiUmbenennen(in string dateiAlt,in string dateiNeu,in stringprojekt,in string ticketID)

Eine Datei wird vom alten Namen dateiAlt in den Namen dateiNeu umbenannt. Die-se Umbenennung ist nur relativ im Kontext von projekt moglich. Eine Verschiebunguber Projekt- oder gar Benutzergrenzen hinweg ist nicht moglich.

short dateiEntfernen(in string datei,in string projekt,in string ticketID)

Eine einzelne Datei datei wird aus dem Kontext von projekt des mit ticketID ver-bundenen Benutzers geloscht.

void beenden(in long wert)

Der Server wird beendet und gibt den Wert wert zuruck.

C.2 Verwaltung der Rechner mit Hilfe von SOAP

Durch SOAP lassen sich Webdienste erstellen, die sich sowohl von der Program-miersprache Java als auch von der Programmiersprache C++ ansprechen lassen.Die Verwaltung der Rechner im Rechnerverbund wird durch die Java-Klasse Ver-waltung realisiert.

Page 168: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG C 161

int anzahl()

Liefert die Anzahl der Rechner im Verbund.

int addWolf(int kommando, int id, String ior, String name,String host, String neuroIOR)

Es wird ein Rechner namens name mit der CORBA-Schnittstelle IOR und der ID idin den Rechnerverbund eingefugt. Dieser Rechner ist selbst mit einem Neuronalen-Netz-Server mit neuroIOR verbunden.

String neuroAn(int i)

Gibt die IOR des Neuronalen-Netz-Servers an der i-ten Position zuruck.

String nameAn(int i)

Gibt die IOR des Rechners an der i-ten Position zuruck.

String idAn(int i)

Gibt die Id des Rechners an der i-ten Position zuruck.

String kommandoAn(int i)

Gibt das Kommando des Rechners an der i-ten Position zuruck.

String iorAn(int i)

Gibt die IOR des Rechners an der i-ten Position zuruck.

String hostAn(int i)

Gibt den Rechnernamen oder die IP des Rechners an der i-ten Position zuruck.

String leitwolfName()

Gibt den Namen des Leitwolfs zuruck.

String leitwolfAdresse()

Gibt die IOR der CORBA-Schnittstelle des Leitwolfs zuruck.

String leitwolfHost()

Gibt die Internet-Adresse oder die IP des Leitwolfs zuruck.

Page 169: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

ANHANG C 162

String neuroIOR()

Gibt die IOR der CORBA-Schnittstelle des Neuronalen-Netz-Servers des Leitwolfszuruck.

boolean leitwolf(String name, String ior, String host, Stringneuro)

Speichert die Werte des Leitwolfs.

boolean reset()

Loscht alle gespeicherten Informationen.

Axis

Axis ist eine SOAP-Implementierung (http://ws.apache.org/axis/index.html) furden Apache Webserver. Nachdem Axis in den Webserver integriert ist, wird derDienst mit java org.apache.axis.clien/AdminClient deploy.wsdd installiert.

Die deploy.wsdd hat den Inhalt:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name="WolfVerwaltung" provider="java:RPC">

<parameter name="className" value="WolfVerwaltung.Verwaltung"/>

<parameter name="allowedMethods" value="*"/>

<parameter name="scope" value="Application"/>

</service>

</deployment>

Gsoap

Auf der C++- Seite wird Gsoap zum Verbindungsaufbau zum Server benutzt. Diebenotigten Bibliotheken konnen von http://gsoap2.sourceforge.net bezogen werden.

Page 170: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Tabellenverzeichnis

1.1 Gutebestimmung in den Handelklassen . . . . . . . . . . . . . . . . . 7

2.1 Zahlenbereiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.2 Ubersicht uber die Konstantendeklaration . . . . . . . . . . . . . . . 21

2.3 Ubersicht uber die Variablendeklaration . . . . . . . . . . . . . . . . 22

2.4 Vergleichsoperatoren und ihre Syntax . . . . . . . . . . . . . . . . . 23

2.5 Ubergangstabelle und Ruckgabe des Gleichheitsoperators . . . . . . 24

2.6 Ubersicht uber die logischen Operatoren . . . . . . . . . . . . . . . . 25

2.7 Wahrheitstabelle fur die Negation . . . . . . . . . . . . . . . . . . . . 25

2.8 Wahrheitstabelle fur die Konjunktion . . . . . . . . . . . . . . . . . . 26

2.9 Wahrheitstabelle fur die Disjunktion . . . . . . . . . . . . . . . . . . 26

2.10 Wahrheitstabelle fur die Implikation . . . . . . . . . . . . . . . . . . 26

2.11 Wahrheitstabelle fur die Aquivalenz . . . . . . . . . . . . . . . . . . 26

2.12 Wandlungstabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.13 Wandlungstabelle fur Terme mit Quantoren . . . . . . . . . . . . . . 27

2.14 Parameter der Token-Tabelle . . . . . . . . . . . . . . . . . . . . . . 39

2.15 Die Register und Speichersegmente von Mulog . . . . . . . . . . . . 49

3.1 Vergleich zwischen Gehirn und Rechner . . . . . . . . . . . . . . . . 62

3.7 Beschreibung der Klasse Matrix . . . . . . . . . . . . . . . . . . . . . 73

3.12 Erlauterung der Notation . . . . . . . . . . . . . . . . . . . . . . . . 79

3.19 Die unterschiedlichen Falle der Transferfunktion . . . . . . . . . . . 92

5.1 Zuordnung der Vorhersageleistung zur Gutekennziffer . . . . . . . . 121

5.2 Auswertung der globalen Gutekennziffer . . . . . . . . . . . . . . . . 122

A.1 Definitionstabelle der Blockmarkierungen . . . . . . . . . . . . . . . 144

163

Page 171: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Abbildungsverzeichnis

1.1 Kartoffel mit Schwarzfleckigkeit . . . . . . . . . . . . . . . . . . . . . 5

2.1 Systemarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.2 Struktur des Rechnerverbundes . . . . . . . . . . . . . . . . . . . . . 11

2.3 Anbindung der graphischen Benutzeroberflache . . . . . . . . . . . . 13

2.4 Grafische Benutzeroberflache . . . . . . . . . . . . . . . . . . . . . . 14

2.5 Langs- und Querschnitt durch die Kartoffel . . . . . . . . . . . . . . 17

2.6 Tiefensuchbaum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.7 Wandlung eines arithmetischem Ausdrucks in einen Funktionsbaum 22

2.8 Aufbau des Kellerspeichers . . . . . . . . . . . . . . . . . . . . . . . 33

2.9 Aufbau des Haldenspeichers . . . . . . . . . . . . . . . . . . . . . . . 34

2.10 Aufbau des Programmspeichers . . . . . . . . . . . . . . . . . . . . . 35

2.11 Die Sektionen der Programmklasse . . . . . . . . . . . . . . . . . . . 42

2.12 Die Sektionen des OBJK-Blocks . . . . . . . . . . . . . . . . . . . . 43

2.13 Die Sektionen des PROG-Blocks . . . . . . . . . . . . . . . . . . . . 44

2.14 Struktur des Blocks fur die symbolischen Marken . . . . . . . . . . . 45

2.15 Struktur des Quellcodeblocks . . . . . . . . . . . . . . . . . . . . . . 46

2.16 Dieser Block enthalt die Informationen zum dynamischen Relozieren 47

2.17 Struktur des Blocks fur importierte Module . . . . . . . . . . . . . . 48

3.1 Aufbau eines mehrschichtigen Feedforward-Netzwerks . . . . . . . . 62

3.2 Energiefunktion mit zwei lokalen und einem globalem Minimum . . . 63

3.3 Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

3.4 Sigmoide Aktivierungsfunktion . . . . . . . . . . . . . . . . . . . . . 78

3.5 Ableitung der sigmoiden Aktivierungsfunktion . . . . . . . . . . . . . 79

3.6 Aufbau eines Adaline Netzwerks . . . . . . . . . . . . . . . . . . . . 84

3.7 Aufbau eines Madaline-Netzwerks . . . . . . . . . . . . . . . . . . . . 88

3.8 Aufbau eines BAM-Netzwerks . . . . . . . . . . . . . . . . . . . . . . 93

3.9 Aufbau eines Counterpropagation-Netzwerks . . . . . . . . . . . . . 96

5.1 Ein- und Ausgabe-Vektoren werden in ein NN eingespeist . . . . . . 120

B.1 Ein Programm im Debugger . . . . . . . . . . . . . . . . . . . . . . . 154

164

Page 172: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

Literaturverzeichnis

[1] Simon Haykin: Neural Networks - A Comprehensive Foundation,Prentice Hall, 1994, ISBN 0-02-352761-7

[2] Stephane Genaud, Arnaud Giersch, Frederic Vivien: Load-balancing scatter operations for grid computing, Parallel Compu-ting 30,2004

[3] Udo Seiffert: Artificial neural networks on massively parallel com-puter hardware, Neurocomputing 57, 2004, Seite 135-150

[4] Olivier Beaumont, Arnaud Legrand, Yves Robert: Scheduling divi-sible workloads on heterogenous platforms, Parallel Computing 29,2003, Seite 1121-1152

[5] Eric Van Wyk, Oege de Moor, Kevin Backhouse, and Paul Kwiat-kowski: Forwarding in Attribute Grammars for Modular LanguageDesign, Springer, 2002, Seite 128-142

[6] L. Corciulo, F. Giannotti, D. Pedreschi: Datalog with non-deteministic choice computes NDB-PTIME, CWI Report, Septem-ber 1993

[7] Rocco Aversa, Beniamino DI Martino, Thomas Fahringer, and Sal-vatore Venticinque: On the Evaluation of the Distributed Objectsand Mobile Agents Programming Models for a Distributed Optimi-zation Application, PARA, 2002

[8] Cormac Flanagan, Stephen N. Freund, and Shaz Qader: Thread-Modular Verification for Shared-Memory Programs, ESOP, 2002,Seite 262-277

[9] V. Blanco, J.A. Gonzalez, C. Leon, C. Rodrıguez, G. Rodrıguez, M.Printista: Predicting the performance of parallel programs, ParallelComputing 30, 2004, Seite 337-356

[10] Gwan-Hwan Hwang: An efficient algorithm for communication setgeneration of data parallel programs with block-cyclic distribution,Paralle Computing 30, 2004, Seite 473-501

[11] Michi Henning, Steve Vinoski: Advanced CORBA Programmingwith C, Addison Wesley, 1999, ISBN 0-201-37927-9

[12] Klaus Gottschalk: Wissensbasierte System zur Zustandserfassungund zur Bestimmung der Einflusse auf die Qualitat landwirt-schaftlicher Produkte, Bornimer Agrartechnische Berichte, Heft 8,Potsdam-Bornim, 1996, Seite 81-98

165

Page 173: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

LITERATURVERZEICHNIS 166

[13] Andreas Vogel, Bhaskar Vasudevan, Maira Benjamin, Ted Villalba:C Programming with CORBA Wiley, 1999, ISBN 0-471-28306-1

[14] R. Wilhelm, D Maurer: Ubersetzerbau - Theorie, Konstruktion, Ge-nerierung, Springer, 1997, 2. Auflage, ISBN 3-540-61692-6

[15] Guting, Erwing: Ubersetzerbau - Techniken, Werkzeuge, Anwen-dungen, Springer, 1999, ISBN 3-540-65389-9

[16] Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: Compilerbau - Tail1, Addison-Wesley, 1997, ISBN 3-89319-150-X

[17] Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: Compilerbau - Teil2, Addison-Wesley, 1997, ISBN 3-89319-151-8

[18] W. F. Clocksin, C. S. Mellish: Programmieren in Prolog, Springer,1990, ISBN 3-540-16384-0

[19] Dan Grigoras: Programming Models for Cluster Computing, IWCC2001, Springer-Verlag Berlin Heidelberg, 2002, Seite 26-35

[20] B. Effmert: Die physiologischen Ursachen der Schwarzfleckigkeit,Bericht 15. Kartoffeltagung, Band 15, Arbeitsgemeinschaft Kartof-felforschung, Detmold, 1993, Seite 55-62

[21] Fritz Wirsing: Erkenntnise zum Auftreten und zur Vermeidung vonSchwarzfleckigkeit, Wege zur Verbesserung der Kartoffelqualitat,ATB/KLAS-Verband (Hrsg.), Agrimedia, Bergen-Dumme, 2001,Seite 33-47

[22] Joachim Beer: Concepts, Design, and Performance Analysis of aParallel Prolog Machine - Lecture Notes in Computer Science -404, Springer, 1987, ISBN 3-540-52053-8

[23] Leon Sterling, Ehud Shapiro: The Art of Prolog, MIT Press, 2000,ISBN 0-262-69163-9

[24] Braun Feulner Malaka: Praktikum Neuronale Netze, Springer, 1997,ISBN 3-540-60030-2

[25] Rojas: Theorie der neuronalen Netze - Eine systematischeEinfuhrung, Springer, 1996, 3-540-56353-9

[26] Dan Patterson: Kunstliche neuronale Netze, Prentice Hall, 1996,ISBN 3-8272-9531-9

[27] A. Zell: Simulation neuronaler Netze, Oldenbourg, 2000, ISBN 3-486-24350-0

[28] Rudiger Brause: Neuronale Netze, B.G. Teubner Stuttgart, 1995,ISBN 3-519-12247-2

[29] Simon Haykin: Neural Networks, Prentice Hall, 1994, ISBN 0-02-352761-7

[30] J. Lunze: Kunstliche Intelligenz fur Ingenieure - Band 1: Methodi-sche Grundlagen und Softwaretechnologie, Oldenbourg, 1994, ISBN3-486-22287-2

Page 174: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

LITERATURVERZEICHNIS 167

[31] J. Lunze: Kunstliche Intelligenz fur Ingenieure - Band 2: TechnischeAnwendungen, Oldenbourg, 1994, ISBN 3-486-22306-2

[32] Norbert Hoffmann: Simulation Neuronaler Netze, Vieweg, 1991,ISBN 3-528-15140-4

[33] Eberhard Schoneburg, Nikolaus Hansen, Andreas Gawelczyk: Neu-ronale Netzwerke, Markt&Technik, 1990, ISBN 3-89090-329-0

[34] Heike Speckmann: Dem Denken abgeschaut - Neuronale Netze impraktischen Einsatz, Facetten, 1996, ISBN 3-528-06681-4

[35] Hubert B. Keller: Maschinelle Intelligenz - Grundlagen, Lernver-fahren, Bausteine intelligenter Systeme, Vieweg, 2000, ISBN 3-528-05489-1

[36] L. J. Landau, J. G. Taylor: Concepts for Neural Networks, Springer,1997, ISBN 3-540-76163-2

[37] Wolfgang Lindenmair, Franz Kranzinger,Ingeborg Nagl-Kranzinger, Rolf Reimer: Arbeitshefte Informatik -Neuronale Netze, Klett, 1999, ISBN 3-12-717762-3

[38] Philippe De Wilde: Neural Network Models, Springer, 1997, ISBN3-540-76129-2

[39] Thomas Fritsch: Neuronale Netze in Planung und Optimierung vonmobilen Kommunikationssystemen, Verlag Dr. Kovac, 1996, ISBN3-86064-352-5

[40] Rolf Peters: Qualitatskartoffeln erzeugen - Beschadigungen vermei-den AID, 1999, ISBN 3-89661-907-1

[41] Rolf Peters, Anton Specht: Beschadigungen an der Kartoffel ver-meiden AID, 1994

[42] Alfred Aeppli: Einfluß von Sorte, Erntetermin und Standort aufdie Blauempfindlichkeit der Kartoffeln sowie Beziehungen zwisch-ne Blaufleckigkeit und Knollenrespiration Dissertation Eidgenossi-schen Technischen Hochschule Zurich, 1979

[43] Herv´e Gallaire and Kacl Minker: Logic and Data Bases, PlenumPress, 1977, ISBN 0-306-40060-X

[44] David R. Butenhof: Programming with POSIX Threads, Addison-Wesley, 1997, ISBN 0-201-63392-2

[45] Ehud Shapiro: Concurrent Prolog - Volume 1, MIT Press, 1988,ISBN 0-262-19266-7

[46] Ehud Shapiro: Concurrent Prolog - Volume 2, MIT Press, 1988,ISBN 0-262-19267-5

[47] Jeffrey D. Ullman: Principles of database and knowledge base sy-stems, Computer Science Press, 1988, ISBN 0-7167-8158-11

[48] B. Putz: Derzeitiger Wissensstand zu Blau- und Schwarzfleckigkeitbzw. Beschadigungen, Kartoffelbau 7 (46), 1995

Page 175: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

LITERATURVERZEICHNIS 168

[49] N. U. Haase: Schwarzfleckigkeit - Schnellmethoden im Vergleich,Kartoffelbau 3 (51), 2000

[50] Mary Miller: Gentransfer und Schwarzfleckigkeit, Kartoffelbau 6(47), 1996

[51] F. Maykuß: Schwarzfleckigkeit in Knollen vermeiden, Kartoffelbau8 (43), 1992

[52] A. Boumann: Beschadigungen der Kartoffeln, Kartoffelbau 6 (46),1995

[53] Barbara Horneburg, F. Wirsing: Zur Schwarzfleckigkeitsneigung derKartoffelknolle, Kartoffelbau 7 (46), 1995

[54] Eberhard Leppack: Zur Schwarzfleckigkeit von Kartoffelknollen,Kartoffelbau 6 (46), 1995

[55] Eberhard Leppack: Weniger innere Verfarbungen der Kartoffeldurch Aufwarmen, Kartoffelbau 1 (46), 1995

[56] Michael Hanus: Curry - An Integrated Functional Logic Language,http://www.informatik.uni-kiel.de/ mh/curry/report.html, 2002

[57] Friedrich Wilhelm Schroer: The GENTLE Compiler ConstructionSystem, R. Oldenbourg Verlag, 1997, ISBN 3-486-24703-4

[58] P. D. Terry: Compilers & Compiler Generators, InternationalThomson Computer Press, 1997, ISBN 1-85032-298-8

[59] Herbert Georg Mayer: Parallel Execution Enabled by Refined Sour-ce Analysis: Cost and Benefits in a Supercompiler R. OldenbourgVerlag, 1996, ISBN 3-486-24076-5

[60] Ismail Salih, Stanley H. Smith, Derong Liu: Synthesis approach forbidirectionao associative memories based on the perceptron trainingalgorithmen, Neurocomputing 35, 2000, Seite 137-148

[61] Tony A. Plate: Randomly connected sigma-pi neurons can formassociator networks, Comput. Neural Systems 11, 2000, Seite 321-332

[62] G. J. Molema, J. J. Klooster, B. R. Verwijs, M. M. W. B. Henriks,H. Breteler: Effect of impact body shape on subcutaneous tissuediscolouration in potato tubers Journal of Agricultural Science 45,1997, Seite 407-421

[63] G. J. Molema, J. J. Klooster, B. R. Verwijs, M. M. W. B. Hen-riks, H. Breteler: Effect of repetitive impacts on subcutaneous tis-sue discolouration in potato tubers Journal of Agricultural Science45, 1997, Seite 187-200

[64] Arno Puder, Kay Romer: Mico is CORBA, dpunkt.verlag, 1998,ISBN 3-932588-11-8

[65] Michael Seeboerger-Weichselbaum: XML bhv, 1999, ISBN 3-8387-1018-2

[66] Cay S. Horstmann, Gary Cornell: Core Java Band 2 - Expertenwis-sen, 2000, ISBN 3-8272-9566-1

Page 176: Eine logische Applikationssprache zur parallelen ...€¦ · Eine logische Applikationssprache zur parallelen Verarbeitung von Neuronalen Netzen - Anwendung

LITERATURVERZEICHNIS 169

[67] Sascha Richter, Klaus Gottschalk: Schwarzfleckigkeit von KartoffelnLandtechnik - Agricultural Engineering, 2000, Seite 222-223

[68] S. Slavnic (Richter), K. Gottschalk, E. Konrad, G. Wormanns: Pre-dicition of the occuring of blackspots on potatoes, Proceedings ofthe AgEng Oslo 98, Part I, Oslo 98, Seite 528-529

[69] B. Herold, I. Truppel, G. Siering, M. Geyer: Pressure MeasuringSphere PMS-60 to evaluate damage source for potatoes during har-vest and handling, KTBL, Soltau/Germany, 1995, Seite 17-25

[70] U. Kastens P. Pfahler (Eds.) Compiler Construction CC’ 92, Sprin-ger Verlag, 1992, ISBN 3-540-55984-1

[71] Peter A. Fritzson: Compiler Construction CC’ 94, Springer Verlag,1994, ISBN 3-540-57877-3

[72] N. Wirth: Compilerbau, B.G. Teubner, 1986, ISBN 3-519-32338-9

[73] H. Waldschmidt: Optimierungsfragen im Compilerbau, Carl HanserVerlag, 1974, ISBN 3-446-11895-0

[74] M. Baumgartner, E. R. Keller, F. Schwendmann: Versuch einerCharakterisierung von Blaustabilitat und Blaulabilitat bei der Kar-toffel durch Knolleneigenschaften, Potato Research 26, 1983, Seite17-30

[75] A. Aeppli, E. R. Keller: Beziehung zwischen Respiration und Blauf-leckigkeit von Kartoffeln nach einer mechanischen Behandlung derKnollen, Potato Research 23, 1980, Seite 25-32

[76] S. Richter, K. Gottschalk, E. Konrad: Wissensbasiertes System zurEinflußanalyse auf die Schwarzfleckigkeit von Kartoffeln, 1999, Pro-ceedings of the 14th Triennial Conference of the European Associa-tion for Potato Research, Seite 529-530

[77] S. Richter, K. Gottschalk, E. Konrad: A cluster of workstations tocalculate variations of neural networks, 2000, AgEng Warwick 2000

[78] G. Gebresenbet: Satellite steered co-ordinated agricultural goodstransport to attenuate environmental impact, 2000, AgEng War-wick 2000

[79] S. Slavnic (Richter), K. Gottschalk, E. Konrad: Online-Datenbankfur die Qualitatssicherung von Agrarprodukten am Beispiel der Kar-toffel, Referate der 19. GIL-Tagung, Gesellschaft fur Informatik inLand-, Forst-, und Ernahrungswissenschaft, 1998, Seite 162-165