python中的随机通用抽样GA

2024-10-16 17:15:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个遗传算法,目前正在使用轮盘赌轮选择产生一个新的人口,我想改变它随机通用抽样。在

我对这里的工作有一个粗略的概述:

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


Tags: infor轮盘popstart例子人口遗传算法
1条回答
网友
1楼 · 发布于 2024-10-16 17:15:25
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

相关问题 更多 >