Entwickler-Ecke

Open Source Projekte - Langton's Ameisen und Turmiten


Mathematiker - Sa 01.06.13 12:06
Titel: Langton's Ameisen und Turmiten
Hallo,
es soll keine Konkurrenz zu http://www.entwickler-ecke.de/topic_Uebungsaufgabe+gesucht_111556.html sein, aber ich habe auch einmal die berühmten Ameisen versucht.
Eingegeben werden kann die Anzahl der Ameisen (maximal 50) und ein Regelsystem (max.Länge 15) bestehend aus L und R für links und rechts, dass mit seiner Länge auch die Anzahl der verwendeten Farben festlegt.
Ist der Rechner schnell genug, dann können auch Tausende Schritte in sehr kurzer Zeit ermittelt und angezeigt werden.

Im Gegensatz zum Original lasse ich mich meine Ameisen auf einem (aufgefalteten) Torus laufen. Dadurch entstehen noch zusätzliche Effekte. U.a. kann es geschehen, dass zwei Ameisen mit der Regel LR ihre Wege wieder löschen.

Interessante Regelsysteme, außer dem klassischen LR, sind z.B. RLR, LLRR, LRRRRRLLR, LLRRRLRLRLLR und RRLLLRLLLRRR.

Beste Grüße
Mathematiker

Rev 1: Änderung in der Geschwindigkeitsauswahl und weiteres. Quelltext kommentiert. Regel kann Länge 20 annehmen.
Rev 2: Erste Ameise kann zentral starten und weitere kleine Änderungen
Rev 3: Ideen von user profile iconHorst_H eingebaut, wodurch der Ablauf deutlich schneller wird.
Rev 4: Wenn es um Geschwindigkeit bei solchen grafischen Darstellungen geht, kann nur user profile iconHorst_H helfen. Seine Superidee mit Scanline macht das Programm nochmals viel schneller; mehr als 20 Millionen Schritte je Sekunde auf meinem alten PC.
Rev 5: Eine Änderung der Darstellungsgeschwindigkeit wirkt sich auch während der Simulation aus.
Rev 6: Über den Schalter "Regeln testen" werden systematisch, ab der eigegebenen Regel, alle getestet und jeweils einige Millionen Schritte berechnet.
Rev 7: Für jede Regel wird die "Horst_H-Martok"-Nummer angegeben.
Rev 8: Regel kann entweder als String mit L und R oder aber über die "Horst_H-Martok"-Nummer eingegeben werden.
Rev 9: Torus kann abgeschaltet werden.
Rev 10: Die erzeugten Abbildungen können automatisch als GIF gespeichert werden.
Rev 11: Veränderte Dateinamen beim Speichern. Unter "Regel testen" werden die Regeln mit einem 'R' am Anfang übersprungen, da diese schon mit der symmetrischen Regel (L gegen R getauscht) schon untersucht wurden.

In einem späteren Beitrag befindet sich ein analoges Programm zu Turmiten.


IhopeonlyReader - Sa 01.06.13 13:42

Guten Tag,
ja wie öfters arbeiten wir "paralell" :) Aber ist doch auch schön mal andere "Quelltexte" zu sehen oder?

- zum Quelltext:
finde ich leider sehr unübersichtlich :(
- Fehler gefunden (wundert mich, dass das bei dir klappt):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const abbruch:boolean = true;
//weiter unten:
if not abbruch then
    begin
       abbruch:=true;
       exit;
    end;

    abbruch:=false;

du weist einer Konstanten einen Wert zu ?!
und am Anfang evt. dein Label "aktualisieren", sonst klickt man erneut auf Starten und ist angeblich schon bei Schritt 100 mio obwohl man bei 0,2 mioist :D
 label3.caption := '0'; am Anfang reicht ja

-Farbe müsste geändert werden, aber ich seh nur "schwarz/weiß"

sollte noch einstellbar sein: Startposition einer neuen Ameise, jede Ameise besitzt verschiedene Regeln etc... gibt viel zu tun ;)


Mathematiker - Sa 01.06.13 14:00

Hallo,
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
- Fehler gefunden (wundert mich, dass das bei dir klappt):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
const abbruch:boolean = true;
//weiter unten:
if not abbruch then
    begin
       abbruch:=true;
       exit;
    end;
    abbruch:=false;

du weist einer Konstanten einen Wert zu ?!

Das ist kein Fehler, sondern eine typisierte Konstante (Compilerschalter {$J+})
Alles andere sehe ich mir noch an. Danke für die Hnweise.

Beste Grüße
Mathematiker


IhopeonlyReader - Sa 01.06.13 14:35

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

Das ist kein Fehler, sondern eine typisierte Konstante (Compilerschalter {$J+})

Für mich sind das dann variablen :D

P.S: Mein Compiler meckert auch, dass der linken Seite (abbruch) nichts zugewiesen werden kann.. ab welcher Delphi-Version geht das?

