Sie sind auf Seite 1von 17

KI Sprachen und Tools

Autor: Erhard Dinhobl

KI Sprachen und Tools

Index

KI Sprachen und Tools .................................................................................... 1 Kurzfassung ............................................................................................... 3 Einleitung .................................................................................................. 3 Die Geschichte der Programmiersprachen und deren Umgebungen..................... 3 Sprachen Entwicklung wissensbasierter Systeme .......................................... 5 Prolog .................................................................................................... 5 Lisp ....................................................................................................... 8 Software und Projekte ................................................................................. 9 YVE ....................................................................................................... 9 orisabase................................................................................................ 9 Brainware............................................................................................. 10 CAS Computer Aided Security ............................................................... 10 Prolog-Interpreter SWI-Prolog ................................................................. 10 UfaSoft Lisp .......................................................................................... 11 Projekt: Regelbasierte Generierung musikalischer Strukturen in der KI-Sprache Prolog .................................................................................................. 13 PureData eine grafische Programmiersprache zur Erzeugung von Klang ...... 14 Verwandte Arbeiten................................................................................... 14 Zusammenfassung .................................................................................... 15 Literatur .................................................................................................. 15

Erhard Dinhobl

Seite 2 von 16

KI Sprachen und Tools

Kurzfassung
Der eine oder andere wird vielleicht schon einmal mit Programmiersprachen der Knstlichen Intelligenz etwas ausprobiert oder gearbeitet haben. Und derjenige wird wissen, dass es sich hierbei nicht unbedingt um die herkmmliche prozedurale Programmierung handelt. Vor allem die deklerative Programmierung bietet Aspekte, die durch das Implementieren des ersten kleinen Programms gleich zu mehr Ideen fhrt. Man beschreibt hier Verstndnisdomnen mit Hilfe von Regeln, welche dann von Interpreter ausgewertet werden. Daten werden hier direkt im Sourcecode geschrieben und werden auch dementsprechend gehandhabt. Somit ist es mglich Sourcecode whrend der Laufzeit zu erzeugen. Die Maschine kann also gewonnenes Wissen erlernen und somit sich selbst erweitern. Diesen Aspekt nutzt man bei der Programmierung von Expertensystemen (auch Intelligente Systeme, XPS) welche maschinell lernen sollen.

Einleitung
Diese Arbeit soll einen berblick ber Programmiersprachen und im speziellen dann noch ber Sprachen der KI geben. Wichtig war mir dabei die praktische Bentzung dieser Sprachen und ich wollte das jonglieren mit Formeln und Rechnungen vermeiden. Es soll somit auch eine kleine Basis und Einfhrung in die KIProgrammierung mit Prolog und Lisp geben, um sich mit der Materie ein wenig vertraut zu machen und somit ein paar anfngliche neurale Verbindungen in seinem Gehirn zu schaffen. Zu Anfang werde ich etwas ber die Programmiersprachen im Allgemeinen erzhlen und die Fakten nennen, die man in Geschichtsbchern ber Computer normalerweise nicht hrt. Im zweiten Kapitel mchte ich ein paar Grundlagen ber die Entwicklung von Expertensystemen erklren und die KI-Programmiersprachen Prolog und Lisp mit praktischen Beispielen vorstellen. Zuletzt werde ich die Funktionen von ein paar Intelligenten Systeme am Markt kurz erklren. Da ich ein musikbegeisterter Mensch bin, mchte ich der Arbeit auch eine ganz persnliche Note geben und Projekte, die Musik und KI verbinden, prsentieren.

Die Geschichte der Programmiersprachen und deren Umgebungen


Erste Ideen der Programmierung von Rechnern kamen von Charles Babbage, welcher 1823 die Difference Machine und 11 Jahre spter die Analytical Engine entwickelte. Diese Maschinen wurden nie fertig gestellt. Babbage kannte noch keine Programmiersprachen sondern dachte in simplen Maschineninstruktionen. Die erste auf Basis des Binrsystems funktionierende Rechenmaschine war 1941 der Z3 von Konrad Zuse. Danach entwickelte er die erste Programmiersprache der Welt fr Computer, genannt Plankalkl. 1948 verffentlichte Claude Shannon seine Theorie ber Kommunikation. Diese sollte Ingenieuren zeigen wie man Daten zwischen Computern optimal bertragen kann. Darin definiert Shannon auch das Bit als Grundeinheit von Daten und der Datenverarbeitung. 1952 beendete John Backus die Entwicklung eine der ersten wirklich eingesetzten Programmiersprachen genannt Speedcoding fr den IBM 701 Rechner. Mitte der 50er begann man definitiv in die Computerentwicklung zu investieren. So entsprang aus der Zusammenarbeit von Bob Patrick von General Motors Research und Owen Mock von der North American Aviation ein Betriebssystem fr den IBM 704. Das hatte den Namen GM-NAA I/O System. Es stellte batch-processing zur

