Pull to refresh

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

Reading time2 min
Views13K

Результат генерации первого поколения

Я не дизайнер. Но иногда приходится для каких-то своих проектов придумывать какой-то дизайн, чего я очень не люблю делать. Колдуя несколько часов в фотошопе в голову ничего интересного так и не приходит. Вроде сделаю какой-никакой макет, но чего-то не хватает. Что-то не то. Нужно вдохновение. Именно так и родилась идея сделать генератор визуальных интерфейсов, который служил бы источником вдохновения, подсказывал какие-нибудь формы и их положение. А потом в мою неспокойную голову пришла идея сделать генетический алгоритм, где в роли фитнесс-функции буду выступать я со своей субъективной оценкой. Забегая вперед скажу, что ничего особенного из этой идеи не вышло.

Идея была такова: создается «слой», где есть некоторое случайное количество объектов со случайным положением, размером, радиусом углов и поворотом. Таких слоев создается 6 штук. Вы, как горе-дизайнер из шести сгенерированных объектов выбираете наиболее интересный и удачный с вашей точки зрения. Так выбрав 10 слоев образуется первое поколение, из особей которого и генерируются новые слои, случайным образом скрещивая понравившиеся вам слои. И так снова 10 слоев, и снова новое поколение…

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

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

Вот пример того, что получается на 10-м поколении:
image

Проект где-то пол года провалялся ни туда, ни сюда. И вот сегодня наткнувшись на него решил выложить его на github.

Демо доступно здесь

P.S. Я не гуру javascript, и работаю с ним по мере необходимости. Это не основной язык. Поэтому просьба оставлять замечания по коду при себе.

UPD: В группе хабра, в ВК мелькал вопрос «Зачем?»
Ответ: Это проверка идеи генетического алгоритма где в роли фитнесс-функции выступает человек. И если решить проблему скрещивания, может получиться что-то интересное. Например, можно сделать парсер, который будет строить структуру блоков из существующих сайтов с реальным дизайном. Дальше использовать эту базу как основу для новых генераций. Тогда можно исключить начальный random и получать более интересных особей, которые действительно будут представлять ценность. Сейчас же, я в этих кучах вижу концепты для разных промо-сайтов.
Only registered users can participate in poll. Log in, please.
Полезна ли идея рандомного(генетического?) генератора форм для вдохновения?
48.02% Да121
51.98% Нет131
252 users voted. 92 users abstained.
Tags:
Hubs:
Total votes 28: ↑14 and ↓140
Comments6

Articles