· Перераспределение длительностей. Случайно выбрать фрагмент и переставить длительности нот в зависимости от высоты нот.
· Одинаковый ритм. Изменить случайный фрагмент с помощью случайной перестановки вплоть до половины его нот в зависимости от их длительностей.
· Простое копирование. Заменить один фрагмент копией другого.
· Копирование и мутирование. Набор операторов: простое копирование, транспонирование, сортировка по возрастанию и убыванию, перераспределение длительностей и одинаковый ритм.
· Объединение повторяющихся нот. Объединить любые последовательности повторяющихся нот в одну ноту с длительностью, равной сумме длительности объединенных нот.
Рассматриваемый генератор мелодий работает с помощью
интерактивного генетического алгоритма, основанного на простом ГА Холланда.
Хромосомы начальной популяции могут задаваться стохастически или уже готовыми
наборами мелодий. Область всех решений  мелодий,
где
 мелодий,
где  – количество
нот в мелодии. Неэффективный поиск идеальной мелодии потребовал бы тестирования
каждого решения. В теории, ГА должен найти примерный оптимум, просмотрев только
часть этой области.
– количество
нот в мелодии. Неэффективный поиск идеальной мелодии потребовал бы тестирования
каждого решения. В теории, ГА должен найти примерный оптимум, просмотрев только
часть этой области.
Значение каждой ноты кодируется 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).
Ссылка на скачивание - внизу страницы.