Erhard Dinhobl

Seite 3 von 16

KI Sprachen und Tools Verfgung und hatte eine bessere Prozessverarbeitung. Das hatte den Vorteil, dass mehr Jobs in der gleichen Zeit verarbeitet werden konnten als bisher, das aber ohne Mehrkosten. Dieses Betriebssystem wurde in ungefhr 40 Installationen verwendet. 1956 begann man am MIT (Messecheauseats Institute of Technology) die ersten Experimente mit Direkt-Eingaben in einen Computer via des Keyboards. Dies ist vergleichbar mit dem Eingabe-Cursor den wir alle kennen. Doug Ross schrieb im Februar 1957 das erste Memo das durch eine Tastatur eingegeben wurde. Diese Experimente erhielten daraufhin von vielen Seiten Untersttzung. Kurz darauf verffentlichte Sperry Rand, eine Frau, den kommerziellen Compiler A-0 fr den Univac. (Zur Info: Das ist ein Computer von 13 Tonnen und kann 1.905 Rechenoperationen pro Sekunde durchfhren, was 2,25 Mhz entspricht). Danach folgte die Sprache Math-Matic. Die Arbeiten am A-0 und dann dem A-2 Compiler fhrten zur Entwicklung von Flow-Matic. Diese war die erste Programmiersprache, die im kaufmnnischen Bereich eingesetzt wurde. Sie hatte Sprachelemente die dem Englischen hnlich waren. 1957 wurde auch Fortran entwickelt, welche als erste hhere Programmiersprache gilt. Diese hatte erstmals das Schleifenkonzept implementiert. 1959 wurde ERMA, die Electronic Recording Method of Accounting entwickelt, welche es ermglichte auf Schecks abgedruckte Kontennummern, welche mit magnetischer Tinte geschrieben wurden, auszulesen. Ein Jahr spter wurde von einem Team zusammengesetzt aus Spezialisten von Computererzeugern und dem Pentagon Cobol entwickelt. Basis hierfr waren MathMatic und Flow-Matic. Die Common Business Orientated Language wurde speziell fr Anwendungen in der Wirtschaft entwickelt. Sie zeichnet sich durch einfache Lesbarkeit und groe Maschinenunabhngigkeit aus. Ein Mitglied des Teams, Howard Bromberg, hatte bereits whrend der Entwicklung dem Projekt einen Grabstein ausgestellt. Jedoch knnen wir heute sagen, dass Cobol bis jetzt berlebt hat. 1960 wurde LISP, die erste Programmiersprache fr Anwendungen der KI von John McCarthy entwickelt, welche ich aber noch genauer behandeln werde. 1962, das Geburtsjahr der Computerspiele. MIT Studenten programmierten SpaceWar. Ein Display zeigte einfache Grafiken, welche Raumschiffe darstellen sollten. Die beiden Spieler feuerten auf das gegnerische Schiff. Gesteuert wurde durch einfache Versionen von heutigen Joysticks. Kurz darauf wurde der ASCII American Standard Code for Information Interchange definiert. Dieser sollte den Datenaustausch zwischen Computern von verschiedenen Herstellern vereinheitlichen. 1964 war das Geburtsjahr von Basic. Es wurde als einfach zu lernende Programmiersprache fr Studenten am Darthmouth College entwickelt. Danach erfolgte eine sehr rasche Entwicklung von Programmiersprachen. 1965 kamen erste Anstze fr die objektorientierte Programmierung mit Simula auf. Man konnte damit Daten und Anweisungen in so genannte Objects gruppieren. Jedes dieser wurde als eigenes System simuliert. 1969 wurde UNIX von Kenneth Thompson und Dennis Ritchie in den AT&T Laboratories entwickelt. Dieses neue Betriebssystem enthielt viele Features wie timesharing und file management, welche bereits von Multics bekannt waren. Multics war ein Betriebssystem der 60er, welches die ersten Anstze von Multiuser und Multitasking hatten. UNIX erfuhr schnell einen weiten und sicheren Status bei Ingenieuren und Wissenschaftern. Ritchie und Thompson entwickelten Anfang der 70er auch die Programmiersprache B aus ALGOL60 und BCPP. 1972 erfolgte dann von Ritchie die Fortsetzung zur Sprache C. In diesem Jahr stellte auch Nolan Bushnell das Videogame Pong und die Firma Atari video games vor. Auch Prolog, welche ich noch behandeln werde, Smalltalk, AnsiCobol und Pascal wurden entwickelt. In den 80ern folgten die Entwicklungen von MS-DOS und Lotus 1-2-3 und somit die Grndungen von Microsoft und Lotus Development Corp. Weiters wurde ADA83 und Common Lisp entwickelt und C++ zur vorherrschenden objektorientierten Sprache in

