Document: Computational Autopoiesis: The Original Algorithm

next
up A Appendix: PROTOBIO
gif A.2 English Translation

A.3 FORTRAN IV Program Listings

Dec 16 12:13 1996  exp29.for Page 1


    1   C EXPERIMENTO 29
    2         INTEGER*2 HAB(30,30),REL(30,30),MOV2(30,30)
    3         INTEGER   B(8)/'.','-','+', '*',' ',' ',' ','@'/
    4         INTEGER ESC(30,30)
    5         INTEGER*2 P8X(10),P8Y(10)
    6          INTEGER XMAX,YMAX
    7         INTEGER*2 DM,VID1,VID2,VID3,VID4,VID8,DT,TMAX,TESC,T
    8         INTEGER*2 XHR1,XHR2,YHR1,YHR2,X,Y
    9         INTEGER*2 XH1,XH2,YH1,YH2
   10         INTEGER*2 X8,Y8,D1,D2,D,X81,X82,X83,Y81,Y82,X8A,Y8A,XPF8,YPF8
   11         INTEGER*2 XPF0,YPF0
   12         INTEGER*2 X1,Y1,X11,X12,X13,Y11,Y12,X1A,Y1A
   13         INTEGER*2 X2,Y2,XD2,YD2,XD21,YD21,XPF2,YPF2,X21,X22,X23,Y21,Y22
   14         INTEGER*2 X2A,Y2A,C2,XPFA2,YPFA2,C23,C24
   15         INTEGER*2 X3,Y3,C3,X31,X32,X33,Y31,Y32,X3A,Y3A
   16         INTEGER*2 X4,Y4,C4,X41,X42,X43,Y41,Y42,X4A,Y4A
   17         INTEGER VMIN4,VMAX4
   18         XMAX=30
   19         YMAX=30
   20         VID1=3
   21         VID2=60
   22         VID3=30
   23         VMIN4=5
   24         VMAX4=50
   25          VID8=300
   26         MIDX2=-1
   27         MADX2=1
   28         MIDY2=-1
   29         MADY2=1
   30         NMAX2=8
   31         MIDX8=-1
   32         MADX8=1
   33         MIDY8=-1
   34         MADY8=1
   35         MIX8=8
   36         MAX8=23
   37         MIY8=8
   38         MAY8=23
   39         N1=0
   40         NUM1=0
   41         NUM8=4
   42         P8X(1)=20
   43         P8Y(1)=10
   44         P8X(2)=10
   45         P8Y(2)=10
   46         P8X(3)=20
   47         P8Y(3)=20
   48         P8X(4)=10
   49         P8Y(4)=20
   50         N8=0

Dec 16 12:13 1996  exp29.for Page 2


   51         DT=1
   52         TESC=DT
   53         TMAX=300
   54         T=1
   55         NIM1=735
   56         NAL1=NAL(0,0,NIM1)
   57   C
   58   C **********************************************************************
   59   C
   60   C HACER UNO HAB(X,Y),REL(X,Y) Y MOV2(X,Y)
   61    1000 XHR1=1
   62         XHR2=XMAX
   63         YHR1=1
   64         YHR2=YMAX
   65          DO 1020 Y=YHR1,YHR2
   66           DO 1010 X=XHR1,XHR2
   67         HAB(X,Y)=1
   68         REL(X,Y)=1
   69           MOV2(X,Y)=0
   70    1010 CONTINUE
   71    1020 CONTINUE
   72   C
   73   C **********************************************************************
   74   C
   75   C UBICAR LOS 8'S
   76          DO 1810 I=1,NUM8
   77          X=P8X(I)
   78          Y=P8Y(I)
   79          HAB(X,Y)=8
   80          REL(X,Y)=VID8
   81    1810  CONTINUE
   82   C
   83   C **********************************************************************
   84   C
   85   C ADVANCE DEL PELOJ
   86    1800  CONTINUE
   87          DO 1720 Y=1,YMAX
   88           DO 1710 X=1,XMAX
   89         IF(HAB(X,Y).EQ.1) GO TO 1705
   90           IF(HAB(X,Y).EQ.0) GO TO 1703
   91           IF(REL(X,Y).NE.0)REL(X,Y)=REL(X,Y)-1
   92   C DETECTAR SI HAY ELEMENTOS QUE DEBEN DECAER 0 1'S QUE DEBEN MOVERSE
   93           IF(REL(X,Y).GT.0) GO TO 1705
   94           IF(HAB(X,Y).EQ.2) NUM1=NUM1+1
   95           IF(HAB(X,Y).EQ.3) NUM1=NUM1+1
   96           IF(HAB(X,Y).EQ.4) NUM1=NUM1+1
   97         HAB(X,Y)=1
   98         REL(X,Y)=1
   99           GO TO 1705
  100    1703   CONTINUE

Dec 16 12:13 1996  exp29.for Page 3


  101   C MOVIMIENTO DE LOS 1'S (MEDIANTE MOVIENTO DE LOS 0'S)
  102           XPF0=NAL(1,XMAX,0)
  103           YPF0=NAL(1,YMAX,0)
  104           IF(HAB(XPF0,YPF0).NE.1) GO TO 1710
  105           HAB(X,Y)=1
  106           REL(X,Y)=1
  107           IF(NUM1.GT.0) GO TO 1702
  108           HAB(XPF0,YPF0)=0
  109           REL(XPF0,YPF0)=0
  110           GO TO 1710
  111    1702   NUM1=NUM1-1
  112           GO TO 1710
  113    1705   CONTINUE
  114    1710  CONTINUE
  115    1720   CONTINUE
  116         NUM1A=NUM1
  117    1100 CONTINUE
  118   C
  119   C **********************************************************************
  120   C
  121   C MOVIMIENTO DE LOS 8'S
  122    1200 CONTINUE
  123          DO 1820 I=1,NUM8
  124          X=P8X(I)
  125          Y=P8Y(I)
  126          NAX8=NAL(MIDX8,MADX8,0)
  127          NAY8=NAL(MIDY8,MADY8,0)
  128          XPF8=X+NAX8
  129          YPF8=Y+NAY8
  130          IF(HAB(XPF8,YPF8).NE.1) GO TO 1820
  131          IF((HAB(XPF8,Y).EQ.4).AND.(HAB(X,YPF8).EQ.4)) GO TO 1820
  132          IF((XPF8.LT.MIX8).OR.(XPF8.GT.MAX8)) GO TO 1820
  133          IF((YPF8.LT.MIY8).OR.(YPF8.GT.MAY8)) GO TO 1820
  134          HAB(X,Y)=1
  135          HAB(XPF8,YPF8)=8
  136          REL(XPF8,YPF8)=REL(X,Y)
  137          REL(X,Y)=1
  138          P8X(I)=XPF8
  139          P8Y(I)=YPF8
  140    1820  CONTINUE
  141   C
  142   C **********************************************************************
  143   C
  144    1821 CONTINUE
  145   C RECORRER  HAB(X,Y)
  146         XH1=1
  147         XH2=XMAX
  148         YH1=1
  149         YH2=YMAX
  150          DO 1220 Y=YH1,YH2

Dec 16 12:13 1996  exp29.for Page 4


  151           DO 1210 X=XH1,XH2
  152           IF(HAB(X,Y).EQ.0) GO TO 1210
  153           IF(HAB(X,Y).EQ.1) GO TO 1210
  154           IF(HAB(X,Y).EQ.2) GO TO 200
  155           IF(HAB(X,Y).EQ.3) GO TO 300
  156           IF(HAB(X,Y).EQ.4) GO TO 400
  157           IF(HAB(X,Y).EQ.8) GO TO 1
  158           GO TO 2990
  159   C
  160   C **********************************************************************
  161   C
  162   C ELEMENTO 8
  163    1    X8=X
  164         Y8=Y
  165   C RECORRER EL ENTORNO DE ESTE 8
  166         D=1
  167         X81=X8-D
  168          X82=X8+D
  169          Y81=Y8-D
  170          Y82=Y8+D
  171           DO 20 Y8A=Y81,Y82
  172           X83=2
  173           IF((Y8A.EQ.(Y8-D)).OR.(Y8A.EQ.(Y8+D))) X83=1
  174            DO 10 X8A=X81,X82,X83
  175            IF(HAB(X8A,Y8A).EQ.0) GO TO 10
  176            IF(HAB(X8A,Y8A).EQ.1) GO TO 3
  177            GO TO 10
  178    3     IF((HAB(X8A,Y8).EQ.4).AND.(HAB(X8,Y8A).EQ.4)) GO TO 10
  179          GO TO 100
  180   C
  181   C **********************************************************************
  182   C
  183   C ELEMENTO 1
  184    100  X1=X8A
  185         Y1=Y8A
  186         IF(D.NE.1) GO TO 10
  187   C RECORRER EL ENTORNO DE ESTE 1
  188         X11=X1-1
  189         X12=X1+1
  190         Y11=Y1-1
  191         Y12=Y1+1
  192          DO 120 Y1A=Y11,Y12
  193          X13=1
  194          IF(Y1A.EQ.Y1) X13=2
  195           DO 110 X1A=X11,X12,X13
  196           IF(HAB(X1A,Y1A).NE.1) GO TO 110
  197         IF((HAB(X1A,Y1).EQ.4).AND.(HAB(X1,Y1A).EQ.4)) GO TO 110
  198           HAB(X1A,Y1A)=2
  199           REL(X1A,Y1A)=VID2
  200           HAB(X1,Y1)=0

