Генерация дизайнерских идей при помощи генетического алгоритма

    Я, как и многие люди технического склада ума, испытываю трудности с рисованием и графическими решениями вообще. Я, конечно, могу отличить красивое решение от плохого, но оказываюсь в тупике, когда нужно нарисовать что-то с нуля, будь то пользовательский интерфейс приложения, презентация или открытка.
    В своей прошлой статье я продемонстрировал, как можно использовать генетический алгоритм чтобы аппроксимировать изображение по заданному образцу. В этой статье, я покажу, как применить генетический алгоритм для генерации изображений «из головы».




    Основная идея



    В прошлой статье, посвященной аппроксимации изображения набором полигонов, в качестве фитнес-функции мы использовали похожесть подбираемого изображения на оригинал. Какую же фитнес-функцию использовать если оригинал отсутствует, а нам нужно породить что-то совершенно новое? Ответ напрашивается сам собой — уровень положительных эмоций, вызываемый изображением-кандидатом.
    Однако, это ставит новый вопрос — как его надежно измерить. Наиболее простым подходом было бы попросить пользователя поставить оценку изображению, однако на мой взгляд это слишком напрягло бы логическую часть мозга, так как приходилось бы много думать, сомневаться 4 поставить или 5, помнить какую оценку поставил «вон той красивой картинке», чтобы соблюсти иерархию.
    Так как фитнес-функция используется для ранжирования решений, сортировки их в порядке возрастания достоинства, предлагается опустить фазу подсчета фитнес-функции и перейти сразу к сортировке, используя человеческий мозг в качестве компаратора.
    Исходный код Java приложения, реализующего данную идею может быть найден здесь, исполняемый код можно скачать здесь, для запуска требуется JRE или JDK.
    Приложение функционирует следующим образом:
    1. порождается популяция случайных изображений
    2. изображения сортируются алгоритмом QuickSort, при этом, сравнение изображений осуществляет человек — ему демонстрируется пара картинок и предлагается выбрать лучшую из двух
    3. после завершения сортировки, в соответствии с генетическим алгоритмом, путем скрещивания наилучших представителей популяции порождается следующее поколение картинок
    4. шаги 2 и 3 повторяются бесконечно, в любой момент можно сохранить понравившееся изображение посредством контекстного меню

    Алгоритм QuickSort был немного модифицирован, чтобы сократить количество кликов мыши, необходимых для одного цикла сортировки:
    сортировка прекращается, как только однозначно определяется 6 лучших решений, которые будут использованы для порождения нового поколения
    результаты сравнения с предыдущих циклов кэшируются, и если однажды пользователь уже сравнивал какую-то пару картинок, на следующей итерации результаты будут взяты из кэша

    От теории к практике


    Абстрактное изображение

    Для начала попытаемся нарисовать абстрактное изображение которое будет радовать наш глаз. Будем строить изображение, как наложение пяти случайных радиальных градиентов с прозрачностью 50%. Каждый градиент характеризуется центральной точкой, точкой фокуса, радиусом и набором из десяти цветов, плавно переходящих друг в друга.
    Все эти параметры инициируются случайными значениями и подвергаются эволюции под действием вкусовых предпочтений пользователя.
    Изображения из первых поколений обычно выглядят примерно так:





    Однако уже через несколько поколений привлекательность изображения многократно улучшается:





    Дизайн часов-виджета

    Рассмотрим более практический пример, создадим дизайн виртуальных часов, которые можно использовать как виджет.
    Разделим часы на следующие составляющие и определим параметры, которые подвергнем отбору.

    Элемент виджета Параметры
    Корпус
    • точки описывающие полигон, при этом каждая вторая является контрольной
    • толщина и цвет линии
    • параметры градиентной заливки

    Циферблат
    • радиус
    • толщина и цвет линии
    • параметры градиентной заливки
    • толщина и цвет стрелок
    • пропорции стрелок относительно циферблата и друг друга

    Большие отметки (12, 3, 6, 9 часов)
    • расстояние от центра
    • вид (точки, черточки, римские цифры, арабские цифры)
    • размер
    • цвет
    • шрифт (если применимо)

    Малые отметки (все остальные) Тот же набор что и у больших отметок


    Как и в случае с радиальными градиентами, первые поколения часов выглядят как произведения авангардного искусства:





    Со временем же, под действием искусственного во всех смыслах отбора начинают появляться вполне достойные варианты:







    Заключение


    Таким образом продемонстрирована практическая применимость генетического алгоритма в дизайне. Случайный характер алгоритма позволяет сгенерировать идеи, которые не пришли бы в голову сами, а скрещивание нескольких хороших решений со временем собирает воедино их наилучшие элементы.
    Описанный подход можно использовать для широкого набора дизайнерских задач, например для:
    • создания аватаров в играх или фотороботов в криминалистике
    • создания сайтов
    • конструирования формы предметов домашнего обихода
    • дизайна автомобилей

    Единственное неудобство с моей точки зрения — это необходимость сортировать картинки попарным сравнением, что при размере популяций в 14 штук приводит к необходимости совершить 15-40 кликов за цикл.
    Естественной оптимизацией было бы использование нейрокомпьютерного интерфейса наподобие Emotive EPOC. Это позволило бы демонстрировать каждую картинку один раз с измерением уровня положительных эмоций вызываемых изображением, что в свою очередь повысило бы скорость эволюции, позволило бы увеличить размер популяции для более широкого охвата пространства решений.
    image
    Метки:
    Luxoft 88,70
    Компания
    Поделиться публикацией

    Вакансии компании Luxoft

    Комментарии 36
    • +2
      А давайте подобный телефоно-конструктор сделаем. Запустим сайт, и посмотрим, какой итоговый вариант будет наиболее популярен. Только генерить надо сразу по 4 варианта вначале (отличающихся конструкцией), чтобы основные блоки типа слайдер/раскладушка/моноблок/кверти-моноблок определились заранее, плюс основные моменты определить. А дальше уже генетический алгоритм пусть действует.
      • 0
        Идея интересная. Ответил в личку.
        • +3
          В Самсунге запустили однажды такую штуку.
      • +2
        Интересное применение.
        Вспомнилось, когда-то в институте преподаватель сказал: «Генетический алгоритм решает всё».
        • НЛО прилетело и опубликовало эту надпись здесь
          • +2
            Можно попробовать обучить нейросеть, продемонстрировав ей для тренировки примеры того, что такое хорошо и что такое плохо.
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Не получится — нейросеть научится определять усредненный «хороший» интерфейс. МЛ методы бесполезны там, где есть какие-то субъективные оценки и эстетическое восприятие.
            • 0
              //результаты сравнения с предыдущих циклов кэшируются, и если однажды пользователь уже сравнивал какую-то пару картинок, на следующей итерации результаты будут взяты из кэша
              здесь иммеется ввиду итерация в пределах сортировки одного поколения?
              • 0
                Нет, между последующими поколениями. Т.е. если на предыдущей итерации мы уже сравнивали между собой две какие-то картинки и эти картинки перешли в следующее поколение, то в новой итерации, если снова возникнет необходимость их сравнить — результат автоматически будет взят из кэша.
              • НЛО прилетело и опубликовало эту надпись здесь
                • 0
                  Я думал о нейросети, но дерево решений, скорее всего тоже сгодится. Главное только собрать статистику от нескольких людей, иначе система будет моделировать одного конкретного оператора.
                  • НЛО прилетело и опубликовало эту надпись здесь
                • 0
                  Поделитесь кодом для генерации изображений, пожалуйста :)
                  • 0
                    Уже поделилися :-) Ссылки на исходники есть в теле статьи.
                  • 0
                    Хочется чуть побольше картинок…
                    • –2
                      Изображения из первых поколений обычно выглядят примерно так:
                      ...


                      Однако уже через несколько поколений привлекательность изображения многократно улучшается:
                      ...


                      Объясните, пожалуйста, в чем заключается улучшение, да еще многократное? Ну ладно, с часами еще могу понять — у первых вариантов совсем вырвиглазные цвета. Но абстрактные картинки?
                      • 0
                        На вкус и цвет товарищей нет.
                        Отбор производил я, поэтому получившиеся картинки нравятся в первую очередь мне.
                        Уверен, что если Вы посидите за программой, то у вас получатся совершенно другие результаты.
                        А если мы попробуем производить отбор используя краудсорсинг, то есть шанс, что получившийся результат ни Вам, ни мне не понравится, но будет при этом нравиться большенству участников.
                      • 0
                        У Докинза (кажется в «Эгоистичном гене») было нечто подобное. Он написал программу, которая генерировала довольно простые изображения и умела вносить в них мутации. А фитнес (или как это правильно называется) проводил вручную с целью вывести изображения, максимально похожие на буквы. Говорит, что успешно.
                        • +1
                          Естественной оптимизацией было бы использование нейрокомпьютерного интерфейса наподобие Emotive EPOC. Это позволило бы демонстрировать каждую картинку один раз с измерением уровня положительных эмоций вызываемых изображением...

                          Сегодня я приказал машине еще раз воспроизвести кролика-альбиноса Ваську. Когда он прозрачным видением проявился в середине бака, я сосредоточил внимание на его хвостике и вообразил его длиннее. Никаких изменений не последовало. Это было что-то не то. Я так и подумал с досадой: «Не то...» — и тут в кролике все начало меняться! Контуры тела заколебались
                          в медленном ритме: тело, уши, лапы и хвост кроля то удлинялись и утолщались, то укорачивались и худели; органы внутри пульсировали в том же ритме. Даже цвет крови стал меняться от темно-вишневого до светло-красного и обратно.

                          © В. Савченко "Открытие себя". 1971 год
                          Аж поёжился…
                          • 0
                            Можно сделать массовый проект, чтобы большое количество людей участвовало в сравнении. Тогда бы нагрузка по сравнению распределялась на несколько человек, и их мнение усреднялось бы. Неплохая штука для пеара каких-нибудь брендов.
                            • НЛО прилетело и опубликовало эту надпись здесь
                              • +1
                                И через 5-10 итераций мы получаем идеальную грудь)
                                • 0
                                  Если получится — покажите результат :-)
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                • НЛО прилетело и опубликовало эту надпись здесь
                                  • 0
                                    Двухточеченый кроссинговер
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                      • 0
                                        Сначала хотел так, как Вы говорите сделать, но получается дикий абстакционизм и чтобы получить что либо вменяемое требуется неимоверное число итераций. В конце концов я пришел к выводу, что генами должны быть переменные описывающие составляющие картинки — в случае с абстрактным изображением из статьи параметры градиентных заливок накладывающихся друг на друга. В случае с часами — это точки описывающие полигон корпуса, цвета, длины стрелок итд.
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                          • 0
                                            Из одиночных пикселей? Там получается картинка в виде цветового шума — можете сами создать изображение из полностью случайных пискселей. И на глаз они все такие картинки одинаковые — глазу не за что зацепиться
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                              • 0
                                                Тогда как мне кажется надо генерировать облако точека, скажем тысячу или две… И отбирать визуально те картики, которые похожи на галактику

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое