Day 19: 人工智慧在音乐领域的应用 (AI作曲-基因演算法三 音乐间的交配)

今天我们继续介绍基因演算法作曲
昨天我们介绍了如何让电脑看得懂音乐/音符的样子以及如何对基因演算法里的个体做设定,今天我们照着步骤来介绍个体之间彼此 交配(Crossover) 的部分。

基因演算法流程:
(1) 产生个体 (Individual)
(2) 交配 (Crossover)
(3) 突变 (Mutation)
(4) 评分 (Fitness Evaluation)
(5) 适者生存不适者淘汰 (Survivor Selection)
(6) 选出最强的个体成为最佳解

交配 (Crossover)

所谓的交配,就是...
嗯...
那个...
就是呢...
ㄟ...........
https://ithelp.ithome.com.tw/upload/images/20211003/20140556K96EbwAJGR.jpg

就是洞房罗~
Drum

在这个步骤我们必须要让这一百个亲代间彼此交配并生出跟亲代同样数量,也就是一百个子代
在基因演算法里面在做交配时有几个比较常用的方法,例如
单点交配 (One-Point Crossover)
双点交配 (Two-Point Crossover)
多点交配 (Multi-Point Crossover)
套选交配 (Uniform Crossover)
等等,如果全部讲解的话读者们大概会是这样的状态
https://ithelp.ithome.com.tw/upload/images/20211003/2014055690pARx4Tg0.jpg

因此我们选其中的双点交配来当当作范例详细解释交配(Crossover)的时候到底在干什麽
https://ithelp.ithome.com.tw/upload/images/20211003/201405563OAZfCxTkK.jpg

首先我们先请今天的男女主角出来示范如何执行交配的动作
https://ithelp.ithome.com.tw/upload/images/20211003/20140556JIyLXbnbmx.jpg

个体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)适者生存不适者淘汰後才有办法解释,这边我们先做个简单的说明:
基本上不管是轮盘法还是比选法,主要的目的都是希望挑到比较好的个体来当作交配的亲代,类似菁英主义的概念,因为以机率来说,拥有较好基因的父母一般来说更容易交配出较好的子代。但也不全然只有基因较好的个体有机会被选中来交配,这两种方法里面都有随机性让条件较差的个体依然有交配的机会。

(今天好像整篇都在开车...................)
https://ithelp.ithome.com.tw/upload/images/20211003/20140556qjqZKZzWa6.jpg

那麽我们到这边先告一个段落,明天再来继续聊聊交配後产生的子代接下来要面对的各种残酷舞台。


<<:  产品成长策略 - 安索夫矩阵

>>:  Day23 - ListView

第 22 集:Bootstrap 客制化 utilities(下)

此篇延续 Bootstrap 客制化 Sass utilities(上)最後尚未介绍的 gener...

第十天:在 TeamCity 上完成第一个建置工作

在前一天的练习里,我们虽然只写了一个非常简单的 Hello World 程序,但只要能在 Run 面...

Day 02:Nice to meet you!

前言 科技日新月异,AI、区块链、IoT、Web App 等等都是可以选择的道路。 大学就像一间自助...

Day 12 : 如何正确使用 Zettelkasten 笔记法?了解 4 种笔记形式的功能,以利後续笔记连结

前言 还记得我在 Day03 介绍的《Zettelkasten卡片盒笔记法,建立知识连结网路来活用笔...

老肝哥-菜鸟Java的LeetCode历程,第十三题:Roman to Integer,朝远大目标前进!

嘿嘿!各位好你最好的朋友老肝哥照惯例又来了 今天老肝哥心情其实不错 因为自己又坚持一天了,但老肝哥在...