(ich hatte mal in anderen Threads gelesen, dass du mit Delphi 5 arbeitest ? ich habe Delphi 7, wieso geht's bei dir und mir nicht Oo )


jaenicke - Sa 01.06.13 15:55

Ja, das funktioniert gut. Und das automatische Zeichnen sieht auch schön aus. Vor allem die selbst angebbaren Regeln machen das Programm interessant.

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

Das ist kein Fehler, sondern eine typisierte Konstante (Compilerschalter {$J+})

Für mich sind das dann variablen :D
Sind es auch. Diese typisierten Konstanten sind nur wegen Kompatibilität mit Delphi 1 noch vorhanden und sie zu verwenden ist sehr schlechter Programmierstil, da man durch das const jeden Leser des Quelltextes in die Irre führt. Und diese Irreführung ist ja auch der einzige Unterschied zu echten Variablen, denen man das auch ansieht, dass es Variablen sind.

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
P.S: Mein Compiler meckert auch, dass der linken Seite (abbruch) nichts zugewiesen werden kann.. ab welcher Delphi-Version geht das?
Das kann man einstellen. Unter Delphi 1 ging das auch ohne diese Einstellung.

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
- zum Quelltext:
finde ich leider sehr unübersichtlich :(
Ein Quelltextformatierer hilft (in neueren Delphiversionen Strg + D). Dass die Shift Taste wohl nicht funktionierte (sorry, ich mag das gar nicht ;-)), kann aber auch das nicht korrigieren.

Ich habe aber schon deutlich schlechter formatierte Quelltexte gesehen und die Variablen haben auch sprechende Namen.


IhopeonlyReader - Sa 01.06.13 17:02

Ich habe bei meiner "Ameisen-Turingmaschine" eine extra Unit zum Typ TAmeise angelegt
die finde ich übersichtlicher.. für Mahtematiker als Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
unit uTAmeise;

{Zur Info: 2DDDynArray steht für ein 2D Array das Doppel Dynamisch ist !
man kann es also in den negativen und in den positiven Bereich vergrößern,
diese Unit ist selbstgeschrieben, aber die Methoden sind selbsterklärend}


interface

uses Windows, uT2DDDynArray, Graphics;

Procedure FeldErstellen;
Procedure FeldFree;
Procedure FeldZeichne( var Bild: TBitmap );

type
  TAmeise = class
    private
    Schritte: Cardinal;
    //Ameise
      SAusrichtung,
      Ausrichtung: ShortInt;
      Position: TPoint;
      BG, BUG: ShortInt;
      procedure gehRechts;
      procedure gehLinks;
      procedure lauf;
    public
      property Schritt: Cardinal read Schritte;
      property StartAusrichtung: ShortInt read SAusrichtung;
      property BeiUngeraden: ShortInt read BUG;
      property BeiGeraden: ShortInt read BG;

      constructor create(Start_Ausrichtung, Bei_Ungeraden, Bei_Geraden: ShortInt);
      procedure EinWeiter;
      procedure Weiter( AnzahlSchritte: Cardinal );
      procedure GehAuf( SchrittNr: Cardinal );
      procedure setBeiUngeraden( Bei_Ungeraden: ShortInt );
      procedure setBeiGeraden( Bei_Geraden: ShortInt );
      destructor destroy; override;

      procedure Zeichne( var Bild: TBitmap; ZStartpunkt, ZPosition: Boolean );
  end;

var
  Feld: T2DArray;

const
  //weiss = false;
  //schwarz = true;
  Oben = 0;
  Rechts = 1;
  Unten = 2;
  Links = 3;

  WSize = 0//startgröße (x: -wsize..wsize;)
  HSize = 0//startgröße (y: -hsize..hsize;)

implementation

//Ameisen- unanhäniger Teil
Procedure FeldErstellen;
begin
//FeldFree;
Feld := T2DArray.create( -WSize, WSize, -HSize, HSize, weiss);
end;

Procedure FeldFree;
begin
Feld.Free;
end;

Procedure FeldZeichne( var Bild: TBitmap );
begin
  Feld.zeichne( Bild );
end;


//Ameisen-Teil

//private teil
procedure TAmeise.gehRechts;
begin
  case Ausrichtung of
    Oben:     Ausrichtung := Rechts;
    Rechts:   Ausrichtung := Unten;
    Unten:    Ausrichtung := Links;
    Links :   Ausrichtung := Oben;
    else
  end;
end;

procedure TAmeise.gehLinks;
begin
  case Ausrichtung of
    Oben:     Ausrichtung := Links;
    Rechts:   Ausrichtung := Oben;
    Unten:    Ausrichtung := Rechts;
    Links :   Ausrichtung := Unten;
    else
  end;
end;

procedure TAmeise.lauf;
begin
  case Ausrichtung of
    Oben:     dec(Position.Y);
    Rechts:   inc(Position.X);
    Unten:    inc(Position.Y);
    Links:    dec(Position.X);
    else
  end;
end;



//--------------------------------public- Teil---------------------------

constructor TAmeise.create(Start_Ausrichtung, Bei_Ungeraden, Bei_Geraden: ShortInt);
begin
Schritte := 0;
Ausrichtung := Start_Ausrichtung;
SAusrichtung := Start_Ausrichtung;
BG := Bei_Geraden;
BUG := Bei_Ungeraden;
Position.X := 0;
Position.Y := 0;
end;

procedure TAmeise.EinWeiter;
  procedure Dreh(Richtung: ShortInt);
    begin
      case Richtung of
        Oben:   begin end;
        Rechts: gehRechts;
        Unten:  begin gehRechts; gehRechts; end//gehLinks; gehLinks;
        Links: gehLinks;
        else
      end;
    end;
begin
if Feld.read( Position.X, Position.Y) then //=schwarz    (BG)
  begin
  Feld.write( Position.X, Position.Y, weiss);
  //gehLinks;
  Dreh( BG );
  end
else //if not Feld.read( Position.X, Position.Y) then //=weiss  (BUG)
  begin
  Feld.write( Position.X, Position.Y, schwarz);
  //gehRechts;
  Dreh( BUG );
  end;
lauf;
Feld.sfnE( Position.X, Position.Y ); { Erzeuge Feld falls nicht existiert}
inc(Schritte);
end;

procedure TAmeise.Weiter( AnzahlSchritte: Cardinal );
var C: Cardinal;
begin
For C := 1 to AnzahlSchritte do
  EinWeiter;
end;

procedure TAmeise.GehAuf( SchrittNr: Cardinal );
begin
if SchrittNr >= Schritt then
  Weiter( SchrittNr - Schritt )
else
  begin
  free;
  create( SAusrichtung, BUG, BG );
  Weiter( SchrittNr );
  end;
end;

procedure TAmeise.setBeiUngeraden( Bei_Ungeraden: ShortInt );
begin
BUG := Bei_Ungeraden;
end;

procedure TAmeise.setBeiGeraden( Bei_Geraden: ShortInt );
begin
BG := Bei_Geraden;
end;


//für User
procedure TAmeise.Zeichne( var Bild: TBitmap; ZStartpunkt, ZPosition: Boolean );
begin
//Startpunkt lime kreuzen
if ZStartpunkt then
  Feld.UmrandePixel( Bild, 00, cllime, bsBDiagonal);
//aktuelle Position rot umranden
if ZPosition then
  Feld.UmrandePixel( Bild, Position.X, Position.Y , clred, bsClear);
end;

initialization
  FeldErstellen;

finalization
  FeldFree;
end.


Mathematiker - Sa 01.06.13 20:03

Hallo,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Vor allem die selbst angebbaren Regeln machen das Programm interessant.

Danke.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Diese typisierten Konstanten sind nur wegen Kompatibilität mit Delphi 1 noch vorhanden und sie zu verwenden ist sehr schlechter Programmierstil, da man durch das const jeden Leser des Quelltextes in die Irre führt. Und diese Irreführung ist ja auch der einzige Unterschied zu echten Variablen, denen man das auch ansieht, dass es Variablen sind.

Ist ja beabsichtigt. :lol: Nein, nicht wirklich. Ich habe es in Revision 1 geändert.
Aus irgendeinem Grund "liebe" ich dieses Konstrukt. Warum, kann ich nicht begründen.

user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe bei meiner "Ameisen-Turingmaschine" eine extra Unit zum Typ TAmeise angelegt
die finde ich übersichtlicher..

Das bestreite ich nicht. Ich versuche immer möglichst schnell die Idee als Quelltext umzusetzen und den Quelltext möglichst kurz zu halten. Dass dies kein moderner und gut lesbarer Stil ist, weiß ich.
Selbst auf die Gefahr hin, dass einige lachen: Sobald ich einen Algorithmus mir überlegt habe, "sehe" ich den Quelltext und tippe darauflos. Dadurch wird es bei mir oft nur eine einzige, wichtige Methode.
Müsste ich im Team programmieren, hätten mich die Anderen schon lange :evil: ... und ich würde wohl gefeuert.

In der Revision 1 habe ich noch einige Änderungen durchgeführt. Die maximale Regelsystemlänge ist jetzt 20.
Den Quelltext habe ich etwas kommentiert. Für richtiges Programmieren ist das noch nicht ausreichend. Ich weiß. :wink:

Beste Grüße
Mathematiker


IhopeonlyReader - Sa 01.06.13 20:17

Welcher Hobby-Programmierer würde in einer Programmiergruppe nicht gehasst :D
Aber ich versuche mein Quelltext, wenn ich weiß dass andere versuchen werden ihn zu verstehen, so zu konstruieren, dass er für die späteren Leser, die die Programmiersprache evt. nur in Teilen beherrschen, verständlich ist.

P.S: Meine Mammutsätze mag ich auch :rofl: (siehe 2ten Satz oben)


jaenicke - Sa 01.06.13 21:09

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Den Quelltext habe ich etwas kommentiert. Für richtiges Programmieren ist das noch nicht ausreichend. Ich weiß. :wink:
Der beste Quelltext ist der, der nur wenige Kommentare braucht. An der Stelle bist du auch auf einem guten Weg, denn du bezeichnest wie ich schon geschrieben hatte deine Variablen sinnvoll. Das fehlt vielen. Und einrücken tust du auch.
Deine jetzige Anzahl an Kommentaren ist normalerweise ausreichend, wenn der Quelltext ansonsten gut ist. (Für Spezialfälle oder spezielle Erklärungen natürlich nicht.)

Dass der Quelltext nicht in gut benannte Funktionen aufgeteilt ist und noch dazu direkt im Buttonklick liegt, lässt sich bei der Länge des Quelltextes verschmerzen, ist bei größeren Programmen aber ein ernstes Problem.

Schlecht lesbar ist der Quelltext durch folgende Faktoren:Diese Punkte findest du so übrigens auch im Object Pascal Style Guide [http://dn.embarcadero.com/article/10280]. ;-)


Mathematiker - Sa 01.06.13 22:41

Hallo,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Diese Punkte findest du so übrigens auch im Object Pascal Style Guide [http://dn.embarcadero.com/article/10280]. ;-)

In der Revision 2 habe ich versucht, etwas von dem Genannten zu berücksichtigen.

Außerdem kann man jetzt eine einzelne Ameise zentral starten lassen. Damit werden die Ergebnisse "symmetrischer".
Faszinierend finde ich die Regel "LLRRLLRRLLRRLLRR" (4mal die voreingestellte). Die dort entstehenden Abbildungen sind schon bemerkenswert; chaotische Teile und Abschnitte mit einer gewissen Ordnung.

Beste Grüße
Mathematiker

Nachtrag: Ich melde mich erst einmal für 6 Tage aus der EE ab. Morgen geht's auf Klassenfahrt in die Toscana.
Ob ich :cry: soll oder :lol: , weiß ich erst hinterher. Mal sehen, wieviel Ärger mir meine "Lieblinge" machen.


IhopeonlyReader - Sa 01.06.13 22:45

Ab schritt 40mio siehts aus wie ein Panzer :D


Martok - So 02.06.13 00:51

Ihr solltet alle mal NKS [http://wolframscience.com/] lesen :lol:

So falsch kann der Herr Wolfram da nicht sein, wenn hier wieder genau das gleiche rauskommt.
Faszinierend, Captain.

EDIT: LLLLLRLR ist toll. Da passiert fast nix :D
Anders als bei normalen CA scheints hier nur 2 Gruppen zu geben: die, die irgendwann den Torus komplett mit "Zufall" füllen (auch wenn vorher vielleicht viel Struktur ist!) und die, die praktisch keinen Weg zurücklegen (Extremfall: LLL... bzw RRR...). Die "nested structures" scheints hier nicht zu geben, oder?


Horst_H - So 02.06.13 19:53

Hallo,

ich habe es für Lazarus etwas umgebaut, das aber auch mit Delphi noch funktionieren sollte.
Die Rechnerei bekomme ich mit meinen 3.2 Ghz AMD Ph X4 955 nicht schneller als ~41 Mio Schritte/s ohne irgendeine Darstellung.
Anbei im Programm sind es etwa 27 Mio. Schritte/s, wenn alle 1 Mio Schritte eine Ausgabe erfolgt.
Dazu habe ich die IF Abfragen durch einen Zugriff auf ein Feld geändert.
Ala: In Feld[x] steht der Wert x+1 außer in Feld[max+1], dort steht 0.Ein falscher Sprung ist ja so wahnsinnig teuer.

Edit:
Ich habe spaßeshalber mal den Nährboden in einer zufälligen Farbe eingefärbt, womit sich die Ausgangssituation ändert-> unterschiedliche Ansichten.
Einmal Herzförmig, einmal sehr eckig
Gruß Horst


Ralf Jansen - So 02.06.13 20:55

LLRL (eigentlich ein Chaot der irgendwann anfängt eine Strasse zu bauen) macht hin und wieder merkwürdige Effekte aufgrund dessen das es in euren Versionen ein Torus ist.
Sehr spaßig.

Hat schonmal jemand über ein 3D Variante nachgedacht?


IhopeonlyReader - So 02.06.13 21:46

Ja, ich :)
Nur als ich dachte, "wie soll man das als 2D-Bild darstellen" fande ich es nicht eine so tolle Idee...
Ich würde die "hintereinanderliegenden Farben" übereinanderlegen.. also dasselbe als wenn ich die Farben beim 2D entsprechend wähle


Horst_H - So 02.06.13 22:42

Hallo,

auf youtube gibt es ja schöne Sachen dazu:
http://www.youtube.com/results?search_query=Langton+Ant
Man könnte 3D mäßig das ebene Gitternetz ja auf einen Torus projezieren, aber das ist wohl eher was für 3D Experten.
Das folgende Programm in C# kann viel mehr.
http://www.lukas.ck-servers.de/index.php?id=langtonant

Gruß Horst


Mathematiker - Fr 07.06.13 11:23

Hallo,
nach meiner Klassenfahrt in die Toskana (ich bin sehr, sehr müde) melde ich mich zurück und habe auf die Schnelle in Revision 3 die tollen Ideen von
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Dazu habe ich die IF Abfragen durch einen Zugriff auf ein Feld geändert.

eingebaut.
Dadurch wird es deutlich schneller, allerdings Host_H's Lösung erreiche ich noch nicht.
Jetzt gehe ich erst einmal schlafen und stehe so gegen 8 Uhr Morgen(!) wieder auf.

Beste Grüße
Mathematiker


Horst_H - Fr 07.06.13 12:21

Hallo,


Eine kleine Bitte.Bei Revisionen den Dateinamen ändern Ameise_Rev3 / pameise3
offtopic:
dass Dir das keine Ruhe lässt, obwohl Du müde bist ;-)
Angenehme Ruhe

Gruß Horst


Ralf Jansen - Fr 07.06.13 13:11

Ich wünsche auch schöne Nicht-Ameisen-Träume.


Horst_H - Mo 10.06.13 15:27

Hallo,

Meine Version ist nur deshalb so schnell, da bitmap.pixels so langsam ist.
Mithilfe Bitmap scanline siehe
http://edn.embarcadero.com/article/29173 und viele andere, ist Delphi wieder schneller, weil ich bei wieder zurückkopieren muss und anschließend in die paintbox, also zweimal das komplette Bild.

Auf Wikipedia bin ich auf etwas interessantes gestoßen:
Über http://en.wikipedia.org/wiki/Langton%27s_ant gelangte ich zu
http://en.wikipedia.org/wiki/Turmite und dann zu
Paterson's_worms [http://en.wikipedia.org/wiki/Paterson%27s_worms]
Zitat:
...{1,0,4,2,0,2,0}..who determined that it halts after 57 trillion timesteps leaving only {1,0,4,2,0,1,5} unsolved. According to Rokicki, the worm is still active after 5.2×1e19 timesteps.

Wow oder Wau! Das fragte ich mich, wie geht das denn?
http://en.wikipedia.org/wiki/Hashlife beschrieben auch in http://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478
unter
http://sourceforge.net/projects/golly/ findet man das passende Win32 Program dazu.
Unter "other rules" ist auch Langton's ant in der LR Form in schwarzweiß und in ein paar Sekunden bis 1e17 brechnet.
Da fehlt nur noch der Wurm, der Primzahlen produziert ;-)

Gruß Horst

Moderiert von user profile iconMartok: URL-Tags repariert


Mathematiker - Mo 10.06.13 17:54

Hallo Horst_H,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
... unter http://sourceforge.net/projects/golly/ findet man das passende Win32 Program dazu.
Unter "other rules" ist auch Langton's ant in der LR Form in schwarzweiß und in ein paar Sekunden bis 1e17 brechnet.

Dieses Programm gehört zu den Superprodukten, bei denen ich mich nur noch still in eine Ecke setze und deprimiert vor mich hinstarre. Alle meine Programmier"versuche" sind dagegen lächerlich.

Zumindest finde ich ein paar neue Ideen für mein Wireworld (http://www.entwickler-ecke.de/topic_Wireworld++Zellularautomat_110131.html), dass ebenso enthalten ist, wie Game of Life, Langtons Ameisen und vieles, von dem ich noch nie gehört habe.

Beste Grüße
Mathematiker


Mathematiker - Di 11.06.13 21:08

Hallo,
angeregt von den bisherigen Beiträgen habe ich mich mit den "Turmiten" beschäftigt.
Im angefügten Programm werden derartige "Viecher" über den Bildschirm gejagt. Es handelt sich um eine Turing-Maschine mit zwei Zuständen und zwei Farben.

Der Regelstring, z.B. {{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 0}, {0, 8, 1}}}, beschreibt Farbe, Bewegung und Zustand.
1.Eintrag: neue Farbe; 2.Eintrag Drehung: 1=keine, 2=rechts, 4=180°, 8=links; und der 3.Eintrag den neuen Zustand.
Im Programm habe ich in einer Combobox interessante Regeln angegeben, die tatsächlich sehr merkwürdige Bilder ergeben.

Durch die Hilfe von user profile iconHorst_H war es möglich, die grafische Ausgabe stark zu beschleunigen. Allerdings habe ich die Turmiten wieder gebremst, da man ansonsten die Bewegung nicht richtig wahrnehmen kann.

Beste Grüße
Mathematiker

Rev 1: Regelsystem kann nun auch 1, 3 oder noch mehr Zustände beschreiben.
Rev 2: Entschuldigung! :oops: Höhere Zustände wurden in Rev 1 gar nicht bearbeitet. Fehler ist behoben.
Rev 3: Zusätzlich mit verschiedenen Farbzuständen. Erklärung weiter unten.


Horst_H - Mi 12.06.13 13:54

Hallo,

was beschreibt denn nun Zustand/ Farbe.
Ich sehe nur schwarz-weiß.

Delphi-Quelltext
1:
2:
3:
4:
5:
      case Regelstring[6 * i + 3 * j + 1of
        '1': Regel[i, j, 0] := 1// weiß
        else
          Regel[i, j, 0] := 0;//schwarz
      end;

{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 0}, {0, 8, 1}}},