Erhard Dinhobl

Seite 4 von 16

KI Sprachen und Tools der Industrie. In den 90ern kamen dann schlielich die Programmiersprachen, die die meisten kennen werden, wie Java, Visual Basic und die erst vor kurzem erschienenen C#, J#, alle weiteren .Net Technologien und auch Ruby heraus.

Sprachen

Entwicklung wissensbasierter Systeme

Eines der wichtigsten Eigenschaften unseres Geistes ist die Fhigkeit der Abstraktion. Der Mensch abstrahiert in einem stndig wiederkehrenden Prozess Erfahrungswerte zu formalen Ausdrcken einer hheren Ebene. Genau diese Fhigkeit erlaubt es uns Details von komplexen Domnen zu charakterisieren und diese dann als Ganzes zu verstehen. Somit kann man sagen, dass man ein intelligentes System entwickeln mchte, welches maschinell lernt. Das versucht man mit Hilfe von knstlichen Neuronalen Netzen zu realisieren. Um diesen natrlichen Sachverhalt wiederum zu formalisieren, hat Allen Newell 1982 die Architektur wissensbasierter bzw. intelligenter Systeme in 2 Ebenen eingeteilt. Erstens die Symbolebene, welche sich mit der Problemstellung befasst und somit die Formalismen fr die Lsung des Sachverhalts bereitstellt. Als zweites die Wissensebene, welche das Wissen, also die Daten des Programms und die Verwendung des Wissens enthlt. Und genau diese Trennung zwischen Steuerung und Wissen ermglicht es dem Programmierer mehr auf die Effizienz, Einfachheit, Optimierung und der gleichen, des Programms einzugehen. Weiters wird auch immer wieder versucht, mglichst kosteneffektiv Informationssysteme zu entwickeln. Das heit man versucht zum Beispiel Codes wieder zu verwenden. Deshalb werden so genannte Expertensystemshells hergestellt, welche Lsungen fr ein Problem zur Verfgung stellen. Im gnstigsten Fall muss man dann bei der Entwicklung eines neuen Systems nur die Wissensbasis neu aufbauen. Da diese Shells nur sehr unflexibel gegenber weiteren Anforderungen an das System sind, werden so genannte Shell-Bauksten erzeugt, welche die Probleme in Teilkomponenten lsen. Diese sind austauschbar und erweiterbar. Nun zur Praxis. Womit programmiert man ein intelligentes System? Wie alles in der Informatik ist auch die KI einer stndigen Weiterentwicklung und Erweiterung unterzogen. Anfangs waren die am hufigsten verwendeten Programmiersprachen Prolog und Lisp. Aber aufgrund von Druck auf die Softwareindustrie durch Entwicklungsstandards und Bedingungen fhrte dies zur Entwicklung von Expertensystemen in anderen Sprachen wie Smalltalk, C, C++ oder Java. Jedoch kann man auch heute Prolog und Lisp vom Programmiersprachenmarkt der KI nicht wegdenken und sie werden sowohl in der Industrie als auch im akademischen Bereich eingesetzt. Auch sind praktische Kenntnisse in diesen Sprachen fr KI-Programmierer unerlsslich. Kommen wir zu

Prolog
Diese Sprache gehrt zu den deklerativen und ist die Abkrzung fr Programing with logic . Sie wurde um 1972 von Alan Colmerauer und der Groupe d'Intelligence Artificielle de Luminy entwickelt. Mitte der 70er kam der erste lauffhige Kompiler fr Prolog heraus. Dieser wurde von David Warren entwickelt. In der KI wird nicht nur versucht, menschliche Intelligenz zu simulieren, sondern auch menschliche Sprache am Computer zu analysieren, zu verstehen und zu simulieren. In Zukunft wird, vermute ich, auch die Kommunikation mit dem Computer auf natrlicher Sprache basieren und somit auch passieren. Prolog eignet sich dafr sehr gut, mit Hilfe von linguistischen Theorien natrlichsprachliche Kommunikation in die Praxis umzusetzen. Weitere nennenswerte Anwendungsgebiete von Prolog sind: Expertensysteme, Wissensverarbeitung, Spiele, symbolische

Erhard Dinhobl

Seite 5 von 16

