Matt Owen

source code for "files/robot birds and robot bees/mutate.py"

return to portfolio
  1.  # matt #
  2.  #
  3.  
  4.  import random
  5.  
  6.  
  7.  
  8.  def dot(l, r):
  9.   if len(l) != len(r): raise size_mismatch
  10.   s = 0
  11.   for k in range(len(l)): s += l[k] * r[k]
  12.   return s
  13.  
  14.  class InvalidValue: pass
  15.  
  16.  
  17.  # mutater # # # # # #
  18.  # # # # # # #
  19.  
  20.  class mutater:
  21.   def __init__(s, p, mu, length):
  22.   if not 0 < mu < 1: raise InvalidValue
  23.   if not len(p) > 0: raise InvalidValue
  24.   pass
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  #mutater(p=1, mu=.003)
  32.  
  33.  mu = .1
  34.  k = 3
  35.  l = 200
  36.  
  37.  class LengthMismatch: pass
  38.  
  39.  class pvector:
  40.   def __init__(s, weights=[], keys=False):
  41.   if keys == False: keys = range(len(weights))
  42.   elif len(keys) != len(weights): raise LengthMismatch
  43.  
  44.   s._sum = float(sum(weights))
  45.   s._w = [w/s._sum for w in weights]
  46.   s._k = keys
  47.   s._ub = [w for w in s._w]
  48.   for k in range(1, len(s._w)): s._ub[k] += s._ub[k-1]
  49.  
  50.   def sample(s, n=1): return [s.single_sample() for k in range(n)]
  51.  
  52.   def single_sample(s):
  53.   r = random.random()
  54.   k = 0
  55.   while not r < s._ub[k]: k += 1
  56.   return k
  57.  
  58.   def mean(s): return dot(s._w, s._k)
  59.  
  60.  p = pvector(weights = [.2, .3, 0, .5])
  61.  v = p.sample(n=2000)
  62.  
  63.  print 'mean =', p.mean()
  64.  print 'or... ', sum(v)/float(len(v))
  65.  
  66.  #print [random.uniform(0,5) for k in range(5)]
  67.  
  68.  def distr(mu, size):
  69.   r = size
  70.  
  71.   U = [(1-mu)**(r*u)*(1-(1-mu)**r)**int(u < l) for u in range(r+1)]
  72.   K = [mu*(1-mu)**k/(1-(1-mu)**r) for k in range(r)]
  73.  
  74.   #print U, 'sum =', sum(U)
  75.   #print K, 'sum =', sum(K)
  76.   pass
  77.  
  78.  
  79.  distr(mu=.5, size=5)
  80.  
  81.  #print random.randrange(0, 1, st)