Drehung 1=keine, 2=rechts, 4=180°, 8=links, binär sehr schön aber als Eingabe?
Dann doch lieber ( N,R,W,L )= Nichts,Rechts, Wende,Links
Was bedeutet Zustand?Wenn ich das richtig verstanden habe, bedeutet es , mit welcher Regel ich an dem Ort dann beim nächsten antreffen weitermache.
Regel[Zustand= 0] = 1, 8, 0} bedeutet:färbe den Punkt in Farbe, drehe dich nach links , schreibe Zustand 0 an diesen Ort , bewege dich einen Schritt.Damit bleibt der Zustand doch immer 0, wenn zu Beginn alle Zustände= 0 sind.

Wenn ich das richtig sehe, speicherst Du aber die Farbe, welche nur 0 und 1 ist.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
        //Farbe nach Zustand setzen
         s := Speicher[y,x];
//         pPixel := pScanLines[y];inc(pPixel,x); pPixel^ := Farben[Regel[Zustand,s,0]];
         TempBitmap.canvas.Pixels[x,y]:= Farben[Regel[Zustand,s,0]];

         Speicher[y,x] := Regel[Zustand,s,0];


Heut ist nicht mein Tag...

Gruß Horst


Mathematiker - Mi 12.06.13 14:15

Hallo,
ich habe mich wahrscheinlich nicht richtig ausgedrückt. Sorry.
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Ich sehe nur schwarz-weiß.