KI Sprachen und Tools Mathematik, Prototyping, Constraint-Programmierung und Deduktive Datenbanken (Unterschiede zu relationalen DB s sind: sie sind abstrakter, somit muss sich der Benutzer um Joins, Selektionen und Projektionen keine Gedanken machen, sie sind mchtiger und Daten die mit Daten berechnet werden, gelten ebenfalls als Daten). Prolog beruht auf der Prdikatenlogik der Mathematik. (Zur Info: Aussagen lassen sich in der Prdikatenlogik mithilfe von Junktoren und Quantoren verknpfen und definieren). Somit ist eine oft gebruchliche Technik nicht anwendbar. Nmlich: x = x + 1, also das Inkrement von Variablen. Denn eine in der Prdikatenlogik gebundene Variable kann KEIN zweites Mal an einen anderen Wert gebunden werden. Gehen wir zum ersten Beispiel, welches KEINE Hello-World -Anwendung ist, wie in vielen Programmiersprachen. Sondern es wird eine Datenbasis angelegt und danach Anfragen an den Interpreter gestellt. Dieser versucht eine Antwort yes oder no mithilfe der gespeicherten Daten abzuleiten. Ist diese positiv kann man die Aussage als logisch ableitbar aus den vorhandenen Daten betrachten. Das Beispiel:

auto(polo). auto(jazz). auto(civic). motorrad(valkyrie). firma(honda). firma(vw). hersteller(vw, polo). hersteller(honda, civic). hersteller(honda, jazz). hersteller(honda, valkyrie).
Jetzt stellen wir Anfragen an den Interpreter:

?- auto(polo). yes ?- auto(golf). no


Tja Golf ist in den Daten nicht gespeichert, deshalb erhalten wir no . Weiters ist in Prolog jeder Token der mit einem Grossbuchstaben beginnt eine Variable. z.B.:

X=honda;
In Prolog kann man auch Regeln mithilfe des :- -Regeloperators definieren. Wir definieren jetzt eine Regel, welche berprft ob ein Motorrad und ein Auto vom selben Hersteller ist:

selberhersteller(X,Y) :hersteller(H,X), hersteller(H,Y).


Hier kann man schon einen weiteren Operator erkennen. Nmlich das und welches in der Prdikatenlogik ^ ist und hier in Prolog ein Beistrich , .. Weitere Operatoren sind ; fr v (Oder) :- fr <- (Implikation, der Regeloperator umgedreht, also wenn, dann) und not fr (Nicht). Stellen wir jetzt die Anfrage:

Erhard Dinhobl

Seite 6 von 16

KI Sprachen und Tools

?- selberhersteller(valkyrie,jazz). yes ?- selberhersteller(X,civic). X=civic X=jazz X=valkyrie


Whrend in den prozeduralen Programmiersprachen Rekursionen oft nur eine Vereinfachung iterativer Problemlsungen bietet und Listen ein Nebenprodukt sind, ist z.B. ersteres die einzige Mglichkeit in Prolog Schleifen zu implementieren. Somit ist auch der Verlust des Inkrement einer Zahl x = x +1 schmerzfrei zu ertragen, denn dies wird ja hauptschlich in Schleifen verwendet. Beispiel:

mann(adam). mann(tobias). mann(frank). frau(eva). frau(daniela). frau(ulrike). vater(adam,tobias). vater(tobias,frank). vater(tobias,ulrike). mutter(eva,tobias). mutter(daniela,frank). mutter(daniela,ulrike). elternteil(X,Y) :mutter(X,Y); vater(X,Y). vorfahr(X,Z) :elternteil(X,Z). vorfahr(X,Z) :elternteil(X,Y), vorfahr(Y,Z).
Listen sind ebenfalls ein Hauptbestandteil von Prolog. Beispiele:

erzeugungen(vw,auto,[polo,golf]). erzeugungen(suzuki,motorrad,[vanvan,bandit]).
Falls jemand Interesse hat, die Beispiele wurden mit dem Open-Source PrologInterpreter SWI-Prolog erhltlich auf http://www.swi-prolog.org ausprogrammiert. Kommen wir zu

Erhard Dinhobl

Seite 7 von 16

KI Sprachen und Tools

