Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Regelbasierte Programmierung mit XL

Kopien: 1
Struktur-Funktions-Modelle von Pflanzen - Sommersemester Winfried Kurth Universität Göttingen, Lehrstuhl Computergrafik und Ökologische Informatik.

Ähnliche Präsentationen


Präsentation zum Thema: "Regelbasierte Programmierung mit XL"—  Präsentation transkript:

1 Regelbasierte Programmierung mit XL
- Sommersemester Winfried Kurth Reinhard Hemmerling BTU Cottbus, Lehrstuhl Grafische Systeme

2

3 Die Sprache XL „eXtended L-system language“

4 imperativ objektorientiert regelbasiert Java

5 imperativ objektorientiert regelbasiert Java XL

6 Der Begriff "Programmierparadigma"
grundlegende Denkweise, beispielorientierte Vorstellung

7 Paradigma: "Beschreibt eine Menge von Theorien, Standards und Methoden, die gemeinsam einen Weg repräsentieren, Wissen zu organisieren" Thomas Kuhn 1970: The Structure of Scientific Revolutions

8 Paradigma: "Beschreibt eine Menge von Theorien, Standards und Methoden, die gemeinsam einen Weg repräsentieren, Wissen zu organisieren" Thomas Kuhn 1970: The Structure of Scientific Revolutions Paradigmenwechsel: schwierig. Revolution im Denken!

9 wurde aufgegriffen von Robert Floyd 1978:
Turing Award Lecture "The Paradigms of Programming" Robert W. Floyd ( )

10 Welche Paradigmen werden nahegelegt
durch Probleme... ... bei der Simulation natürlicher Objekte ? ... in der Grafik ?

11 Ökologie:

12 Ökologie: Organismen

13 Ökologie: Organismen Aufbau beschreiben

14 Ökologie: Verhalten Organismen (unter bestimmten Bedingungen)
Aufbau beschreiben

15 Ökologie: Verhalten Organismen (unter bestimmten Bedingungen)
Aufbau beschreiben Gesetzmäßigkeiten (Regeln) bestimmen

16 Ökologie: Verhalten Organismen Prozesse (unter bestimmten Bedingungen)
Aufbau beschreiben Prozesse Gesetzmäßigkeiten (Regeln) bestimmen

17 Ökologie: Verhalten Organismen Prozesse (unter bestimmten Bedingungen)
Aufbau beschreiben Prozesse Gesetzmäßigkeiten (Regeln) bestimmen Ablauf berechnen

18 Grafisches System:

19 Grafisches System: Objekte

20 Grafisches System: Objekte (mit Attributen)

21 Grafisches System: Objekte (mit Attributen) regelmäßige Strukturen

22 Grafisches System: Objekte regelmäßige Strukturen Prozesse
(mit Attributen) regelmäßige Strukturen Prozesse

23 Einige wichtige Programmierparadigmen
für numerische Simulation von Prozessen: imperatives Paradigma

24 Einige wichtige Programmierparadigmen
für numerische Simulation von Prozessen: imperatives Paradigma (auch: von-Neumann-Paradigma, Kontrollfluss-Paradigma) John von Neumann ( )

25 imperativ: "Befehls-Programmierung" Computer = ?

26 "Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablen-werten.

27 "Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablen-werten (diese Veränderungen können Seiteneffekte haben).

28 "Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablen-werten. Programm = ?

29 "Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablen-werten. Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen).

30 "Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablen-werten. Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen). Programmfindung: ?

31 "Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablen-werten. Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen). Programmfindung: Elementare Einzelschritte finden und in passende, flexible Reihenfolge bringen.

32 "Befehls-Programmierung"
Computer = Maschine zur Veränderung von Variablen-werten. Programm = Plan für den Berechnungsprozess mit Angabe der Befehle und des Kontrollflusses (z.B. Schleifen). Programmfindung: Elementare Einzelschritte finden und in passende, flexible Reihenfolge bringen. Programmiersprachen, die dieses Paradigma unterstützen: Fortran, Pascal, C, ..., Teile von Java, ...

33 Beispiel: x = 0; while (x < 100) x = x + 1; Inhalt der Variable x wird verändert Schleife legt Kontrollfluss fest Beachte: "=" steht hier nicht für math. Gleichheit, sondern für Zuweisung (prozesshaft)!