Dec 16 12:13 1996  exp29.for Page 5


  201           REL(X1,Y1)=0
  202           GO TO 10
  203    110    CONTINUE
  204    120   CONTINUE
  205    10      CONTINUE
  206    20     CONTINUE
  207         GO TO 1210
  208   C
  209   C **********************************************************************
  210   C
  211   C ELEMENTO 2
  212    200  X2=X
  213         Y2=Y
  214   C TRANSFORMACION DE ESTE 2
  215    208  C2=0
  216         C23=0
  217         C24=0
  218   C RECORRER EL ENTORNO DE ESTE 2
  219         X21=X2-1
  220         X22=X2+1
  221         Y21=Y2-1
  222         Y22=Y2+1
  223          DO 220 Y2A=Y21,Y22
  224          X23=1
  225          IF(Y2A.EQ.Y2) X23=2
  226           DO 210 X2A=X21,X22,X23
  227         IF(HAB(X2A,Y2A).EQ.2) C2=C2+1
  228         IF(HAB(X2A,Y2A).EQ.3) C23=1
  229         IF(HAB(X2A,Y2A).EQ.4) C24=C24+1
  230    210    CONTINUE
  231    220   CONTINUE
  232   C SI NO HAY MAS DE UN 4 Y HAY UN 2 O UNO O MAS 3'S, ESTE 2 SE TRANSFORMA
  233         IF(.NOT.((C24.LE.1).AND.((C2.EQ.1).OR.(C23.EQ.1)))) GO TO 221
  234           HAB(X2,Y2)=3
  235           REL(X2,Y2)=VID3
  236         GO TO 1210
  237   C MOVIMIENTO DE ESTE 2
  238    221  N2=0
  239         IF(MOV2(X2,Y2).NE.1) GO TO 223
  240         MOV2(X2,Y2)=0
  241         GO TO 1210
  242    223  NAX2=NAL(MIDX2,MADX2,0)
  243         NAY2=NAL(MIDY2,MADY2,0)
  244         XPF2=X2+NAX2
  245         YPF2=Y2+NAY2
  246         IF((HAB(XPF2,YPF2).EQ.4).OR.(HAB(XPF2,YPF2).EQ.3)) GO TO 223
  247         IF((XPF2.LT.2).OR.(XPF2.GT.(XMAX-1))) GO TO 1210
  248         IF((YPF2.LT.2).OR.(YPF2.GT.(YMAX-1))) GO TO 1210
  249         IF((HAB(XPF2,Y2).EQ.4).AND.(HAB(X2,YPF2).EQ.4)) GO TO 205
  250         IF(HAB(XPF2,YPF2).EQ.1) GO TO 203

Dec 16 12:13 1996  exp29.for Page 6


  251    205  N2=N2+1
  252         IF(N2.GE.NMAX2) GO TO 1210
  253         GO TO 223
  254    203  HAB(X2,Y2)=1
  255         HAB(XPF2,YPF2)=2
  256         REL(XPF2,YPF2)=REL(X2,Y2)
  257         REL(X2,Y2)=1
  258         IF((XPF2.GT.X2).OR.(YPF2.GT.Y2)) MOV2(XPF2,YPF2)=1
  259         GO TO 1210
  260   C
  261   C **********************************************************************
  262   C
  263   C ELEMENTO 3
  264    300  X3=X
  265         Y3=Y
  266   C RECORRER EL ENTORNO DE ESTE 3
  267   C MOLINETE SINISTROGIRO
  268         X31=X3+1
  269         Y31=Y3+1
  270         C3=0
  271         MAR3=0
  272         IF((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)) MAR3=1
  273    305  CONTINUE
  274         X3A=X31
  275         Y3A=Y31
  276         IF((X31.GE.X3).AND.(Y31.LT.Y3)) X3A=X31-1
  277         IF((X31.LE.X3).AND.(Y31.GT.Y3)) X3A=X31+1
  278         IF((Y31.LE.Y3).AND.(X31.LT.X3)) Y3A=Y31+1
  279         IF((Y31.GE.Y3).AND.(X31.GT.X3)) Y3A=Y31-1
  280         X31=X3A
  281         Y31=Y3A
  282         IF((.NOT.((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)))
  283        2.AND.(MAR3.EQ.1)) C3=C3+1
  284         IF(((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)).AND.(C3.EQ.0))
  285        2 MAR3=1
  286         IF(((HAB(X31,Y31).EQ.3).OR.(HAB(X31,Y31).EQ.4)).AND.(C3.GT.0))
  287        2 MAR3=0
  288         IF(.NOT.((C3.GT.0).AND.(C3.LT.6).AND.(MAR3.EQ.0))) GO TO 307
  289   C TRANSFORMACION DE ESTE 3 EN 4
  290         HAB(X3,Y3)=4
  291         REL(X3,Y3)=NAL(VMIN4,VMAX4,0)
  292         GO TO 1210
  293    307  CONTINUE
  294         IF((X31.EQ.X3).AND.(Y31.EQ.(Y3+1))) GO TO 1210
  295         GO TO 305
  296   C
  297   C **********************************************************************
  298   C
  299   C ELEMENTO 4
  300    400  X4=X