Lisp
Wie schon erwhnt, wurde Lisp in den 60ern von John McCarthy entwickelt. Er lebt noch und ist Dozent an der Uni Stanford. In den 70ern kamen Lisp-Maschinen auf. Dies waren Computer die Lisp-Programme direkt in ihrer Hardware ausfhren konnten. Sie wurden am MIT im AI Laboratorium realisiert. Damals mit dabei war Richard Stallman, Grnder des GNU-Projektes. Kurz darauf wuchsen die Firmen LMI und Symbolics, welche die LISP-Maschinen und deren Software weiterentwickelten und vermarkteten aus dem Boden. Jedoch entstand in diesem Duo ein Konkurrenzkampf, in dem Symbolics die Fhrung bernahm. Dies war aber nur deshalb mglich, solange die DARPA den Ankauf von LISP-Maschinen im Rahmen des Star-Wars Projektes untersttzte. Die DARPA, frher ARPA, Defense Advanced Research Projects Agency, die Entwickler des ARPANET, ist eine Agentur des Pentagons, welche Hightech-Projekte fr das Militr durchfhrt. Whrend dieser Zeit entwickelten Xerox und TI ihre eigenen Maschinen und stellten diese auf den Markt. Jedoch verdrngten die aufkommenden Unix-basierenden und dadurch viel billigeren Sun Workstations vergleichbare Modelle von anderen Herstellern vom Markt. Whrend der Weiterentwicklung von LISP entstanden nicht auch aufgrund von stndiger Standardisierung viele Dialekte. Historisch nennenswerte sind MACLISP, INTERLISP sowie das Standard LISP von A.C. Hearn. Der heutige Standard heit Common Lisp und ist durch Einfluss der Lisp-Maschinen und deren Sprachstandards entstanden. Diese Programmiersprache gehrt zu den prozeduralen Sprachen, wie C++ oder Visual Basic. Somit wird ein Algorithmus programmiert. Also nicht wie in deklerativen Sprachen (vgl. Prolog) wo Aussagen geschrieben werden, welche Zusammenhnge in einer Aktionsdomne definieren. Um es aber ganz genau zu sagen ist LISP im Gegensatz zu den sonst bekannten prozeduralen Sprachen funktional. D.h. Syntax und Semantik sind aus der mathematischen Theorie rekursiver Funktionen abgeleitet. Genau diese Art der Programmierung in Kombination mit der reichen Anzahl an vorhandenen Werkzeugen fr die Erstellung von symbolischen Datenstrukturen macht LISP so beliebt. Die Hauptanwendungsgebiete sind die Entwicklung von KI-Werkzeugen, die Erstellung und der Test von Prototypen und deren Systeme und die Implementierung von Suchalgorithmen und Interpretern. LISP durchluft heute einen mehr als 40jhrigen Entwicklungsprozess. Nun zur Sprache selbst. Grundlegende syntaktische Einheiten sind die LISP-Atome. Das sind eine Verkettungen von alphanumerische Symbolen und Sonderzeichen. Beispiele: 14.5782, 1000, ein-bindestrich-wort, *eine-markierung*. Weiters gibt es Listen, welche eine Folge von Atomen sind: (1 3 5 7), (vw(polo, golf), honda(civi, jazz)). Wie jede Programmiersprache kann auch LISP Rechenoperationen durchfhren. Nur gehe ich deshalb darauf ein, weil es sich nicht um die Infixnotation 4 + 5 , also den Operator in der Mitte stehend, die herkmmliche Schreibweise handelt, sondern es arbeitet mit der Prfixnotation. Zum Beispiel + 4 5 . (Zur Info: Es gibt noch die Postfixnotation: 4 5 + ). Um nun jetzt komplexere Ausdrcke zu Formulieren, wie (4 + 5) * (5 + 2) bedarf es einfach nur ein wenig Umdenken zu (* (+ 4 5) (+ 5 2)) . Lisp verlangt Klammern am Anfang und am Ende. Stellen wir solche einfachen Ausdrcke dem Interpreter, so werden wir das Ergebnis bekommen, in unserem Fall 63 . Lisp versucht hier also den Ausdruck (x y z) als (f x y) zu interpretieren, also als Funktion mit den Parametern x und y. Somit darf das aber nicht mit den vorhin genannten Listen verwechselt werden, welche ja von der gleichen Form sind. Was ja eigentlich durchaus mglich wre. Um diese Verwechslung zu vermeiden stellt Lisp hierfr die quote Funktion zur Verfgung, welche man vor eine Liste schreibt, damit diese

Erhard Dinhobl

Seite 8 von 16

KI Sprachen und Tools nicht ausgewertet wird. Zum Beispiel: (a b c) und als Ergebnis erhalten wir (a b c). Wrden wir nur (a b c) dem Interpreter vorwerfen, so wrden wir Error: invalid function a erhalten, vorausgesetzt es gibt keine Funktion a. Jetzt programmieren wir eine Funktion, die den Absolutwert also den Betrag einer Zahl x liefert:

(defun absolut-val (x) (cond ((< x 0) (* x -1)) ((>= x 0) x)))


Und dann der Aufruf:

> (absolut-val -2) 2


