<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">My previous program has quite a few bugs. I fixed them in the program below. However, both programs are very slow in Clean. As I told before, I believe that the problem lies in the Mersennetwister library. In order to see how slow it is, change the population size to something like 5000.<br><br><br>module gp;<br>import StdEnv, MersenneTwister, ArgEnv, StdTime;<br><br>:: Op = AND | OR | NOT;<br>:: Tree= L Int | T Op [Tree];<br>::TT :== [(Bool,Bool,Bool)];<br>::Stt= !{ psz::Int, beastSz::Int, seed::[Int], <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thr::Real, fs::[Op]};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>table= [(False, False, False),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (True, False, True),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (True, True,
 False),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (False, True, True)];<br><br>Start w<br>&nbsp; # (ct,w)= getCurrentTime w;<br>&nbsp;&nbsp;&nbsp; seed= 1+ct.seconds+ct.minutes*60;<br>&nbsp;&nbsp;&nbsp; xs= genRandInt seed;<br>&nbsp;&nbsp;&nbsp; st = { psz=popsz,beastSz=5, seed= xs,&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fs= [OR, AND, NOT], thr=4.0};<br>&nbsp;&nbsp;&nbsp; (p, st) = gen0 population st;<br>&nbsp;&nbsp;&nbsp; (gate, st)= evolve 30 p (L 0) st; <br>&nbsp; = gate;<br>where {<br>&nbsp; popsz= 50;<br>&nbsp; population :: .{!Tree};<br>&nbsp; population = createArray popsz (L 0);<br>}<br>rn n st=:{seed}<br>&nbsp;# [x:seed] = seed; <br>&nbsp;= ((abs x) rem n, {st&amp;seed= seed});<br>rnLen (T _ s) st= rn (length s) st;<br><br>nGates (L i)= 0.0;<br>nGates (T p xs) = -0.1 + sum[nGates g \\ g &lt;- xs];<br><br>run :: Tree {Bool} -&gt; Bool;// Interpreter<br>run (L i) v= v.[i];<br>run (T AND
 xs) v = and [run c v \\ c &lt;- xs];<br>run (T OR xs) v= or [run c v \\ c &lt;- xs];<br>run (T NOT [t:_]) v= not (run t v);<br><br>mutate e (L i, st) = (e, st);<br>mutate e (t, st) = ins t (rnLen t st) where { <br>&nbsp; ins (T p [x:xs]) (n, st) | n &gt; 0 <br>&nbsp;&nbsp;&nbsp; # (T _ mt, st)= ins (T p xs) (n-1, st);<br>&nbsp;&nbsp;&nbsp; = (T p [x:mt], st);<br>&nbsp; ins (T p [L i:xs]) (0, st)=(T p[e:xs], st); <br>&nbsp; ins (T p [t:xs]) (0,st) <br>&nbsp;&nbsp;&nbsp; # (coin, st)= rn 2 st<br>&nbsp;&nbsp;&nbsp; | coin==0 = (T p [e:xs], st);<br>&nbsp;&nbsp;&nbsp; # (xpr, st)= mutate e (t, st);<br>&nbsp;&nbsp;&nbsp; = (T p [xpr:xs], st); }<br><br>crossover e1 e2 st<br>&nbsp;&nbsp;&nbsp; # (g1, st) = frag (e1, st);<br>&nbsp;&nbsp;&nbsp; &nbsp; (g2, st) = frag (e2, st);<br>&nbsp;&nbsp;&nbsp; &nbsp; (c1, st) = mutate g1 (e2, st);<br>&nbsp;&nbsp;&nbsp; &nbsp; (c2, st) = mutate g2 (e1, st);<br>&nbsp;&nbsp;&nbsp; = ([c2, c1], st) where{<br>&nbsp; frag (L i,
 st) = (L i, st);<br>&nbsp; frag (T p xs, st)<br>&nbsp;&nbsp;&nbsp; # (n, st)= rnLen (T p xs) st;<br>&nbsp; &nbsp;&nbsp;&nbsp; # xpr = xs!!n;<br>&nbsp; &nbsp;&nbsp;&nbsp; # (coin, st)= rn 2 st;<br>&nbsp;&nbsp;&nbsp; | coin== 0=&nbsp; (xpr, st);<br>&nbsp;&nbsp;&nbsp; = frag (xpr, st); }<br><br>rndXpr st=:{fs, beastSz}= loop beastSz st where {<br>&nbsp; rth s st<br>&nbsp; # (n, st) = rn (length s) st; <br>&nbsp; = (s!!n, st);<br>&nbsp; fxy NOT st<br>&nbsp; # (n, st)= rn 2 st;<br>&nbsp; = (T NOT [L n], st);<br>&nbsp; fxy AND st = (T AND [L 0, L 1], st);<br>&nbsp; fxy OR&nbsp; st = (T OR&nbsp; [L 0, L 1], st);<br>&nbsp; loop n st | n&lt;1 <br>&nbsp;&nbsp; # (fn, st)= rth fs st;<br>&nbsp;&nbsp; # (f, st)= fxy fn st;<br>&nbsp;&nbsp; = (f, st);<br>&nbsp; loop n st<br>&nbsp;&nbsp; # (f1, st) = loop (n-1) st;<br>&nbsp;&nbsp; # (fn, st) = rth fs st; <br>&nbsp;&nbsp; # (e, st) = fxy fn st;<br>&nbsp;&nbsp; = mutate e (f1, st); }<br><br>gen0 population st=:{psz, fs}=
 loop population 0 st where {<br>&nbsp;&nbsp; loop p i st | i &gt;= size p = (p, st);<br>&nbsp;&nbsp; loop p i st<br>&nbsp;&nbsp;&nbsp;&nbsp; # (g, ts)= rndXpr st;<br>&nbsp;&nbsp;&nbsp;&nbsp; = loop {p&amp;[i]=g}&nbsp; (i+1) st;}<br><br>fitness gt= ng+1.0+sum[ft t \\ t &lt;- table] <br>where{ ng= nGates gt;<br>&nbsp;&nbsp; ft (out, t1, t2) | run gt {t1, t2} == out= 1.0;<br>&nbsp;&nbsp; ft _ = 0.0; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>evolve n p b st | n &lt; 1 <br>&nbsp; # (p, st)= gen0 p st;<br>&nbsp; = evolve 30 p b st;<br>evolve n p b st=:{thr, fs, psz} <br>&nbsp; # (n1, st)= rn psz st;<br>&nbsp;&nbsp;&nbsp; (n2, st)= rn psz st;<br>&nbsp;&nbsp;&nbsp; (g1, p) = p![n1];<br>&nbsp;&nbsp;&nbsp; (g2, p) = p![n2];<br>&nbsp;&nbsp;&nbsp; ([c1, c2:_], st) = crossover g1 g2 st;<br>&nbsp;&nbsp;&nbsp; p= insrt c1 p 0 psz;<br>&nbsp;&nbsp;&nbsp; p= insrt c2 p 0 psz;<br>&nbsp;&nbsp;&nbsp; (g, p)= best 0 b p;<br>&nbsp;&nbsp;&nbsp; f= fitness g;<br>&nbsp; | f&gt;thr
 = (g, st);<br>&nbsp; = evolve (n-1) p b st;<br>&nbsp; <br>&nbsp; best i res p | i &gt;= size p= (res, p);<br>&nbsp; best i fg1 p =:{[i]=fg}<br>&nbsp;&nbsp;&nbsp; | (fitness fg) &gt; (fitness fg1) = best (i+1) fg p;<br>&nbsp;&nbsp;&nbsp; = best (i+1) fg1 p;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp; insrt g v i sz | i &gt;= sz = v;<br>&nbsp; insrt g v=:{[i]=a} i sz <br>&nbsp;&nbsp;&nbsp; | (fitness g) &gt; (fitness a) = {v&amp;[i]=g};<br>&nbsp;&nbsp;&nbsp; = insrt g v (i+1) sz;<br></td></tr></table><br>
      <hr size=1> <a href="http://ca.promos.yahoo.com/jacko/">Get the name you&#39;ve always wanted </a>! <strong>@ymail.com </strong>or <strong>@rocketmail.com</strong>.