Ja, es sind nur Schwarz und Weiß. In den Beschreibungen zu den Turmites gibt es auch welche mit mehr Farben. Bei mir, im Moment noch nicht.
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Drehung 1=keine, 2=rechts, 4=180°, 8=links, binär sehr schön aber als Eingabe?
Dann doch lieber ( N,R,W,L )= Nichts,Rechts, Wende,Links

Die Zahlen haben mich auch gestört. Ich wollte aber (vorerst) den im Netz zu findenden Regeln entsprechen. Und dort sind es diese Zahlen. Kann ich aber ändern.
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 0}, {0, 8, 1}}}

a) {1, 8, 0} Regel bei Zustand 0, Farbe 0
b) {1, 2, 1} Regel bei Zustand 0, Farbe 1
c) {0, 2, 0} Regel bei Zustand 1, Farbe 0
d) {0, 8, 1} Regel bei Zustand 1, Farbe 1
Zur Beispielregel. Am Anfang ist der Zustand 0 und die Farbe 0. Daraus wird Farbe 1 und Zustand 0. Im zweiten Schritt wirkt nun b), da die Farbe 1 ist, d.h. die neue Zelle bekommt auch Farbe 1 und der Zustand wird 1.
Im 3.Schritt wirkt nun d) und die Farbe wird 0 und der Zustand bleibt 1, usw.

