Пример #1
0
 def __call__(self, orgs, prob=1.0):
     if np.random.random_sample() > prob:
         return orgs[0], orgs[1]
     if isinstance(orgs[0], np.ndarray):
         idx = np.random.random_integers(0, len(orgs[0]) - 1)
         return (np.append(orgs[0][:idx], orgs[1][idx:], axis=0),
                 np.append(orgs[1][:idx], orgs[0][idx:], axis=0))
     elif isinstance(orgs[0], TernaryString):
         idx = np.random.random_integers(0, orgs[0].length - 1)
         ret1 = TernaryString(orgs[0].base, orgs[0].known, orgs[0].length)
         ret2 = TernaryString(orgs[1].base, orgs[1].known, orgs[1].length)
         ret1[idx:] = orgs[1][idx:]
         ret2[idx:] = orgs[0][idx:]
         return ret1, ret2
     else:
         raise ValueError("Received unknown type in OnePointDualCrosser.")
Пример #2
0
 def partition(self):
     """ compute the partition function - only for small dimension !!! """
     from pyec.util.TernaryString import TernaryString
     total = 0
     vsize = self.vsize
     hsize = self.hsize
     all = (1L << (vsize + hsize)) - 1L
     for i in xrange(1 << (vsize + hsize)):
         total += exp(self.__call__(TernaryString(long(i), all)))
     return total
Пример #3
0
 def mutate(self, x):
     """This method uses an iterative algorithm to flip bits in
   a TernaryString with a given probability. The algorithm essentially
   uses the binary representation of the bit-flipping probability in order
   to convert random byte sampling (``p=.5``) to account for any probability,
   with resolution of ``1e-16``.
   
   """
     flipped = TernaryString.bernoulli(self.p(), self.config.space.dim)
     base = x.base & ~flipped.base | ~x.base & flipped.base
     known = x.known & flipped.known
     return TernaryString(base, known, self.config.space.dim)
Пример #4
0
 def __call__(self, network):
    numBytes = int(ceil(len(network.variables) / 8.0))
    numFull  = len(network.variables) / 8
    initial = ''
    if numBytes != numFull:
       extra = len(network.variables) % 8
       initMask = 0
       for i in xrange(extra):
          initMask <<= 1
          initMask |= 1
       initial = struct.pack('B',initMask)
          
    base = long(binascii.hexlify(random.bytes(numBytes)), 16)
    known = long(binascii.hexlify(initial + '\xff'*numFull), 16)
    return TernaryString(base, known)
Пример #5
0
 def __call__(self, orgs, prob):
     if np.random.random_sample() > prob:
         return orgs[0]
     if self.config.space.type == np.ndarray:
         rnd = np.random.random_sample(len(orgs[0])).round()
         return rnd * orgs[0] + (1 - rnd) * orgs[1]
     elif self.config.space.type == TernaryString:
         rnd = np.random.bytes(len(str(orgs[0])) * 8)
         rnd = long(binascii.hexlify(rnd), 16)
         base = rnd & orgs[0].base | ~rnd & orgs[1].base
         known = rnd & orgs[0].known | ~rnd & orgs[1].known
         return TernaryString(base, known, self.config.space.dim)
     else:
         err = "Unknown type for UniformCrossover: {0}"
         raise NotImplementException(err.format(self.config.space.type))
Пример #6
0
 def extent(self):
     lower = 0L | (self.spec.known & self.spec.base)
     upper = -1L & (self.spec.known & self.spec.base | ~self.spec.known)
     return (TernaryString(lower, self.spec.known, self.spec.length),
             TernaryString(upper, self.spec.known, self.spec.length))
Пример #7
0
 def configurations(self):
    cnt = 1L << (len(self.parents))
    for i in xrange(cnt):
       yield TernaryString(self.expand(long(i)), self.known)
    raise StopIteration
Пример #8
0
 def values(self):
    mask = 1L << self.index
    yield TernaryString(0L, mask)
    yield TernaryString(mask, mask)
    raise StopIteration