34 Nachteil des imperativen Paradigmas:
simultane, parallele Zuweisung wird nicht unterstützt

35 Nachteil des imperativen Paradigmas:
simultane, parallele Zuweisung wird nicht unterstützt Beispiel (Floyd 1978): Räuber-Beute-System, beschrieben durch Rneu = f(R, B), Bneu = g(R, B) Anfängerfehler beim Programmieren: for (i = ... ) { R = f(R, B); B = g(R, B); }

36 Nachteil des imperativen Paradigmas:
simultane, parallele Zuweisung wird nicht unterstützt Beispiel (Floyd 1978): Räuber-Beute-System, beschrieben durch Rneu = f(R, B), Bneu = g(R, B) Anfängerfehler beim Programmieren: for (i = ... ) { R = f(R, B); B = g(R, B); }

37 Programmiersprachen, die das imperative Paradigma unterstützen:
Fortran, Pascal, C, ..., Teile von Java, Befehlssprache der Turtle-Geometrie

38 Turtle: zeichnende Schildkröte, die auf Befehle hört

39 Turtle: zeichnende Schildkröte, die auf Befehle hört

40 F0

41 F0

42 F0 RU(90)

43 F0 RU(90)

44 F0 RU(90) F0

45 F0 RU(90) F0

46 F0 RU(90) F0 RU(90) LMul(0.5) F0

47 F0 RU(90) F0 RU(90) LMul(0.5) F0

48 Wiederholung von Abschnitten der Zeichenkette
möglich mit "for" z.B. for ((1:3)) ( A B C ) liefert A B C A B C A B C was ist das Ergebnis der Interpretation von L(10) for ((1:6)) ( F0 RU(90) LMul(0.8) ) ?

49 L(10) for ((1:6)) ( F0 RU(90) LMul(0.8) )

50 anderes Beispiel: for ((1:20)) ( for ((1:36))
( F0 RU(165) F0 RU(165) ) RU(270) )

51 anderes Beispiel: for ((1:20)) ( for ((1:36))
( F0 RU(165) F0 RU(165) ) RU(270) )

52 Turtle geometry ("Schildkrötengeometrie")
befehlsgesteuertes, lokales Navigieren im 2D- oder 3D-Raum (Abelson & diSessa 1982; vgl. Programmier-sprache "LOGO") "Turtle": Zeichen- oder Konstruktionsgerät (virtuell) - speichert (grafische und nicht-grafische) Informationen - mit einem Zustandsspeicher assoziiert (wichtig für Verzweigungen) - aktueller Zustand der Turtle enthält z.B. Information über aktuelle Liniendicke, Schrittweite, Farbe, weitere Eigenschaften des als nächstes zu konstruierenden Objekts

53 Befehle (Auswahl): F0 "Forward", mit Konstruktion eines Elements (Linienstück, Segment, Gebäudetrakt...), benutzt wird die aktuelle Schrittweite für die Länge (die Null steht für "keine explizite Längenfestlegung") M0 forward ohne Konstruktion (Move-Befehl) L(x) ändere die aktuelle Schrittweite (Länge) zu x LAdd(x) inkrementiere die aktuelle Schrittweite um x LMul(x) multipliziere die aktuelle Schrittweite mit x D(x), DAdd(x), DMul(x) analog für die aktuelle Dicke

54 Erweiterung auf 3D-Grafik:
Turtle-Rotationen um 3 Achsen

55 Erweiterung auf 3D-Grafik: Turtle-Rotationen um 3 Achsen
left head up

56 Erweiterung auf 3D-Grafik:
Turtle-Rotationen um 3 Achsen RL RH RU

57 3D-Befehle: RU(45) Drehung der turtle um die "up"-Achse um 45° RL(...), RH(...) analog um "left" und "head"-Achse up-, left- und head-Achse bilden ein rechtwinkliges, räumliches Koordinatensystem, das von der turtle mitgeführt wird RV(x) Rotation "nach unten" mit durch x vorgegebener Stärke RG Rotation ganz nach unten (Richtung (0, 0, -1))

