461298

Почувствуй силу эволюции!

vott.ru — Компьютерный алгоритм рисует портрет Моны Лизы, случайно раскидывая пятнышки по экрану. А дальше размножение, случайные мутации и супер-хищник Criticus Vulgaris запускают процесс эволюции. #эволюция #неразумный_замысел
Видео, Компьютеры | максимум 20 символов 11:42 02.02.2017
43 комментария | 129 за, 0 против |
#1 | 11:43 02.02.2017 | Кому: Всем
[censored]

Посмотрел[censored] и решил воспроизвести один из упомянутых там самоэволюционирующих алгоритмов.
Программа случайным образом рисует на экране 1000 пятнышек и записывает их параметры в "геном". Получается организм-картинка с кодовым именем Puziricus. Дальше таких случайных организмов создаётся 100 штук, и они начинают конкурировать. Некоторые сами дохнут от случайных причин, остальных жрёт суперхищник местной эволюционной системы Criticus Vulgaris, которому нравится портрет Моны Лизы и он охотится на тех, кто меньше всего на этот портрет похож.

Выжившая половина популяции размножается делением (половое размножение у меня пока не получилось реализовать), при этом все параметры пятнышек (координаты, размеры и цвет) немного мутируют с небольшим шансом. И снова приходит Criticus Vulgaris и жрёт самых непохожих. Так происходит 10 тысяч раз, но уже на середине из случайных пятен проявляется что-то отдалённо похожее на портрет.
#2 | 11:54 02.02.2017 | Кому: Всем
Офигительно круто!
#3 | 11:57 02.02.2017 | Кому: Всем
Обижаешь кое-кого??? :-)
#4 | 12:05 02.02.2017 | Кому: Пальтоконь
А есть кого обижать? :)
#5 | 12:07 02.02.2017 | Кому: Всем
Очень здорово. А если увеличить количество итераций?
#6 | 12:11 02.02.2017 | Кому: Пальтоконь
> Обижаешь кое-кого??? :-)

Дык пока ни одного из 15 минусов, если ты об этом :)

А так получается чо, мы все в матрице??!!
#7 | 12:16 02.02.2017 | Кому: rahs
> Очень здорово. А если увеличить количество итераций?

Для начала нужно увеличить количество пятнышек, но у меня комп не тянет, а программировать графику на низком уровне я не умею. Для 1000 штук это практически предел точности воспроизведения. В картинке 135000 пикселей, так что нужно сравнимый порядок элементов, чтобы сгенерировать пузырикуса более близкого к оригиналу.

Эти 10К поколений рисовались около суток.
#8 | 12:20 02.02.2017 | Кому: Всем
Я всегда знал, что Войну и Мир написали 100 тыс. обезьян, а памятник поставили какому-то Толстому.
#9 | 12:23 02.02.2017 | Кому: максимум 20 символов
> у меня комп не тянет

А скока чего надо?
#10 | 12:28 02.02.2017 | Кому: Regal
>Войну и Мир написали 100 тыс. обезьян

Написание "Войны и Мира" запрограммировать проще и быстрее. Там графику рисовать не надо, а это самое узкое место программы.
#11 | 12:35 02.02.2017 | Кому: максимум 20 символов
> А есть кого обижать? :)

Креационистов. Ведь только у креационистов есть чувства!!! :-)
#12 | 12:58 02.02.2017 | Кому: максимум 20 символов
Дай репозиторий заценить! :)
#13 | 13:01 02.02.2017 | Кому: Всем
Уже вижу как будут критиковать: у этой программы есть создатель!!
#14 | 13:13 02.02.2017 | Кому: Stormwind
> Уже вижу как будут критиковать: у этой программы есть создатель!!

Но есть ли у нее душа?
#15 | 13:17 02.02.2017 | Кому: Paynd
> Дай репозиторий заценить! :)

