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

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

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

Васильев Алексей

Департамент компьютерных наук

Институт Транспорта и Связи

Ломоносова 1-1, Рига, Латвия

Email: servent@apollo.lv

12 марта 2001 г.

Аннотация

Данная работа посвящена применению генетических алгоритмов в искусстве, в частности в музыке. Здесь описывается система, основанная на интерактивном генетическом алгоритме (ИГА) и использующая в качестве оценочной функции человека. Рассматриваемые результаты были получены при подаче на вход системы, как стохастических данных, так и нестохастических, а именно, фрагментов классического произведения: “Лунная соната” Бетховена. С помощью ИГА была создана новая композиция в стиле “Лунной сонаты”.

Ключевые слова: Генетические Алгоритмы; Генерация Музыки.

Содержание:

1.       Введение в генетические алгоритмы.. 1

2.       Существующие работы с использованием ГА в музыке. 2

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

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

3.1.1.     Пример 1. 3

3.1.2.     Пример 2. 5

3.2.    Пример работы генератора мелодий с заданными исходными данными. 5

3.3.    Программная реализация. 6

4.       Заключение. 7

5.       Используемая литература. 7

1.  Введение в генетические алгоритмы

Генетические алгоритмы (ГА) – это стохастические, эвристические оптимизационные методы, впервые предложенные Холландом [1]. Они основываются на идее эволюции с помощью естественного отбора, выдвинутой Дарвином [2].

ГА работают с совокупностью “особей” - популяцией, каждая из которых представляет возможное решение данной проблемы. Каждая особь оценивается мерой ее “приспособленности” согласно тому, насколько “хорошо” соответствующее ей решение задачи. В природе это эквивалентно оценке того, насколько эффективен организм при конкуренции за ресурсы. Наиболее приспособленные особи получают возможность “воспроизводить” потомство с помощью “перекрестного скрещивания” с другими особями популяции. Это приводит к появлению новых особей, которые сочетают в себе некоторые характеристики, наследуемые ими от родителей. Наименее приспособленные особи с меньшей вероятностью смогут воспроизвести потомков, так что те свойства, которыми они обладали, будут постепенно исчезать из популяции в процессе эволюции. Иногда происходят мутации, или спонтан­ные изменения в генах.

Таким образом, из поколения в поколение, хорошие характеристики распространяются по всей популяции. Скрещивание наиболее приспособленных особей приводит к тому, что исследуются наиболее перспективные участки пространства поиска. В конечном итоге популяция будет сходиться к оптимальному решению задачи. Преимущество ГА состоит в том, что он находит приблизительные оптимальные решения за относительно короткое время.

ГА состоит из следующих компонент:

·  Хромосома.  Решение рассматриваемой проблемы. Состоит из генов.

·  Начальная популяция хромосом.

·  Набор операторов для генерации новых решений из предыдущей популяции.

·  Целевая функция  для оценки пригодности (fitness) решений.

Стандартные операторы для всех типов генетических алгоритмов:

·  Селекция (reproduction). Отбор хромосом в соответствии со значениями их функции пригодности.

·  Скрещивание (crossover). Обмен частями хромосом между двумя (может быть и больше) хромосомами в популяции. Может быть одноточечным или многоточечным.

·  Мутация (mutation). Стохастическое изменение части хромосом.

Алгоритм работы простого ГА [3] выглядит следующим образом:

НАЧАЛО /* генетический алгоритм */

Создать начальную популяцию

Оценить приспособленность каждой особи

останов = FALSE

ПОКА НЕ останов ВЫПОЛНЯТЬ

НАЧАЛО /* создать популяцию нового поколения */

ПОВТОРИТЬ (размер_популяции/2) РАЗ

НАЧАЛО /* цикл воспроизводства */

Выбрать две особи с высокой приспособленностью из предыдущего поколения для скрещивания

Скрестить выбранные особи и получить двух потомков

Оценить приспособленности потомков

Поместить потомков в новое поколение

КОНЕЦ

ЕСЛИ популяция сошлась, ТО останов = TRUE

КОНЕЦ

КОНЕЦ

2.  Существующие работы с использованием ГА в музыке

Написание мелодии это поиск во множестве всех мелодий композиций, которые хорошо “звучат”. Эта область решений не структурирована: хорошие мелодии могут отличаться от плохих всего парой нот. Неструктурированная область решений делает поиск непредсказуемым и поэтому трудным. В задачах подобного рода хорошо себя зарекомендовала теория генетических алгоритмов.

В большинстве случаев все работы по ГА в музыке можно разделить на два типа:

1.  Для создания соло или ритмов из последовательностей аккордов или нот.

2.  Для создания непосредственно главной мелодии.

Больших достижений с использованием ГА в музыке добился Билес [4] (GenJam). Он использовал интерактивный генетический алгоритм (ИГА) для оценки приспособленности мелодий. GenJam генерирует джаз соло на основе априорных знаний о последовательности аккордов и о том, какой темп и ритмический стиль будет использоваться для этого. Функционирует он на уровне начинающего джазиста, однако с его помощью уже записано несколько музыкальных компакт дисков.

В ритмовом контексте в самом простом случае [5] битовая хромосома определяет модель ритма. Ноль означает играть ноту, единица – не играть. Генерируется популяция таких ритмов, затем она накладывается на заданную последовательность нот, благодаря чему некоторые ноты в последовательности пропадают (ноль наложился), а вместо них продолжают звучать предыдущие.

При создании главной мелодии для получения хороших результатов (уменьшения пространства поиска) обычно вместо стохастической первой популяции задают набор готовых мелодий [6]. Затем после некоторого числа поколений эти мелодии объединяются друг с другом. Именно вариацию подобного типа мы и будем рассматривать в данной работе.

На текущий момент в искусстве неизвестно, как реализовать автоматическое вычисление значения фитнесс функции, которая  оценивала бы качество музыки. Поэтому самые большие успехи были получены с использованием интерактивных генетических алгоритмов (ИГА), у которых в качестве оценочной функции использовался человек.

Как и в любых других областях, помимо основных (селекция, мутация, скрещивание) операторов ГА, широко используются еще и дополнительные операторы [7], специфичные в данной предметной области:

·  Мутация. Мутировать альт, тенор и бас вверх или вниз на один полутон или тон. Процесс случайный.

·  Одна-нота. Случайным образом заменить одну ноту на другую, случайную.

·  Обмен. Случайно выбрать фрагменты одинаковой длины и обменяться ими.

·  Транспонирование. Случайно выбрать фрагмент хромосомы и транспонировать его выше или ниже к лучшей квинте.

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

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

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

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.