创建种群的代码1--种群

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

9.7 创建种群的代码

第1步:初始化种群

  • 如果我们要创建一个种群,首先要做的就是用一个数据结构存放种群中的个体元素。
  • 在大部分情况下(比如猴子敲键盘的例子),种群的个体数量是固定的,因此可以用数组存放个体(在后面的例子中,种群中的个体数量会发生变化,我们会用ArrayList实现它)。
  • 数组中应该存放什么对象?我们还应该用一个存放基因信息的对象表示个体。
    它可以称为DNA对象:
class DNA {
}
  • 种群就是由DNA对象组成的数组。
    DNA[] population = new DNA[100]; 100个DNA对象组成的种群
  • DNA类应该包含哪些内容?
    对于敲击键盘的猴子,DNA就是它打出来的随机语句,也就是一个字符串。
class DNA {
    string phrase;
}

这样的实现是合理的,但我们不想把String对象用做遗传密码。相反,我们想用字符串数组表示遗传密码。

class DNA {
    char[] genes = new char[18]; 每个“基因”都是数组中的元素,我们需要18个基因,因为“to be or not to be"
}
  • 用数组的好处是:我们可以很方便地把这些代码扩展到其他例子中。
    举些例子:在一个物理系统中,生物的DNA可能是由向量组成的数组;对于一个图像对象,个体的DNA就是整型(RGB值)数组。
    我们可以用数组描述任意属性的集合。尽管字符串非常适用于本例,但数组可以作为未来扩展的基础。

  • 遗传算法要求我们为种群创建N个个体,每个个体的DNA都是随机生成的。因此,在对象的构造函数中,我们用随机方式确定数组中的每个字符。

class DNA {
    char[] genes = new char[18];
    DNA() {
        for (int i = 0; i < genes.lenght; i++) {
            genes[i] = (char) random(32,128); 从编号为32~128的ASCII字符中随机选择一系列字}
        }
    }
  • 我们已经有了构造函数,以下代码初始化种群数组中的DNA对象。
DNA[] population = new DNA[100];
void setup() {
    for (int i = 0; i < population.length; i++) {
        population[i] = new DNA(); 初始化种群中的每个成员
    }
}
  • DNA类根本没有完成。为了执行遗传算法的其他任务,我们还需要在其中加入更多函数。

下面我们将实现遗传算法的第2步和第3步。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容