'Program NNET256.BAS produces neural net attractors '(VGA 320 x 200 x 256 color version) 'Copyright (c) 1997 by J. C. Sprott SCREEN 13 N% = 4 'Number of neurons D% = 16 'Number of inputs (dimension) s = .5 'Scaling factor (network gain) tmax& = 80000 'Number of iterations sw% = 319 'Screen width - 1 sh% = 199 'Screen height - 1 nc% = 254 'Number of colors - 2 DIM w(N%, D%), B(N%, D%), x(N%), y(D%), PAL&(nc% + 1) PAL&(0) = 65536 * 63 + 256 * 63 + 63 'PAL&(0) IS WHITE PAL&(1) = 65536 * 55 + 256 * 55 + 55 'PAL&(1) IS GRAY FOR i% = 2 TO nc% + 1 B% = INT(32 + 32 * COS(.02464 * i%)) G% = INT(32 + 32 * COS(.02464 * i% + 4.1888)) R% = INT(32 + 32 * COS(.02464 * i% + 2.0944)) PAL&(i%) = 65536 * B% + 256 * G% + R% NEXT i% RANDOMIZE TIMER WHILE INKEY$ <> CHR$(27) CLS PALETTE USING PAL&(0) p& = 0 FOR i% = 1 TO N% FOR j% = 1 TO D% w(i%, j%) = 1 - 2 * RND NEXT j% B(i%, 1) = s * RND x(i%) = .5 NEXT i% FOR t& = 1 TO tmax& y(0) = 0 FOR i% = 1 TO N% y(0) = y(0) + B(i%, 1) * x(i%) NEXT i% FOR j% = D% TO 1 STEP -1 y(j%) = y(j% - 1) NEXT j% FOR i% = 1 TO N% u = 0 FOR j% = 1 TO D% u = u + w(i%, j%) * y(j%) NEXT j% x(i%) = 1 - 2 / (EXP(2 * u) + 1) NEXT i% IF t& > tmax& / 50 THEN IF 10 * p& + 50 < t& - tmax& / 50 THEN t& = tmax& x% = .5 * (sw% + sw% * x(1)) y% = .5 * (sh% - sh% * x(2)) z% = .025 * (sw% + sw% * x(3)) c% = 2 + INT(nc% * (.5 * x(4) + .5)) IF POINT(x%, y%) < 2 THEN p& = p& + 1 IF c% > POINT(x%, y%) THEN PSET (x%, y%), c% x% = x% + z%: y% = y% + z% IF POINT(x%, y%) = 0 THEN PSET (x%, y%), 1 END IF NEXT t& WEND END