0

我有一个遗传算法,目前正在使用轮盘选择来产生一个新的群体,我想将其改为随机通用采样。python中的随机通用采样GA

我有事情将如何在这里工作的一个大致的轮廓:

pointerDistance = sumFitness/popSize 
start = rand.uniform(0, pointerDistance) 
for i in xrange(popSize): 
    pointers.append(start + i*pointerDistance) 
cumulativeFit = 0 
newIndiv = 0 
for p in pointers: 
    while cumulativeFit <= p: 
     cumulativeFit += pop[newIndiv].fitness 
     newPop[newIndiv] = copy.deepcopy(pop[newIndiv]) 
     newIndiv += 1 

,但我有究竟如何实现随机抽样普遍挣扎。有没有人知道一些伪代码的好源,或者一个例子?

的是用一个例子什么随机抽样普遍的简要说明(但我不知道这是否有意义?):

http://en.wikipedia.org/wiki/Stochastic_universal_sampling

+0

如果添加了它可以帮助链接或描述什么是随机通用抽样是 – inspectorG4dget

+0

我已经添加了一个关于它的维基文章的链接。它确实有一些示例代码,但我不确定我是否理解它/我不相信它是正确的。 – user2902575

+0

这是什么,你不明白:你不确定你的实现是多么准确,或者该方法本身是有用的? – inspectorG4dget

回答

2
def makeWheel(population): 
    wheel = [] 
    total = sum(fitness(p) for p in population) 
    top = 0 
    for p in population: 
     f = fitness(p)/total 
     wheel.append((top, top+f, p)) 
     top += f 
    return wheel 

def binSearch(wheel, num): 
    mid = len(wheel)//2 
    low, high, answer = wheel[mid] 
    if low<=num<=high: 
     return answer 
    elif low > num: 
     return binSearch(wheel[mid+1:], num) 
    else: 
     return binSearch(wheel[:mid], num) 

def select(wheel, N): 
    stepSize = 1.0/N 
    answer = [] 
    r = random.random() 
    answer.append(binSearch(wheel, r)) 
    while len(answer) < N: 
     r += stepSize 
     if r>1: 
      r %= 1 
     answer.append(binSearch(wheel, r)) 
    return answer 
+0

你能否添加一些评论来解释你的逻辑? @ inspectorG4dget? – Loligans