Unter Lisp gibt es dann noch eine Besonderheit, nmlich: ( ) die leere Liste, welche sowohl als Liste als auch als Atom angesehen werden. Es trgt dem Namen nil. Wer Interesse an der LISP-Programmierung hat, findet einen Lisp-Interpreter unter http://www.ufasoft.com/lisp. Er ist sehr sehr instabil und kostet trotzdem Geld. Ich verwendete die Demoversion! Weitere nennenswerte Sprachen der KI sind Haskell, ML (Abk. MetaLanguage) bzw. deren Dialekte, Gdel, Mercury und SNOBOL auch bekannt unter ICON. Kommen wir nun zu bereits vorhandener

Software und Projekte

Die am Markt vorhandenen Expertensysteme sind zum grten Teil fr Produktion, Analyse und Warenwirtschaft, Videokameraberwachung (Computer Aided Security kurz CAS) und Simulation Neuronaler Netze entwickelt. Als Beispiele:

YVE
Your Variant Engineer ist ein wissensbasiertes System welches Unternehmenswissen, Berechnungs- und Konstruktionsregeln sowie Konstruktionselemente speichert und auf die man zugreifen kann und verwenden kann. Dabei werden Erfahrungswerte, Formeln, Vorschriften und Tabellen erfasst und in Workflows umgesetzt. Die Workflows sind die Formalisierungen der Prozesse die zu einem Ergebnis fhren; wie fertig konstruiertes Produkt oder hnliches. Den Preis konnte ich nicht eruieren!

orisabase
ist eine objektorientierte und regelbasierte Entwicklungsumgebung. Ihre Strke besteht darin, dass die Verwaltung von objektorientierten Daten und die Daten selbst sowie die Entwicklung in einer Umgebung vereinheitlicht werden. Es wird bei Analyse-, Diagnose-, Simulations- und Optimierungsentwicklungen verwendet. Diese Software gibt es seit 1996, ist rund 200-mal installiert worden und hat einen Preis von 2500 Euro zzgl. Mwst., Speicherbedarf 50 MB. Diesen objektorientierten Ansatz der Wissensreprsentation nennt man Framesystem. Dabei werden Situationen durch ein Gerst, ein Frame, beschrieben. Dieses hat die blichen, mglichen Eigenschaften der Situation und ist somit eine abstrakte Beschreibung dieser. Durch zuweisen der Eigenschaften entsteht daraus eine Instanz, also eine spezielle Situation.

Erhard Dinhobl

Seite 9 von 16

KI Sprachen und Tools

Brainware
ist ein Tool zur Entwicklung von Software auf Basis von knstlicher Neuronaler Netze. Es wird fr kommerzielle, technische und wissenschaftliche Problemlsungen herangezogen und kann auch in Ergnzung zur Fuzzy-Logic eingesetzt werden. Anwendungsgebiete sind Einkauf, Medizin, Sicherheitswesen, Bilderdatenverarbeitung, Mustererkennung und Steuer- und Regelungstechnik. Diese Software wurde 7-mal installiert, ist seit 1995 auf dem Markt, hat einen Preis von 3000 Euro zzgl. Mwst. und bentigt 10 MB an Festplattenspeicher.

CAS

Computer Aided Security

Diese Software dient zur Auswertung von Videodaten, welche von Videokameras kommen, die in Sicherheitsrelevanten Bereichen installiert sind. Darunter fallen vor allem Bankfoyers, Botschaften, Flure, Museen usw. Es bewertet gezielte statische Vernderungen im Sichtfeld. Es ist also kein Bewegungsmelder, da sich ja Personen dort bewegen knnen und auch somit am Sinn vorbei gehen wrde. Es sollte sich daher bei Ereignissen wie Diebstahl, Zurcklassen von Gegenstnden, Vandalismus oder bernachtungsgsten melden. Es sollte auch bei Sabotage an den Kameras wie Verdrehen, Abdecken, Blenden oder Defokussieren bellen. Diese Software ist seit 2003 am Markt.

Prolog-Interpreter SWI-Prolog
Ich mchte hier auch den Prolog-Interpreter, mit dem ich gearbeitet habe, vorstellen. Hier der Startschirm, wo man dem Interpreter Anfragen geben kann.

Dann eine neue Datei mit File / New angelegt und es ffnet sich der normale Windowseditor:

Erhard Dinhobl

Seite 10 von 16

KI Sprachen und Tools

Das Beispielprogramm von vorhin eingetippt und den Editor geschlossen. ber File / Consult die Datei dem Interpreter zum laden gegeben und dann meine Anfragen gestellt.

Und der