Wie gesagt, ich hätte das wohl von Anfang an besser erklären sollen. :oops:

Beste Grüße
Mathematiker


Mathematiker - Sa 15.06.13 14:53

Hallo,
ich habe den Turmiten eine Revision 3 gegönnt, siehe weiter oben.
Damit können jetzt Turmiten auch mit mehreren Farben gezeichnet werden. Der Regelstring erhielt dazu am Anfang zwei Zahlen, z.B.
Zitat:
23{{{1,8,1},{1,8,1}},{{2,8,1},{0,1,0}},{{1,8,1},{0,1,0}}}

die die Anzahl der Turing-Zustände (im Beispiel 2) und die Anzahl der verwendeten Farben (im Beispiel 3) beschreiben. Die Beispielregeln habe ich erweitert, so dass jetzt noch weitere merkwürdige Abbildungen entstehen.

Besonders kurios finde ich das Beispiel 1 Zustand, 4 Farben:
Zitat:
14{{{1,2,0},{2,4,0},{3,4,0},{0,8,0}}}

Ich kann nur sagen: Einfach mal 1,6 Milliarden Schritte laufen lassen ...

Beste Grüße
Mathematiker


Horst_H - So 16.06.13 08:55

Hallo,

14{{{1,4,0},{3,2,0},{3,2,0},{2,8,0}}} finde ich aber auch sehr interessant!
Das sieht aus wie pulsierendes Blut mit einer Pumpe in der Mitte.
Das muss man etwas laufen lassen ( 1e10 oder so..).
Bei mir ist die Geschwindigkeit auf eine Ausgabe alle 1.1 Mio Berechnungen gestellt und die Paintbox quadratisch.

Gruß Horst


Delphi-Laie - So 16.06.13 17:10

So, nun nach längerer Zeit mal wieder ein Lebenszeichen von mir. Zum Programm: So fein, daß Lob überflüssig ist.

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Ich melde mich erst einmal für 6 Tage aus der EE ab.


Ooooooo......

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Morgen geht's auf Klassenfahrt in die Toscana.


Gute Fahrt, ebensolchen Aufenhalt und auch Rückreise.

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Mal sehen, wieviel Ärger mir meine "Lieblinge" machen.


Ein bißchen mehr Optmismus bitte!

Edit: Eine Sache fand ich nun aber doch: Die Gschwindigkeit kann zwar zur Laufzeit editiert werden, das wirkt sich jedoch eben während dieser Laufzeit nicht auf die Darstellung aus.

Edit 2: Die Folge RLLLLRRR ist so prägnant, daß ich sie hier nennen möchte.


Mathematiker - So 16.06.13 19:15

Hallo,
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Zum Programm: So fein, daß Lob überflüssig ist.

Danke.
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Die Folge RLLLLRRR ist so prägnant, daß ich sie hier nennen möchte.

Es gibt sehr viele interessante Regeln, darunter RLLLLRRR. Eigentlich müsste man systematisch testen, welche Folgen interessante Gebilde ergeben. Mal sehen, vielleicht mache ich es einmal.
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Die Gschwindigkeit kann zwar zur Laufzeit editiert werden, das wirkt sich jedoch eben während dieser Laufzeit nicht auf die Darstellung aus.

Ist behoben. In der Revision 5 wirkt sich eine Änderung der Darstellungsgeschwindigkeit auch während der Simulation aus.

Beste Grüße
Mathematiker

Nachtrag: Die Idee, alle Regeln zu testen, habe ich eingebaut.
In der Revision 6 werden über den Schalter "Regeln testen", ab der eigegebenen Regel, alle systematisch getestet und jeweils einige Millionen Schritte berechnet.


Horst_H - So 16.06.13 19:56

Hallo,

alle Kombinationen von RRLLRLLRL... auszuprobieren geht recht einfach.
R = 1 und L = 0 und dann einfach in einer Schleife die Bits als Regel entsprechend umsetzen.
( OK. LLLLLL...L fehlt..)
Mist .. jetzt muß ich die neue Versin erst testen.

Gruß Horst


Mathematiker - So 16.06.13 20:10

Hallo,
ich habe gerade alle 255 Regeln mit maximal 7 Zeichen getestet.
Bei den längeren entstehen schon merkwürdige Abbildungen, während bei den kürzeren Regeln fast nur totales Chaos herrscht.
Und nebenbei läuft Jimi Hendrix' "Star Spangled Banner". Dann wird es ein richtiger Genuss. :D
Jetzt teste ich ab 8 Zeichen.

Beste Grüße
Mathematiker

Erste "Entdeckungen": LRRLLLRR, LRRLRRLL, LRRRRLLL, RRLRLRRR, RRRLLLLR, RRRRRLRR, LLLLRRLRL


Martok - So 16.06.13 20:26

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Ihr solltet alle mal NKS [http://wolframscience.com/] lesen :lol:

Ich hab das dann mal nachgeschlagen und...
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
ich habe gerade alle 255 Regeln mit maximal 7 Zeichen getestet.
Jetzt teste ich ab 8 Zeichen.
... anscheinend hat zumindest Wolfram keine systematische Analyse über dem RuleSpace der Ameisenartigen gefunden und/oder gemacht. Das heißt dann wohl, das hier ist echte Forschungsarbeit. Jemand(tm) sollte das genau dokumentieren, falls da irgendwas erkennbar ist, könnte da ein Paper drin sein ;-)

EDIT: übrigens auch sinnvoll ist sein Namensschema für Regeln. Mit der Zuordnung von user profile iconHorst_H wäre dann z.B. LRRLLLRR Regel 99 und LLLLRRLRL Regel 26. Müsste man natürlich noch mit der Stellenanzahl versehen, wegen den Nullen links. LLLLRRLRL und RRLRL wär ja sonst das gleiche. Vielleicht 8.99 für die 8-Bit-Regel LRRLLLRR?

Mathematica
1:
(StringSplit["LRRLLLRR", ""] /. {"R" -> 1, "L" -> 0})~FromDigits~2                    


Mathematiker - So 16.06.13 21:29

