在实验过程中发现,当设置较长的音乐片段时,演化过程非常漫长,演化代数比较大,甚至有时候根本就演化不出结果。于是大胆猜测,演化时间、演化代数对音符个数的增加呈现指数级增长。于是,我们针对该问题进行了以下实验。
为了简化实验过程,设置适应度函数为:
式中,pitchi 为种群乐段个体的每个音符的音高,speciali 为专家乐段个体每个音符的音高。演化的过程理解为慢慢地寻找与专家乐段个体差别越来越小的个体。演化的方向是朝着越来越和专家乐段相像的方向进行。
其他参数设置:变异概率为0.2,交叉概率为0.05,选择策略为选择适应度最好的3个个体随机替换种群中其他3个个体。循环迭代终止条件:适应度函数值小于或等于6个音高,即演化结果与专家乐段差别不大于6。
实验对音符数量分为9组代表样本进行实验,音符数分别是10个、20个、30个、35个、40个、45个、50个、55个和60个。在不同的分组条件下,由程序自动算出演化所需运行时间和演化代数,每组数据运行5次,并求平均值,得到以下实验结果(表6-3)。
表6-3 音符数对演化时间、演化代数影响表
通过实验结果可知,事实如之前猜测的一样,演化时间、演化代数对音符个数的增加呈现指数级增长。
由表6-3中数据,可以得到以下音符个数与演化时间、演化代数关系图(图6-28、图6-29)。
图6-28 音符个数与演化时间关系图
图6-29 音符个数与进化次数关系图
如果将图6-28和图6-29的Y 轴以2为底取对数,则可以得到以下关系图(图6-30、图6-31)。
图6-30 音符个数与log2(演化时间)关系图
图6-31 音符个数与log2(演化代数)关系图
由图6-30和图6-31可知,对演化时间、演化代数取对数的值和音符个数成正比。演化时间、演化代数对音符个数的增加呈现指数级增长。
这个情况不难解释,如果不考虑音符节奏、力度等信息,假定音符只有音高属性,演化的音符长度为N。乐段Period可以表示为:
low 表示乐曲片段中最低音,high表示乐曲片段中最高音。适应度函数的目标是在种群个体中找到离专家个体距离最近的一个解。演化的过程可以理解为在N 维空间内,演化生成满足专家个体距离在指定范围的解。随着N 维度的增大,问题搜索域将极大的扩大,搜索可行解的难度也被极大的增大。
由分析可知,实验结果对演化算法作曲的指导意义在于:尽量使用10~30个音符以内的乐句作为演化个体单位,过长的音乐片段是无法演化出来的。(www.xing528.com)
对于目标乐段为长乐段的作品演化,可以以乐句为演化个体单位,采用乐句拼接的方式对长乐段的作品演化研究,一方面可以避免计算复杂性问题,另一方面为乐句与乐句之间的构造、发展、级联关系,为乐曲整篇写作思维的研究提供方便。
对于整篇乐曲的演化设计,可以采用种群拼接的方式来实现,这样不但可以大致上设计出音乐上的“起、承、转、合”的全过程,而且进化到收敛状态时种群个体间相似度很大,前面的乐汇、乐句或乐段的旋律线不变,只在音区上做有所变化的一种重复,这样增加了乐曲的重现,以及乐句与乐句之间的模进发展,深化了乐曲的主题。可以采用统计重复次数最多的音符回文,并将它作为整首乐曲的动机,有了动机,乐曲也就有了灵魂,它是一种乐思的集中表现。作曲家的作曲思维一般是:在动机的基础上,或者说在动机的引导下,再发展前后的乐句、乐段,而后再修改、补充、推敲,直到最后完成。
据此实验数据反馈分析,对长乐段的演化作曲采用乐句拼接的方式完成,并设计实现如图6-32所示的拼接流程。
图6-32 判断长乐段乐句是否拼接流程图
设置参数让程序自动演化生成整首旋律,各种心情均为50,其他采用默认值,长度设置为200个音符,拼接后的作曲结果图和旋律高低走势分别如图6-33和图6-34所示,图6-34中,X 轴表示的是时间(拍),Y 轴表示的是音高大小。
图6-33 整首乐曲演化结果
图6-34 整首乐曲演化结果旋律高低走势图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。