美文网首页1班互动区
创建种群的代码1--种群

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

作者: 大龙10 | 来源:发表于2022-08-12 04:41 被阅读0次

    书名:代码本色:用编程模拟自然系统
    作者: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步。

    相关文章

      网友评论

        本文标题:创建种群的代码1--种群

        本文链接:https://www.haomeiwen.com/subject/tplwwrtx.html