Hallo,
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Ihr solltet alle mal NKS [http://wolframscience.com/] lesen :lol:

Habe ich mir schon bestellt, aber irgendwie hat der Versand Probleme.
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Das heißt dann wohl, das hier ist echte Forschungsarbeit.

He, wir werden berühmt. :wink:
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Mit der Zuordnung von user profile iconHorst_H wäre dann z.B. LRRLLLRR Regel 99 und LLLLRRLRL Regel 26. Müsste man natürlich noch mit der Stellenanzahl versehen, ...

Das ist eine gute Idee. An Stelle des Regelstrings könnte man auch die Regeln durchnummerieren. Setzen wir ein nicht(!) auszuführendes R = 1 an den Anfang des Strings, so braucht man auch keine Stringlänge mehr anzugeben.
Aus LRRLLLRR wird dann RLRRLLLRR = Regel 355 und entsprechend die anderen. Ab Regel LL = 4 wären dann jeder natürlichen Zahl genau eine Regel zugeordnet.

LRLRRLLLL = Regel 688 ist auch interessant.

Beste Grüße
Mathematiker

Nachtrag: In der Revision 7 wird für jede Regel die "Horst_H-Martok"-Nummer angegeben. (Ich wollte schon immer einmal einen neuen Begriff definieren. :lol: )
Interessant sind auch: LRLRRRRRL = 702, LRRLRRLLL = 728


Martok - So 16.06.13 21:46

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Setzen wir ein nicht(!) auszuführendes R = 1 an den Anfang des Strings, so braucht man auch keine Stringlänge mehr anzugeben.
Gute Idee, löst das Problem sehr einfach :)

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Nachtrag: In der Revision 7 wird für jede Regel die "Horst_H-Martok"-Nummer angegeben. (Ich wollte schon immer einmal einen neuen Begriff definieren. :lol: )
:rofl:
Mal ausprobieren ;)
EDIT: andersrum fehlt noch, Nummer->Regel ;)

385 schein eine von denen zu sein, die ich schonmal erwähnte: die, wo nix passiert.


Mathematiker - So 16.06.13 22:03

Hallo,
die Revisionen erfolgen jetzt ziemlich kurz hintereinander, aber das jetzt war wichtig.
In Revision 8 kann nun die Regel entweder als String mit L und R oder aber über die "Horst_H-Martok"-Nummer eingegeben werden.

Regel 385 läuft bei mir nun mit mehr als 4 Milliarden Schritten und es passiert nichts Wesentliches, außer dass ich kein int64 für die Schrittzahl genommen habe. :autsch: Das wird wohl Revision 9, aber wahrscheinlich nicht mehr heute.

Beste Grüße
Mathematiker


Martok - So 16.06.13 22:06

Sehr schön :)

1568 ist auch schick. Überhaupt, die ganze Gruppe ab RLLLLLLLLL enthält ziemlich viele nicht-langeweilige Muster.

1628,1630,1631 sind fast das Gleiche :shock:

1652 hat nun wieder was für den Maschinenbauer, könnte man fast dendritisches Kornwachstum nennen ;)


Mathematiker - So 16.06.13 22:19

Hallo,
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
1568 ist auch schick. Überhaupt, die ganze Gruppe ab RLLLLLLLLL enthält ziemlich viele nicht-langeweilige Muster.

Wow, wie schnell bist Du denn. Ich habe erst einmal 1024 Regeln abgearbeitet und komme mir vor Ellie Arroway in Carl Sagans "Contact". Die suchte nämlich auch beim Betrachten von chaotischem Rauschen nach Strukturen im Chaos. :lol:
Mir gefallen auch RRRRRLRRR = 1015 und LLLLLLRLLL = 1032.

Beste Grüße
Mathematiker

Weitere Interessante:
LLLLRLLRLL = 1060
LLLRLLLRRR = 1095
LLLRLRRLRL = 1114
LLLRRLRLRL = 1130 chaotisch, aber wächst merkwürdig
LLLRRRLRRR = 1143
LLRRLLRLLL = 1224
LLRRLRRRRR = 1247
LLRRRLLLLL = 1248
LLRRRRRLLL = 1272
Verblüffend finde ich, dass es "unterschiedliches Chaos" gibt. Einige Regeln wachsen nur langsam chaotisch, andere füllen ganz schnell den Bildschirm. Und irgendwie habe ich den Eindruck, dass es jedes Mal anders aussieht.


Martok - So 16.06.13 22:45

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
1568 ist auch schick. Überhaupt, die ganze Gruppe ab RLLLLLLLLL enthält ziemlich viele nicht-langeweilige Muster.

Wow, wie schnell bist Du denn.
Neinnein, ich hab erst so weit hinten angefangen, weil du schon so viele aus der unteren Gruppe zitiert hattest. Muss man ja nicht doppelt machen ;)

Mit 1660 kann man Quadrate malen ;)

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Und irgendwie habe ich den Eindruck, dass es jedes Mal anders aussieht.
Kann das sein, dass du die Anfangsrichtung randomisierst? Dadurch dass der Torus nach Pixeln faltet ist alles was überläuft Fenstergrößenabhängig.

Oh. Discovery time!
1697 ist die erste Regel bei mir, die das hat was Wolfram Nested Structures nennt. Auf den Seiten entsteht sowas ähnliches wie schiefe Sierpinski-Dreiecke, die von innen mit "Zufall" überschrieben werden.


Mathematiker - So 16.06.13 22:52

Hallo,
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Kann das sein, dass du die Anfangsrichtung randomisierst?

Ist eigentlich überflüssig. Werde ich wohl ändern.
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Dadurch dass der Torus nach Pixeln faltet ist alles was überläuft Fenstergrößenabhängig.

Ja, ist es leider. Theoretisch müsste ein unendlich großes Feld betrachtet werden oder zumindest eins, das erheblich größer ist. Aber wie kann man das vernüftig umsetzen?
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
1697 ist die erste Regel bei mir, die das hat was Wolfram Nested Structures nennt. Auf den Seiten entsteht sowas ähnliches wie schiefe Sierpinski-Dreiecke, die von innen mit "Zufall" überschrieben werden.

Das ist Klasse.

Beste Grüße
Mathematiker


Mathematiker - Mo 17.06.13 00:29

Hallo,
das ist nun die letzte Revision 9 für heute.
Zur korrekten Untersuchung des Verhaltens bei verschiedenen Regeln kann jetzt der Torus abgeschaltet werden.
Bildet die Regel eine "Ameisenautobahn", so ist das Gebilde ja unendlich groß. Manche der bisherigen Muster entstehen nur, in dem eben ein Torus betrachtet wird.
Auch 1655 bildet Nested Structures.

Beste Grüße und für heute Gute Nacht
Mathematiker


Horst_H - Mo 17.06.13 07:03

Hallo,

was haltet ihr von der Idee, mehrere Vorschaubilder zu erstellen und gekachelt darzustellen.Links zB 8 Miniaturen und rechts die oberste in groß.
Cursor Down-> ein Bild weiter ; Page Down 8 Bilder weiter und umgekehrt.
Was mich eigentlich noch stört, ist dieses Feld Speicher, was ja umgesetzt in Farbe in der Bitmap steht.Also irgendwie doppelt gemoppelt.
Ich habe leider keinen Plan, ob eine Bitmap 8-Bit-Palettendarstellung, zwar praktisch, aber dann wesentlich langsamer wäre.
Vielleicht sollte man die Bitmap-Ausgabe in eine neue Form auslagern die nur aus einer quadratischen Paintbox, mit einer 2er Potenz als Seitenlänge, besteht.Die könnte man dann ja verschieben oder andocken.

Gruß Horst
P.S.
"Karatsuba" klingt irgendwie viel besser als "Martok_Horst_h" :-(
Aber "Namen sind wie Schall und Rauch" ;-)


Mathematiker - Mo 17.06.13 08:34

Hallo,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
was haltet ihr von der Idee, mehrere Vorschaubilder zu erstellen und gekachelt darzustellen.Links zB 8 Miniaturen und rechts die oberste in groß.