58 was ist das Ergebnis der Interpretation der Zeichenkette
Beispiel: L(100) D(3) RU(-90) F(50) RU(90) M0 RU(90) D(10) F0 F0 D(3) RU(90) F0 F0 RU(90) F(150) RU(90) F(140) RU(90) M(30) F(30) M(30) F(30) RU(120) M0 Sphere(15) erzeugt was ist das Ergebnis der Interpretation der Zeichenkette L(10) F0 RU(45) F0 RU(45) LMul(0.5) F0 M0 F0 ?

59 Verzweigungen: Realisierung mit Speicher-Befehlen [ lege aktuellen Zustand auf Speicher ("Ablage", Stack) ] nimm obersten Zustand von der Ablage und mache diesen zum aktuellen Zustand (damit: Ende der Verzweigung)

60 Verzweigungen: Realisierung mit Speicher-Befehlen [ lege aktuellen Zustand auf Speicher ("Ablage", Stack) ] nimm obersten Zustand von der Ablage und mache diesen zum aktuellen Zustand (damit: Ende der Verzweigung) F0 [ RU(-20) F0 ] RU(20) DMul(2) F0

61 zurück zum Beispiel: Objekte (mit Attributen)

62 Objektorientiertes Paradigma
Computer = Umgebung für virtuelle Objekte Programm = Auflistung von (Objekt-) Klassen, d.h. allgemeiner Spezifikationen von Objekten, die zur Laufzeit des Programms (ggf. mehrfach) erschaffen und wieder vernichtet werden können und miteinander kommunizieren. Programmfindung: Spezifikation der Klassen (Daten und Methoden), die Objektstruktur und -verhalten festlegen. Programmiersprachen: Smalltalk, Simula, C++, Java, ...

63 Klassen (Auto) mit Daten (marke, plaetze) und Methoden (anzeigen)
Beispiel: public class Auto extends Fahrzeug { public String marke; public int plaetze; public void anzeigen() System.out.println("Das Auto ist ein " + marke); System.out.println("Es hat " + plaetze + "Sitze."); } typisch: Klassen (Auto) mit Daten (marke, plaetze) und Methoden (anzeigen)

64 Vererbung von Attributen und Methoden von Ober- an Unterklassen
Beispiel: public class Auto extends Fahrzeug { public String marke; public int plaetze; public void anzeigen() System.out.println("Das Auto ist ein " + marke); System.out.println("Es hat " + plaetze + "Sitze."); } typisch: Klassen (Auto) mit Daten (marke, plaetze) und Methoden (anzeigen)

65 regelmäßige Strukturen

66 Regelbasiertes Paradigma
Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist.

67 Regelbasiertes Paradigma
Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist. Arbeitsprozess: Such- und Anwendungsprozess. matching: Suchen einer passenden Regel, rewriting: Anwendung der Regel, um die Struktur umzuschreiben.

68 Regelbasiertes Paradigma
Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist. Arbeitsprozess: Such- und Anwendungsprozess. matching: Suchen einer passenden Regel, rewriting: Anwendung der Regel, um die Struktur umzuschreiben. Programm = Menge von Transformationsregeln

69 Regelbasiertes Paradigma
Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist. Arbeitsprozess: Such- und Anwendungsprozess. matching: Suchen einer passenden Regel, rewriting: Anwendung der Regel, um die Struktur umzuschreiben. Programm = Menge von Transformationsregeln Programmfindung: Spezifikation der Regeln

70 Regelbasiertes Paradigma
Computer = Transformationsmaschine für Strukturen Es gibt eine aktuelle Struktur, die solange transformiert wird, wie dies möglich ist. Arbeitsprozess: Such- und Anwendungsprozess. matching: Suchen einer passenden Regel, rewriting: Anwendung der Regel, um die Struktur umzuschreiben. Programm = Menge von Transformationsregeln Programmfindung: Spezifikation der Regeln Programmiersprachen: L-System-Sprachen, KI-Sprachen, Prolog, ...

71 Beispiel: L-Systeme (Lindenmayer-Systeme)
Regelsysteme zur Ersetzung von Zeichenketten

72 Beispiel: L-Systeme (Lindenmayer-Systeme)
Regelsysteme zur Ersetzung von Zeichenketten in jedem Ableitungsschritt parallele Ersetzung aller Zeichen, auf die eine Regel anwendbar ist von A. Lindenmayer (Botaniker) 1968 zur Modellierung des Wachstums von fadenförmigen Algen eingeführt Aristid Lindenmayer ( )

73 L-Systeme mathematisch:
Ein L-System ist ein Tripel (, , R); darin ist: eine Menge von Zeichen, das Alphabet, eine Zeichenkette mit Zeichen aus , das Startwort (auch "Axiom"), R eine Menge von Regeln der Form Zeichen  Zeichenkette; darin sind das Zeichen auf der linken Regelseite und die Zeichenkette aus  entnommen.

74 zum Vergleich: Chomsky-Grammatik für natürliche Sprache: Satz  S P O S  Max S  Tina P  lernt O  Englisch O  Französisch mögliche Ableitungen: Satz Satz S P O S P O Max lernt Französisch Tina lernt Englisch

75 Ein Ableitungsschritt (rewriting) einer Zeichenkette besteht aus der Ersetzung aller ihrer Zeichen, die in linken Regelseiten vorkommen, durch die entsprechenden rechten Regelseiten. Man vereinbart: Zeichen, auf die keine Regeln anwendbar sind, werden unverändert übernommen.

76 Ein Ableitungsschritt (rewriting) einer Zeichenkette besteht aus der Ersetzung aller ihrer Zeichen, die in linken Regelseiten vorkommen, durch die entsprechenden rechten Regelseiten. Man vereinbart: Zeichen, auf die keine Regeln anwendbar sind, werden unverändert übernommen. Ergebnis: Ableitungskette von Zeichenketten, die sich durch wiederholte Anwendung des rewriting-Vorgangs aus dem Startwort ergeben.  1  2  3  ....

77 Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB

78 Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB A

79 Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB B

80 Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB AB
Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB AB parallele Ersetzung

81 Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB BAB

82 Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB BAB

83 Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB ABBAB

84 Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB Ableitungskette: A  B  AB  BAB  ABBAB  BABABBAB  ABBABBABABBAB  BABABBABABBABBABABBAB  ...

85 Beispiel: Alphabet {A, B}, Startwort A Regelmenge: A  B B  AB Ableitungskette: A  B  AB  BAB  ABBAB  BABABBAB  ABBABBABABBAB  BABABBABABBABBABABBAB  ... wie lang ist die n-te Zeichenkette in dieser Ableitung?

86 was für die Modellierung von grafischen und biologischen Strukturen noch fehlt:
eine geometrische Interpretation

87 eine geometrische Interpretation
was für die Modellierung von grafischen und biologischen Strukturen noch fehlt: eine geometrische Interpretation Füge also hinzu: eine Abbildung, die jeder Zeichenkette eine Teilmenge des 3-dimensionalen Raumes zuordnet dann: "interpretierte" L-System-Abarbeitung   1  2  3  ....    S1 S2 S S1, S2, S3, ... können als Entwicklungsstufen eines Objekts, einer Szene oder eines Organismus interpretiert werden.

88 Für die Interpretation der Zeichenketten:
Turtle-Geometrie Der Turtle-Befehlsvorrat wird zu einer Untermenge der Zeichenmenge des L-Systems. Symbole, die nicht Turtle-Befehle sind, werden von der Turtle ignoriert.

89 Für die Interpretation der Zeichenketten:
Turtle-Geometrie Der Turtle-Befehlsvorrat wird zu einer Untermenge der Zeichenmenge des L-Systems. Symbole, die nicht Turtle-Befehle sind, werden von der Turtle ignoriert.  Verbindung mit dem imperativen Paradigma

90 Beispiel: Regeln A  F0 [ RU(45) B ] A ; B  F0 B ; Startwort A
(A und B werden normalerweise nicht geometrisch interpretiert.) Interpretation durch Turtle-Geometrie

91 was für eine Struktur liefert das L-System
A  [ LMul(0.25) RU(-45) F0 ] F0 B; B  [ LMul(0.25) RU(45) F0 ] F0 A; mit Startwort L(10) A ?

92 was für eine Struktur liefert das L-System
A  [ LMul(0.25) RU(-45) F0 ] F0 B; B  [ LMul(0.25) RU(45) F0 ] F0 A; mit Startwort L(10) A ? äquivalente Regel: A  [ LMul(0.25) RU(-45) F0 ] F0 RH(180) A;

93 Flächenfüllende Kurve:
weiteres Beispiel: Flächenfüllende Kurve: Start ==> L(10) RU(-45) X RU(-45) F(1) RU(-45) X; X ==> X F0 X RU(-45) F(1) RU(-45) X F0 X

94 Flächenfüllende Kurve:
Start ==> L(10) RU(-45) X RU(-45) F(1) RU(-45) X; X ==> X F0 X RU(-45) F(1) RU(-45) X F0 X

95 Flächenfüllende Kurve:
Start ==> L(10) RU(-45) X RU(-45) F(1) RU(-45) X; X ==> X F0 X RU(-45) F(1) RU(-45) X F0 X indisches Kolam-Muster „Anklets of Krishna“

96 Beispiel für ein Fraktal: Koch'sche Kurve
Start  RU(90) F(10); F(x)  F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3)

97

98

99

100

101

102 .

103 Verzweigungsbeispiel: Ergebnis nach 7 Schritten:
F0  F0 [ RU(25.7) F0 ] F0 [ RU(-25.7) F0 ] F0 ; Ergebnis nach 7 Schritten: (Startwort L(10) F0)

104 Verzweigung, alternierende Zweigstellung und Verkürzung:
  L(10) F0 A ; A  LMul(0.5) [ RU(90) F0 ] F0 RH(180) A ;

105 welche Struktur liefert
  F(10) A ; A  [ RU(-60) F(6) RH(180) A Sphere(3) ] [ RU(40) F(10) RH(180) A Sphere(3) ]; Sphere  Z; ? (F(n) liefert Linie der vorgegebenen Länge n, Sphere(n) eine Kugel mit Radius n)

106 Stochastische L-Systeme
Verwendung von Pseudozufallszahlen Beispiel: deterministisch Start ==> L(100) D(5) A; A ==> F0 LMul(0.7) DMul(0.7) [ RU(50) A ] [ RU(-10) A ];

107 Stochastische L-Systeme
Verwendung von Pseudozufallszahlen Beispiel: deterministisch stochastisch Start ==> L(100) D(5) A; A ==> F0 LMul(0.7) DMul(0.7) [ RU(50) A ] [ RU(-10) A ]; Start ==> L(100) D(5) A; A ==> F0 LMul(0.7) DMul(0.7) if (probability(0.5)) ( [ RU(50) A ] [ RU(-10) A ] ) else ( [ RU(-50) A ] [ RU(10) A ] );

108 Beispiel: Fichtenmodell in 3D
mit L-System erzeugt

109 Erzeugung einer Zufallsverteilung in der Ebene:
Axiom ==> D(0.5) for ((1:300)) ( [ Translate(random(0, 100), random(0, 100), 0) F(random(5, 30)) ] ); Ansicht von oben schräg von der Seite

110 Erweiterung des Symbol-Konzepts:
Lasse reellwertige Parameter nicht nur bei Turtle-Kommandos wie "RU(45)" und "F(3)" zu, sondern bei allen Zeichen parametrische L-Systeme beliebig lange, endliche Parameterlisten Parameter werden bei Regel-Matching mit Werten belegt Beispiel: Regel A(x, y)  F(7*x+10) B(y/2) vorliegendes Zeichen z.B.: A(2, 6) nach der Regelanwendung: F(24) B(3) Parameter können in Bedingungen abgeprüft werden (logische Bedingungen mit Java-Syntax): A(x, y) (x >= 17 && y != 0)  ....

111 Welche Struktur wird von folgendem L-System erzeugt?
  [ RU(90) M(1) RU(90) A(1) ] A(1); A(n)  F(n) RU(90) A(n+1);

112 Welche Struktur wird von folgendem L-System erzeugt?
  [ RU(90) M(1) RU(90) A(1) ] A(1); A(n)  F(n) RU(90) A(n+1); Variante: in der zweiten Regel "RU(90)" etwa durch "RU(92)" ersetzen.

