今天我们继续介绍基因演算法作曲。
昨天我们介绍了如何让电脑看得懂音乐/音符的样子以及如何对基因演算法里的个体做设定,今天我们照着步骤来介绍个体之间彼此 交配(Crossover) 的部分。
基因演算法流程:
(1) 产生个体 (Individual)
(2) 交配 (Crossover)
(3) 突变 (Mutation)
(4) 评分 (Fitness Evaluation)
(5) 适者生存不适者淘汰 (Survivor Selection)
(6) 选出最强的个体成为最佳解
所谓的交配,就是...
嗯...
那个...
就是呢...
ㄟ...........
就是洞房罗~
在这个步骤我们必须要让这一百个亲代间彼此交配并生出跟亲代同样数量,也就是一百个子代。
在基因演算法里面在做交配时有几个比较常用的方法,例如
单点交配 (One-Point Crossover)
双点交配 (Two-Point Crossover)
多点交配 (Multi-Point Crossover)
套选交配 (Uniform Crossover)
等等,如果全部讲解的话读者们大概会是这样的状态
因此我们选其中的双点交配
来当当作范例详细解释交配(Crossover)的时候到底在干什麽
首先我们先请今天的男女主角出来示范如何执行交配的动作
个体1 (男主角) : [0, 2, 0, 9, 15, 24, 16, 10]
个体2 (女主角) : [6, 2, 9, 17, 17, 17, 3, 17]
而所谓的双点交配
,就是我们要选择两个点来当作 交配的地点 基因转换的地方,通常是用随机来决定决定这两个点的位子,例如我们选择在第三个音与第六个音当作我们的点位,则这两个个体就会在第三到第六个音符中间交换彼此间的基因并产生两个新的子代。
亲代个体1 : [0, 2, 0, 9, 15, 24, 16, 10]
亲代个体2 : [6, 2, 9, 17, 17, 17, 3, 17]
粗体部分即为要交配的位子,而透过内部基因的转换,我们就可以得到两个新的子代个体
子代个体1 : [0, 2, 9, 17, 17, 17, 16, 10]
子代个体2 : [6, 2, 0, 9, 15, 24, 17, 3, 17]
而这样的过程我们不断的重复,每次都重新选择两个亲代来做交配并产生两个新的子代,直到我们产生出100个子代为止。
除了交配有不同的方法之外,实际上在 挑选亲代(Selection) 的时候也有几个不同的方法,例如
轮盘抽选法 (Roulette Wheel Selection)
比较选取法 (Tournament Selection)
由於这部分要等我们解释到步骤(5)适者生存不适者淘汰後才有办法解释,这边我们先做个简单的说明:
基本上不管是轮盘法
还是比选法
,主要的目的都是希望挑到比较好的个体来当作交配的亲代,类似菁英主义的概念,因为以机率来说,拥有较好基因的父母一般来说更容易交配出较好的子代。但也不全然只有基因较好的个体有机会被选中来交配,这两种方法里面都有随机性让条件较差的个体依然有交配的机会。
(今天好像整篇都在开车...................)
那麽我们到这边先告一个段落,明天再来继续聊聊交配後产生的子代接下来要面对的各种残酷舞台。
此篇延续 Bootstrap 客制化 Sass utilities(上)最後尚未介绍的 gener...
在前一天的练习里,我们虽然只写了一个非常简单的 Hello World 程序,但只要能在 Run 面...
前言 科技日新月异,AI、区块链、IoT、Web App 等等都是可以选择的道路。 大学就像一间自助...
前言 还记得我在 Day03 介绍的《Zettelkasten卡片盒笔记法,建立知识连结网路来活用笔...
嘿嘿!各位好你最好的朋友老肝哥照惯例又来了 今天老肝哥心情其实不错 因为自己又坚持一天了,但老肝哥在...