UfaSoft Lisp
Interpreter. Man sieht den Dialog Terminal , welcher die Eingabemaske fr die Anfragen enthlt. Funktion eingetippt

Erhard Dinhobl

Seite 11 von 16

KI Sprachen und Tools

Und dann kann man die Anfragen an den Interpreter stellen:

Erhard Dinhobl

Seite 12 von 16

KI Sprachen und Tools

Projekt: Regelbasierte Generierung musikalischer Strukturen in der KI-Sprache Prolog


An der Universitt in Osnabrck, hat die Forschungsstelle fr Musik- und Medientechnologie in Zusammenarbeit mit dem Institut fr Computerlinguistik und Knstliche Intelligenz dieses Projekt ins Leben gerufen. Basis hierfr war das bereits vorhandene Wissen ber die KI-Forschung der Beschreibung und des Verstehens von gesprochener Sprache. Die dabei aufgestellten Abstraktionen und die Erfahrungen der Analysen semantischer und syntaktischer Strukturen wurden adaptiert und auf die Musik angewandt, da hierbei vergleichbare Phnomene anzutreffen sind. Diese somit entstandene formale Beschreibung der Musik wurde verwendet, um diese zu generieren. Dazu wurde ein System geschaffen, welches in der Lage war nach bestimmten Regeln stilistisch und musiktheoretisch akzeptable Kompositionen zu spielen. Angeregt durch das Groprojekt LILOG, wurden viele verschiedene Programme geschrieben, welche in ihrem Zusammenspiel in der Lage waren, musikalisch anhrbare Blues-Improvisationen zu erzeugen und ber MIDI abzuspielen. (Zur Info: LILOG ist ein System welches Tourismustexte ansatzweise versteht, den Inhalt reprsentieren und Fragen zum Inhalt beantworten kann) Es gibt auch weitere Regelbasen fr andere Musikstile. Zum Beispiel vierstimmige Chorle, Volkslieder und auch fr aleatorische Kompositionen, also zufllige. In diesem Vorgang der Regelbasenerzeugung wurden musiktheoretische Grundlagen fr Musikstile erfasst und in Regeln umgesetzt und implementiert. Wird ein sinnvolles Werk erzeugt, knnen weiters die Regeln als Wissensbasis fr die Musikanalyse verwendet werden. Ich habe keinen Einblick in den Source-Code, knnte mir aber einen kleinen Ansatz so vorstellen. Ein Musikstck besteht aus Rhythmus, also den Notenwerten, und Noten. Somit definieren wir Rythmusdaten: (bleiben wir beim 2/4-Takt) rythm(1/2, [1/2]). rythm(1/2, [1/4, 1/4]]). rythm(1/4, [1/8, 1/8]). rythm(1/2, [1/8, 1/8, 1/8, 1/8]). Und wir definieren Klangdaten, also Noten: sound(1/2, [p, g0, g0, g0]). sound(1/2, [dis0]). sound(1/2, [p, f0, f0, f0]). sound(1/2, [d0]). Somit knnen wir hier folgendes Ableiten:

Wer es kennt: Motiv aus Beethoven s Sinfonie Nr. 5 Hier wre dann die einfachste Variation dieses Motivs zum Beispiel die halbe Note durch 2 viertel zu substituieren. In Hinblick auf die Zukunft wollen die Mitarbeiter des Projekts nicht nur Erfahrungen sammeln um eine Software zur automatischen Musikanalyse zu entwickeln sondern auch um Kenntnisse auf die computerlinguistische Forschung anzuwenden.

Erhard Dinhobl

Seite 13 von 16

KI Sprachen und Tools

PureData Klang

eine grafische Programmiersprache zur Erzeugung von

PureData ist eine grafische Programmiersprache und wurde 1990 von Miller Puckett entwickelt. Sie wird fast ausschlielich im Bereich der Lehre und Kunst verwendet und dient zur Erzeugung interaktiver Computermusik. Ein implementiertes Programm, ein so genannter Patch, besteht aus Objekten, Datenstrmen, Messages, Subpatches und Arrays. Aufgrund von verndernden Werten und mit den Objekten definierten Regeln wird ein bestimmter, variierender Klang erzeugt. PureData ist Open-Source. Wer Interesse hat: http://www.puredata.org Ein Beispielpatch:

Die Musik die dabei entsteht ist ganz bestimmt kein 100%iger Hrgenuss, jedoch interessant.

Verwandte Arbeiten