Dec 16 12:13 1996  exp29.for Page 7


  301         Y4=Y
  302   C RECORRER EL ENTORNO DE ESTE 4
  303   C MOLINETE SINISTROGIRO
  304         X41=X4+1
  305         Y41=Y4+1
  306         C4=0
  307         MAR4=0
  308         IF((HAB(X41,Y41).EQ.4).OR.(HAB(X41,Y41).EQ.3)) MAR4=1
  309    405  CONTINUE
  310         X4A=X41
  311         Y4A=Y41
  312         IF((X41.GE.X4).AND.(Y41.LT.Y4)) X4A=X41-1
  313         IF((X41.LE.X4).AND.(Y41.GT.Y4)) X4A=X41+1
  314         IF((Y41.LE.Y4).AND.(X41.LT.X4)) Y4A=Y41+1
  315         IF((Y41.GE.Y4).AND.(X41.GT.X4)) Y4A=Y41-1
  316         X41=X4A
  317         Y41=Y4A
  318         IF((.NOT.((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4)))
  319        2.AND.(MAR4.EQ.1)) C4=C4+1
  320         IF(((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4)).AND.(C4.EQ.0))
  321        2 MAR4=1
  322         IF(((HAB(X41,Y41).EQ.3).OR.(HAB(X41,Y41).EQ.4)).AND.(C4.GT.0))
  323        2 MAR4=0
  324         IF((C4.GT.0).AND.(C4.LT.6).AND.(MAR4.EQ.0)) GO TO 1210
  325         IF((X41.EQ.X4).AND.(Y41.EQ.(Y4+1)))GO TO 408
  326         GO TO 405
  327    408  CONTINUE
  328   C TRANSFORMACION DE ESTE 4 EN 3
  329         HAB(X4,Y4)=3
  330         REL(X4,Y4)=VID3
  331         GO TO 1210
  332   C
  333   C **********************************************************************
  334   C
  335    1210   CONTINUE
  336    1220  CONTINUE
  337   C
  338   C **********************************************************************
  339   C
  340   C ESCRIBIR HAB(X,Y)
  341    2000 CONTINUE
  342         IF(TESC.LT.DT) GO TO 2100
  343         TESC=0
  344         WRITE(3,2052) NUM1A,T
  345    2052 FORMAT('1',///,15X,'NUM1=',I5,45X,'T=',I5,///)
  346          DO 2020 Y=1,YMAX
  347           DO 2010 X=1,XMAX
  348           NN=HAB(X,Y)
  349           IF(NN.NE.0) GO TO 2005
  350           ESC(X,Y)=B(7)

Dec 16 12:13 1996  exp29.for Page 8


  351           GO TO 2010
  352    2005   ESC(X,Y)=B(NN)
  353    2010   CONTINUE
  354    2020  CONTINUE
  355         WRITE(3,2092) ((ESC(X,Y),X=1,XMAX),Y=1,YMAX)
  356    2092 FORMAT(' ',50X,30A1)
  357   C
  358   C **********************************************************************
  359   C
  360   C   AVANCE DEL TIEMPO
  361    2100 IF(T.GE.TMAX) GO TO 3000
  362         T=T+1
  363         TESC=TESC+1
  364         GO TO 1800
  365    2990 WRITE(3,2992)
  366    2992 FORMAT('0',///,3X,'ELEMENTO DESCONOCIDO',//)
  367    3000 STOP
  368         END



Nov 14 16:15 1996  nal.for Page 1


    1         INTEGER FUNCTION NAL (LO, HI, SALT)
    2         INTEGER LO, HI, SALT
    3         INTEGER SEED
    4         IF (SALT.NE.0) SEED=SALT
    5         NAL = LO + INT((RAN(SEED) * FLOAT(HI-LO)) + 0.5)
    6         RETURN
    7         END



next
up A Appendix: PROTOBIO
gif A.2 English Translation

Document: Computational Autopoiesis: The Original Algorithm

Copyright © 1997 All Rights Reserved.
Timestamp: Tue Dec 31 18:43:32 GMT 1996

mcmullin@eeng.dcu.ie