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

от автора


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

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

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

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

  • Брать элементы с разных слоев «как есть» и добавлять на новый
  • Брать некоторые свойства элементов с одного и другого слоя и скрещивать их
  • Комбинировать первое и второе

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

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

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

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

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

Полезна ли идея рандомного(генетического?) генератора форм для вдохновения?

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

Никто ещё не голосовал. Воздержавшихся нет.

ссылка на оригинал статьи http://habrahabr.ru/post/203156/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *