Beispiel mit Zufälligen Systemen als Virtueller Population

Hier ein Beispiel, wie man eine Serie von Experimenten mit zufälligen Systemen durchführen kann, die als Virtuelle Population von einer Welt verwaltet werden.

Angenommen werden vier Systeme als Population POP1 mit den Identifikationsnummern '0000' bis '0011'.

 POP1  =
 
!0000  *0  5  5  0  0  0  0  !
!                            !
!0001  *1  5  6  0  0  0  0  !
!                            !
!0010  *2  5  7  0  0  0  0  !
!                            !
!0011  *3  5  8  0  0  0  0  !

In der zweiten Spalte sind die Symbole verzeichnet, mit denen sie in der Versuchswelt angezeigt werden sollen. Spalten 3 und 4 bilden die 'Y' bzw. die 'X' Koordinate in der Welt für den Start. Als Raumstruktur GRIDSPC wird eine abgewandelte Version eines Tolman Labyrinths gewählt:

 GRIDSPC  =
 
!O  O  O  O  O  O  O  O  O  O  O  O  !
!                                    !
!O  .  .  .  .  O  O  F  F  F  F  O  !
!                                    !
!O  .  .  .  .  O  O  .  .  .  .  O  !
!                                    !
!O  .  .  .  .  .  .  .  .  .  .  O  !
!                                    !
!O  O  O  O  .  .  .  .  O  O  O  O  !
!                                    !
!O  O  O  O  O  O  O  O  O  O  O  O  !

Zu den Eckwerten aus der Population POP1 wird jetzt eine virtuelle Population POPRAND gebildet. Diese enthält zusätzlich die aktuellen Energiewerte ('100' zu Beginn) und den durchschnittlichen Energieverbrauch pro Zyklus (= '2').

 POPRAND  =
 
!0000  100  2  !
!              !
!0001  100  2  !
!              !
!0010  100  2  !
!              !
!0011  100  2  !

Zusätzlich gibt es noch das Welt-Input Puffer ('WORLD INPUT BUFFER', das für jedes teilnehmende System aktuelle Befehle notiert:

 WIB1  =
 
!0000  000  0  abab  -  !
!                       !
!0001  001  0  -     -  !
!                       !
!0010  000  0  xxxx  -  !
!                       !
!0011  011  0  -     -  !

Damit kann man dann den Befehl $experimentRNDREP()$ starten, indem man zunächst für jede Input Variable geeignete Eingangswerte übergibt

--> GRIDSPC=TOLMAN1s4, POP=POP1, WIB=WIB1, POPRAND=POPRND1, RUN=60, REPEAT=10,
SHOW=0,

und dann den Befehl selbst aufruft:

---> [HISTORY]=experimentRNDREP(GRIDSPC, POP, WIB, POPRAND, RUN, REPEAT, SHOW)

Der Befehl $experimentRNDREP()$ ist eigentlich eine 'Hülle', ein Rahmen zur Ausführung des eigentlichen Experiment-Befehles $experimentRND()$.

Hier beispielhaft die Ergebnisse von zwei Testläufen jeweils mit 10 Wiederholungen (REPEAT=10 und jedes Experiment hatte 60 Zyklen RUN=60. Die Zahl '60' ergibt sich aus der Tatsache, dass die Testsysteme mit einer Energiemenge von ENERGY=100 starten und pro Zyklus '2' Energieeinheiten verbrauchen. Wenn Sie innerhalb von 50 Zyklen also kein Futter finden, erreichen sie den Wert '0' und 'sterben'.

Im ersten Testlauf 10 x 60 hat System '0' niemals Futter gefunden, System '1' zweimal von 10, System '10' fünfmal von 10, usw.

 HISTORY  =
 
    0.     0.    0.        10.  
    1.     2.    9264.     10.  
    10.    5.    20210.    10.  
    11.    6.    22592.    10.

Figure 8.4: Ergebnisse eines Experimentes mit 60 Zyklen, das 10x wiederholt worden ist
\includegraphics[scale=.85]{experiment_repeated_10-60.eps}

Im zweiten Testlauf haben alle Systeme mindestens 1 mal von 10 Futter gefunden, aber - ähnlich wie im vorausgehenden Testlauf - je weiter 'rechts' in der Welt die Systeme gestartet sind, um so häufiger haben Sie Futter gefunden.

 HISTORY  =
 
    0.     1.    2582.     10.  
    1.     3.    10046.    10.  
    10.    4.    12328.    10.  
    11.    6.    15092.    10.

Figure 8.5: Ergebnisse eines weiteren Experimentes mit 60 Zyklen, das 10x wiederholt worden ist
\includegraphics[scale=.85]{experiment_run60_repeat10_2.eps}

Gerd Doeben-Henisch 2014-01-14