Übung 2 zu Verteilte und Parallele Programmierung: Zelluläre Automaten (Teil 1) (PD Stefan Bosse) [4.2024]

Übung 2: Zelluläre Automaten (Teil 1)

Ziel

Mit dieser Übung soll eine erste Einarbeitung mit Lua in ein bekanntes paralleles und verteiltes Berechnungsmodell und Architektur stattfinden: Dem Zellulären Automaten.

In dieser Übung wird ein ZA durch sequentielle Berechnung simuliert. In folgenden Übungen wird die Simulation durch Partitionierung der Simulationswelt parallelisiert.

Hinweise

Der Transpiler besteht im wesentliche aus einem Lua Parser (https://github.com/fstirlitz/luaparse) der Esprima AST Bäume erzeugt (https://github.com/jquery/esprima), und schließlich mit Escodegen (https://github.com/estools/escodegen) in JavasScript Code umgewandelt wird. Der JavaScript Code wird schließlich ausgeführt.

Einführung

Architektur und Grundprinzip

#loops
Zellulärer Automat als Netzwerk aus einfachen kommunizierenden Berechnungseinheiten

CALUA

Simulationsemodell

-- 1. Leere Zellenklasse erzeugen
local cell=CA.Cell({
  name = S,
  state = { var = ε, .. }
})
-- 2. Eigene Methoden hinzufügen
function cell:initialize (x,y)
  ..
end
function cell:before (x,y)
  ..
end
function cell:activity (x,y)
  ..
end
function cell:after (x,y)
  ..

end
function cell:color (x,y)
  return N
end
model = {
  rows : N,
  columns : N,
  size : N,
  neighbors : N,
  scheduler : S,
  palette : { S, S,  ..},
  cell : cell,
  data : { .. }
}

Sensoren und Aktoren

if model.neighbors == 4 then
    -- Neumann
    self.neighbors = {
      left    = {-1,0},
      right   = {1,0},
      bottom  = {0,1},
      top     = {0,-1}
    }
elseif model.neighbors == 8 then
    -- Moore
    self.neighbors = {
      left        = {-1,0},
      right       = {1,0},
      bottom      = {0,1},
      top         = {0,-1},
      topleft     = {-1,-1},
      topright    = {1,-1},
      bottomleft  = {-1,1},
      bottomright = {1,1}
    }
end
┌──────────┬──────────┬──────────┬────▶ x
│          │          │          │       
│ topleft  │   top    │ topright │       
│          │          │          │       
├──────────┼──────────┼──────────┤       
│          │          │          │       
│ left     │  pixel   │ right    │       
│          │          │          │       
├──────────┼──────────┼──────────┤       
│          │          │          │       
│ bottom-  │  bottom  │ bottom-  │       
│ left     │          │ right    │       
├──────────┴──────────┴──────────┘       
│                                        
│                                        
▼  y                                     

Simulation

Ein einfacher ZA

  1. Das Modell erstellen
ZA Modell definieren (1. Zelle, 2. Welt)

 ▸ 
 ✗ 
 ≡ 

ZA Modell definieren (2. Welt)

 ▸ 
 ✗ 
 ≡ 

  1. Einen Simulator mit dem Modell erzeugen
ZA Simulation mit 2D Grafik

 ▸ 
 ✗ 
 ≡ 

  1. Einen Simulationsschritt ausführen (oben sollte sich die ZA Welt verändern)
ZA Run

 ▸ 
 ✗ 
 ≡ 

  1. Modelle

Verschiedene Modelle (Pseudonotation) zum Ausprobieren.

Cave

state    : {open,wasOpen}
before   : wasOpen=open
acitivty : 
  surrounding = count(neighbors,wasopen==true)
  open=(wasOpen and surrounding >= A) or surrounding >= B 
initialize : open=random()>density

Maze

state    : {alive,wasAlive,simulated}
before   : wasAlive=alive
activity : 
  surrounding = count(neighbors,wasopen==true)
  simulated < 20?
    alive = surrounding == 1 or surrounding == 2 and alive;
  simulated > 20 and surrounding == 2?
    alive = true;
  simulated = self.simulated+1
initialize : alive = random() > 0.6; simulated=0

Game Of Live

state    : {alive,wasAlive}
before   : wasAlive=alive
activity : 
  surrounding = count(neighbors, wasAlive==true)
  alive = surrounding == 3 or surrounding == 2 and alive
initialize : alive = random() > 0.5

Aufgaben

Aufgabe.
  1. Probiere verschiedene Scheduler: UPRIGHT, DOWNLEFT, RANDOM, RANDOM0. Beobachte und beschreibe Unterschiede in der Emergenz! Was passiert wenn man nur eine Variable open als Sensor und Aktor verwendet (ohne before Berechnung)?
  1. Verändere die Modellparamater einer Zelle (A/B/density). Welche Auswirkungen gibt es auf die Emergenz?
  1. Wieviel Schritte werden bis zu einem statischen Zustand durchschnittlich benötigt?
  1. Kann man das Zellenmodell derart ändern, dass die typischen Höhlenmuster auch bei 4 Nachbarn entstehen (Modellparameter ändern)?
  1. Wie hoch ist bei einem N × N Netzwerk der Kommunikationsaufwand pro Schritt (Anzahl der Zugriffe auf Sensoren) bei 4 und 8 Nachbarn (in Einheitsnachrichten, d.h. Kosten für eine Nachricht ist 1)? → ASCIIMATH Notation für Formel verwenden http://asciimath.org
CT(N)


 ▸ 
 ✗ 
 ≡ 

  1. Wie verändert sich die Rechenzeit mit N? Erstelle einen Plot (für N={5,10,15,20,25,50,100}. Ersetzte die gemessenen Zeitwerte in dem y-Array.
Plot Rechenzeit


 ▸ 
 ✗ 
 ≡ 

  1. Führe dhrystone Tests im verwendeten Browser durch (trage Werte hier ein, auch die Browser Bezeichnung wie vom jystone Test angezeigt):
    • für JS im Browser
    • für Lua im Browser;
    • und für die native (p)lvm: lvm und lystone.lua herunterladen und ausführen http://edu-9.de/Software/plvm
lystone (Lua Benchmark für LUA2JS)

 ▸ 
 ✗ 
 ≡ 

jystone (nativer JS Benchmark)

 ▸ 
 ✗ 
 ≡ 




Hilfe



Einreichung (Assignment #2024-44259 )



Prüfen



Bewerten (Lehrer)




Created by the NoteBook Compiler Ver. 1.27.2 (c) Dr. Stefan Bosse (Mon Apr 22 2024 15:16:37 GMT+0200 (Central European Summer Time))