· Перераспределение длительностей. Случайно выбрать фрагмент и переставить длительности нот в зависимости от высоты нот.
· Одинаковый ритм. Изменить случайный фрагмент с помощью случайной перестановки вплоть до половины его нот в зависимости от их длительностей.
· Простое копирование. Заменить один фрагмент копией другого.
· Копирование и мутирование. Набор операторов: простое копирование, транспонирование, сортировка по возрастанию и убыванию, перераспределение длительностей и одинаковый ритм.
· Объединение повторяющихся нот. Объединить любые последовательности повторяющихся нот в одну ноту с длительностью, равной сумме длительности объединенных нот.
Рассматриваемый генератор мелодий работает с помощью интерактивного генетического алгоритма, основанного на простом ГА Холланда. Хромосомы начальной популяции могут задаваться стохастически или уже готовыми наборами мелодий. Область всех решений мелодий, где – количество нот в мелодии. Неэффективный поиск идеальной мелодии потребовал бы тестирования каждого решения. В теории, ГА должен найти примерный оптимум, просмотрев только часть этой области.
Значение каждой ноты кодируется 4 битами в соответствии со следующей таблицей:
Табл.1. Таблица отображения бит к нотам
Биты |
0000 |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
Ноты |
C |
C# |
D |
D# |
E |
F |
F# |
G |
G# |
A |
A# |
B |
pause |
pause |
pause |
pause |
До |
До диез |
Ре |
Ре диез |
Ми |
Фа |
Фа диез |
Соль |
Соль диез |
Ля |
Ля диез |
Си |
Все ноты одной длительности и изменяются в пределах одной октавы (12 нот). Значение приспособленности (фитнесс) мелодии изменяется в пределах от 0 до 10 и задается субъективно прослушивающим человеком.
Оператор селекции работает по принципу колеса рулетки с областями, разбитыми пропорционально значениям функции пригодности.
Количество точек сечения кроссовера задается. Сечение в кроссовере происходит по нотно, а не по битно. В скрещивании по битно при объединении двух мелодий на месте стыка порождается новая нота, что в большинстве случаев ухудшает мелодичность.
Задаем количество нот в мелодии = 7 (количество бит в хросоме 4*7 = 28). Размер популяции = 10 особей (мелодий). Вероятность мутации особей = 0.75. Вероятность мутации бита = 0.005 (общая вероятность мутации ноты = 4 * 0.75 * 0.005 = 0.015). Кроссовер одноточечный.
Поколение 1.
Генерируем случайную популяцию мелодий.
№ |
Ноты |
Хромосома |
1 |
C#DA#EG |
111100010010101001000111 |
2 |
C#C# A#D |
110100010001110010100010 |
3 |
GGA#FE |
111001110111101001010100 |
4 |
G# F#AD |
100011110110100100101101 |
5 |
C# F#A |
000111011101011010011100 |
6 |
F#DBAFA |
011000101011100101011001 |
7 |
CG E F# |
000001111111010011010110 |
8 |
C#G DAC |
000101111110001010010000 |
9 |
CCD# BF |
000000000011111010110101 |
10 |
C#C#AECA |
000100011001010000001001 |
Табл.2. Начальная популяция
Прослушиваем все полученные мелодии и задаем им в зависимости от их звучания фитнесс значения. Обычно на первой популяции попадается всего пару мелодий хоть как-то гармонично звучащих. Поэтому редко когда на первом шаге приспособленность мелодий превышает 3.
После выставления значений пригодности и применения оператора селекции имеем следующую популяцию:
№ |
Ноты |
Хромосома |
Фитнесс |
1 |
C#G DAC |
000101111110001010010000 |
2 |
2 |
CCD# BF |
000000000011111010110101 |
1 |
3 |
C# F#A |
000111011101011010011100 |
1 |
4 |
C#G DAC |
000101111110001010010000 |
2 |
5 |
C#G DAC |
000101111110001010010000 |
2 |
6 |
G# F#AD |
100011110110100100101101 |
2 |
7 |
C#C#AECA |
000100011001010000001001 |
2 |
8 |
C#C#AECA |
000100011001010000001001 |
2 |
9 |
C#DA#EG |
111100010010101001000111 |
1 |
10 |
C#G DAC |
000101111110001010010000 |
2 |
Max: 2.0 Average: 1.7 Total: 17.0 |
Табл.3. Начальная популяция после применения оператора селекции
При последующих итерациях над каждой популяцией применяются операторы ГА: селекция, скрещивание и мутация. Опять прослушиваются мелодии и задаются фитнесс значения.
Применим над популяцией операторы скрещивания и мутации.
№ |
Ноты |
Хромосома |
1 |
C#G DAF |
000101111100001010010101 |
2 |
CCD# BC |
000000000011111010110000 |
3 |
C# F#AC |
000111011101011010010000 |
4 |
C#G DA |
000101111110001010011100 |
5 |
G# F#AD |
100011110110100100101101 |
6 |
C#G DAC |
000101111110001010010000 |
7 |
C#C#AECA |
000100011001010000001001 |
8 |
C#C#AECA |
000100011001010000001001 |
9 |
C#DA#AC |
111100010010101010010000 |
10 |
C#G DEG |
000101111110001001000111 |
Табл.4. Популяция после применения кроссовера и оператора мутации
Мутация произошла у 1-ой особи в 11-ом бите. До этого было 1110, стало 1100. Поскольку эти последовательности битов представляют паузу, то изменения в мелодии не произошли.
Повторяем итеративно на каждом поколении.
Обычно уже на пятом поколении подавляющее большинство мелодий начинают “звучать”. При этом получается много мелодий, имеющих в своих основах общие корни (результат действия кроссовера). Встречаются также мелодии, отличающиеся друг от друга парой нот (мутация).
Поколение 20.
№ |
Ноты |
Хромосома |
Фитнесс |
1 |
DCDDEG |
001000000010001001000111 |
6 |
2 |
CECDEG |
000001000000001001000111 |
6 |
3 |
CECDEG |
000001000000001001000111 |
6 |
4 |
CCDDEG |
000000000010001001000111 |
6 |
5 |
DCDDEG |
001000000010001001000111 |
6 |
6 |
DCDDEG |
001000000010001001000111 |
6 |
7 |
DCCDEG |
001000000000001001000111 |
6 |
8 |
DCCDEG |
001000000000001001000111 |
6 |
9 |
CECDEG |
000001000000001001000111 |
6 |
10 |
CCDDEG |
000000000010001001000111 |
6 |
Max: 6.0 Average: 6.0 Total: 60.0 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.