In diesem Kapitel mchte ich noch ein paar empfehlenswerte Arbeiten bzw. Bcher angeben, welche sich ebenfalls mit diesem Thema befassen. Natrlich konnte und kann ich durch dieses kleine Projekt keine Programmiersprachen vollstndig beschreiben und erklren, jedoch denke ich, bildet sie ein kleines Fundament um mit der Materie der Implementierung von XPS vertraut zu werden. Verwandte Arbeiten: Paradigms of Artificial Intelligence Programming , Peter Norvig, Morgan Kaufmann Publishers Inc., 2001 Knstliche Intelligenz Strategien zur Lsung komplexer Probleme , George F. Luger, Addison-Wesley, 2001 Logic Programming with Prolog , Max Bramer, Springer Verlag, 2005

Erhard Dinhobl

Seite 14 von 16

KI Sprachen und Tools Prolog Programming for Artifical Intelligence , Ivan Bratko, Addison-Wesley, 2000 Practical Common Lisp , Peter Seibel, Apress, 2005

Zusammenfassung
Als Schlusswort mchte ich die Punkte herausnehmen, welche ich als wichtig erachte, zu wissen. Die wren: Die erste Programmiersprache der Welt war Plankalkl, 1941 von Konrad Zuse. 1948 definiert Shannon das Bit. Eine Frau, Sperry Rand entwickelte 1957 die erste Programmiersprache fr die Wirtschaft. Die KIProgrammierung kam in den 60ern auf und teilt die Anwendungen in 2 Ebenen, Symbolebene und Wissensebene. Die wichtigsten Sprachen sind Lisp und Prolog. Wobei letzteres vom programmiertechnischen Aspekt her, sicher interessanter ist. John McCarthy entwickelte Lisp und Alan Colmerauer Prolog. Letztere eignet sich sehr gut fr Sprachausgabe und Analyse. Die Expertensysteme auf dem Markt sind fr Produktion, Analyse und Warenwirtschaft, CAS und Simulation Neuronaler Netze.

Literatur

Systeme und Sprachen der KI www.aaai.org/AITopics/html/sys.html Geschichte der Programmiersprachen www.computerhistory.org/timeline/timeline.php?timeline_category=sl Fachgruppe "Deklerative Sprachen" der Gesellschaft fr Informatik eV wdp.first.gmd.de:8080/geske/fg111/ Lisp Dialekte/Geschichte/Code Samples/Lispsysteme/ www.aviduratas.de/lisp/ Prolog Codesamples/Aufbau www.uni-hildesheim.de/~chlehn/p_ueb/probuch.pdf www.ifi.unizh.ch/req/courses/logische_programmierung/ ws03/documents/Prolog_Tutorial.pdf Prolog Historische Entwicklung www-i2.informatik.rwth-aachen.de/ Teaching/Course/LP/2003/Folien/folien03-3.pdf http://kti.ms.mff.cuni.cz/~bartak/prolog/contents.html Trme von Hanoi in Lisp www.apl.jhu.edu/~hall/lisp/Hanoi.lisp Programmierparadigmen/deskriptive Programmierung www.informatik.uni-bonn.de/III/lehre/ vorlesungen/Informatik_I/WS01/Folien/endversion/E.pdf www.cs.uni-bonn.de/III/lehre/vorlesungen/ DeskriptiveProgrammierung/SS00/Druckvorlagen/pdf/dsp21.pdf Bcher: Programmieren Neuronaler Netze eine Turbo Pascal Toolbox , Hilger Kruse, Roland Mangold, Bernhard Mechler, Oliver Pengler, Addison-Wesley, 1991

Erhard Dinhobl

Seite 15 von 16

KI Sprachen und Tools Robotor und common sense , Duelen Gerard, McCarthy John, Heidelberg: Spektrum d. Wiss., 1986 Brainware www.softguide.de/prog_z/pz_0232.htm Software, Open Source Projekte www.aaai.org/AITopics/html/soft.html Projekt: Regelbasierte Generierung musikalischer Strukturen in der Sprache Prolog bird.musik.uni-osnabrueck.de/cgibin/as_web.exe?projects.ask+B+Regelbasierte Software-marktplatz.de (Liste von Expertensystemen wie Brainware, Con4pro, Help2Know, Statistica Neural Networks und deren Hersteller) www.software-marktplatz.de/45000000-software-kuenstliche-intelligenzexpertensysteme-wissensbasierte-systeme.html Weitere Software und Interessantes pd-graz.mur.at (PureData Projekt: Miller Puckette s grafische Programmiersprache zur Erzeugung von Klang, Grazer Community) www.ufasoft.com/lisp/ (UfaSoft Common Lisp Interpreter) pakmed.net (PakNeuro: neurologisches Assessment Tool)

Erhard Dinhobl

Seite 16 von 16

This document was created with Win2PDF available at http://www.win2pdf.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only.

Das könnte Ihnen auch gefallen