GenAMusic: Музыкальный композитор, основанный на интерактивном генетическом алгоритме, страница 2

·  Перераспределение длительностей. Случайно выбрать фрагмент и переставить длительности нот в зависимости от высоты нот.

·  Одинаковый ритм. Изменить случайный фрагмент с помощью случайной перестановки вплоть до половины его нот в зависимости от их длительностей.

·  Простое копирование. Заменить один фрагмент копией другого.

·  Копирование и мутирование. Набор операторов: простое копирование, транспонирование, сортировка по возрастанию и убыванию, перераспределение длительностей и одинаковый ритм.

·  Объединение повторяющихся нот. Объединить любые последовательности повторяющихся нот в одну ноту с длительностью, равной сумме длительности объединенных нот.

3.  Описание генератора мелодий

Рассматриваемый генератор мелодий работает с помощью интерактивного генетического алгоритма, основанного на простом ГА Холланда. Хромосомы начальной популяции могут задаваться стохастически или уже готовыми наборами мелодий. Область всех решений  мелодий, где – количество нот в мелодии. Неэффективный поиск идеальной мелодии потребовал бы тестирования каждого решения. В теории, ГА должен найти примерный оптимум, просмотрев только часть этой области.

Значение каждой ноты кодируется 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 и задается субъективно прослушивающим человеком.

Оператор селекции работает по принципу колеса рулетки с областями, разбитыми пропорционально значениям функции пригодности.

Количество точек сечения кроссовера задается. Сечение в кроссовере происходит по нотно, а не по битно. В скрещивании по битно при объединении двух мелодий на месте стыка порождается новая нота, что в большинстве случаев ухудшает мелодичность.

3.1.  Пример работы генератора мелодий со стохастическими данными

3.1.1.  Пример 1.

Задаем количество нот в мелодии = 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