
Результат генерации первого поколения
Я не дизайнер. Но иногда приходится для каких-то своих проектов придумывать какой-то дизайн, чего я очень не люблю делать. Колдуя несколько часов в фотошопе в голову ничего интересного так и не приходит. Вроде сделаю какой-никакой макет, но чего-то не хватает. Что-то не то. Нужно вдохновение. Именно так и родилась идея сделать генератор визуальных интерфейсов, который служил бы источником вдохновения, подсказывал какие-нибудь формы и их положение. А потом в мою неспокойную голову пришла идея сделать генетический алгоритм, где в роли фитнесс-функции буду выступать я со своей субъективной оценкой. Забегая вперед скажу, что ничего особенного из этой идеи не вышло.
Идея была такова: создается «слой», где есть некоторое случайное количество объектов со случайным положением, размером, радиусом углов и поворотом. Таких слоев создается 6 штук. Вы, как
Главная проблема всей идеи в том, что подобрать функцию скрещивания оказалось весьма и весьма проблематично. Совершенно неизвестно что нужно скрещивать. Я пробовал 3 различных варианта:
- Брать элементы с разных слоев «как есть» и добавлять на новый
- Брать некоторые свойства элементов с одного и другого слоя и скрещивать их
- Комбинировать первое и второе
Но их этого ничего не вышло. Новые особи получались мало чем отличающимися от случайно-сгенерированных, и через несколько поколений у них все же выделялись общие свойства, но абсолютно не те, которые я бы хотел видеть, не те, которые мне понравились. Кроме того, использовать себя в качестве фитнесс-функции весьма трудоемкое и долгое занятие.
Вот пример того, что получается на 10-м поколении:

Проект где-то пол года провалялся ни туда, ни сюда. И вот сегодня наткнувшись на него решил выложить его на 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.