创建种群的代码3--繁殖

2022-08-14  本文已影响0人  大龙10

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
第9章目录

9.7 创建种群的代码3

第3步:繁殖

int a = int(random(matingPool.size()));
int b = int(random(matingPool.size()));
DNA parentA = matingPool.get(a);
DNA parentB = matingPool.get(b);
DNA child = parentA.crossover(parentB); 交叉函数 A
child.mutate(); 突变函数
DNA crossover(DNA partner) { 函数的参数是DNA对象,返回值也是DNA对象
DNA child = new DNA(); 子代是新的DNA对象,DNA在构造函数中是用随机方式初始化的,但我们会
int midpoint = int(random(genes.length)); 在基因数组中选择随机的“中间点
for(int i = 0; i < genes.length; i++) {
    if (i > midpoint) child.genes[i] = genes[i]; 中间点之前和之后的基因来自不同的父
        else child.genes[i] = partner.genes[i];
    }
    return child; 返回子代DNA
}
float mutationRate = 0.01;
void mutate() {
    for (int i = 0; i < genes.length; i++) { 遍历数组中的每个基因
    if(random(1) < mutationRate) {这里的代码有1%的机会执行
        genes[i] = (char) random(32,128); 突变,产生随机字符
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读