113 Interpretationsregeln
Einbau einer weiteren Regelanwendung unmittelbar vor der grafischen Interpretation (ohne Wirkung auf die nächste Generation) Interpretationsregel-Anwendung Turtle-Interpretation Beispiel: public void run() { [ Axiom ==> A; A ==> Scale(0.3333) for (i:(-1:1)) for (j:(-1:1)) if ((i+1)*(j+1) != 1) ( [ Translate(i, j, 0) A ] ); ] applyInterpretation(); } public void interpret() [ A ==> Box;

114 (a) (b) (c) public void run() { [ Axiom ==> A;
{ [ Axiom ==> A; A ==> Scale(0.3333) for (i:(-1:1)) for (j:(-1:1)) if ((i+1)*(j+1) != 1) ( [ Translate(i, j, 0) A ] ); ] applyInterpretation(); } public void interpret() [ A ==> Box; (a) (b) (c) A ==> Box(0.1, 0.5, 0.1) Translate(0.1, 0.25, 0) Sphere(0.2); A ==> Sphere(0.5);

115 was wird durch dieses Beispiel erzeugt?
public void run() { [ Axiom ==> [ A(0, 0.5) D(0.7) F(60) ] A(0, 6) F(100); A(t, speed) ==> A(t+1, speed); ] applyInterpretation(); } public void interpret() A(t, speed) ==> RU(speed*t);

116 Angabe des Kontexts in (* .... *) Beispiel:
Kontextsensitivität Abfrage eines Kontexts, der vorhanden sein muss, damit eine Regel anwendbar ist Angabe des Kontexts in (* .... *) Beispiel: module A(int age); module B(super.length, super.color) extends F(length, 3, color); Axiom ==> A(0); A(t), (t < 5) ==> B(10, 2) A(t+1); A(t), (t == 5) ==> B(10, 4); B(s, 2) (* B(r, 4) *) ==> B(s, 4); B(s, 4) ==> B(s, 3) [ RH(random(0, 360)) RU(30) F(30, 1, 14) ];

117 Der Schritt zu relationalen Wachstumsgrammatiken
Nachteil von L-Systemen: • in L-Systemen mit Verzweigungen (über Turtle-Kommandos) nur 2 mögliche Relationen zwischen Objekten: "direkter Nachfolger" und "Verzweigung" Erweiterungen: • Zulassen weiterer Relationstypen (beliebig wählbar) • Zulassen von Zyklen ( Graph-Grammatik)

118 ebenfalls regelbasierter Mechanismus:
Graph-Grammatiken

119 ebenfalls regelbasierter Mechanismus:
Graph-Grammatiken Regel:

120 ebenfalls regelbasierter Mechanismus:
Graph-Grammatiken Regel: Anwendung:

121 RELATIONALE WACHSTUMSGRAMMATIKEN
(RGG: Relational Growth Grammars, parallele Graph-Gramm.) Aufbau einer Regel einer RGG:

122 Kanten-Markierungen repräsentieren verschiedene Arten
von Relationen: • ist Nachbar von • enthält • trägt • codiert (genetisch) • ist gepaart mit • (...) auch möglich: Darstellung von multiskalierten Strukturen Standard-Kantentypen: successor ( > oder blank), branch ( +> oder erste Kante bei Klammern [...]), refinement ( /> )

123 RGG als Verallgemeinerungen von L-Systemen:
Zeichenketten entsprechen speziellen Graphen In Textform schreiben wir allgemeine (selbstdefinierte) Kanten als -kantensorte-> Kanten des speziellen Typs "Nachfolger" werden meist als Leerzeichen geschrieben (statt -successor->)

124 Sonderformen von RGG-Regeln:
Aktualisierungsregeln (Regelpfeil ::> ): es werden nur Parameter verändert Beispiel: s:Sphere ::> s[radius] += increment; Instanzierungsregeln: einzelne Zeichen werden in Substrukturen aufgelöst, ohne Einfluss auf den nächsten Entwicklungsschritt (Regel muss dann direkt in der Moduldeklaration stehen) Beispiel: module S(float value) extends Null ==> { float x = value;} Sphere(0.1).(setShader(new RGBAShader(1,1-x,1-x)));

125 Programmiersprache in die Regeln (für uns: Java)
• Grammatik modifiziert direkt den Graphen, Umweg über String-Codierung entfällt (bzw. wird nur noch für Regel-Input gebraucht) außerdem Nachteil der Turtle-Interpretation von L-Systemen: Segmente sind nur Zylinder, keine Objekte im Sinne der OOP  Erweiterungen: • Knoten des Graphen können beliebige Objekte sein (auch Grafikobjekte) • Einbettung von Code einer höheren, imperativen oder objektorientierten Programmiersprache in die Regeln (für uns: Java)

126 Zusammenfassung: Programmierparadigmen

127 Zusammenfassung: Programmierparadigmen ● imperativ

128 Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie

129 Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie ● objektorientiert

130 Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie ● objektorientiert ● regelbasiert

131 Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie ● objektorientiert ● regelbasiert - L-Systeme - Graph-Grammatiken

132 Zusammenfassung: Programmierparadigmen ● imperativ - Veränderung von Variablen - Turtle-Geometrie ● objektorientiert ● regelbasiert - L-Systeme - Graph-Grammatiken ● weitere: funktional; nebenläufig; chemisch ...

133 Synthese: Die Sprache XL
„eXtended L-system language“ Programmiersprache, die parallele Graph-Grammatiken (RGG) einfach verfügbar macht

134 imperativ objektorientiert regelbasiert Java XL

135 Sprachspezifikation: Kniemeyer (2007/08)
Die Sprache XL Sprachspezifikation: Kniemeyer (2007/08) (Dissertation erscheint in Kürze)  Erweiterung von Java  erlaubt zugleich Spezifikation von L-Systemen und RGG in intuitiv verständlicher Regelschreibweise prozedurale Blöcke, ähnlich Java: { ... } regelorientierte Blöcke (RGG-Teil): [ ... ]

136 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte

137 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte Beispiel: XL-Programm für die Koch‘sche Kurve public void derivation() [ Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3); ]

138 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte Beispiel: XL-Programm für die Koch‘sche Kurve public void derivation() [ Axiom ==> RU(90) F(10); F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3); ] Knoten des Graphen Kanten (Typ „Nachfolger“)

139 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte Spezielle Knoten: Geometrieobjekte Box, Sphere, Cylinder, Cone, Frustum, Parallelogram...

140 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte Spezielle Knoten: Geometrieobjekte Box, Sphere, Cylinder, Cone, Frustum, Parallelogram... Zugriff auf Properties über Parameterliste (Konstruktor): Box(x, y, z) oder mit setter-Methoden: Box(...).(setColor(0x007700))

141 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte Spezielle Knoten: Geometrieobjekte Box, Sphere, Cylinder, Cone, Frustum, Parallelogram... Transformationsknoten Translate(x, y, z), Scale(cx, cy, cz), Scale(c), Rotate(a, b, c), RU(a), RL(a), RH(a), RV(c), RG, ...

142 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte Spezielle Knoten: Geometrieobjekte Box, Sphere, Cylinder, Cone, Frustum, Parallelogram... Transformationsknoten Translate(x, y, z), Scale(cx, cy, cz), Scale(c), Rotate(a, b, c), RU(a), RL(a), RH(a), RV(c), RG, ... Lichtquellen PointLight, DirectionalLight, SpotLight, AmbientLight

143 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen

144 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen Beispiel: Regeln für den stochastischen Baum Start ==> L(100) D(5) A; A ==> F0 LMul(0.7) DMul(0.7) if (probability(0.5)) ( [ RU(50) A ] [ RU(-10) A ] ) else ( [ RU(-50) A ] [ RU(10) A ] );

145 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen ● parallele Regelanwendung

146 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen ● parallele Regelanwendung ● parallele Ausführung von Zuweisungen möglich

147 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen ● parallele Regelanwendung ● parallele Ausführung von Zuweisungen möglich nochmal das Beispiel von Floyd: Räuber-Beute-System, beschrieben durch Rneu = f(R, B), Bneu = g(R, B) in XL korrekt: R := f(R, B); B := g(R, B);

148 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen ● parallele Regelanwendung ● parallele Ausführung von Zuweisungen möglich ● Operatorüberladung (z.B. „+“ für Zahlen wie für Vektoren)

149 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen ● parallele Regelanwendung ● parallele Ausführung von Zuweisungen möglich ● Operatorüberladung (z.B. „+“ für Zahlen wie für Vektoren) ● mengenwertige Ausdrücke (genauer: Producer statt Mengen)

150 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen ● parallele Regelanwendung ● parallele Ausführung von Zuweisungen möglich ● Operatorüberladung (z.B. „+“ für Zahlen wie für Vektoren) ● mengenwertige Ausdrücke (genauer: Producer statt Mengen) ● Graph-Abfragen (queries) zur Analyse der aktuellen Struktur

151 Beispiel für Graph-query:
Binärer Baum, Wachstum soll nur erfolgen, wenn genügender Abstand zu anderen F-Objekten Axiom ==> F(100) [ RU(-30) A(70) ] RU(30) A(100); a:A(s) ==> if ( forall(distance(a, (* F *)) > 60) ) ( RH(180) F(s) [ RU(-30) A(70) ] RU(30) A(100) ) ohne die if-Bedingung mit der if-Bedingung

152 Eigenschaften der Sprache XL:
● Knoten der Graphen sind Java-Objekte, auch Geometrie-Objekte ● Regeln in Blöcken [...] organisierbar, Steuerung der Anwendung durch Kontrollstrukturen ● parallele Regelanwendung ● parallele Ausführung von Zuweisungen möglich ● Operatorüberladung (z.B. „+“ für Zahlen wie für Vektoren) ● mengenwertige Ausdrücke (genauer: Producer statt Mengen) ● Graph-Abfragen (queries) zur Analyse der aktuellen Struktur ● aggregierende Operatoren (z.B. „sum“, „mean“, „forall“, „selectWhereMin“)

153 Anfragen (queries) in den erzeugten Graphen
Möglichkeit der Verbindung von Struktur und Funktion Beispiel: suche alle Blätter, die Nachfolger des Knotens c sind, und summiere deren Fläche

154 Anfragen (queries) in den erzeugten Graphen
Möglichkeit der Verbindung von Struktur und Funktion Beispiel: suche alle Blätter, die Nachfolger des Knotens c sind, und summiere deren Fläche transitive Hüllenbildung Aggregationsoperator

155 Anfragen (queries) in den erzeugten Graphen
Möglichkeit der Verbindung von Struktur und Funktion Beispiel: suche alle Blätter, die Nachfolger des Knotens c sind, und summiere deren Fläche Ergebnis kann übergeben werden an prozedurale Berechnung transitive Hüllenbildung Aggregationsoperator

156 Query in einem Pflanzen- / Tier-Modell:
p:Plant, (* a:Animal, (distance(a,p) < p[radius]) *)

157 Query in einem Pflanzen- / Tier-Modell:
p:Plant, (* a:Animal, (distance(a,p) < p[radius]) *) sucht alle Tiere innerhalb des Radius von p

158 was ist von der in XL erzeugten Graph-Struktur sichtbar?
alle Geometrieknoten, die von der Wurzel (Zeichen: ^) des Graphen über genau einen Pfad, der nur aus "successor"- und "branch"-Kanten besteht, erreichbar sind. Erzwingen, dass ein Objekt auf jeden Fall sichtbar ist: ==>> ^ Objekt

159 Ein XL-Compiler wird zur Verfügung gestellt von der freien Software GroIMP
dort auch Link auf Download-Seite

160 Interaktive 3D-Plattform GroIMP (Growth-grammar related Interactive Modelling Platform) mit XL-Compiler • GroIMP ist ein Open Source-Projekt

161 GroIMP ist eine Kombination von:
- Graph-Grammatiken- (XL-) Interpreter - Entwicklungsumgebung für XL - 3D-Modeller - 3D-Renderer (mehrere Varianten) - 2D-Graphen-Visualisierer Editor für 3D-Objekte und Attribute Texturerzeugungswerkzeug X3D- (VRML-) Viewer (in Arbeit)

162 Beispiel eines mit GroIMP realisierten Pflanzenmodells (Gerste):

163 Anwendungsbeispiel: Modellierung von Parklandschaften
(Rogge & Moschner 2007, für Stiftung Branitzer Park, Cottbus) mit GroIMP generierte Erle in VRML-Welt

164 virtuelle Landschaft (mit Buchen-Fichten-Mischbestand)

165

166 Ergebnisse aus Architektur-Seminar mit XL:
Liang 2007

167

168 Jarchow 2007

169


Herunterladen ppt "Regelbasierte Programmierung mit XL"

Ähnliche Präsentationen


Google-Anzeigen