Day 18: 人工智慧在音乐领域的应用 (AI作曲-基因演算法二)

今天我们开始详细的介绍作曲是如何与基因演算法做结合

首先我们先快速复习一下基因演算法的流程:
(1) 随机乱数的给予一定数量的个体
(2) 而这些个体彼此之间会互相交配并产生子代
(3) 子代有机会产生些微的突变
(4) 把所有亲代以及子代 集合起来,根据问题所划出的标准去做筛选,把不符合标准或是得分(看问题如何定义)较低的後半部份个体淘汰 (不适者淘汰)
(5) 步骤(4) 存活下来的较好个体成为下一个世代的亲代 (适者生存),接着回到步骤(2) 并不停的重复这些过程,直到达成预设的目标或是演化的世代 (每次2~5为一个世代) 到达设定的数目。
(6) 最後,活到最後一代的个体里面,选出最好的那一个天选之人 ,即为最後的解。

我们用关键字来简化以上的流程:
(1) 产生个体 (Individual)
(2) 交配 (Crossover)
(3) 突变 (Mutation)
(4) 评分 (Fitness Evaluation)
(5) 适者生存不适者淘汰 (Survivor Selection)
(6) 选出最强的个体成为最佳解

因此在基因演算法中,所有产生出来的子代都是由亲代彼此交配後产生,他们身上都会带着亲代遗传下来的基因并且会有机率产生突变,经过许多世代 (Generation) 之後,最强者诞生成为最佳解
https://ithelp.ithome.com.tw/upload/images/20211003/20140556q5UkPe5fSI.jpg
(这张既是梗图也可以当作认真说明上述文字的图....)

告诉电脑音乐的样子 (Representation)

那麽我们一样照着之前的脉络,一步一步讲解要让基因演算法如何懂得什麽是音乐以及作曲:
首先,跟任何演算法一样,我们必须先让电脑知道音乐/音符长什麽样子。
Representation

在这边我们用之前爬山法介绍的范例,把音符从中音Do开始设定为0,每往上半音就增加1
https://ithelp.ithome.com.tw/upload/images/20211003/20140556pieBPuwKXk.png

设定个体 (Individual)

音乐/音符转换成电脑看得懂的形式 (Representation) 後,我们开始来针对 步骤(1)个体(Individual) 来做设定。
每一个个体在这边代表的就是一首完整的音乐,因此首先我们要先决定个体的长度有多长。而所有的个体必须设定成同样的长度大小,不能偏颇的让其中某些个体比较长/大。
https://ithelp.ithome.com.tw/upload/images/20211003/20140556OKTnwkOagX.png

因此我们先设定好一首歌的长度要多长来当作个体长度的依据,在这边我们一样用八个音符当作范例,当然实作要怎麽设定就看需求以及喜好,没有一定。
接下来我们要决定需要多少数量的个体,一般来说数量越多的个体,越有机会找出更好的结果,然而也会增加演算法运行的时间。我们在这边设定一次产生一百个个体,换句话说就是产生一百首八个音符的音乐
接下来我们以乱数的方式,随机的把这一百首里面的八个音符产生出来,因此我们会得到以下形式的音乐:
个体1 : [0, 2, 0, 9, 15, 24, 16, 10]
个体2 : [6, 2, 9, 17, 17, 17, 3, 17]
个体3 : [1, 6, 14, 2, 19, 17, 20, 9]
.
.
.
个体100 : [5, 0, 9, 9, 12, 23, 0, 21]
https://ithelp.ithome.com.tw/upload/images/20211003/20140556eTadpX42sr.jpg

由於这系列会介绍的比较详细,如果一口气说太多相信大家都看不太下去,所以我们今天就先聊到这,明天我们再继续介绍基因演算法曲的其他设定。
https://ithelp.ithome.com.tw/upload/images/20211003/201405563IPhc1HSib.png


<<:  Day 18: LeetCode 322. Coin Change

>>:  模型的内容08 test()

Day 23 - Spring AOP

介绍 切面导向程序设计(Aspect-Oriented-Programming,AOP),它的目的在...

D01 / 为什麽要写这个? - 前言

Hi 我是 Tomaz.  第一次参加铁人赛,和各位铁人一起进行磨练,希望撑得过去 ? 认真学 Co...

【Day 18】Complexity & Graphs

接下来我们要针对复杂度做介绍,首先要说的就是高手们常常说的「Big O」! 但是到底什麽是 big ...

如何正确选择的高防服务?

如何正确选择高防服务呢?首选是高防CDN。那麽它具备哪些优势呢? 高防CDN的优势   CDN即内容...

【从零开始的Swift开发心路历程-Day21】简单介绍UIPickerView

今天我们要介绍UIPickerView,UIPickerView可以让你在列表中选择所需要的项目,後...