Я в гитхаб не умею заливать. А ещё там страшный индусский код, вызванный тем, что я последний раз программировал более 20 лет назад на паскале. И комментировать код мне, как обычно, лень.

[censored]

Написано всё это безобразие на кастрированной Яве по имени[censored] Запускается файлом isomorph.pde
#16 | 13:51 02.02.2017 | Кому: Всем
Прошлую ссылку указал неправильно. Вот рабочий вариант:[censored]

Для ускорения процесса можно поставит размер картинки и генома поменьше, а шанс мутации побольше. Тогда видимый эффект наступит быстрее, но конечная точность окажется низкой. Для высокой точности воспроизведения нужен низкий шанс мутации ниже 0,1 процента.
#17 | 14:02 02.02.2017 | Кому: Всем
я нихуя не понял

что именно делает комп?
рисует или перерисовывает?
#18 | 14:10 02.02.2017 | Кому: SHOEI
Комп решительно ебашит по кружочкам, которые межают общей картинке быть похожей на "мону лизу". Кружочки, в свою очередь, быстро размножаются. В результате этоо непотребства получается то что справа.
Т.е. это имитация эволюции популяции под давлением хищника.
#19 | 14:14 02.02.2017 | Кому: SHOEI
Комп делает всё:

1) рисует 100 картинок из случайных кружочков (этот момент в видео не показан, так как как занимает очень много времени)
2) запоминает параметры (координаты, размер, цвет) этих кружочков для каждой картинки в геном.
3) сравнивает каждую картинку попиксельно (считает дисперсию по цвету) с референсным изображением (в данном случае портрет Моны Лизы, но можно взять любое другое) и присваивает им рейтинг.
4) картинки с самым плохим рейтингом и их геномы уничтожаются
5) оставшиеся геномы дублируются, но при копировании в них вносятся случайные изменения
6) на основе получившихся геномов рисуются новые 100 картинок (уже не случайно)
7) пункты 3-6 повторяются 10000 раз, пока набор случайных пятнышек не превратится в портрет Моны Лизы.

В видео показан лучший вариант картинки для каждого поколения.
#20 | 14:20 02.02.2017 | Кому: Paynd
> Комп решительно ебашит по кружочкам

Не совсем так. Комп не знает какой именно конкретный кружочек делает картинку более похожей, а какой нет. Он уничтожает уже готовые экземпляры картинок вместе со всем кружочками и хорошими и плохими. Но это не мешает естественному отбору делать так, что в следующих поколениях хороших кружочков становится больше, а плохих меньше. Так как, если происходит наоборот, то такой экземпляр картинки уничтожается и дальше свои гены не передаёт.
#21 | 14:50 02.02.2017 | Кому: Всем
колдунство!

а зачем это надо?
#22 | 14:56 02.02.2017 | Кому: Regal
Criticus Vulgaris же, не обезьяны.
#23 | 14:56 02.02.2017 | Кому: SHOEI
> а зачем это надо?

По приколу.
#24 | 16:39 02.02.2017 | Кому: SHOEI
> колдунство!
>
> а зачем это надо?

Это наглядная демонстрация того, что человек произошел путем эволюции в результате отбора случайных удачных мутаций.
#25 | 16:49 02.02.2017 | Кому: Всем
однако!
#26 | 17:19 02.02.2017 | Кому: Всем
Спасибо за видео. Набрал себе плюсиков на пикабу.
#27 | 17:58 02.02.2017 | Кому: Всем
Мона Лиза вышла с особой улыбкой :)

[censored]
#28 | 17:59 02.02.2017 | Кому: robot-demagog
> Набрал себе плюсиков на пикабу

а зачем это надо? (с)
#29 | 18:05 02.02.2017 | Кому: максимум 20 символов
Определенно, тщеславие - мой любимый из грехов (с).
#30 | 03:17 03.02.2017 | Кому: максимум 20 символов
> Мона Лиза вышла с особой улыбкой :)