Das ist eine gute Idee. Ich denke auch einmal darüber nach.
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
"Karatsuba" klingt irgendwie viel besser als "Martok_Horst_h" :-(

Hmm. Alle großen Dinge haben eine 3buchstabige Abkürzung: ABC, WWW, RSA, PHP, IFS, IMO, ... :think:
Also machen wir doch Folgendes: HHP als Anfangsbuchstaben unserer Familiennamen (ich hänge mich mal an :angel: ). Und "HHP-Code" klingt toll und kompliziert. :wink: Vielleicht erweitere ich sogar den Wikipedia-Artikel ...Dann steht dort endlich mal was Sinnvolles. :lol:

Leider habe ich heute bis zum späten Nachmittag zu tun (Geld verdienen). Dann melde ich mich aber wieder.

Beste Grüße
Mathematiker

Nachtrag: So, geschafft. Mal sehen, wann meine Ergänzung unter http://de.wikipedia.org/w/index.php?title=Ameise_(Turingmaschine)&stable=0&redirect=no die Nachsichtung übersteht und vor allem, wie lange der HHP-Code dort stehen bleibt. :dance2:
Spätestens dann, wenn der HHP-Code irgendwo zitiert wird, werden wir alle berühmt. :lol:


Mathematiker - Mo 17.06.13 14:57

Hallo,
ich kann es kaum glauben, aber das ergibt sich für HHP-Code 2588:
langton2588
Für mich ist das völlig überraschend.

Mittlerweile habe ich alle Codes bis 4300 vollständig getestet, jeweils 50 Millionen Schritte. Ich hänge zwei ZIP-Dateien an, welche die meiner Meinung nach interessanten Codes als GIF enthalten.
Symmetrische Codes werden nicht berücksichtigt.

Beste Grüße
Mathematiker


Horst_H - Mo 17.06.13 18:49

Hallo,

wie knackig kurz der HHP Code auch sein mag, auf dem Bild hätte ich gerne die Auflösung in LRLLLRLR????... stehen oder im Namen.Bei den Gif's scheinen sich ja welche sehr ähnlich zu sehen.
HHP-Code 2588 müßte R- LRL LLLR RRLL sein.
Auch müßte man irgendwie die Spiegelung, L und R tauschen, LLRR== RRLL und LRRL == RLLR rausfiltern. Sozusagen REGEL == NOT(REGEL)
Statt 128+0..128+63, die führende 1 fällt ja weg, braucht es jetzt nur 128+0..128+31 zu testen.
Ich muss Ameise wohl etwas beschleunigen, denn meine neueste Turmite-Version schafft bei mir mit Turbo-Delphi kompiliert um die 65 Mio/s für 12 -> langton's ant.

Der WIKI Artikel ist witzig geschrieben
"Das „Greifbare“ geht über in das dynamisch, organisch Unzugreifende.", was soll ich daran be-greifen.
Du hättest Deine Ameise verlinken sollen und eventuell golly

Gruß Horst


Mathematiker - Mo 17.06.13 19:46

Hallo,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
wie knackig kurz der HHP Code auch sein mag, auf dem Bild hätte ich gerne die Auflösung in LRLLLRLR????... stehen oder im Namen.

Wird gemacht, am besten zusätzlich im Dateinamen.
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
Auch müßte man irgendwie die Spiegelung, L und R tauschen, LLRR== RRLL und LRRL == RLLR rausfiltern. Sozusagen REGEL == NOT(REGEL)

Richtig, daran habe ich noch gar nicht gedacht.
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
"Das „Greifbare“ geht über in das dynamisch, organisch Unzugreifende."

Dieser Satz stammt nicht von mir, nur die Ergänzung. Ich denke aber, die selbsternannten Wikipedia-Wächter werden unseren HHP-Code 'rauswerfen.

Beste Grüße
Mathematiker

Nachtrag:
In der Revision 11 werden eindeutigere Dateinamen beim Speichern verwendet.
Unter "Regel testen" werden die Regeln mit einem 'R' am Anfang übersprungen, da diese schon mit der symmetrischen Regel (L gegen R getauscht) untersucht wurden.


Horst_H - Mo 17.06.13 22:50

Hallo,

getestet mit 5 Mio Schritten ohne Torus

11825
11647..11711 -> nur Autobahn
11349
11007
10751
10750
10352 !
10243
10214
9395
8344
5790
5682
5503
5063
ungeschlagen
2588 von user profile iconMathematiker

Gruß Horst


Martok - Di 18.06.13 01:27

From Magdeburg with Love: Die Regeln 4-10000 [https://www.dropbox.com/sh/zkarypfmwbrexlc/iMF-8Vzhu1], jeweils bis 20m oder Fensterrand.

Achtung: in jedem Ordner werden 1000 Thumbnails am Stück geladen. Das braucht moderne Browser.

Über den Download-Button oben rechts können direkt Zip-Archive der jeweiligen Ansicht erstellt werden. Die gesamte Sammlung sind ungefähr 800MByte, das dürfte auch gepackt nicht weniger werden, da die Dateien schon mit der höchsten Stufe komprimiert sind.

So. Rechenzeit gespendet, viel Spaß bei der Auswertung :D
Ein paar interessante hab ich schon gesehen beim drüberscrollen, aber solange wir keine Klassifikation haben bringt das ja nix.


Horst_H - Di 18.06.13 10:45

Hallo,

och Rechnerzeit ist ja nicht soviel, zwei Stunden schätze ich, weil Du die "alte" vor Version 11 genutzt hast, sonst wäre es die Hälfte.Aber das hochladen hätte bei mir optimal ~ 3 h gedauert.
Multithreading müßte viel bringen, denn etwa 1 MB werden belegt von TempBitmap und Speicher und 4MB passen wohl noch in die 6MB Level3 Cache.
Dabei fällt mir auf, eine Speicherung als GIF ist wesentlich kompakter ist.
30%..>200% und das günstigerweise klein-> groß.
Mir kam der Gedanken an animerte GIFs, sicher nur für ausgewählte Regeln.
Quelle: http://www.tolderlund.eu/delphi/ftgifanimate.zip

Wie klassifizieren:
Autobahnbauer HHP 5
In Quadratischer Hülle wachsen : innen chaotisch LLRR oder mit einem ?gewissen? Grad an Ordnung HHP34 HHP138?
Unförmige Hülle: innen chaotisch, Rand mal Kantig HHP10 oder besser HHP90, mal chaotisch HHP9
Dreiecksbildner -> sich erweiternde Autobahn.HHP138
Ob Wachstums zum Stillstand kommt ? HHP8 kein Wachstum.

Was ist dann HHP8344?
user defined image

Gruß Horst


Delphi-Laie - Di 18.06.13 10:53

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Horst_H,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
... unter http://sourceforge.net/projects/golly/ findet man das passende Win32 Program dazu.
Unter "other rules" ist auch Langton's ant in der LR Form in schwarzweiß und in ein paar Sekunden bis 1e17 brechnet.

Dieses Programm gehört zu den Superprodukten, bei denen ich mich nur noch still in eine Ecke setze und deprimiert vor mich hinstarre. Alle meine Programmier"versuche" sind dagegen lächerlich.


In der Tat sehr beeindruckend. Eine anscheinend (potentiell) unendliche Ebene, und die Geschwindigkeit dort ist soweit steigerbar, daß die Seglerkanonen die Segler wirklich abschießen. Es findet sich nicht, was durch Speicherkapazität oder Rechnergeschwindigkeit gebremst zu sein scheint....

Solche Produkte sind das Ergebnis jahrelang mehr oder weniger intensiv vorangetriebener Projekte, von denen sich auch in den Delphiforen einige finden. Man verliert sich in tausend Einzelheiten (hat mal als Hobbyprogrammierer zum Glück auch die Freiheit dazu). Auch benötigt es ja vor allem viel Zeit, all' diese Ideen überhaupt erst zu entwickeln bzw. die Anregungen dazu zu sammeln, bevor sie umgesetzt werden können.

Da Du ja täglich ein neues Programm vorstellst, wirst Du nicht so in die Tiefe gehen können. Kleine Schleimeinheit: Das ist allerdings Deinen Programmen nicht anzumerken, sodaß Masse und Klasse nicht zwangsläufig Widersprüche sein müssen.


Martok - Di 18.06.13 12:33

user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
och Rechnerzeit ist ja nicht soviel, zwei Stunden schätze ich, weil Du die "alte" vor Version 11 genutzt hast, sonst wäre es die Hälfte.Aber das hochladen hätte bei mir optimal ~ 3 h gedauert.
Huch? Revision 9, PNG nur weil ich grad keine Lib für GIF installiert hatte, aber trotzdem: fast 10 Stunden.


user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:

Wie klassifizieren:
Autobahnbauer HHP 5
In Quadratischer Hülle wachsen : innen chaotisch LLRR oder mit einem ?gewissen? Grad an Ordnung HHP34 HHP138?
Unförmige Hülle: innen chaotisch, Rand mal Kantig HHP10 oder besser HHP90, mal chaotisch HHP9
Dreiecksbildner -> sich erweiternde Autobahn.HHP138
Ob Wachstums zum Stillstand kommt ? HHP8 kein Wachstum.

Was ist dann HHP8344?
Kreisbauer mit und ohne Quadrat drumrum
Exponentiell langsameres Wachstum, symmetrisch oder nicht
Bildung selbstähnlicher Strukturen (2832)
Sterne (hab nur 2 gesehen, finde aber grade keinen wieder...)


Horst_H - Di 18.06.13 12:56

Hallo,

@user profile iconDelphi-Laie
golly hat unter turmites auch: LangtonsAnt_LLRR und der ist ist elend langsam.
Scheinbar ist es nicht möglich, das Chaos richtig zu einzuordnen, um die Berechnung beschleunigen zu können.Wenn also keine Zyklen vorkommen, die noch erfasst werden.
Wie etwa bei Turmite: Turmite_121181121020 aka
22{{{1, 2, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 2, 0}}}
Aber da berechnet das turmite_Rev3 73 Mio/s, erkennt aber den Zyklus nicht, wird also in ein paar Sekunden eingeholt.

@user profile iconMartok
Also ich habe mit Rev_11a 172 Dateien/ min bei maximal 20e6 Schrittweite erzeugt.
Dabei folgt auf HHP383= 256+127 direkt HHP512, weil die Spiegelung übersprungen wird.
{ Man sollte die Richtung zu Beginn auch nicht zufällig machen , das gibt gedrehte Bilder ... }
Ich habe die Schrittzahl mal auch mit auf das Bild ausgegeben.

Ich hänge mal die pas an.

Gruß Horst


Mathematiker - Di 18.06.13 16:57

Hallo,
ich habe einen älteren XP-Rechner bis 20000 rechnen lassen und kurios, es ging deutlich schneller als unter Vista.
Die schönsten Codes über 10000 sind:

10214 (wieder einer Spirale), 10255, 10352, 10912 (Ameisen-Autobahn mit Auffahrt), 11007, 11328, 11329, 11335 (Dreieck, der Punkt im Inneren ist kein Schnittpunkt von Mittelsenkrechten, Winkel- und Seitenhalbierenden oder Höhen, aber was dann?), 11712, 16656, 16767, 16804 (fast eine Spiralgalaxie), 17008, 17504, 17680 (aus dem Chaos entsteht Regelmäßigkeit), 17792, 18817, 19201 (eine chaotische Fibonacci-Spirale), 19500 (Wühlmäuse im Garten), 20000 (viele eingebettete Strukturen).

Interessant ist, dass mitunter die doppelte Code-Zahl wieder schöne Bilder ergibt, z.B.
16524, 33048, 66096, 132192, 264384, 528768, 1057536, ...
Unter 10000 finde ich auch LLLRRLRLRLLLL = 9040 toll:
LLLRRLRLRLLLL_9040
Ich habe 32 Milliarden Schritte laufen lassen und es ändert sich irgendwie nicht mehr (stabil?). Ein ähnliches Gebilde hat vorher noch kein Code ergeben.

Beste Grüße
Mathematiker


Horst_H - Di 18.06.13 18:24

Hallo,

9040 das wäre doch eine Aufgabe für golly, um festzustellen, ob das Wachstum begrenzt ist.
EDIT:
Ich habe keine Idee, effektiv einen Zyklus festzustellen, in einem System, indem ich den selben Ort aus der selben Richtung im selben Zustand anlaufen und trotzdem dahinter alles anders.Ich müßte ein "Foto" von der jetzigen Situation/Muster machen und immer wieder nachschauen, ob es genau so wieder vorkommt.
Dann bin ich wieder bei golly mit der Mustererkennung von Tom Rokicki

Gruß Horst