[censored]

Я конечно не спец, но по-моему получатся Путин!
#31 | 05:01 03.02.2017 | Кому: dr103
> Это наглядная демонстрация того, что человек произошел путем эволюции в результате отбора случайных удачных мутаций.

не совсем так.
в решаемой задачке происходит подгонка под заранее заданный результат.
в случае реальной эволюции никакого заранее заданного результата нет.
#32 | 06:23 03.02.2017 | Кому: Crusad3r
> в случае реальной эволюции никакого заранее заданного результата нет.

Да ну?
#33 | 08:44 03.02.2017 | Кому: Crusad3r
> в случае реальной эволюции никакого заранее заданного результата нет.

Есть. Результат - успешная передача генов в следующее поколение любой ценой. Вот под него процесс и подгоняется.
#34 | 07:29 06.02.2017 | Кому: максимум 20 символов
[censored]
#35 | 12:01 06.02.2017 | Кому: rahs
Ну, как я и говорил, дальше почти не меняется. Появление глаз штука случайная. Они иногда и на 1000-м поколении проявляются и закрепляются отбором, а иногда лицо остаётся гладким очень долго. Для прорисовки мелких деталей нужно вводить специальные правила, чтобы мелкие кружки рисовались поверх крупных. Но 400к поколений - внушает.
#36 | 12:39 06.02.2017 | Кому: максимум 20 символов
Жаль, что оно не параллелится никак. Всё на одном ядре.

Кстати, на пейзаж внимание обратил?
#37 | 13:03 06.02.2017 | Кому: rahs
> Жаль, что оно не параллелится никак.

Я сварщик ненастоящий. Мне нужно было простое средство для вывода на экран и сравнения двух картинок. Процессинг давал лёгкий и быстрый доступ к массиву пикселей. Формально можно было бы переписать программу так, чтобы на экран ничего лишнего не выводилось, а сразу происходило сравнение двух массивов на уровне чистой математики. Тогда будет работать быстрее. Я уже начал писать под это специальный класс организмов Pixy, но затем стало лениво.

>Кстати, на пейзаж внимание обратил?


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

Ещё для оптимизации имеет смысл сначала рисовать малым числом крупных кругов, а потом потихоньку добавлять новые более мелкие для прорисовки деталей. В принципе, в живой природе так и происходит. Новая информация получается из дублирования старой. Многие наши гены - это мутировавшие копии некого одного общего предка.
#38 | 15:39 06.02.2017 | Кому: максимум 20 символов
> Я сварщик ненастоящий

Не прибедняйся. Ты классную штуку сделал.
#39 | 15:59 06.02.2017 | Кому: rahs
Да я хотел заставить ребёнка в качестве школьного проекта такую штуку написать. Но так как проект только в следующем году, то решил пока проверить, как оно работает и работает ли вообще, но что-то увлёкся :)
#40 | 12:04 10.02.2017 | Кому: максимум 20 символов
[censored]
#41 | 15:56 10.02.2017 | Кому: rahs
Ну визуально изменений почти нет, хотя цифры и улучшились. Не верю, что различие за обозримое время совсем до нуля упадёт.

Лучше поэкспериментировать с большим количеством элементов. К тому же я слегка допилил новую версию, теперь маленькие круги всегда рисуются выше больших. На этом есть вероятность получить более качественное изображение. Плюс отладил один из вариантов полового размножения (точнее вернулся к первоначальной задумке). Визуально оно очень сильно отличается от простого деления, но радикального прироста в скорости эволюции не даёт.

[censored]
#42 | 16:19 10.02.2017 | Кому: rahs
Забыл убрать после отладки, там в новой версии нужно ещё строчку noLoop(); закомментить, а то будет отрисовываться только первое поколение.
#43 | 16:38 10.02.2017 | Кому: максимум 20 символов
Попробую
Войдите или зарегистрируйтесь чтобы писать комментарии.